读了两篇关于 prompt/context engineering 的文章:
* Manus 之外:实战笔记(1)薛定谔的缓存
* Context Engineering for AI Agents: Lessons from Building Manus
最重要的还是 KV-Cache,Manus 甚至称之为衡量 agent 框架的最重要的指标。因为 Transformer 的单向注意力机制 (Causal Attention Mask),每一个 input token 都只会使用它前面的全部 tokens 计算 KV。所以,保持 context prefix 稳定,可以极大提高 KV-Cache 的命中率,从而提高 LLM 输出效率和降低费用。
所以 Context Engineering 中的一个重要策略,就是在尽可能保持 context prefix 不变的前提下,实现各种功能需求:
1. 利用 LLM API 提供的 prefill 特性,利用 tool name 前缀来限定 tools 调用范围。而不是动态修改 context 中的 tools declaration。(OpenAI 不支持该功能,Claude 支持)
2. 使用 JSON schema 定义 tools 时,要注意使用确定性排序的序列化方法
除了提高 KV-Cache 命中率的各种工程方法外,Manus 还分享了一些其他的经验:
* 利用外部文件来提供无限上下文,并且保持 AI 对最初目标的关注
* 在 context 中保留犯错记录,避免重复犯错
* few-shots 需要添加噪音,预防 repetitive decision
很高兴地发现绝大部分内容和我自己的实践中总结出来的经验完全一致,甚至连用法也是一致的。不过 prefill 这个技巧我是第一次学到,我以前只关注 OpenAI 的 API,没想到实际上其他家,尤其是 Anthropic,已经有很长远的发展了。
* Manus 之外:实战笔记(1)薛定谔的缓存
* Context Engineering for AI Agents: Lessons from Building Manus
最重要的还是 KV-Cache,Manus 甚至称之为衡量 agent 框架的最重要的指标。因为 Transformer 的单向注意力机制 (Causal Attention Mask),每一个 input token 都只会使用它前面的全部 tokens 计算 KV。所以,保持 context prefix 稳定,可以极大提高 KV-Cache 的命中率,从而提高 LLM 输出效率和降低费用。
所以 Context Engineering 中的一个重要策略,就是在尽可能保持 context prefix 不变的前提下,实现各种功能需求:
1. 利用 LLM API 提供的 prefill 特性,利用 tool name 前缀来限定 tools 调用范围。而不是动态修改 context 中的 tools declaration。(OpenAI 不支持该功能,Claude 支持)
2. 使用 JSON schema 定义 tools 时,要注意使用确定性排序的序列化方法
除了提高 KV-Cache 命中率的各种工程方法外,Manus 还分享了一些其他的经验:
* 利用外部文件来提供无限上下文,并且保持 AI 对最初目标的关注
* 在 context 中保留犯错记录,避免重复犯错
* few-shots 需要添加噪音,预防 repetitive decision
很高兴地发现绝大部分内容和我自己的实践中总结出来的经验完全一致,甚至连用法也是一致的。不过 prefill 这个技巧我是第一次学到,我以前只关注 OpenAI 的 API,没想到实际上其他家,尤其是 Anthropic,已经有很长远的发展了。