{"schema_version":1,"id":"article:context-engineering-evolution","kind":"article","slug":"context-engineering-evolution","title":"上下文工程的自然演进：从「聊天机器人」到「推理者」再到「Agent」","author":"晨旭","url":"https://chenxu.xin/writing/context-engineering-evolution","date":"2025-10-18","updated":"2025-10-18","description":"沿着 Chatbot 到 Reasoner 到 Agent 这条主线，拆解上下文工程的三大模块（Think 工具、RAG 演进、工具调用）与上下文窗口管理的四象限、三范式。","position":null,"group":null,"series":"AI技术理解","tags":["context-engineering","agent","rag","mcp"],"publication_status":"public","maturity":"evergreen","body_sha256":"aed1b8c4bb7864a6373d25a2f04b1268ab38716f92f9a339430e0a813ae4e759","paragraph_rule":"src/lib/paragraphs.mjs@1","paragraphs":[{"id":"p1","kind":"paragraph","text":"过去一年，我们见证了 AI 智能体的爆发。但这条进化之路并非一蹴而就，它遵循着一条清晰的主线：从「聊天机器人」到「推理者」，再到「Agent」。","raw":"过去一年，我们见证了 AI 智能体的爆发。但这条进化之路并非一蹴而就，它遵循着一条清晰的主线：从「聊天机器人」到「推理者」，再到「Agent」。"},{"id":"p2","kind":"paragraph","text":"更有趣的是，在这条演进路径上，作为 AI 工程师和 PM 所面临的核心瓶颈，也发生了根本性的迁移：","raw":"更有趣的是，在这条演进路径上，作为 AI 工程师和 PM 所面临的核心瓶颈，也发生了根本性的迁移："},{"id":"p3","kind":"list","text":"- 在聊天机器人时代，我们的挑战是「怎么把话说清楚」，这催生了提示工程。\n- 在 Agent 时代，我们的挑战是「每一步该往上下文里放什么」，这催生了上下文工程。","raw":"- 在聊天机器人时代，我们的挑战是「怎么把话说清楚」，这催生了提示工程。\n- 在 Agent 时代，我们的挑战是「每一步该往上下文里放什么」，这催生了上下文工程。"},{"id":"p4","kind":"paragraph","text":"今天就沿着这条主线，深度拆解这场演进背后的关键模块和工程范式。","raw":"今天就沿着这条主线，深度拆解这场演进背后的关键模块和工程范式。"},{"id":"p5","kind":"heading","text":"一、为什么：演进的主线","raw":"## 一、为什么：演进的主线"},{"id":"p6","kind":"heading","text":"Level 1：聊天机器人（Chatbot）","raw":"### Level 1：聊天机器人（Chatbot）"},{"id":"p7","kind":"paragraph","text":"这是我们最熟悉的起点。Chatbot 的核心是单轮或短多轮对话，它的表现好坏，强依赖于提示工程。我们所有的努力，无论是写清晰的指令、给 Few-shot 示例，还是优化输出格式，都是为了让模型能听懂，并给出稳定、可预期的输出。","raw":"这是我们最熟悉的起点。Chatbot 的核心是单轮或短多轮对话，它的表现好坏，强依赖于提示工程。我们所有的努力，无论是写清晰的指令、给 Few-shot 示例，还是优化输出格式，都是为了让模型能听懂，并给出稳定、可预期的输出。"},{"id":"p8","kind":"heading","text":"Level 2：推理者（Reasoner）","raw":"### Level 2：推理者（Reasoner）"},{"id":"p9","kind":"paragraph","text":"当任务变得复杂，需要多步逻辑时，Chatbot 就不够用了。","raw":"当任务变得复杂，需要多步逻辑时，Chatbot 就不够用了。"},{"id":"p10","kind":"paragraph","text":"我们不再满足于模型「直接给答案」，而是要求它「先想清楚」。于是，一系列引导显式推理的技术诞生了，如思维链（CoT）、自我一致性、后退提示和思维树（ToT）。这些方法的本质，都是在模型的上下文窗口中，为其强行开辟出一个「思考区」，让它在给出最终答案前，先进行逻辑推演。","raw":"我们不再满足于模型「直接给答案」，而是要求它「先想清楚」。于是，一系列引导显式推理的技术诞生了，如思维链（CoT）、自我一致性、后退提示和思维树（ToT）。这些方法的本质，都是在模型的上下文窗口中，为其强行开辟出一个「思考区」，让它在给出最终答案前，先进行逻辑推演。"},{"id":"p11","kind":"heading","text":"Level 3：智能体（Agent）","raw":"### Level 3：智能体（Agent）"},{"id":"p12","kind":"paragraph","text":"这是当前的最前沿：Agent 不再是被动应答，它是在一个循环中自主使用工具、读写外部状态、长时程执行任务。","raw":"这是当前的最前沿：Agent 不再是被动应答，它是在一个循环中自主使用工具、读写外部状态、长时程执行任务。"},{"id":"p13","kind":"paragraph","text":"此时，核心瓶颈彻底从「怎么写提示」转向了「怎么管上下文」。因为 Agent 运行得越久、调用工具越多，其上下文窗口就越容易被海量的中间结果、对话历史、工具日志所淹没，导致上下文污染。","raw":"此时，核心瓶颈彻底从「怎么写提示」转向了「怎么管上下文」。因为 Agent 运行得越久、调用工具越多，其上下文窗口就越容易被海量的中间结果、对话历史、工具日志所淹没，导致上下文污染。"},{"id":"p14","kind":"paragraph","text":"正如 Anthropic 和行业实战圈的共识：上下文工程的核心，就是在模型有限的注意力预算下，以最小的高信号信息集合，驱动模型产生期望的行为。","raw":"正如 Anthropic 和行业实战圈的共识：上下文工程的核心，就是在模型有限的注意力预算下，以最小的高信号信息集合，驱动模型产生期望的行为。"},{"id":"p15","kind":"heading","text":"二、是什么：上下文工程的三大模块","raw":"## 二、是什么：上下文工程的三大模块"},{"id":"p16","kind":"paragraph","text":"要实现从 L2（会思考）到 L3（会做事）的飞跃，Agent 必须解决三个核心的工程难题。","raw":"要实现从 L2（会思考）到 L3（会做事）的飞跃，Agent 必须解决三个核心的工程难题。"},{"id":"p17","kind":"paragraph","text":"但在此之前，必须明确一个关键点：我们在 L1 阶段修炼的提示工程去哪了？","raw":"但在此之前，必须明确一个关键点：我们在 L1 阶段修炼的提示工程去哪了？"},{"id":"p18","kind":"paragraph","text":"答案是：它进化了。它不再是那个「直接写给模型看」的单一系统提示，而是渗透到了 L3 Agent 架构的每一个组件中，成为解决所有新难题的元技能。","raw":"答案是：它进化了。它不再是那个「直接写给模型看」的单一系统提示，而是渗透到了 L3 Agent 架构的每一个组件中，成为解决所有新难题的元技能。"},{"id":"p19","kind":"heading","text":"1、Think 工具：把思考产品化","raw":"### 1、Think 工具：把思考产品化"},{"id":"p20","kind":"paragraph","text":"L2 的思维链是隐式的，而 L3 的 Think 工具是显式的。它是一个被定义和调用的工具，专门用于「行动中的思考」：","raw":"L2 的思维链是隐式的，而 L3 的 Think 工具是显式的。它是一个被定义和调用的工具，专门用于「行动中的思考」："},{"id":"p21","kind":"code","text":"{\n  \"name\": \"think\",\n  \"description\": \"当需要复杂的推理时……使用该工具来思考某事。\"\n}","raw":"```json\n{\n  \"name\": \"think\",\n  \"description\": \"当需要复杂的推理时……使用该工具来思考某事。\"\n}\n```"},{"id":"p22","kind":"paragraph","text":"这和「延展思考」有什么区别？延展思考发生在 Agent 响应之前，用于制定顶层规划；Think 工具是在执行过程中的在途反思，是在 Agent 已经启动、并在与工具交互时，用来处理新发现的信息。","raw":"这和「延展思考」有什么区别？延展思考发生在 Agent 响应之前，用于制定顶层规划；Think 工具是在执行过程中的在途反思，是在 Agent 已经启动、并在与工具交互时，用来处理新发现的信息。"},{"id":"p23","kind":"paragraph","text":"提示工程在此处的进化：Think 工具的成功，100% 依赖于提示工程。必须在系统提示中教会 Agent 何时以及如何使用它。","raw":"**提示工程在此处的进化**：Think 工具的成功，100% 依赖于提示工程。必须在系统提示中教会 Agent 何时以及如何使用它。"},{"id":"p24","kind":"list","text":"- 坏的提示：「你可以思考。」（Agent 不知道什么时候用）\n- 好的提示：「在调用任何会改变数据库的工具（如 cancel_flight）之前，你必须先调用 think 工具，在 thought 字段中列出你已核实的所有合规性规则（如：1. 24 小时内可退；2. 非促销票），确认无误后再执行。」","raw":"- 坏的提示：「你可以思考。」（Agent 不知道什么时候用）\n- 好的提示：「在调用任何会改变数据库的工具（如 `cancel_flight`）之前，你必须先调用 `think` 工具，在 `thought` 字段中列出你已核实的所有合规性规则（如：1. 24 小时内可退；2. 非促销票），确认无误后再执行。」"},{"id":"p25","kind":"paragraph","text":"提示工程从「让模型好好说话」进化为了「为模型的思考过程制定 SOP」。","raw":"提示工程从「让模型好好说话」进化为了「为模型的思考过程制定 SOP」。"},{"id":"p26","kind":"heading","text":"2、RAG 的演进：从「优化内存」到「主动探索」","raw":"### 2、RAG 的演进：从「优化内存」到「主动探索」"},{"id":"p27","kind":"paragraph","text":"（1）更好的 RAG：上下文检索","raw":"**（1）更好的 RAG：上下文检索**"},{"id":"p28","kind":"paragraph","text":"Agent 的决策依赖外部知识。传统 RAG 因「上下文丢失」（即 chunk 脱离了原文语境）而变得不可靠。","raw":"Agent 的决策依赖外部知识。传统 RAG 因「上下文丢失」（即 chunk 脱离了原文语境）而变得不可靠。"},{"id":"p29","kind":"paragraph","text":"例如，一个 chunk 写着「该公司收入增长 3%」，但 Agent 根本不知道这是哪家公司、哪个季度。此时上下文检索（Contextual Retrieval）的作用，就是在预处理阶段用 LLM 为每一个这样的模糊 chunk 生成一段「微语境」：","raw":"例如，一个 chunk 写着「该公司收入增长 3%」，但 Agent 根本不知道这是哪家公司、哪个季度。此时上下文检索（Contextual Retrieval）的作用，就是在预处理阶段用 LLM 为每一个这样的模糊 chunk 生成一段「微语境」："},{"id":"p30","kind":"quote","text":"这是一段 chunk……请提供一个简短而精确的上下文语境，以便在整个文档中定位这个片段，从而改进 RAG 搜索检索效果。","raw":"> 这是一段 chunk……请提供一个简短而精确的上下文语境，以便在整个文档中定位这个片段，从而改进 RAG 搜索检索效果。"},{"id":"p31","kind":"paragraph","text":"我们通过这个提示，让 LLM 自己去修复 RAG 的上下文丢失问题。这个「一次性预处理提示」的质量，直接决定了整个 RAG 系统的上限。","raw":"我们通过这个提示，让 LLM 自己去修复 RAG 的上下文丢失问题。这个「一次性预处理提示」的质量，直接决定了整个 RAG 系统的上限。"},{"id":"p32","kind":"paragraph","text":"但这个阶段的 RAG 还是被动的。我们只是在预处理阶段把「内存」做得更好了，Agent 还是在拉取我们喂给它的东西。","raw":"但这个阶段的 RAG 还是被动的。我们只是在预处理阶段把「内存」做得更好了，Agent 还是在拉取我们喂给它的东西。"},{"id":"p33","kind":"paragraph","text":"（2）主动的 RAG：智能体搜索","raw":"**（2）主动的 RAG：智能体搜索**"},{"id":"p34","kind":"paragraph","text":"智能体搜索（Agentic Search）的核心转变是从「预先检索」进化到「即时搜索」。","raw":"智能体搜索（Agentic Search）的核心转变是从「预先检索」进化到「即时搜索」。"},{"id":"p35","kind":"paragraph","text":"Agent 不再依赖我们预先切好的、带语境的 chunks。相反，Agent 获得的是轻量级标识符（如文件名、API、数据库查询）和工具（如 grep、glob、head、tail），它在运行时自主决定要「看」什么。它不是在检索，它是在探索。","raw":"Agent 不再依赖我们预先切好的、带语境的 chunks。相反，Agent 获得的是轻量级标识符（如文件名、API、数据库查询）和工具（如 `grep`、`glob`、`head`、`tail`），它在运行时自主决定要「看」什么。它不是在检索，它是在探索。"},{"id":"p36","kind":"paragraph","text":"关键优势有两点：","raw":"关键优势有两点："},{"id":"p37","kind":"list","text":"- 渐进式披露：Agent 通过探索逐步发现上下文。它先用 ls 看看有哪些文件，通过文件名（如 test_utils.py）和路径（如 /src/logic/）来推理文件的用途，然后再决定是否用 cat 或 head 读取它。\n- 类人认知：这更像人——我们不会背下整个图书馆（传统 RAG），我们只会记住索引和书架（文件系统、书签），然后按需取用。","raw":"- **渐进式披露**：Agent 通过探索逐步发现上下文。它先用 `ls` 看看有哪些文件，通过文件名（如 `test_utils.py`）和路径（如 `/src/logic/`）来推理文件的用途，然后再决定是否用 `cat` 或 `head` 读取它。\n- **类人认知**：这更像人——我们不会背下整个图书馆（传统 RAG），我们只会记住索引和书架（文件系统、书签），然后按需取用。"},{"id":"p38","kind":"paragraph","text":"提示工程在此处的进化：此时提示不再是告诉模型「知识在这里」，而是教会模型「如何自主去寻找知识」。","raw":"**提示工程在此处的进化**：此时提示不再是告诉模型「知识在这里」，而是教会模型「如何自主去寻找知识」。"},{"id":"p39","kind":"paragraph","text":"（3）混合策略才是王道","raw":"**（3）混合策略才是王道**"},{"id":"p40","kind":"paragraph","text":"智能体搜索虽然更智能，但代价是慢（运行时探索）；上下文检索虽然被动，但快（预计算）。最佳实践是结合两者：","raw":"智能体搜索虽然更智能，但代价是慢（运行时探索）；上下文检索虽然被动，但快（预计算）。最佳实践是结合两者："},{"id":"p41","kind":"list","text":"- 对高频、关键的指南（如 Claude Code 的 CLAUDE.md 文件），使用上下文检索直接塞给模型。\n- 对庞大、动态的代码库或数据库，则赋予 Agent 智能体搜索的工具，让它自己去 grep 和 glob。","raw":"- 对高频、关键的指南（如 Claude Code 的 `CLAUDE.md` 文件），使用上下文检索直接塞给模型。\n- 对庞大、动态的代码库或数据库，则赋予 Agent 智能体搜索的工具，让它自己去 `grep` 和 `glob`。"},{"id":"p42","kind":"heading","text":"3、Tool Use 工具调用：Agent 的四肢","raw":"### 3、Tool Use 工具调用：Agent 的四肢"},{"id":"p43","kind":"paragraph","text":"这是 L3 Agent 最具标志性的进化：Agent-Computer Interface（ACI），Agent 如何与外部世界成千上万的 API 和工具交互？","raw":"这是 L3 Agent 最具标志性的进化：Agent-Computer Interface（ACI），Agent 如何与外部世界成千上万的 API 和工具交互？"},{"id":"p44","kind":"paragraph","text":"（1）函数调用","raw":"**（1）函数调用**"},{"id":"p45","kind":"paragraph","text":"工具调用是为非确定性的 Agent 设计的，是「确定性系统」和「非确定性 Agent」之间的契约。我们不能像设计传统 API 那样设计工具，必须对 Agent 的「人机工学」友好。","raw":"工具调用是为非确定性的 Agent 设计的，是「确定性系统」和「非确定性 Agent」之间的契约。我们不能像设计传统 API 那样设计工具，必须对 Agent 的「人机工学」友好。"},{"id":"p46","kind":"paragraph","text":"一个重要判断：优化工具描述带来的性能提升，远大于修改总系统提示。","raw":"一个重要判断：优化工具描述带来的性能提升，远大于修改总系统提示。"},{"id":"p47","kind":"paragraph","text":"提示工程在此处的进化：核心战场从「系统提示」转移到了「工具描述」。工具的 description 和 parameters 描述就是一种微提示，Agent 能否正确选用工具，九成取决于这个 ACI 提示写得是否清晰、无歧义、无重叠。","raw":"**提示工程在此处的进化**：核心战场从「系统提示」转移到了「工具描述」。工具的 `description` 和 `parameters` 描述就是一种微提示，Agent 能否正确选用工具，九成取决于这个 ACI 提示写得是否清晰、无歧义、无重叠。"},{"id":"p48","kind":"paragraph","text":"关键实践一：合并工作流","raw":"**关键实践一：合并工作流**"},{"id":"p49","kind":"paragraph","text":"坏的实践是简单包装 API，比如 list_contacts、get_contact_details，Agent 需要调用很多次，上下文会被中间结果撑爆。好的实践是合并高频工作流：","raw":"坏的实践是简单包装 API，比如 `list_contacts`、`get_contact_details`，Agent 需要调用很多次，上下文会被中间结果撑爆。好的实践是合并高频工作流："},{"id":"p50","kind":"code","text":"contacts              替换  list_contacts（不需要读取整个通讯录，太浪费 Token）\nschedule_event        替换  list_users + list_events + create_event\nget_customer_context  替换  get_customer_by_id + list_transactions + list_notes","raw":"```text\ncontacts              替换  list_contacts（不需要读取整个通讯录，太浪费 Token）\nschedule_event        替换  list_users + list_events + create_event\nget_customer_context  替换  get_customer_by_id + list_transactions + list_notes\n```"},{"id":"p51","kind":"paragraph","text":"关键实践二：用参数来做上下文工程","raw":"**关键实践二：用参数来做上下文工程**"},{"id":"p52","kind":"paragraph","text":"让 Agent 自己决定这一步需要多少上下文，而不是工具无脑返回所有信息：","raw":"让 Agent 自己决定这一步需要多少上下文，而不是工具无脑返回所有信息："},{"id":"p53","kind":"code","text":"response_format: \"concise\" | \"detailed\"","raw":"```text\nresponse_format: \"concise\" | \"detailed\"\n```"},{"id":"p54","kind":"paragraph","text":"我们开始将「Agentic 的思考」固化到工具内部，以节省上下文。","raw":"我们开始将「Agentic 的思考」固化到工具内部，以节省上下文。"},{"id":"p55","kind":"paragraph","text":"关键实践三：评估驱动开发","raw":"**关键实践三：评估驱动开发**"},{"id":"p56","kind":"paragraph","text":"工具不是写出来的，是评测出来的。你需要用 Agent 来帮你优化工具，通过分析评测日志（比如 Agent 为什么会用错），来反向迭代你的工具描述。Claude 之前总给搜索词加上「2025」，就是通过评测发现并通过优化描述来修复的。","raw":"工具不是写出来的，是评测出来的。你需要用 Agent 来帮你优化工具，通过分析评测日志（比如 Agent 为什么会用错），来反向迭代你的工具描述。Claude 之前总给搜索词加上「2025」，就是通过评测发现并通过优化描述来修复的。"},{"id":"p57","kind":"paragraph","text":"（2）MCP（模型上下文协议）","raw":"**（2）MCP（模型上下文协议）**"},{"id":"p58","kind":"paragraph","text":"它是一个标准化的工具驱动协议，将 Agent 与工具解耦。Agent 不再需要把所有工具定义都「背」在 Prompt 里，它可以在运行时动态发现 MCP 服务器，并向它们查询「你能做什么？」","raw":"它是一个标准化的工具驱动协议，将 Agent 与工具解耦。Agent 不再需要把所有工具定义都「背」在 Prompt 里，它可以在运行时动态发现 MCP 服务器，并向它们查询「你能做什么？」"},{"id":"p59","kind":"paragraph","text":"提示工程在此处的进化：提示工程变成了协议工程。Agent 和工具之间的交互被标准化了，工具描述可以按需加载，而不是全部塞入上下文。","raw":"**提示工程在此处的进化**：提示工程变成了协议工程。Agent 和工具之间的交互被标准化了，工具描述可以按需加载，而不是全部塞入上下文。"},{"id":"p60","kind":"paragraph","text":"关键实践：命名空间。当 Agent 通过 MCP 发现数百个工具时，它会懵。使用 asana_search 对比 jira_search，或者 asana_projects_search 对比 asana_users_search 这样的命名空间，可以帮助 Agent 在动态发现时进行剪枝，极大提升选择正确工具的概率。","raw":"**关键实践：命名空间**。当 Agent 通过 MCP 发现数百个工具时，它会懵。使用 `asana_search` 对比 `jira_search`，或者 `asana_projects_search` 对比 `asana_users_search` 这样的命名空间，可以帮助 Agent 在动态发现时进行剪枝，极大提升选择正确工具的概率。"},{"id":"p61","kind":"paragraph","text":"提示工程从「写好一个描述」进化到了「设计一套清晰的工具命名和信息架构」。","raw":"提示工程从「写好一个描述」进化到了「设计一套清晰的工具命名和信息架构」。"},{"id":"p62","kind":"paragraph","text":"（3）Agent Skills（技能包）","raw":"**（3）Agent Skills（技能包）**"},{"id":"p63","kind":"paragraph","text":"这是最新的进化。如果说 MCP 是驱动程序，那么 Skills 就是应用程序包。一个 Skill = 指令文档（.md）+ 流程脚本（.py）。","raw":"这是最新的进化。如果说 MCP 是驱动程序，那么 Skills 就是应用程序包。一个 Skill = 指令文档（.md）+ 流程脚本（.py）。"},{"id":"p64","kind":"paragraph","text":"SKILL.md 文件本身就是一种极其复杂、结构化的流程提示，它通过渐进式披露机制被动态加载到上下文中：","raw":"`SKILL.md` 文件本身就是一种极其复杂、结构化的流程提示，它通过渐进式披露机制被动态加载到上下文中："},{"id":"p65","kind":"list","text":"- L1（启动时加载）：只加载 SKILL.md 的元数据（name 和 description），消耗的 Token 极少。\n- L2（Agent 触发时）：Agent 觉得这个 Skill 有用，于是主动读取 SKILL.md 的正文。\n- L3（Agent 需要时）：Agent 在阅读时发现它引用了 forms.md 或 utils.py，于是再次主动去读这些更深层的文件。","raw":"- **L1（启动时加载）**：只加载 `SKILL.md` 的元数据（`name` 和 `description`），消耗的 Token 极少。\n- **L2（Agent 触发时）**：Agent 觉得这个 Skill 有用，于是主动读取 `SKILL.md` 的正文。\n- **L3（Agent 需要时）**：Agent 在阅读时发现它引用了 `forms.md` 或 `utils.py`，于是再次主动去读这些更深层的文件。"},{"id":"p66","kind":"paragraph","text":"而且 Skill 不只是一个「超级提示」，它是一个混合体：SKILL.md 是给 Agent 的程序性知识，告诉它如何思考；.py 脚本是给 Agent 的确定性工具，让它高效执行（比如用代码排序，而不是让 LLM 自己在上下文中排序）。","raw":"而且 Skill 不只是一个「超级提示」，它是一个混合体：`SKILL.md` 是给 Agent 的程序性知识，告诉它如何思考；`.py` 脚本是给 Agent 的确定性工具，让它高效执行（比如用代码排序，而不是让 LLM 自己在上下文中排序）。"},{"id":"p67","kind":"paragraph","text":"提示工程至此进化成了「知识库和代码库的架构师」：我们不再是喂给模型上下文，而是设计一个信息迷宫，并相信 Agent 能看到地图、选择进入哪个区域、按需索取房间钥匙。","raw":"提示工程至此进化成了「知识库和代码库的架构师」：我们不再是喂给模型上下文，而是设计一个信息迷宫，并相信 Agent 能看到地图、选择进入哪个区域、按需索取房间钥匙。"},{"id":"p68","kind":"heading","text":"三、怎么做：上下文窗口管理","raw":"## 三、怎么做：上下文窗口管理"},{"id":"p69","kind":"paragraph","text":"Agent 的上下文窗口就像人类的工作记忆，它有一个注意力预算。上下文不是越多越好——Token 越多，模型的注意力就越稀释，回忆精准度就越低。","raw":"Agent 的上下文窗口就像人类的工作记忆，它有一个注意力预算。上下文不是越多越好——Token 越多，模型的注意力就越稀释，回忆精准度就越低。"},{"id":"p70","kind":"heading","text":"1、四象限","raw":"### 1、四象限"},{"id":"p71","kind":"list","text":"- Write（写到窗外）：把中间思考、工具结果等产物，写入到外部存储（如 Scratchpad、Memory、文件系统），而不是无脑塞回上下文。\n- Select（按需取回）：基于检索或索引，只拉取当前步骤最需要的片段。上一节的上下文检索和智能体搜索就是实现高质量 Select 的关键。\n- Compress（压缩裁剪）：对长对话轨迹和重型工具输出，主动进行摘要、裁剪或清理（如 Claude Code 的 auto-compact 会自动清理陈旧的工具结果）。\n- Isolate（隔离）：利用多代理或环境隔离，让重对象、长轨迹在子代理或沙箱环境中展开，只把最终的摘要和关键信号回传给主上下文。","raw":"- **Write（写到窗外）**：把中间思考、工具结果等产物，写入到外部存储（如 Scratchpad、Memory、文件系统），而不是无脑塞回上下文。\n- **Select（按需取回）**：基于检索或索引，只拉取当前步骤最需要的片段。上一节的上下文检索和智能体搜索就是实现高质量 Select 的关键。\n- **Compress（压缩裁剪）**：对长对话轨迹和重型工具输出，主动进行摘要、裁剪或清理（如 Claude Code 的 auto-compact 会自动清理陈旧的工具结果）。\n- **Isolate（隔离）**：利用多代理或环境隔离，让重对象、长轨迹在子代理或沙箱环境中展开，只把最终的摘要和关键信号回传给主上下文。"},{"id":"p72","kind":"heading","text":"2、Manus 实战：三大范式","raw":"### 2、Manus 实战：三大范式"},{"id":"p73","kind":"paragraph","text":"如果说四象限是理论，那么 Manus 的实战范式就是将其落地的优秀工程案例。","raw":"如果说四象限是理论，那么 Manus 的实战范式就是将其落地的优秀工程案例。"},{"id":"p74","kind":"paragraph","text":"（1）Reduce（压缩）","raw":"**（1）Reduce（压缩）**"},{"id":"p75","kind":"paragraph","text":"第一阶段是轻量压缩（compaction）：工具返回结果分为 full 和 compact 两个版本，full 版本（如网页全文）被卸载到文件系统，compact 版本（如文件路径和一句话摘要）留在上下文中。","raw":"第一阶段是轻量压缩（compaction）：工具返回结果分为 full 和 compact 两个版本，full 版本（如网页全文）被卸载到文件系统，compact 版本（如文件路径和一句话摘要）留在上下文中。"},{"id":"p76","kind":"paragraph","text":"关键点在于：只对较旧的工具结果进行压缩，保留最新的工具结果，因为 Agent 的下一步决策最依赖它。这比「自动清理工具结果」更精细。","raw":"关键点在于：只对较旧的工具结果进行压缩，保留最新的工具结果，因为 Agent 的下一步决策最依赖它。这比「自动清理工具结果」更精细。"},{"id":"p77","kind":"paragraph","text":"第二阶段是重量压缩（summarization）：当轻量压缩达到极限时才启动，调用 LLM 把 full 版本的结果按固定模式生成结构化摘要，替换掉上下文中的 compact 引用。","raw":"第二阶段是重量压缩（summarization）：当轻量压缩达到极限时才启动，调用 LLM 把 full 版本的结果按固定模式生成结构化摘要，替换掉上下文中的 compact 引用。"},{"id":"p78","kind":"paragraph","text":"（2）Offload（卸载）","raw":"**（2）Offload（卸载）**"},{"id":"p79","kind":"paragraph","text":"Manus 把大量结果卸载到沙箱的文件系统，Agent 不直接看这些数据，而是通过 shell、grep、glob 这类通用原语按需取回。","raw":"Manus 把大量结果卸载到沙箱的文件系统，Agent 不直接看这些数据，而是通过 `shell`、`grep`、`glob` 这类通用原语按需取回。"},{"id":"p80","kind":"paragraph","text":"核心洞察是分层行动空间：","raw":"核心洞察是**分层行动空间**："},{"id":"p81","kind":"list","text":"- 错误的做法：把 100 个 MCP 工具的描述都塞进 System Prompt。这会撑爆上下文，并让 LLM 选择困难。\n- Manus 的操作：函数调用层只保留不到 20 个原子工具（如 shell、text_editor），这层非常薄，占用 Token 极少；沙箱层则把 100 个 MCP 工具全部做成命令行工具，安装在沙箱环境中。","raw":"- 错误的做法：把 100 个 MCP 工具的描述都塞进 System Prompt。这会撑爆上下文，并让 LLM 选择困难。\n- Manus 的操作：函数调用层只保留不到 20 个原子工具（如 `shell`、`text_editor`），这层非常薄，占用 Token 极少；沙箱层则把 100 个 MCP 工具全部做成命令行工具，安装在沙箱环境中。"},{"id":"p82","kind":"paragraph","text":"Agent 不需要认识 100 个工具，它只需要认识一个 shell。当它需要用 MCP 时，会调用 shell 去执行 mcp_tool_cli --help。","raw":"Agent 不需要认识 100 个工具，它只需要认识一个 `shell`。当它需要用 MCP 时，会调用 `shell` 去执行 `mcp_tool_cli --help`。"},{"id":"p83","kind":"paragraph","text":"这是一种极致的上下文卸载：「工具描述本身」都被卸载了，从「提示」变成了「环境」的一部分。Agent 的认知负荷从「N 选 1」降低到了「1」，然后它可以在沙箱环境中自主发现工具的用法。","raw":"这是一种极致的上下文卸载：「工具描述本身」都被卸载了，从「提示」变成了「环境」的一部分。Agent 的认知负荷从「N 选 1」降低到了「1」，然后它可以在沙箱环境中自主发现工具的用法。"},{"id":"p84","kind":"paragraph","text":"（3）Isolate（隔离）","raw":"**（3）Isolate（隔离）**"},{"id":"p85","kind":"paragraph","text":"Manus 使用了少量实用型子代理。子代理在自己隔离的上下文中完成任务，然后以标准化的输出模式回传给主代理，极大地降低了跨代理对话的噪音和 Token 成本。","raw":"Manus 使用了少量实用型子代理。子代理在自己隔离的上下文中完成任务，然后以标准化的输出模式回传给主代理，极大地降低了跨代理对话的噪音和 Token 成本。"},{"id":"p86","kind":"paragraph","text":"核心洞察是：子代理是「工具」，不是「团队」。Manus 反对把子代理拟人化（如 PM 代理、程序员代理），它的子代理是实用主义的：Planner（规划者）、Knowledge Manager（知识管理者）、Executor（执行者）。原因是拟人化的跨代理沟通成本极高，而且 LLM 并不受人类「认知分工」的限制。","raw":"核心洞察是：**子代理是「工具」，不是「团队」**。Manus 反对把子代理拟人化（如 PM 代理、程序员代理），它的子代理是实用主义的：Planner（规划者）、Knowledge Manager（知识管理者）、Executor（执行者）。原因是拟人化的跨代理沟通成本极高，而且 LLM 并不受人类「认知分工」的限制。"},{"id":"p87","kind":"paragraph","text":"隔离有两种模式，都确保子代理的噪声不会污染主代理的上下文：","raw":"隔离有两种模式，都确保子代理的噪声不会污染主代理的上下文："},{"id":"p88","kind":"list","text":"- 简单任务：Planner 只给 Executor 发送指令，Executor 在一个干净的上下文中完成工作，只返回结果。\n- 复杂任务（如需要读写共同文件）：Planner 把自己的完整上下文复制一份，连同指令一起发给 Executor，Executor 在继承的上下文中工作，然后返回结果。","raw":"- **简单任务**：Planner 只给 Executor 发送指令，Executor 在一个干净的上下文中完成工作，只返回结果。\n- **复杂任务**（如需要读写共同文件）：Planner 把自己的完整上下文复制一份，连同指令一起发给 Executor，Executor 在继承的上下文中工作，然后返回结果。"},{"id":"p89","kind":"heading","text":"最后","raw":"## 最后"},{"id":"p90","kind":"paragraph","text":"要让一个 Agent 真正能做事，且保证成本、稳定性和合规可控，需要一个完整的技术栈：","raw":"要让一个 Agent 真正能做事，且保证成本、稳定性和合规可控，需要一个完整的技术栈："},{"id":"p91","kind":"list","text":"- 推理（Think 工具）：把思考从隐式的 CoT 变为显式的 SOP，实现行动中反思。\n- RAG（上下文检索 + 智能体搜索）：把记忆从被动灌输升级为主动按需探索。\n- 工具（MCP + Skills）：把四肢从扁平 API 升级为可动态加载的、分层的行动空间。\n- 框架（四象限 / 三范式）：把上下文管理从随心所欲变为制度化的内存调度。","raw":"- **推理（Think 工具）**：把思考从隐式的 CoT 变为显式的 SOP，实现行动中反思。\n- **RAG（上下文检索 + 智能体搜索）**：把记忆从被动灌输升级为主动按需探索。\n- **工具（MCP + Skills）**：把四肢从扁平 API 升级为可动态加载的、分层的行动空间。\n- **框架（四象限 / 三范式）**：把上下文管理从随心所欲变为制度化的内存调度。"},{"id":"p92","kind":"paragraph","text":"这一切合在一起，才让 Agent 真正完成了从「会聊天」到「会思考」，再到「会做事」的飞跃。","raw":"这一切合在一起，才让 Agent 真正完成了从「会聊天」到「会思考」，再到「会做事」的飞跃。"},{"id":"p93","kind":"paragraph","text":"最后，在看完 Anthropic 的系列文章后，发现其中有一句话的思想贯穿始终：做最简单且有效的事情。希望我们都可以在这个世界上保持简单，呵护好自己最初的纯粹。","raw":"最后，在看完 Anthropic 的系列文章后，发现其中有一句话的思想贯穿始终：做最简单且有效的事情。希望我们都可以在这个世界上保持简单，呵护好自己最初的纯粹。"}],"authored_claims":[{"id":"bottleneck-shifted-to-context","text":"从 Chatbot 到 Agent，核心瓶颈从「怎么写提示」彻底转向了「怎么管上下文」。提示工程没有消失，它渗透进了 Agent 架构的每一个组件。","stance":"judgment","confidence":"high","supersedes":null,"note":null,"formed_at":"2025-10-18"},{"id":"context-engineering-golden-rule","text":"上下文工程的黄金法则是：在模型有限的注意力预算下，用信噪比最高的最小 Token 集合，驱动模型产生期望的行为。上下文不是越多越好。","stance":"judgment","confidence":"high","supersedes":null,"note":null,"formed_at":"2025-10-18"},{"id":"tool-description-beats-system-prompt","text":"优化工具描述带来的性能提升，远大于修改总系统提示。Agent 能否正确选用工具，九成取决于这个描述写得是否清晰、无歧义、无重叠。","stance":"judgment","confidence":null,"supersedes":null,"note":null,"formed_at":"2025-10-18"},{"id":"agentic-search-is-exploration","text":"智能体搜索不是「检索」，是「探索」。Agent 拿到的是文件名和 grep 这类轻量标识符与工具，在运行时自主决定要看什么——更像人只记住索引和书架，而不是背下整个图书馆。","stance":"judgment","confidence":null,"supersedes":null,"note":null,"formed_at":"2025-10-18"},{"id":"subagents-are-tools-not-teams","text":"子代理是「工具」而不是「团队」。拟人化的分工（PM 代理、程序员代理）跨代理沟通成本极高，而 LLM 并不受人类认知分工的限制。","stance":"judgment","confidence":null,"supersedes":null,"note":null,"formed_at":"2025-10-18"}],"claim_ids":["bottleneck-shifted-to-context","context-engineering-golden-rule","tool-description-beats-system-prompt","agentic-search-is-exploration","subagents-are-tools-not-teams"],"revision":"581fdd8edf820b3edd219cf5db02b5d9caa287dd08cf67894125564fbbd64204"}