自主掌控上下文窗口
💡
智能体每一轮发给大模型的输入,本质逻辑都是:“告知模型迄今为止发生了所有事,再让它判断下一步操作”。所有相关工作都属于上下文工程范畴。大模型是无状态函数,仅依靠输入生成输出;想要优质输出,就必须构造优质输入。
构成完整上下文的全部内容
给模型的提示词、任务指令
检索获取的文档与外部数据(如检索增强生成 RAG)
历史状态、工具调用记录、工具返回结果、各类执行历史
其他关联对话、会话的历史消息与事件(记忆模块 Memory)
约束模型输出结构化数据的格式要求

标准上下文格式 vs 自定义上下文格式
通用标准:多角色消息数组格式
绝大多数大模型 SDK、客户端都采用这套角色消息数组规范,示例:
代码块
JSON
[
{
"role": "system",
"content": "你是一名运维智能助手……"
},
{
"role": "user",
"content": "可以部署后端服务吗?"
},
{
"role": "assistant",
"content": null,
"tool_calls": [
{
"id": "1",
"name": "list_git_tags",
"arguments": "{}"
}
]
},
{
该格式适配绝大多数场景,但如果想要极致发挥大模型能力,需要设计词元、注意力权重双高效的自定义上下文结构。
替代方案:业务专属自定义上下文格式
你可以脱离标准规范,打造贴合自身业务的上下文结构;按需把自定义数据封装进单条或多条 system/user/assistant/tool 消息中。
示例:全部上下文合并至单条 user 消息
代码块
JSON
[
{
"role": "system",
"content": "你是一名运维智能助手……"
},
{
"role": "user",
"content": """
以下是全部历史流程:
<slack_message>
发送人: @alex
频道: #deployments
内容: 可以部署后端吗?
</slack_message>
<list_git_tags>
操作意图: "list_git_tags"
</list_git_tags>
模型可通过传入的工具 Schema 自行推理下一步动作;即便如此,把问题直接写进提示模板能进一步降低模型理解成本。
代码实现示例
数据模型定义
代码块
Python
from typing import List, Literal, Union
# 单条会话事件基类
class Event:
type: Literal[
"list_git_tags", "deploy_backend", "deploy_frontend",
"request_more_information", "done_for_now",
"list_git_tags_result", "deploy_backend_result",
"deploy_frontend_result", "request_more_information_result",
"done_for_now_result", "error"
]
转换工具函数
代码块
Python
# 将单条事件转为带标签的文本片段
def event_to_prompt(event: Event) -> str:
# 字符串数据直接使用,结构化对象转为YAML文本
raw_data = event.data if isinstance(event.data, str) else stringifyToYaml(event.data)
return f"<{event.type}>\n{raw_data}\n</{event.type}>"
自定义格式上下文窗口真实样例
场景1:初始 Slack 用户请求
代码块
XML
<slack_message>
发送人: @alex
频道: #deployments
内容: 把最新后端版本部署到生产环境
</slack_message>
场景2:查询 Git 版本标签后
代码块
XML
<slack_message>
发送人: @alex
频道: #deployments
内容: 把最新后端版本部署到生产环境
历史会话: []
</slack_message>
<list_git_tags>
操作意图: "list_git_tags"
</list_git_tags>
<list_git_tags_result>
版本标签列表:
场景3:部署报错 + 人工介入修复流程
代码块
XML
<slack_message>
发送人: @alex
频道: #deployments
基于上述上下文调用模型
代码块
Python
# 把完整会话转为自定义文本格式,送入模型判断下一步
prompt_text = thread_to_prompt(thread)
nextStep = await determine_next_step(prompt_text)
模型返回结构化结果示例:
代码块
JSON
{
"intent": "get_workflow_status",
"workflow_name": "tag_push_prod.yaml"
}
说明:XML 标签格式仅为示例方案,你完全可以自定义任意适配业务的标记语法。
灵活调整上下文结构、区分存储数据与输入模型的数据,能显著提升输出质量。
自主掌控上下文窗口的核心优势
信息高密度
自定义排版结构,最大化模型对信息的理解效率。
完善错误处理
统一错误信息格式,方便模型自主排障;故障解决后可将失效报错从上下文剔除,减少冗余。
数据安全可控
自主筛选送入模型的内容,过滤敏感隐私数据。
高度灵活可迭代
根据业务效果持续迭代、更换上下文排版规则。
词元开销优化
自定义格式压缩冗余文本,降低 Token 消耗,同时不影响模型理解。
核心总结
上下文窗口是程序与大模型交互的核心载体。
自主控制信息的组织、展示方式,能够大幅提升智能体整体表现。
上下文包含:提示词、指令、RAG 检索文档、会话历史、工具调用记录、记忆数据。