首页 › AI Agent › 智能体 Agent 12要素原则 › 自主掌控上下文窗口

自主掌控上下文窗口

​

💡

智能体每一轮发给大模型的输入,本质逻辑都是:“告知模型迄今为止发生了所有事,再让它判断下一步操作”。所有相关工作都属于上下文工程范畴。大模型是无状态函数,仅依靠输入生成输出;想要优质输出,就必须构造优质输入。​

​

构成完整上下文的全部内容​

给模型的提示词、任务指令​

检索获取的文档与外部数据(如检索增强生成 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 检索文档、会话历史、工具调用记录、记忆数据。​