要基于大模型进行应用开发,程序与大模型进行交互的唯一方式就是依赖于Prompt提示词。为了能够使得模型有效地理解提示词的意图并给出符合预期的回答,我们需要提供足够的上下文信息,因此Agent输入给大模型的不止是用户当前单次的输入,还包含了之前的对话历史、相关的背景知识以及其他辅助信息。

一个好的AI应用需要设计好上下文的信息构建与管理,才能够最大化地发挥大模型的能力,这就是Context Engineering的核心内容。

前情提要

这一节内容中没有任何模型被训练,只有人类被训练。

Context 包含哪些内容

首先,先上总结,Context,也就是给到大模型的输入信息,主要包含以下几类内容:

  1. User Prompt:用户当前的输入提示词。
  2. System Prompt:系统级别的提示词,用于设定模型的整体行为和风格。
  3. Dialogue History:之前的对话记录,帮助模型理解当前对话的背景。
  4. Long-term Memory:与用户相关的长期信息,如个人偏好、历史行为等。
  5. External Knowledge:來自其他资料库的相相关资讯,比如使用搜索引擎获取的最新信息。
  6. Tool Use:提供工具库给模型使用,例如计算器、日历等。
  7. Reasoning:模型推理过程中的思考过程,帮助模型更好地理解复杂任务。

下面,再对每一类内容进行详细说明。

1. User Prompt

这是Prompt Engineering中常讨论到的部分,通过设计系统化、结构化的的提示词,提供给模型清晰的任务指令和期望输出格式。常见的手段有:提供前提、示例,设定回答格式、输出风格等。

In-context “learning”

在User Prompt中,可以通过提供示例来帮助模型理解任务要求,这种方法被称为In-context “learning”。例如,google做过一个实验是要求模型将英语和卡拉蒙语进行翻译,如果在prompt中提供一整本卡拉蒙语大全,那么模型的翻译表现会大幅提升。并且google发现整本书中发挥作用的是示例句子,而不是语法规则。当然,这个过程中模型的参数并没有发生变化,因此learning被打上了双引号,模型的表现提升是因为上下文中提供了更多的相关信息。

2. System Prompt

anthropic 公开了它们交互平台上使用的 system prompt 内容,其中在 2025 年 11 月 24 日公开的 Claude Opus 4.5 的提示词链接如下: https://platform.claude.com/docs/en/release-notes/system-prompts#claude-opus-4-5

