工具调用与记忆
工具和记忆决定了智能体能否可靠接触外部世界并保留状态。
工具调用和记忆是 Agent 从“会回答”走向“会做事”的关键。
工具调用
工具不是函数列表那么简单。每个工具都应该定义:
- 输入 schema。
- 输出 schema。
- 权限范围。
- 超时和重试策略。
- 失败语义。
- 是否需要人工确认。
type ToolDefinition<Input, Output> = {
name: string;
description: string;
inputSchema: Input;
run(input: Input): Promise<Output>;
risk: "low" | "medium" | "high";
};
高风险工具,例如删除文件、部署服务、转账、发邮件,应该在执行前进入确认流程。
记忆类型
| 类型 | 生命周期 | 例子 |
|---|---|---|
| 上下文窗口 | 单次推理 | 当前任务说明、工具结果 |
| 会话状态 | 一次任务 | 已完成步骤、失败原因 |
| 长期记忆 | 跨会话 | 用户偏好、项目约定 |
| 审计轨迹 | 长期保存 | 工具输入输出、审批记录 |
设计原则
记忆不是越多越好。好的记忆系统应该能回答:
- 为什么要记。
- 谁能读取。
- 多久过期。
- 如何纠错。
- 如何避免污染下一次任务。
与上下文工程的关系
记忆是原材料,上下文工程是装配方式。不要把所有记忆都塞进 prompt,而是按任务目标、风险等级和 token 预算选择性注入。