适用读者:把 Agent 当"更长的提示词"的人;要理解"为什么必须有循环、为什么上下文是瓶颈"的人。
前置:S19(AI 素养与提示词)、S20-B01(RAG 流程)、S21-J01(Agent 循环)。
覆盖旧文:4867–4886(《Agent 工程》卷一–卷四,20 章:1.x 基础 5 章 / 2.x 上下文 8 章 / 3.x 提示与交互 5 章 / 4.x 工具 2 章)。
扩展点:E-S21-031(补全机器的三个后果:无状态、token 计费、上下文即全部信息)、E-S21-032(上下文四层策展:窗口预算、KV Cache、压缩、隔离)、E-S21-033(提示工程三块骨架与四个进阶技巧、输出格式三角、交互工程三件套)、E-S21-034(工具调用真相:模型不执行任何东西;ACI 五要素与工具爆炸阈值)。
下一篇:S21-J07 · 卷五到卷七:上下文工程、记忆与 RAG。
1. 一句话结论
模型是"补全机器",不是"执行机器":它只预测下一个 token,不记忆、不执行、不联网。所以 Agent 的全部工程量,都在"把信息放对位置"和"把动作交给代码"——这两件事分别对应上下文工程与工具调用。
出处:
A-4867(1.1 从一个会聊天的模型到会干活的系统)、A-4872(2.1 上下文工程总论)、A-4879(2.8 溢出救火)、A-4885(4.1 Function Calling 的本质)。
2. 补全机器的三个后果(E-S21-031,卷一)
| 事实 | 后果 | 工程含义 |
|---|---|---|
| 无状态 | 每次请求都是独立的一次前向计算 | 对话"记忆"是你每次重发的历史,不是模型的记忆 |
| token 计费 | 输入输出都按 token 算钱 | 上下文长度直接是成本;缓存与裁剪是省钱手段 |
| 上下文即全部 | 模型只能看到窗口里的内容 | 没放进窗口的信息 = 不存在(工具/检索是把信息"取进来") |
"模型的知识观"(1.5):知识来自训练语料,有截止日期、有数据边界;开源 ≠ 无限制,蒸馏有代价。判据:"模型不知道某个内部事实"永远不能用"再问一次"解决——要么检索、要么工具、要么微调(且微调只改格式,见 S20-A04)。
训练全景(1.6):预训练(学语言与世界)→ SFT(学听指令)→ 偏好对齐(学取舍)→ RL(学在环境里变强)。四段各改什么,决定了你遇到问题时该动哪一段。
采样与温度(1.4):同一条提示、同一个模型,不同 temperature 是三种性格——低温柔(稳定、可复现)、中温(常规)、高温(发散)。Agent 的工具调用参数一律低温;创意文案才升温。判据:"结果必须可回归"的任务,温度不能高。
3. 上下文四层策展(E-S21-032,卷二)
① 窗口预算:给 system / 历史 / 检索 / 工具输出 / 生成留位,总占用 ≤ 窗口 50%
② KV Cache:前缀稳定才命中(把不变内容放最前,动态内容放最后)
③ 压缩:删(无关)/ 摘要(有损)/ 落盘(结构化笔记)三选一(见 S20-J05 决策树)
④ 隔离:把噪声任务丢给子 Agent,只回结论进主上下文
| 章 | 机制 | 一条判据 |
|---|---|---|
| 2.1 上下文工程总论 | 从"写好提示词"到"策展整个窗口" | 优化对象是窗口,不是句子 |
| 2.2 KV Cache | 前缀稳定性是兼容性承诺 | 系统提示里别放时间戳/随机 ID |
| 2.3 压缩决策 | 什么能删、什么不能删、什么要花钱压 | 硬约束永不压;工具原始输出必压 |
| 2.4 Agent 状态栏 | 把隐式状态显式化 | 目标/进度/约束三行常驻 |
| 2.5 结构化笔记 + Session 分离 | 记忆外化到磁盘 | 会话 ≠ 上下文(见 §5) |
| 2.6 分层 System Prompt | 按需加载,不用的别给看 | 分层加载 > 一次性全塞 |
| 2.7 子 Agent 隔离 | 噪声不进主上下文 | 返回结论,不返回过程 |
| 2.8 溢出救火 | 双路径压缩 + 工具输出落盘 | 先落盘再摘要,别直接截断 |
判据:"上下文溢出"不是容量问题,是策展问题——把工具输出全文贴进来再喊窗口不够,等于把仓库搬进会议室。
4. 提示与交互工程(E-S21-033,卷三)
提示工程主干(3.1):角色 + 三块骨架(任务、约束、样例)+ 四个进阶技巧(分解、对比、格式锚定、反例)。
输出格式的三角关系(3.2):
| 格式 | 优点 | 代价 |
|---|---|---|
| Markdown | 人读友好、流式自然 | 程序解析脆弱 |
| JSON(结构化输出) | 可程序消费、可校验 | 流式体验差(需等待完整) |
| 混合(正文 + 末尾 JSON 块) | 兼顾 | 需要解析约定,易被模型破坏 |
判据:"给机器读的用 JSON,给人读的用 Markdown,两者都需要的分两段"——别在一段里既想好看又想好解析。
流式体验(3.3):首字时间(TTFT)决定"感觉快不快";等待期的"劳动错觉"(进度提示、分段输出)比真实提速更影响体验。
交互工程(3.4):状态三件套(空闲 / 思考 / 执行)+ 防错设计(可撤销、二次确认、明确边界)。判据:"用户不知道 Agent 在干什么"是最大的体验缺陷——状态必须外显。
审美工程(3.5):AI 味、视觉预算、规格书。判据:"写自然一点"不可执行,禁用词表可执行(同 S20-J05 §4)。
5. 工具调用真相(E-S21-034,卷四)
Function Calling 的本质:模型输出一段结构化文本(工具名 + 参数 JSON)
→ 由你的代码解析、校验、执行、把结果再拼回上下文
模型从不执行任何东西(它没有网络、没有文件系统、没有数据库连接)
ACI(Agent-Computer Interface)五要素(4.2):
| 要素 | 写法 | 反例 |
|---|---|---|
| 名字 | 动词+名词,语义唯一 | doStuff、process |
| 描述 | 做什么 + 参数格式 + 边界 | "查询订单" |
| 参数 | 类型/枚举/必填 + 示例 | 全是 string,无约束 |
| 失败语义 | 参数错 / 后端不可用 / 无权限 分开 | 一律 500 |
| 副作用 | 是否幂等、是否需要审批 | 静默扣款 |
工具描述的写法(4.2):名字用动词+名词、描述写"做什么 + 参数格式 + 边界"、参数用类型/枚举约束。判据:"工具选错"八成是描述不可判定,不是模型笨。
多工具编排、工具爆炸阈值、Skill、Think Tool、工具执行流水线属另一部教材的卷四(
5090–5095),见 S21-J25,本篇不重复。
6. 反例:八种"把 Agent 当提示词工程"
| 做法 | 后果 |
|---|---|
| 期待模型记住上一轮 | 无状态,没放进上下文就等于没有 |
| 用"再问一次"解决知识缺失 | 幻觉重复;应检索/工具 |
| 系统提示里放动态内容 | KV Cache 全失效 |
| 工具描述一句话了事 | 调用选错、参数错 |
| 一次注入 30 个工具 | 选择准确率崩 |
| 工具输出全文回灌 | 上下文爆、成本涨十倍 |
| 用 Markdown 给程序解析 | 解析器天天挂 |
| 没有状态显示 | 用户以为卡死,反复重发 |
7. 自测
- 补全机器的三个后果?为什么"记忆"其实是你重发的历史?
- 上下文四层策展各解决什么?
- 输出格式三角如何取舍?
- Function Calling 的本质是什么?谁在执行工具?
- ACI 五要素与工具爆炸阈值?
答案
- 无状态/按 token 计费/上下文即全部;模型不保存会话,历史由客户端每轮重发。
- 预算、KV Cache 前缀稳定、压缩、隔离子 Agent。
- 机器读 JSON、人读 Markdown、两者都要则分两段。
- 模型输出结构化文本(工具名+参数),由你的代码执行;模型不执行任何东西。
- 名字/描述/参数/失败语义/副作用;单次 >10 个工具选择准确率下降。
8. 下一篇
S21-J20 · 卷五到卷七 —— 上下文工程深化(5.x)、记忆系统(6.x)、RAG 全链路(7.x):记忆守门员、三层记忆、四步检索、混合检索与失败诊断。
本篇属于系列《S21 · Agent 与工具协议》。旧文来源:A-4867–4890(《Agent 工程》卷一–卷四 47 章);扩展点 E-S21-031…034。