All Pages Edit on GitHub

Agent

Agent 的核心不是“模型很聪明”,而是让模型在受控边界内调用工具、读取状态、执行步骤,并根据结果继续决策。

先区分 Agent、Workflow 和 Chatbot

很多系统被叫作 Agent,但复杂度并不一样:

类型 特点 适合场景
Chatbot 只根据上下文回答 FAQ、客服初筛、内容生成
Workflow 步骤由代码固定编排 审批流、固定表单处理
Agent 模型根据状态选择下一步 信息搜索、代码修改、复杂助手

如果流程非常固定,优先用 workflow。只有当任务需要根据中间结果动态决策时,Agent 才更有价值。

Agent 和普通聊天的区别

普通聊天主要依赖模型已有能力和当前上下文。Agent 则会连接外部工具,例如搜索、数据库、文件系统、日历、邮件、浏览器、代码执行环境等。

更直白地说:

Agent 基本组成

组件 作用
Instruction 定义目标、角色、边界和输出要求
Tools 模型可调用的外部能力
Memory 会话历史、用户偏好和长期状态
Planner 分解任务、选择下一步
Executor 执行工具调用并处理结果
Guardrails 权限、安全、确认和失败处理
Evaluation 判断任务是否真的完成

Agent 的核心循环

可以把 Agent 理解成一个循环:

观察当前状态
  -> 判断下一步
  -> 调用工具或回答
  -> 读取结果
  -> 更新状态
  -> 判断是否完成

这个循环必须有终止条件。否则模型可能不断搜索、不断调用工具,既浪费成本,也可能产生危险操作。

一个 Agent 的执行过程

用户目标
  -> 理解任务
  -> 判断是否需要工具
  -> 调用工具
  -> 阅读工具结果
  -> 决定下一步
  -> 直到完成或请求用户确认

例子:用户说“帮我总结这个仓库最近一周改了什么”。

Agent 可能会:

适合做 Agent 的任务

判断是否需要 Agent

可以用这几个问题判断:

如果答案大多是“否”,普通 LLM 调用或固定 workflow 可能更简单、更稳定。

不适合直接交给 Agent 的任务

项目检查点

工具设计原则

工具不是越多越好。好的工具应该:

坏工具示例:

do_everything(input: string)

好工具示例:

search_documents(query: string, limit: number, department?: string)

工具返回结果怎么设计

工具返回给模型的内容不应过长,也不应只返回机器难以理解的原始数据。建议包含:

示例:

{
  "status": "success",
  "summary": "找到 3 个相关文档片段,最相关的是员工手册第 4 章。",
  "data": [
    {
      "title": "员工手册",
      "section": "第 4 章 年假",
      "snippet": "入职满一年后享有年假..."
    }
  ]
}

好的工具结果能减少模型误读,也能让后续步骤更稳定。

权限和确认

工具可以分成几类:

工具类型 风险 建议
只读查询 较低 做权限过滤和日志
写入草稿 中等 允许自动执行,但保留撤销
发送、删除、付款、部署 必须用户确认
执行代码和 SQL 沙箱、白名单、超时和审计

不要把“请谨慎操作”只写在 Prompt 里。高风险操作必须由代码层确认。

Agent 常见失败模式

Agent 评测

Agent 不能只评测最终回答,还要评测过程:

建议保存完整 trace,包括每次模型输入、工具调用、工具结果和最终回答。没有 trace,就很难调试 Agent。

实战练习