Skip to main content

概述

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

架构

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

系统提示词

各模块(CORE、SOUL、TOOLS、WORKFLOW 等)的详细拆解与组装流程

记忆系统

四层记忆模型、画像生成机制,以及记忆如何注入提示词

上下文窗口占用

所有发送给模型的内容都计入上下文窗口:

System Prompt 组装

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

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

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

工具描述注入

TOOLS.md 中包含 {tools_description} 占位符,在构建时动态填充。系统遍历所有启用的工具,提取名称、描述和参数 Schema,生成格式化的工具描述列表。 工具按类别加载,每种类别有不同的启用条件:

Profile 与记忆注入

在 System Prompt 组装的末尾,Zeus 从记忆系统获取用户画像和语义相关的记忆条目,以结构化文本的形式追加。这使 Agent 无需主动检索即可感知用户偏好、项目上下文和历史信息。

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

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

对话历史

构建方式

对话历史通过 _build_chat_history() 方法构建,将原始消息转换为 LangChain 格式:

截断策略

超过 30 条的历史消息通过截断移除。自动摘要由 SummarizationMiddleware 处理(见下节)。

Token 管理

模型 Profile

Zeus 内置 200+ 模型的 token 限制配置。常见模型配置如下: 当模型不在预定义列表中时,使用默认值 64,000 tokens。

SummarizationMiddleware

当上下文接近模型的 token 上限时,SummarizationMiddleware(由 DeepAgents 框架提供)自动触发对话历史摘要:

Prompt Caching

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

完整数据流

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

各阶段的上下文变化


模式上下文差异

不同模式下,Context 的组成有所不同: 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。