工具系统与 Agent 实现
Tool 把外部能力(API、DB、代码执行)以 schema + 函数 暴露给模型;Agent 在「模型 ↔ 工具」间循环,直至产生最终答案或达步数上限。
1. 工具设计
| 要素 | 说明 |
|---|---|
name / description | 供模型选择 |
schema | Zod / JSON Schema 定义参数 |
invoke | 实际执行,返回 string 或可序列化对象 |
StructuredTool 统一校验参数;错误应返回可读信息供模型自我修正。
2. Agent 形态演进
| 形态 | 特点 |
|---|---|
| 经典 ReAct 链 | Prompt + Model + Tool 解析,链式 |
| LangGraph Agent | 显式图:节点 agent / tools,边条件路由 |
预构建 createReactAgent 等 | 封装常见图 |
新项目优先 LangGraph(见 07、langgraphjs)。
3. 执行流程(ReAct 语义)
mermaid
flowchart LR
M[Model] -->|tool_calls?| T[Tools]
T -->|ToolMessage| M
M -->|最终文本| End[结束]- 模型决定是否调工具。
- 工具结果作为
ToolMessage塞回历史。 - 限制 maxIterations 防死循环。
4. 条件路由
LangGraph 中 toolsCondition:有 tool_calls → tools 节点,否则 → END。
5. 中间件(Middleware)
在模型调用前后注入:改 prompt、审计、限流、注入 RAG 上下文。
LangChain v1 Agent API 以 middleware 链扩展行为(具体 API 以当前版本文档为准)。
6. 状态管理
Agent 状态常含 messages: BaseMessage[];更新用 append reducer(LangGraph Annotation)。
与 Zustand 无关,是图内 channel 状态。
7. 结构化输出 Agent
终态要求 JSON 时:responseFormat + 解析节点,或专用 tool「提交答案」。
8. 流式
stream 可逐 token + 工具开始/结束事件;UI 分别展示思考与工具日志。
9. 实践
- Tool
description写清何时用、何时不用。 - 危险操作加人工确认(LangGraph interrupt)。
- 工具超时与
AbortSignal绑定。
10. 总结
Tool = 模型可调用的函数;Agent = 带循环的 Runnable/图;复杂控制流用 LangGraph,勿手写无限 while。