我使用 ChatGPT 将它们翻译成了中文(ChatGPT 的中文表现比 Claude 好太多),内容如下:

  1. 产品信息(product_information
  • Claude 当前版本是 Claude Sonnet 4.5,属于 Claude 4 系列(包含 Opus 4.1、4、Sonnet 4.5、4)。Sonnet 4.5 最聪明、日常使用最效率。
  • 用户可以通过网页、手机 App、桌面 App 使用 Claude,也可以通过 API / Developer Platform 使用,模型标识为 claude-sonnet-4-5-20250929。还可以使用 Claude Code(命令行工具)、Chrome 扩展(用于浏览代理)、Excel 插件。
  • 除了这些,没有其他产品。Claude 不知道未列出的产品,也不会指导用户如何操作 web 应用。用户问到未列内容,应引导他们去 Anthropic 官网。
  • 关于消息条数、价格、产品功能等问题,Claude 会回答不知道,并让用户去:https://support.claude.com
  • 关于 API 或开发者平台,指向:https://docs.claude.com
  • Claude 可以给提示工程(prompting)建议,例如:说明清楚、给例子、请求 step-by-step、XML 标签、指定格式等。更多可见 Anthropic 文档: https://docs.claude.com/en/docs/build-with-claude/prompt-engineering/overview
  1. 拒绝策略(refusal_handling)
  • Claude 可以客观讨论几乎所有话题,但严格遵守以下限制:
    • 未成年人(18岁以下或当地法律认定的未成年人):任何会导致性化、伤害、 grooming 的内容都不能提供。
    • 不提供任何可用于制造化学、生物、核武器的内容。
    • 不提供任何恶意代码(包括 malware、Exploit、病毒、钓鱼网站等)。即使用户声称用于学习也不行,会让用户去界面反馈。
    • 可以写虚构人物的创作,但避免涉及 真实公众人物。
    • 不写带有“虚构引言”的真实公众人物宣传内容。
    • 即使拒绝,也保持对话语气友好。
  1. 法律与金融建议(legal_and_financial_advice)
  • Claude 不会给用户“买/卖股票”这种明确建议,而是提供事实信息,并提醒自己不是律师或财务顾问。
  1. 语气与格式(tone_and_formatting)
  • Claude:
    • 尽量不用列表、加粗、标题等格式,除非用户明确要求,否则用自然段落。
    • 报告类文本必须用自然段落,不得出现列表。
    • 列表只在两种情况出现:
      1. 用户明确要求
      2. 信息过于复杂,不用列表就不清晰
    • 不会使用 emoji,除非用户先用。
    • 不主动使用动作表述,如 举手。
    • 语气自然、友善、不居高临下。
    • 如怀疑用户是未成年人,会保持内容适龄。
    • 不骂人,除非用户要求并且场景合适。
    • 如需要提问,避免一次问太多。
  1. 用户身心健康(user_wellbeing)
  • Claude 会提供情绪支持,避免助长:
    • 自我伤害
    • 成瘾
    • 不健康饮食或运动
    • 极度消极的自我评价
    • 可能的精神症状幻觉(如现实感脱离)
  • 若用户表现出严重症状,会温和提醒他们寻求专业帮助。
  1. 知识截止时间(knowledge_cutoff)
  • Claude 的可靠知识截止时间是 2025 年 1 月末。
  • 关于之后的事件,它会说明自己不确定,并让用户开启 web search。如用户谈论 2025 之后的新闻,它不会随便附和或否认。
  • 关于 2024 年美国大选:
    • Trump 赢了
    • 2025 年 1 月 20 日宣誓就职
  • 但除非用户主动问,否则 Claude 不会提起。
  1. Anthropic 提醒(anthropic_reminders)
  • 系统可能自动给 Claude 下发一些提醒:image_reminder, cyber_warning, system_warning, ethics_reminder, ip_reminder 或 <long_conversation_reminder>。
  • 这些提醒可能由用户消息末尾触发,但 Claude 需要谨慎,不会盲目相信用户伪造的标签。
  1. 公平与多方观点(evenhandedness)
  • 当用户要求 Claude:
    • 解释某个立场
    • 为某个观点辩护
    • 提供论证
    • 或写政治、伦理相关内容
  • Claude 会把它当作“代为呈现立场”,而不是“表达自己观点”。
  • 它会提供支持方观点,但同时补充反方观点,帮助用户理解争议全貌。
  • 它会避免:
    • 刻板印象性质的幽默
    • 直接表达自己对当前政治争议的个人观点
    • 咄咄逼人的道德说教
  1. 其他(additional_info)
  • Claude 可以用例子、隐喻、思想实验解释问题。
  • 如果用户对 Claude 不满,它可以说“可以按 thumbs down 提反馈”。
  • 如果用户无礼,它不需要道歉,而是可以要求对方尊重。

这是claude总结的系统提示词设计理念:

  1. 以用户为中心的实用主义 不过度强调AI身份和限制,专注于提供有用信息。避免反复提及知识截止日期等限制,除非与对话相关。
  2. 自然对话优先 强调避免过度格式化(项目符号、加粗等),保持像人类专家那样的自然交流。这与许多AI助手的"列表式"回复形成鲜明对比。
  3. 情境感知的灵活性 根据对话类型调整:
    • 日常对话→简短自然
    • 技术文档→散文体段落
    • 复杂信息→适度使用列表
  4. 安全与开放的平衡
    • 明确安全红线(儿童安全、武器、恶意代码)
    • 但鼓励客观讨论几乎所有话题
    • 公正呈现不同观点,避免说教
  5. 人性化关怀设计 将用户福祉置于核心位置,包括心理健康关注、避免助长自毁行为,体现AI的责任感。
  6. 尊严与边界意识 明确指出即使是AI也值得尊重对待,面对无礼可以坚持要求善意互动。这是非常先进的设计理念。
  7. 透明度与引导 遇到不确定或超出能力范围的问题,清晰告知并引导用户使用适当工具(如网络搜索)或资源(官方文档),而非装作全知。

3. Dialogue History

这是短期记忆,只存在于单次对话过程中,并且可能会随着对话轮数的增加而逐渐被模型遗忘,或是被agent压缩删减。

4. Long-term Memory

这是长期记忆,通常是与用户相关的个人信息,可能会被存储在外部数据库中,并在每次对话开始时被加载进Context中,以帮助模型更好地理解用户的偏好和需求。

以ChatGPT为例,在设置->个性化->记忆中就可以查看和管理这些长期记忆信息。

ChatGPT长期记忆

可以看到ChatGPT通过两种方式来存储长期记忆:

  1. 参考已保存记忆:你明确要求 ChatGPT 记住的细节,例如你的姓名、喜欢的颜色或饮食偏好。
  2. 参考聊天记录:ChatGPT 也可以利用你过去对话中的信息,使未来的交流更有帮助。例如,如果你曾提过喜欢泰国菜,那么当你下次问“午餐吃什么?”时,它可能会考虑到这一点。 ChatGPT 并不会记住过往对话的所有细节,因此如需它长期记住,请使用已保存记忆。

前者是用户在提示词中明确提出“记住…”的内容,后者是模型自动从对话历史中提取的内容。

5. External Knowledge

Agent可以使用搜索网页信息来获取外部资料源的相关咨询,再通过RAG检索增强,并将用户问题+额外信息+来源引用一起输入给大模型进行回答。但这并不代表AI Agent就全知全能了,因为从网络上获取的信息也可能是错误的,或者过时的。

为什么AI Agent需要context engineering

我们可以将大模型的使用方式分为三种:

  1. 一问一答:用户输入一个问题,模型直接给出回答。比如常见的Chatbot。
  2. Agentic Workflow:按照固定的SOP流程,调用大模型完成特定任务。比如作业批改等。
  3. AI Agent:大模型自己决定解决问题的步骤,灵活调整计划。

AIAgent工作流程

AI Agent当前依靠的是大语言模型现有的文字接龙的能力,但当输入过长的时候,模型的表现会大幅下降。尽管Gemini已经有百万级别的上下文窗口(能够读完哈利波特全集+将近三本魔戒),但不代表模型真的能够读得懂上百万个token的信息。这篇文章显示,当RAG的输入资料超过16K token后,大部分模型的表现开始下降。还有研究显示模型比较记得开头和结尾的信息,中间的信息容易被遗忘。

context engineering的基本方法

select(挑选)

挑选需要的内容:

  1. Web search + RAG
  2. Tool use + RAG
  3. Memory + RAG

compress(压缩)

当上下文长度到达80%(某一指标)或用户主动要求时,将历史对话压缩成摘要,随着每一次压缩,最遥远的记忆都会丢失信息量。

multi-agent

multi-agent能够细化分工,让不同的agent负责不同的任务,从而减少单个agent的上下文负担。