Files
2026-07-13 21:35:32 +08:00

160 lines
23 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
- 核心概念与定义
- 最佳实践与技术(包括「Lost in the Middle」问题)
- 针对 Agent 开发者的实用建议
- 参考来源(使用研究中的实际 URL)
模型:MiniMax-M2.1
状态:成功
轮次:6
Token 数:4931
============================================================
推理轨迹
============================================================
[第 0 轮] 思考:
----------------------------------------
用户希望我研究「面向 AI Agent 的上下文工程」并撰写一份全面总结。让我拆解任务:
1. 搜索关于上下文工程概念与最佳实践的信息
2. 阅读相关来源以收集详细信息
3. 检查本地项目文件中是否有已有的研究笔记
4. 将重要发现保存为笔记
5. 将最终总结报告写入 ./output/research_summary.md
让我开始:
1. 在网上搜索上下文工程信息...
工具:web_search({"num_results": 10, "query": "context engineering for AI agents best practices techniques"})
结果:{"query": "context engineering for ai agents best practices techniques", "num_results": 10, "results": [...]
工具:web_search({"num_results": 10, "query": "\"lost in the middle\" problem AI agents context window"})
结果:{"query": "\"lost in the middle\" problem ai agents context window", "num_results": 7, "results": [...]
工具:list_directory({"path": "."})
结果:{"path": ".", "entries": [{"name": "README.md", "type": "file"}, {"name": "research", "type": "directory", ...}]}
[第 1 轮] 思考:
----------------------------------------
好的,我找到了一些相关搜索结果。让我:
1. 阅读一些关键来源以获取详细信息
2. 检查 research 目录下是否有已有的笔记
需要阅读的关键来源:
- Anthropic 的「Building Effective Agents」研究
- arxiv 上的「Lost in the Middle」论文
- Anthropic 的上下文工程文档
- OpenAI 的上下文管理指南
- Prompt Engineering 指南
工具:read_url({"url": "https://www.anthropic.com/research/building-effective-agents"})
结果:{"url": "https://www.anthropic.com/research/building-effective-agents", "status": "success", "content": "..."}
工具:read_url({"url": "https://arxiv.org/abs/2307.03172"})
结果:{"url": "https://arxiv.org/abs/2307.03172", "status": "success", "content": "\n# Lost in the Middle:..."}
工具:read_url({"url": "https://docs.anthropic.com/en/docs/build-with-claude/context-windows"})
结果:{"url": "https://docs.anthropic.com/en/docs/build-with-claude/context-windows", "status": "error", "..."}
工具:read_url({"url": "https://www.promptingguide.ai/techniques"})
结果:{"url": "https://www.promptingguide.ai/techniques", "status": "success", "content": "\n# Prompt Engineering..."}
工具:list_directory({"path": "./research"})
结果:{"path": "./research", "entries": [], "message": "目录为空或不存在"}
[第 2 轮] 思考:
----------------------------------------
进展不错!让我搜索更多关于上下文工程技术的具体信息,并阅读其他来源。
工具:web_search({"num_results": 10, "query": "context engineering RAG retrieval augmented generation best practices"})
结果:{"query": "context engineering rag retrieval augmented generation best practices", "num_results": 7, "results": [...]}
工具:read_url({"url": "https://platform.openai.com/docs/guides/prompt-engineering"})
结果:{"url": "https://platform.openai.com/docs/guides/prompt-engineering", "status": "success", "content": "..."}
工具:web_search({"num_results": 10, "query": "context management AI agents prompt optimization token usage"})
结果:{"query": "context management ai agents prompt optimization token usage", "num_results": 9, "results": [...]}
[第 3 轮] 思考:
----------------------------------------
我现在已经收集了全面的信息。让我检查 output 目录,然后将研究发现保存为笔记并撰写最终总结报告。
工具:list_directory({"path": "./output"})
结果:{"path": "./output", "entries": [], "message": "目录为空或不存在"}
工具:read_url({"url": "https://docs.anthropic.com/en/docs/build-with-claude/prompt-caching"})
结果:{"url": "https://docs.anthropic.com/en/docs/build-with-claude/prompt-caching", "status": "success", "content": "..."}
工具:read_url({"url": "https://python.langchain.com/docs/how_to/debugging"})
结果:{"url": "https://python.langchain.com/docs/how_to/debugging", "status": "success", "content": "\n# Debugging..."}
[第 4 轮] 思考:
----------------------------------------
我现在已拥有关于面向 AI Agent 的上下文工程的全面信息。让我将研究发现保存为笔记,然后撰写最终总结报告。
工具:save_note({"content": "# 核心概念:面向 AI Agent 的上下文工程\n\n## 定义\n上下文工程是有意设计和管理提供给 AI Agent 的上下文窗口内信息的过程,以优化性能、可靠性和效率。\n\n## 核心原则\n1. **上下文即资源**:每个 token 都耗费金钱和注意力——请明智使用\n2. **位置很重要**:上下文开头和结尾的信息比中间的信息更容易被记住\n3. **为注意力而结构化**:清晰的格式有助于模型解析和优先处理信息\n4. **渐进式披露**:按需加载信息,而非一次性塞入所有内容\n\n## 「Lost in the Middle」问题\nLiu 等人(2023)的研究表明,LLM 难以有效利用长上下文中间部分的信息:\n- U 形性能曲线:开头高、中间低、结尾高\n- 无论信息处于何种位置,性能都随上下文长度增加而下降\n- 模型规模无法消除这一限制\n\n## 关键策略\n- 将关键信息放在边界位置\n- 保持上下文聚焦且相关\n- 使用清晰的节标题和格式\n- 对静态内容实施缓存\n- 使用清晰的描述和类型化输入来设计工具\n\n## 来源\n- AnthropicBuilding Effective Agents (https://www.anthropic.com/research/building-effective-agents)\n- Liu 等人:Lost in the Middle (https://arxiv.org/abs/2307.03172)\n- OpenAIPrompt Engineering Guide (https://platform.openai.com/docs/guides/prompt-engineering)\n- DAIR.AIPrompt Engineering Guide (https://www.promptingguide.ai/techniques)\n- AnthropicPrompt Caching (https://docs.anthropic.com/en/docs/build-with-claude/prompt-caching)\n- LangChainDebugging Agents (https://python.langchain.com/docs/how_to/debugging)", "tags": ["context-engineering", "ai-agents", "prompt-engineering", "llm", "best-practices"], "title": "上下文工程核心概念"})
结果:{"status": "success", "note_id": 17, "message": "笔记「上下文工程核心概念」保存成功。"}
工具:save_note({"content": "# 上下文工程最佳实践\n\n## 1. 上下文结构与组织\n- 使用一致的格式以便解析\n- 用清晰的节标题分隔不同主题\n- 在每个节中前置重要细节\n- 使用分隔符标记不同部分\n\n## 2. 信息放置(应对「Lost in the Middle」)\n- 将**指令**放在 Prompt 的**开头**\n- 将**任务特定上下文**放在**结尾**\n- 将最相关的检索内容放在边界位置\n- 不太相关的信息如需保留可放在中间\n\n## 3. Token 优化\n- 只包含真正相关的信息\n- 去除冗余或低信号内容\n- 使用摘要压缩长历史记录\n- 考虑对静态内容使用 Prompt 缓存\n\n## 4. 工具设计\n- 编写清晰的描述,说明工具做什么**以及**何时使用\n- 使用 JSON Schema 定义类型化输入\n- 返回模型能够解读的信息性输出\n- 提供可操作的错误消息\n\n## 5. 错误处理\n- 明确允许重试\n- 在错误消息中提供诊断信息\n- 设置清晰的停止条件\n- 记录所有内容用于调试\n\n## 6. 系统测试\n- 定义全面的测试用例\n- 对照黄金标准答案进行衡量\n- 跟踪 Prompt 迭代间的指标变化\n- 使用追踪工具(LangSmith、W&B)进行调试\n\n## 应避免的反模式\n- 过早设计过于复杂的多 Agent 系统\n- 模糊的工具描述\n- 上下文过载(塞入过多信息)\n- 没有退出条件或进度检查\n- 模糊不清的指令", "tags": ["best-practices", "context-engineering", "techniques", "agent-development"], "title": "上下文工程最佳实践"})
结果:{"status": "success", "note_id": 18, "message": "笔记「上下文工程最佳实践」保存成功。"}
工具:save_note({"content": "# 针对 Agent 开发者的实用建议\n\n## 从简单开始\n1. 从单一工具、明确目的、线性工作流起步\n2. 定义明确的成功标准\n3. 只有在有证据表明需要时再增加复杂性\n\n## 上下文管理实现\n1. **Prompt 缓存**\n - 缓存系统 Prompt、工具描述、少样本示例\n - 将动态内容放在最后(缓存断点之后)\n - 缓存至少需要 1024 个 token\n\n2. **检索增强生成(RAG)**\n - 限制检索块数量——质量重于数量\n - 按相关性排序,而非仅靠相似度\n - 合并多个来源,同时保留关键信息\n\n3. **对话历史**\n - 对长历史记录进行摘要\n - 渐进式披露信息\n - 压缩上下文时保留关键事实\n\n## 调试策略\n1. **轨迹分析**\n - 捕获包含思考块的完整推理轨迹\n - 识别 Agent 的理解与实际情况在何处出现偏差\n - 寻找模式:工具混淆、目标漂移、上下文丢失\n\n2. **工具选择问题**\n - 改进工具描述\n - 使用简化工具集进行测试\n - 检查 Prompt 格式\n\n3. **无限循环**\n - 添加 max_iterations 限制\n - 在 Prompt 中加入进度检查\n - 实现提前停止条件\n\n4. **上下文丢失**\n - 监控上下文窗口限制\n - 实现对话摘要\n - 对长期记忆使用检索\n\n## 高级技术\n- **思维链(Chain-of-Thought**:鼓励逐步推理\n- **自洽性(Self-Consistency)**:生成多条推理路径,取多数答案\n- **思维树(Tree of Thoughts**:探索多条推理分支\n- **交错思考(Interleaved Thinking**:模型在工具调用之间进行推理,便于调试", "tags": ["recommendations", "agent-development", "implementation", "debugging"], "title": "针对 Agent 开发者的实用建议"})
结果:{"status": "success", "note_id": 19, "message": "笔记「针对 Agent 开发者的实用建议」保存成功。"}
[第 5 轮] 思考:
----------------------------------------
很好,笔记已保存。现在我需要将最终总结报告写入 ./output/research_summary.md。让我根据收集到的所有研究内容撰写一份全面总结。
工具:write_file({"content": "# 面向 AI Agent 的上下文工程:全面总结\n\n## 执行摘要\n\n上下文工程是有意设计和管理提供给 AI Agent 的上下文窗口内信息的过程,以优化性能、可靠性和效率。随着 AI Agent 变得越来越复杂,上下文的战略性组织已成为构建有效、可靠系统的关键因素。本报告综合了来自领先 AI 组织和学术研究的当前最佳实践,为 Agent 开发者提供一份全面指南。\n\n---\n\n## 1. 核心概念与定义\n\n### 什么是上下文工程?\n\n上下文工程包含对 AI 模型在推理过程中处理的所有信息进行系统性结构设计、组织和优化的方法。与主要关注措辞和表述的传统 Prompt Engineering 不同,上下文工程考虑 Agent 运行的整个信息环境,包括:\n\n- 系统指令与角色定义\n- 工具描述与能力说明\n- 检索到的文档与参考资料\n- 对话历史与状态\n- 用户查询与动态内容\n\n### 上下文窗口\n\n上下文窗口是模型一次可以处理的信息总量(以 token 计)。现代模型支持越来越大的上下文窗口:\n\n- **Claude**:最高 200K token\n- **GPT-4**:最高 128K token(因版本而异)\n- **其他模型**:容量各异\n\n然而,拥有大上下文窗口并不意味着所有信息都能被同等有效地处理。\n\n### 上下文即资源\n\n上下文窗口中的每个 token 都承载着成本——既有金钱上的,也有认知上的。有效的上下文工程将上下文视为必须策略性分配的宝贵资源。关键原则包括:\n\n1. **Token 效率**:每个 token 都耗费金钱和注意力;有目的地使用上下文\n2. **注意力管理**:模型对上下文中各部分的关注程度并不相同\n3. **信噪比**:相关信息可能被噪声淹没\n4. **渐进式披露**:按需加载信息,而非一次性塞入所有内容\n\n---\n\n## 2. 「Lost in the Middle」问题\n\n### 研究发现\n\nLiu 等人(2023)题为「Lost in the Middle: How Language Models Use Long Contexts」的开创性论文揭示了大语言模型在处理长上下文时的一个根本性限制。\n\n### 关键发现\n\n1. **U 形性能曲线**:当相关信息被放置在长上下文的不同位置时:\n - **开头**:性能高(首因/近因效应)\n - **中间**:性能显著下降\n - **结尾**:性能高(近因效应)\n\n2. **上下文长度退化**:即使信息处于最佳位置,性能也会随着总上下文长度增加而下降。\n\n3. **模型规模无关性**:更大的模型表现出相同模式——这是一个根本性的架构限制,而非规模问题。\n\n### 影响\n\n这一发现对上下文工程具有深远影响:\n\n- 关键信息绝不应被埋在长上下文的中间\n- 信息的位置与其内容同样重要\n- RAG 系统必须仔细考虑检索块的排序\n- 系统指令应放在开头,任务上下文放在结尾\n\n---\n\n## 3. 最佳实践与技术\n\n### 3.1 上下文结构与组织\n\n#### 清晰的格式\n- 在整个 Prompt 中使用一致的格式\n- 使用节标题分隔不同主题\n- 使用分隔符(如 `---` 或 XML 标签)标记不同部分\n- 在每个节中前置重要细节\n\n#### 信息层次结构\n组织上下文以引导模型的注意力:\n\n```\n[系统指令] ← 最重要,放在开头\n[工具定义] ← 不变内容,也靠前\n[少样本示例] ← 展示预期行为\n[检索到的上下文] ← 任务特定,靠近结尾\n[当前查询] ← 动态内容,放在最末尾\n```\n\n### 3.2 策略性信息放置\n\n#### 边界原则\n将最关键的信息放在上下文的边界位置:\n\n- **指令**:在最开头\n- **任务特定上下文**:靠近结尾\n- **用户查询**:在最末尾\n\n#### 应对「Lost in the Middle」\n- 如果必须包含大量条目,将最重要的放在开头和结尾\n- 不太关键的信息可以放在中间\n- 考虑使用多个较小的上下文,而非一个大型上下文\n\n### 3.3 Token 优化\n\n#### 质量重于数量\n- 只包含真正相关的信息\n- 去除冗余或低信号内容\n- 消除填充词和不必要的重复\n\n#### 压缩技术\n- 对对话历史进行摘要,同时保留关键事实\n- 对结构化数据使用紧凑格式\n- 将长文档截取至相关部分\n\n#### Prompt 缓存\n现代 API 支持缓存静态上下文:\n\n```python\nmessages = [\n {\n \"role\": \"user\",\n \"content\": [\n {\n \"type\": \"text\",\n \"text\": \"在此处放置你的静态上下文...\",\n \"cache_control\": {\"type\": \"ephemeral\"}\n }\n ]\n }\n]\n```\n\n**优势**\n- 缓存内容的延迟降低最高 85%\n- 通过避免重复处理来降低成本\n- 提高高容量应用的吞吐量\n\n**最佳实践**:\n- 缓存稳定内容:指令、工具描述、示例\n- 在缓存断点之后放置动态内容\n- 最小缓存大小通常为 1024 token\n- 通过响应头监控缓存命中\n\n### 3.4 工具设计\n\n设计良好的工具使 Agent 更可靠:\n\n| 元素 | 最佳实践 |\n|---------|---------------|\n| **描述** | 解释工具做什么**以及**何时使用它 |\n| **输入** | 使用 JSON Schema 定义类型化参数 |\n| **输出** | 返回模型可以解读并据此行动的数据 |\n| **错误** | 在失败时提供可操作的指导 |\n\n### 3.5 高级 Prompting 技术\n\n#### 思维链(Chain-of-Thought, CoT\n鼓励逐步推理:\n```\n请逐步解决此问题:\n[问题]\n让我们一步步思考:\n1. [第一步]\n2. [第二步]\n...\n答案:[最终答案]\n```\n\n#### 自洽性(Self-Consistency\n- 生成多条推理路径\n- 取多数答案\n- 提高复杂任务的可靠性\n\n#### 思维树(Tree of Thoughts\n- 同时探索多条推理分支\n- 评估并剪枝路径\n- 通过结构化探索找到最优解\n\n---\n\n## 4. 针对 Agent 开发者的实用建议\n\n### 4.1 从简单开始\n\n**遵循渐进式复杂原则**\n\n1. 从最简单的 Agent 架构开始:\n - 单一工具,目的明确\n - 线性工作流,无分支\n - 明确的成功标准\n\n2. 只有在有证据表明需要时才增加复杂性\n3. 在构建多 Agent 系统之前先验证单个 Agent 的性能\n\n### 4.2 实现上下文管理\n\n#### 针对 RAG 系统\n1. **限制检索块数量**:质量重于数量\n2. **按相关性排序**:不仅靠相似度分数\n3. **策略性定位**:最相关的块放在边界位置\n4. **考虑摘要**:合并多个来源,同时保留关键信息\n\n#### 针对对话状态\n1. 对长历史记录实现摘要\n2. 渐进式披露信息\n3. 压缩上下文时保留关键事实\n4. 对极长对话实现滑动窗口方法\n\n### 4.3 错误处理设计\n\n设计 Agent 以优雅地处理错误:\n\n1. **允许重试**:明确允许重试失败的操作\n2. **诊断信息**:提供可操作的错误消息\n3. **停止条件**:设置清晰条件以防止无限循环\n4. **全面日志记录**:记录所有内容以便调试\n\n### 4.4 调试策略\n\n#### 轨迹分析\n调试 Agent 的关键是理解它们的推理过程:\n\n1. 捕获包含思考块的完整推理轨迹\n2. 识别 Agent 的理解与实际情况在何处出现偏差\n3. 寻找模式:\n - 工具混淆:Agent 误解了该使用哪个工具\n - 目标漂移:Agent 忘记了原始目标\n - 上下文丢失:Agent 忘记了较早的信息\n4. 根据具体的失败模式迭代改进 Prompt\n\n#### 常见问题与解决方案\n\n| 问题 | 解决方案 |\n|-------|----------|\n| 选择了错误的工具 | 改进工具描述;用简化工具集测试 |\n| 无限循环 | 添加 max_iterations 限制;在 Prompt 中加入进度检查 |\n| 上下文丢失 | 监控窗口限制;实现摘要 |\n| 幻觉 | 要求引用来源;对照源文档验证;使用 temperature=0 |\n\n#### 调试工具\n- **LangSmith**:可视化追踪、延迟分析、Token 跟踪\n- **Weights & Biases**LLM 可观测性、链式可视化\n- **详细模式**:每一步的详细日志\n\n### 4.5 系统化测试\n\n1. **定义全面的测试用例**,覆盖边界情况\n2. **对照黄金标准答案进行衡量**(如适用)\n3. **跟踪迭代间的指标变化**以观察改进\n4. **测试工具组合**以找到最优工具集\n\n---\n\n## 5. 应避免的反模式\n\n1. **过度设计**:在验证单 Agent 性能之前就构建复杂的多 Agent 系统\n\n2. **模糊的工具**:工具描述未阐明何时使用每个工具\n\n3. **上下文过载**:向 Prompt 塞入过多信息,认为更多上下文就等于更好的性能\n\n4. **无退出条件**:让 Agent 无限运行而不检查进度\n\n5. **模糊的指令**:如「让它更好」vs.「通过添加示例来提高清晰度」\n\n6. **忽略位置**:将关键信息放在长上下文的中间\n\n7. **假设模型已具备知识**:期望模型了解你的代码库或领域细节\n\n---\n\n## 6. 总结清单\n\n设计 AI Agent 时使用此清单:\n\n- [ ] 从简单开始,逐步增加复杂性\n- [ ] 将关键信息放在开头或结尾\n- [ ] 使用带节标题的清晰格式\n- [ ] 缓存静态内容(指令、工具、示例)\n- [ ] 使用清晰的描述和类型化输入设计工具\n- [ ] 实现包含重试权限的错误处理\n- [ ] 设置清晰的停止条件\n- [ ] 使用追踪工具进行调试\n- [ ] 用代表性示例进行系统化测试\n- [ ] 监控上下文丢失和目标漂移\n\n---\n\n## 参考文献\n\n1. **Anthropic Research**. 「Building Effective AI Agents.」 https://www.anthropic.com/research/building-effective-agents\n\n2. **Liu, N. F., et al. (2023)**. 「Lost in the Middle: How Language Models Use Long Contexts.」 arXiv:2307.03172. https://arxiv.org/abs/2307.03172\n\n3. **OpenAI**. 「Prompt Engineering Best Practices.」 https://platform.openai.com/docs/guides/prompt-engineering\n\n4. **DAIR.AI**. 「Prompt Engineering Guide.」 https://www.promptingguide.ai/techniques\n\n5. **Anthropic**. 「Prompt Caching Documentation.」 https://docs.anthropic.com/en/docs/build-with-claude/prompt-caching\n\n6. **LangChain**. 「Debugging AI Agents.」 https://python.langchain.com/docs/how_to/debugging\n\n7. **Wei, J., et al. (2022)**. 「Chain of Thought Prompting Elicits Reasoning in Large Language Models.」 arXiv:2201.11903. https://arxiv.org/abs/2201.11903\n\n---\n\n*本报告通过网络研究和对当前 AI Agent 开发最佳实践的综合整理生成。*\n", "path": "./output/research_summary.md"})
结果:{"path": "./output/research_summary.md", "status": "success", "message": "成功写入 11520 字符..."}
[第 6 轮] 思考:
----------------------------------------
我已完成了研究任务。让我总结已完成的工作:
1. ✅ 搜索了关于上下文工程概念与最佳实践的信息
2. ✅ 阅读了相关来源以收集详细信息
3. ✅ 检查了本地项目文件中是否有已有的研究笔记(未找到)
4. ✅ 将重要发现保存为笔记供日后参考(保存了 3 条笔记)
5. ✅ 将最终总结报告写入 ./output/research_summary.md
研究已完成。让我向用户提供最终总结。
============================================================
最终回复
============================================================
我已完成了面向 AI Agent 的上下文工程研究。以下是完成内容总结:
## 研究已完成 ✓
### 查阅来源
- **Anthropic Research**:「Building Effective AI Agents」—— Agent 设计核心原则
- **Liu et al. (2023)**:「Lost in the Middle」—— 关于上下文窗口限制的关键研究
- **OpenAI**Prompt Engineering 最佳实践指南
- **DAIR.AI**:全面的 Prompt Engineering 技术
- **Anthropic**Prompt 缓存文档
- **LangChain**AI Agent 调试策略
### 记录的关键发现
1. **「Lost in the Middle」问题**LLM 呈现 U 形性能——开头和结尾的信息被良好记忆,而中间内容常常丢失。这是一个根本性的架构限制。
2. **已识别的实践**
- 将关键信息放在上下文边界位置
- 使用清晰的格式和节标题
- 对静态内容实施 Prompt 缓存
- 设计具有清晰、类型化描述的工具
- 从简单开始,逐步增加复杂性
3. **实用建议**:调试策略、错误处理模式和系统化测试方法
### 创建的交付物
1. **研究笔记**(已保存至内部笔记系统):
- 「上下文工程核心概念」
- 「上下文工程最佳实践」
- 「针对 Agent 开发者的实用建议」
2. **最终报告**`./output/research_summary.md` —— 一份超过 11,500 字符的全面文档,涵盖上下文工程的各个方面,包含参考文献、清单和可操作指导。
研究已就绪,可用于你的 Agent 开发项目!