Skip to content

Agent 与工具调用 · 知识点

Agent 不是「包了一层 SDK」。它是:模型看当前上下文,决定调什么工具、读什么观察、何时停止。没有循环和停止条件,只是单轮补全或一次 Function Calling。

框架对比和 SDK API 看 应用框架;平台(Coze / Dify)看 平台与业务。本页只讲机制和取舍。


0. 总图

一次 Agent 步进大致是:

text
目标 + 系统约束
    → 装配上下文(指令 / 历史 / 状态 / 上次观察)
    → 模型看见工具 schema(不是函数体)
    → 决定:回答 | 调工具 | 问人 | 停止
    → 服务端执行工具(权限、超时、校验)
    → 观察写回窗口
    → 再想,直到停止条件

五块必须同时在:

  1. LLM 适配 — 聊天、流式、tool calling 统一。换模型不能改业务。
  2. 工具 — 名字、说明、参数 schema、执行。模型只点名 + 填表。
  3. 上下文 — 系统提示、历史、工具返回怎么进窗口,爆了要裁。
  4. 控制流 — Chain / Loop / DAG:下一步谁说了算、怎么停。
  5. 停止与权限 — 步数上限、重复动作打断、写操作审批。少一块就只是脚本套模型。

口条:大脑可换、双手可插、记忆可裁、中枢能停。


重点 1. 何时上 Agent

不要为所有任务构建 Agent。

先问偏工作流偏 Agent
决策树能不能画清能 → 写死节点模糊、要看观察再选
错误成本高 → 限制权限或人工可重试、可降级
价值低价值别烧 token复杂、高价值才配循环
关键子能力核心步骤都不会 → 先验证代码生成、检索、调试等已能单独做对

保持简洁:环境(它能看见什么)、工具集、系统提示。初期不要先上多 Agent、长期记忆和复杂规划。优化成本和延迟,放在基础行为稳定之后。

像 Agent 一样思考:它只能基于当前被装入的有限窗口做决策。预算取决于窗口、系统提示、历史、工具返回、成本和延迟,不是固定的 10–20k token。看轨迹日志,不要只看最终答案。

能规则化的别上 Agent。Batch 打分、发票审核若规则清晰,走脚本;非结构化 + 模糊规则才考虑循环,并且要卡单条预算。


重点 2. 模型怎么看见工具;FC vs MCP

模型看不见函数体,只看见 JSON Schema(名字、干什么、参数)。框架把函数编成 schema 塞进 tools;模型回 tool call,运行时在服务端执行。说明写糊了就会乱填参数;执行失败是框架的事。

Function Calling 和 MCP 不是二选一:

维度Function CallingMCP
定位模型厂商私有插头(OpenAI、Qwen)开放协议,工具怎么对外暴露
扩展性每个模型单独适配描述和解析Server 写一次,多 Client 能连
复杂度简单、单次调用更省发现、多轮、跨应用复用
安全常绑云端 Key可本地部署,鉴权仍在服务端

模型侧往往还是 FC / tool call,连上的可以是 MCP Server。简单原子任务直接 FC 更省事。项目里文档检索走 MCP、和网页共用一套检索时,鉴权仍在服务端,不靠桌面 TXT 示例。

MCP 三角:Host(跑模型的环境)→ Client(Host 里发起请求)→ Server(暴露 Resources / Tools / Prompts)。具体能力和安全策略取决于实现。参考:https://modelcontextprotocol.io/introduction(核验于 2026-09-12)。


重点 3. Chain / Loop / DAG

控制流差在「下一步谁决定、有没有环」。

形态下一步谁定典型别用在
Chain人写死线性 RAG、格式化要试错、要看观察再选
Loop(ReAct)模型:想 → 调工具 → 观察 → 再想检索不够再搜、修代码没有步数上限
DAG人写死依赖、无环接力任务、固定审批要循环重试就升级到带环的图

有环、要状态、要人审 → LangGraph 一类图,见 LangGraph。口条:流水线走链,试错走环,接力走 DAG。

写一个 Agent 框架要同时解决:LLM 适配、工具注册与调度、Context 裁剪、控制流编排。少一块就只是脚本。


重点 4. 死循环、权限、降级

死循环

  • 检测:连续多次 Action 语义极像且没有新 Observation → 强制打断。
  • 系统提示:换策略或问用户;必须有全局步数上限。
  • ReAct 典型坏法:反复同一工具、不给 Final Answer。

权限

  • 工具权限由服务端身份、租户和策略执行。模型只能提出调用意图,不能自行获得权限。
  • 写操作、外发、删除、高成本:参数校验、额度、超时、幂等键、人工确认。
  • Prompt / 检索文档当数据,不能改系统指令。

失败降级

  • 工具超时、schema 校验失败、无证据:重试、安全提示、转人工或只给来源。
  • 轨迹评测同时看结果与过程:是否调用了允许的工具、是否遵守步骤上限、失败时是否安全退出。

5. 进阶

速度 vs 深度

双层:简单查询直接调 API 或短链;复杂再 Planner 拆任务。前面加路由,意图简单就短路。能 Workflow 写死的别上自主循环。

沙箱

模型生成的代码可能删盘、死循环,不能在宿主机裸跑。隔离环境只回传 stdout/stderr,超时或内存超限就销毁。没落地就说「原则 + 自己项目还没有代码执行」,不要虚构。

单 Agent vs 多 Agent

  • 单:工具少、步骤短、上下文单一。
  • 多:窗口太长会忘需求、角色指令冲突(规划 / 写码 / 测试拆开)。先拆上下文和职责,再拆进程。

自我修复:报错 + 旧代码回灌,要求分析并重写;max_retries(如 3),超限抛给用户。工具要尽量原子、可幂等。

反应式 / 深思熟虑 / 混合

类型做法适合风险
反应式当前观察立刻动作规则明确、要快短视、易绕圈
深思熟虑先建模再规划多步、要长期目标慢、计划过期
混合紧急走反应,常规走规划自动驾驶一类仲裁本身要简单

示例代码见文末 12–14,不要背成自己的上线经历。


6. 了解

FastMCP — Python 侧常用的 MCP Server 框架:@mcp.tool() 注册,stdio / HTTP 传输。用前按当前版本看官方文档。

结构化输出 — 软提示会漏括号。官方 Structured Output 能用就用官方。跨引擎硬约束可用 Outlines(解码时屏蔽非法 token)。四种约束:JSON Schema、正则、多选、嵌套 Pydantic。分类用多选;一个字段用正则;扁平对象用 schema;业务单据用嵌套。

关闭 Qwen3 思考 — 硬开关(请求 enable_thinking: false 或服务启动默认)比 Prompt 里写「不要思考」稳。/no_think 是软开关。JSON / 工具调用、低延迟 API 优先硬关。


7. 建议复习顺序

  1. Agent ≠ 单轮调用 ≠ 一次 FC
  2. 模型只看见 schema;执行和权限在服务端
  3. FC vs MCP:插头 vs 插槽
  4. Chain / Loop / DAG,以及何时不上 Agent
  5. 死循环、步数上限、写操作审批
  6. 沙箱、路由、单/多 Agent
  7. 框架和平台:04 / 05,不要和机制混背

相关代码示例