跳转到主要内容

概述

“Context”(上下文)是 Zeus 在每次 Agent 调用时发送给模型的全部信息。它受限于模型的上下文窗口(token 上限)。 简单理解,Context 由以下部分组成:
  • System Prompt(Zeus 构建):分层提示词、工具描述、技能列表、时间/运行时信息、用户画像与记忆
  • Conversation History:当前会话的用户消息 + 助手消息
  • Tool Calls / Results:工具调用参数与返回结果
  • Attachments:用户上传的文件内容、沙盒数据文件
Context 不等同于 Memory。Memory 可以持久化到磁盘并在之后加载,而 Context 是当前模型窗口内的实时内容。参见 Memory 了解完整的记忆系统架构。

架构

Zeus 通过 BaseService._build_system_prompt() 方法组装上下文,每个组件独立维护,最终按固定顺序组装成完整的上下文。

上下文窗口占用

所有发送给模型的内容都计入上下文窗口:
组件说明估算
System Prompt分层提示词全文(CORE + SOUL + TOOLS + WORKFLOW + MEMORY + MODE)变化较大,取决于启用的工具和模式
Tool Descriptions动态生成的工具名称、描述、参数 Schema(JSON)与启用的工具数量成正比
Connector Skills PromptsBrowser Operator / Desktop 操作指令仅在启用时注入
MCP Prompts业务规则/模板(来自 MCP 服务器)取决于配置
Resource Files用户上传的资源文件内容取决于文件大小
Profile Data用户画像 + 项目上下文通常较小(< 500 tokens)
Retrieved Memories语义检索的 Top K 记忆条目最多 ~500 tokens(max 2000 chars)
Conversation History最近 30 条消息随对话增长
Tool Calls + Results工具调用参数和返回结果取决于工具使用频率和结果大小
Attachments文件附件信息取决于附件内容

System Prompt 组装

System Prompt 是 Context 中最大、最复杂的组件。由 BaseService._build_system_prompt() 在每次 Agent 调用时重新构建。 组装遵循固定的 15 步流水线 — 加载分层提示词模块、注入动态内容(时间、技能、连接器、MCP 提示词、资源),并追加个性化数据(画像和记忆)。

系统提示词 — 完整模块拆解

各模块(CORE、SOUL、TOOLS、WORKFLOW、MEMORY、MODE)的结构详解,工具描述注入机制,模式提示词如何控制 Agent 行为

工具描述注入

TOOLS.md 中包含 {tools_description} 占位符,在构建时动态填充。系统遍历所有启用的工具,提取名称、描述和参数 Schema,生成格式化的工具描述列表。 工具按类别加载,每种类别有不同的启用条件:
工具类别启用条件示例
Built-in Middleware始终启用TodoList, SubAgent, Filesystem
MCP Tools用户配置启用第三方 MCP 服务器工具
OAuth Tools用户授权启用GitHub, Gmail
Browser/DesktopConnector 配置启用Browser Operator, Desktop Operator
Sandbox Tools沙盒启用时execute_code, create_sandbox
RAG Tools知识库关联时search_knowledge_base
Memory ToolsAgent 模式默认启用memory_save, memory_search
Web Search Tools配置启用web_search
Skill Tools始终启用load_skill

Profile 与记忆注入

在 System Prompt 组装的末尾,Zeus 从记忆系统获取用户画像和语义相关的记忆条目,以结构化文本的形式追加。这使 Agent 无需主动检索即可感知用户偏好、项目上下文和历史信息。
参数默认值说明
Top K5返回最相关的 5 条记忆
Max Length2000 chars格式化后的最大长度
Scopesuser + project + session多 scope 合并检索
Rankingsimilarity×0.5 + confidence×0.3 + scope_priority×0.2加权评分排序

记忆系统 — 检索与排序详解

记忆的存储、检索、排序机制,以及完整的 Memory Gate 流水线

对话历史

构建方式

对话历史通过 _build_chat_history() 方法构建,将原始消息转换为 LangChain 格式:
消息类型LangChain 类型说明
用户消息HumanMessage用户发送的文本
助手消息AIMessageAgent 的回复
系统消息SystemMessage系统级指令

截断策略

参数默认值说明
max_messages30保留最近 30 条消息
存储位置LangGraph Checkpointer通过 thread_id 关联会话
超过 30 条的历史消息通过截断移除。自动摘要由 SummarizationMiddleware 处理(见下节)。

Token 管理

模型 Profile

Zeus 内置 200+ 模型的 token 限制配置。常见模型配置如下:
模型max_input_tokensmax_output_tokens
gpt-4-turbo128,0004,096
gpt-4o128,00016,384
claude-3-5-sonnet200,0008,192
当模型不在预定义列表中时,使用默认值 64,000 tokens。

SummarizationMiddleware

当上下文接近模型的 token 上限时,SummarizationMiddleware(由 DeepAgents 框架提供)自动触发对话历史摘要:
参数说明
触发阈值max_input_tokens × 0.85达到 85% 时触发
保留策略keep_recent保留最近消息
保留数量5 条最近 5 条消息不被摘要
摘要模型与主模型相同使用同一 LLM 生成摘要

Prompt Caching

对于 Anthropic 模型,AnthropicPromptCachingMiddleware 启用提示词缓存,减少重复 System Prompt 的 token 计费。缓存机制由 Anthropic API 原生支持,对 System Prompt 中不变的部分(CORE、SOUL 等)进行缓存,显著降低多轮对话的 token 消耗。

完整数据流

下图展示了一次完整的 Agent 调用中,Context 从组装到消费的全过程:

各阶段的上下文变化

阶段上下文内容Token 增长
Phase 1System Prompt + History基础消耗(固定 + 历史)
Phase 2+ Tool Schemas (JSON)工具数量 × schema 大小
Phase 3+ Tool Calls + Results取决于工具使用频率和结果大小

模式上下文差异

不同模式下,Context 的组成有所不同:
组件Agent 模式Ask 模式Plan 模式
核心提示词 (CORE/SOUL)全部全部全部
TOOLS.md全部工具只读工具只读工具
WORKFLOW.md完整精简规划专用
MEMORY.md完整精简精简
模式提示词agent_mode.mdask_mode.mdplan_mode.md
Memory Tools启用受限受限
写操作工具启用禁用禁用
RAG Tools启用启用启用
Profile 注入注入注入注入
Memory 注入注入注入注入
Ask 模式和 Plan 模式通过减少工具数量来降低上下文中的 Tool Schema 消耗。

优化策略

1. 渐进式披露 (Progressive Disclosure)

问题:Skills 和 Connector 提示词可能非常长,全部注入会浪费上下文空间。 方案:仅注入元数据摘要,Agent 按需通过工具加载完整内容。

2. Agentic RAG(按需检索)

问题:知识库内容可能非常庞大,预注入不现实。 方案:知识库作为工具暴露,Agent 自主决定何时检索、检索什么。

3. 自动摘要 (SummarizationMiddleware)

问题:长对话会导致历史消息占据大量上下文空间。 方案:当 token 使用量达到阈值时,自动将旧消息压缩为摘要。

4. 历史截断 (History Truncation)

问题:会话消息无限增长。 方案:仅保留最近 30 条消息,结合 LangGraph Checkpoint 持久化完整历史。

5. Prompt Caching

问题:System Prompt 在多轮对话中大部分内容不变,但每次都计费。 方案:Anthropic 模型使用 AnthropicPromptCachingMiddleware 缓存不变部分。

6. 记忆格式化限制

问题:检索到的记忆过多会占用过多空间。 方案:限制最大长度为 2000 字符,Top K = 5。