Agent 和普通聊天机器人到底有什么区别?

系列:Python + FastAPI 大模型应用基础(第 23 篇)

1. 区别不在界面,而在控制权

两者都可以显示聊天窗口,真正区别是模型是否参与动作选择并影响外部系统。

维度 普通聊天机器人 Agent
主要输出 文本回答 动作与最终回答
外部能力 可无工具 通常有一个或多个工具
状态 对话历史 任务状态、步骤和观察
风险 错误信息 错误信息 + 错误操作
控制方式 单次生成 循环、工作流、终止条件

RAG 聊天机器人即使查询知识库,也不一定是 Agent;如果查询步骤由程序固定,它更接近检索流水线。

2. 用路由器明确选择

from dataclasses import dataclass
from typing import Literal


Mode = Literal["chat", "workflow", "agent"]


@dataclass(frozen=True)
class TaskProfile:
    needs_external_action: bool
    steps_are_known: bool
    risk: Literal["low", "medium", "high"]


def choose_mode(profile: TaskProfile) -> Mode:
    """优先选择自由度更低、可验证性更高的结构。"""
    if not profile.needs_external_action:
        return "chat"
    if profile.steps_are_known or profile.risk == "high":
        return "workflow"
    return "agent"

例如“解释退款政策”可用聊天/RAG;“按固定规则生成并审批退款单”适合工作流;“在多个只读来源中自主查找故障原因”才可能适合 Agent。

3. 统一响应契约

from pydantic import BaseModel, Field


class AssistantResponse(BaseModel):
    mode: Mode
    answer: str = Field(min_length=1)
    action_ids: list[str] = Field(default_factory=list)
    needs_human: bool = False


def build_response(
    profile: TaskProfile,
    answer: str,
    action_ids: list[str] | None = None,
) -> AssistantResponse:
    mode = choose_mode(profile)
    ids = action_ids or []
    if mode == "chat" and ids:
        raise ValueError("聊天模式不应产生外部动作")
    return AssistantResponse(
        mode=mode,
        answer=answer,
        action_ids=ids,
        needs_human=profile.risk == "high",
    )

4. 可复验测试

def test_high_risk_task_uses_workflow() -> None:
    profile = TaskProfile(True, False, "high")
    assert choose_mode(profile) == "workflow"


def test_chat_cannot_claim_actions() -> None:
    profile = TaskProfile(False, True, "low")
    try:
        build_response(profile, "已完成", ["refund-1"])
    except ValueError:
        pass
    else:
        raise AssertionError("聊天回答不能伪装成已执行动作")

5. 什么时候不要做 Agent

  • 步骤固定且可枚举;
  • 审批和合规要求严格;
  • 工具错误代价高;
  • 无法建立可靠评测;
  • 业务只需要总结、分类或抽取;
  • 团队没有可观测性和人工接管能力。

Agent 不是技术成熟度的象征。用确定性流程解决确定性问题,通常更便宜、更稳定。

6. 对抗性审查

  • 页面写着“智能 Agent”不代表架构真是 Agent;
  • 模型说“已操作”不代表工具执行成功,必须检查动作记录;
  • 多轮聊天也不自动等于 Agent;
  • Agent 的成功率要按完整任务计算,不能只看最后一句是否流畅;
  • 引入 Agent 前先评估最坏错误动作。

7. 总结

普通聊天机器人产生内容,Agent 还会选择动作。企业系统应从风险和流程不确定性出发选择架构,而不是为了追热点增加自主性。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