汇总地图
这一页管什么: 把 survey/ 里 65 篇摘录汇总成一张能拿去做设计的表。
这是工作稿,给作者和 agent 用;给人读的是 lessons/。
前提已满足: 覆盖账本 386 源逐篇判过,relevant 65 个全部有摘录,pending 归零。
坐标轴
开题时列了四个决定。读完 65 篇之后,实际是六根轴——多出来的两根(轴 5、轴 6)不是细节, 是各家给出相反答案的地方。
| 轴 | 在决定什么 | 常见取值 | 有锚的源 |
|---|---|---|---|
| 1 这一轮喂什么 | 几段东西按什么顺序摆、长了怎么砍 | 顺序写死 / 插槽分类 · 全量贴回 / 只留最近 k / 摘要 / 落盘留取件号 / 逼它收尾 | 17 + 25 |
| 2 怎么认出它要调工具 | 走哪条通道把「我要调 X」传回来 | 厂商原生 / 自定义标签 / 代码围栏 / 让它写代码 / 结构化输出模拟 / 训进权重 / 不让它选(打分) | 30 |
| 3 怎么执行、结果怎么回填 | 能不能并发、用什么身份写回、回全量还是回变化 | 串行 / 五种并发判据 · 工具角色 / 伪装用户 / 自定义角色 · 全量 / 增量 · 裸回 / 带防伪边界 | 33 |
| 4 什么时候停 | 谁判定「干完了」、有哪几道硬闸 | 不再要工具 / 特殊完成工具 / 答案标签 / 外部裁判签字 · 轮数 / 墙钟 / 窗口 三闸 | 50 |
| 5 跑偏了怎么办 | 错误进不进历史 | 写进历史让它改 / 抹掉这一轮重来 / 边生成边打断 / 就地修 / 熔断 | 31 |
| 6 循环和状态在哪一层 | 谁拥有「转」这个动作、状态存在哪 | 循环自持 / 上层持有循环无状态 / 状态写进消息 / 服务端持有 / 核心里干脆没有循环 | 39 |
并发没有单列成轴——16 个源讲并发时讲的都是「结果按什么顺序、以什么形态回来」, 和回填是同一个决定,并进轴 3。
轴 1:这一轮喂什么
1A 顺序怎么排(被缓存绑死的那一半)
| 做法 | 代价 | 证据 |
|---|---|---|
| 段落顺序写死:稳定的在前、变的在后,稳定段末尾打缓存标记 | 加一类新内容要决定排在哪;排错不报错,只是账单变贵 | (依据:04-making-it-work/aider) |
| 硬编码七段装配顺序,提醒永远最后一条;自定义提示不进系统消息而做成用户消息 | 同上 | (依据:04-making-it-work/onyx) |
| 收敛成四个插槽(系统 / 首条用户之前 / 末条用户之后 / 每条用户之上),按「位置 → 后果」选 | 选错插槽不报错,只让缓存变差或信息过期 | (依据:04-making-it-work/lobehub) |
| 切成三段:永不改动的前缀 + 只追加的历史 + 永不进请求的便签,前缀命中约 98% | 便签这一层要额外维护 | (依据:04-making-it-work/whale) |
| 三层拼一次就冻住整场会话,连时间戳都只精确到天 | 会话中途学到的东西这一场用不上 | (依据:04-making-it-work/hermes-agent) |
| 每轮从磁盘重读重建——模型改了自己的设定下一句就生效 | 前缀每轮都变,缓存全废 | (依据:04-making-it-work/cowagent) |
位置为什么重要,有两份独立证据:
- 同一句指令换个位置,遵从率从九成掉到三成(工程笔记,非源码)(依据:04-making-it-work/onyx);
- 打乱信息组织(内容不变、只去掉标题层次),成功率下降超过三成(依据:04-making-it-work/shen-ru-li-jie-ai-agent);
- 机制解释:越靠末尾影响越大 + 中间最容易被略过 = 前中 段是个凹陷区(依据:04-making-it-work/prompt-engineering-for-llms)。
1B 长了怎么砍
| 做法 | 代价 | 证据 |
|---|---|---|
| 四道防线按代价递增:单结果治理 → 微压缩(不花模型钱) → 全量摘要 → 硬截断 | 阈值全是经验值 | (依据:04-making-it-work/dexter) |
| 六级处置,最便宜那道在工具内部(工具自己先截) | 同上 | (依据:04-making-it-work/hermes-agent) |
| 分级降级:剥二进制 → 剪旧调用 → 压工具输出 → 调模型摘要 | 同上 | (依据:04-making-it-work/browseros) |
| 不改原始历史,只做投影——窗口侧四道防线,存盘侧另治 | 要维护两套视图 | (依据:04-making-it-work/deepagents) |
| 窗口当内存、暂存文件当磁盘:压缩是从磁盘重组一份精简视图喂进内存 | 要配一条取回路径,否则预览就是纯损失 | (依据:04-making-it-work/dexter) |
| 大结果留在框架里,只把取件号喂给模型 | 模型要知道怎么取回 | (依据:04-making-it-work/griptape) |
| 有损压缩配一张带 hash 的取货单,模型想要就把原文换回来 | 取货单本身占地方 | (依据:04-making-it-work/headroom) |
| 超阈值不截历史,改写最后一条逼它用现有证据立刻交卷 | 答案不完整,但完整成句 | (依据:04-making-it-work/tongyi-deepresearch) |
| 两个布尔开关(对用户可见 / 对模型可见)——「历史里有」不等于「模型看得到」 | 所有产生消息的地方都要记得设 | (依据:04-making-it-work/goose) |
阴性格: 直接删历史消息被判成架构级错误——老消息躺在厂商缓存里读只要 0.1 倍钱, 删一条会让它后面所有缓存作废、按 1.25 倍重写(依据:04-making-it-work/headroom)。
轴 2:怎么认出它要调工具
| 通道 | 怎么做 | 代价 | 证据 |
|---|---|---|---|
| 厂商原生 | 结构化字段直接读 | 绑一家的格式;不是所有模型都支持 | 多数源 |
| 自定义标签 | 四种文本标签,<tool_call> 里放参数 | 要自己设停止词、自己防它编造结果 | (依据:04-making-it-work/tongyi-deepresearch) |
| 代码围栏 | 每个工具认领一个围栏标签,「模型最会写的是代码块」 | 工具没有参数结构,没法校验 | (依据:04-making-it-work/agenticseek) |
| 让它写代码 | 一步的行动是一整段代码,一步内能连调多个工具 | 需要沙箱;复杂度挪进了环境 | (依据:04-making-it-work/smolagents) |
| 补丁文本 | 不用工具调用,在回复里夹一段约定格式的补丁 | 要处理分隔符冲突、缩进、解析报错 | (依据:04-making-it-work/aider) |
| 结构化输出模拟 | 厂商不支持强制调工具时,把可选工具编译成一个格式约束逼出合法调用 | 只在支持结构化输出的厂商上可用 | (依据:04-making-it-work/beeai-framework) |
| 文本协议降级 | 原生路径在运行时报「不支持」就当场切回文本 ReAct,不让整次执行失败 | 两条路都要维护 | (依据:04-making-it-work/crewai) |
| 方言层双向编解码 | 编进 / 解出纯文本流,上层完全看不出区别 | 十一套方言要跟着模型更新 | (依据:04-making-it-work/oh-my-pi) |
| 整副外壳伪装 | 系统提示 + 工具格式 + 走哪个协议,三样一起塑成模型最熟悉的样子 | 十五副外壳要维护 | (依据:04-making-it-work/open-interpreter) |
| 训进权重 | 五个控制标签是加进词表的真 token,提示里没有工具说明 | 换基座就得重训 | (依据:04-making-it-work/deepanalyze) |
| 不让它选 | 并发拿每个工具自带的判定说明去问模型「这个工具适不适合」,打分取高 | 工具数 × 一次模型调用 | (依据:04-making-it-work/nlweb) |
底层事实: 工具调用不是新机制,是「微调过的模型 + 接口层的语法糖」——工具定义最后还是 变成系统消息里的一段文字,要占词元预算(依据:04-making-it-work/prompt-engineering-for-llms)。
兜底: 模型不走标准通道时三层兜底(流式剥离 → 事后从文本里挖 → 整轮只允许兜底一次) (依据:04-making-it-work/onyx)。