30秒快速回答: 上下文工程是系统化地设计和优化 AI 模型”看到的信息”的方法论。核心理念是”质量 > 数量”——给 AI 喂对的信息比喂更多的信息重要得多。它包括上下文窗口管理、信息分层、动态加载、Prompt 缓存等技术,是 2026 年 AI 应用开发中最被低估但回报最高的技能。


为什么上下文工程如此重要?

2026 年的大模型上下文窗口已经达到 200K 甚至 1M Token,但”能塞进去”不等于”能理解好”:

做法 结果
把所有代码/文档一股脑塞给 AI 信息过载,关键信息被淹没,输出质量下降
精心选择相关上下文,分层组织 AI 精准抓住关键信息,输出质量大幅提升

直观数据: 根据 Anthropic 的研究,经过上下文工程优化的提示词,在复杂任务上的准确率比”全量塞入”高出 30-50%。

三个核心原理

  1. 注意力稀释效应: 上下文越长,模型对每个 Token 的注意力越分散。无关信息会”稀释”关键信息。
  2. 首尾效应: 模型对上下文开头和结尾的内容关注度最高,中间部分容易被忽略。
  3. 语义污染: 不相关但相似的信息会干扰模型的检索和推理。

上下文工程的核心技术

一、信息分层架构

Layer 1: 系统层(System Prompt)
  - 角色定义、行为约束、输出格式(最稳定,很少变化)
  
Layer 2: 任务层(Task Context)
  - 当前任务的目标、背景、约束(每次任务变化)

Layer 3: 知识层(Knowledge Context)
  - 相关文档片段、代码文件、数据(动态检索)

Layer 4: 记忆层(Memory Context)
  - 对话历史摘要、长期记忆(增量更新)

实践原则: 越稳定的信息放在越上层,越动态的信息放在越下层。

二、上下文裁剪策略

并不是所有信息都值得放入上下文。裁剪规则:

放入上下文的标准:
✅ 与当前任务直接相关
✅ 用户明确引用的内容
✅ 最近的对话关键决策

不放入上下文的标准:
❌ 与当前任务无关的历史对话
❌ 已过时的信息(除非用户问历史)
❌ 重复的内容
❌ 被用户纠正过的错误信息

三、动态上下文加载

传统做法是”一次性加载所有”,现代做法是”按需动态加载”:

# 动态上下文加载示意
class DynamicContextManager:
    def __init__(self, max_tokens=100000):
        self.max_tokens = max_tokens
        self.system_prompt = ""    # Layer 1: 固定
        self.task_context = ""     # Layer 2: 任务相关
        self.knowledge_cache = {}  # Layer 3: 按需加载
        self.memory = []           # Layer 4: 增量

    def add_knowledge(self, doc_id, content, relevance_score):
        """根据相关性评分决定是否加入上下文"""
        if relevance_score > 0.7:
            self.knowledge_cache[doc_id] = {
                "content": content,
                "score": relevance_score
            }

    def build_context(self):
        """按优先级构建最终上下文"""
        tokens_used = len(self.system_prompt)
        context = [self.system_prompt]

        # 添加任务层
        context.append(self.task_context)
        tokens_used += len(self.task_context)

        # 按相关性降序添加知识,直到接近上限
        sorted_knowledge = sorted(
            self.knowledge_cache.values(),
            key=lambda x: x["score"],
            reverse=True
        )
        for k in sorted_knowledge:
            if tokens_used + len(k["content"]) > self.max_tokens * 0.8:
                break  # 留 20% 余量给模型生成
            context.append(k["content"])
            tokens_used += len(k["content"])

        return "\n\n".join(context)

四、Prompt 缓存

对于不经常变化的部分(系统提示词、固定指令),使用 Prompt 缓存可以:

  • 大幅降低 API 调用成本(缓存部分不重复计费)
  • 减少首 Token 延迟
  • 提高吞吐量
# Anthropic Prompt 缓存示例
import anthropic

client = anthropic.Anthropic()
response = client.messages.create(
    model="claude-sonnet-4-20250514",
    system=[
        {
            "type": "text",
            "text": "你是一位资深代码审查专家...",  # 长系统提示词
            "cache_control": {"type": "ephemeral"}  # 标记为可缓存
        }
    ],
    messages=[{"role": "user", "content": "审查以下代码..."}]
)

系统提示词只需在首次请求时处理,后续请求直接使用缓存,节省 90% 的输入 Token 成本。


实战:构建一个上下文感知的代码审查助手

# 一个完整的多层上下文管理示例
import anthropic

class CodeReviewContext:
    def __init__(self):
        self.client = anthropic.Anthropic()

        # Layer 1: 固定的审查规范(可缓存)
        self.review_rules = """
你是一位资深代码审查专家。审查标准:
1. 安全性:SQL 注入、XSS、认证缺陷
2. 性能:N+1 查询、不必要的 I/O
3. 可维护性:命名、注释、函数长度
4. 最佳实践:错误处理、类型提示
输出格式:按「问题-严重程度-修复建议」组织
"""

    def review(self, code: str, related_files: list[str] = None):
        # Layer 2 + 3: 动态组装上下文
        task_context = f"请审查以下代码:\n```python\n{code}\n```"

        if related_files:
            task_context += "\n\n相关文件(供参考,不需要审查):"
            for f in related_files[:3]:  # 最多 3 个,避免过载
                task_context += f"\n{f[:500]}"  # 截断,只取关键部分

        response = self.client.messages.create(
            model="claude-sonnet-4-20250514",
            system=[{
                "type": "text",
                "text": self.review_rules,
                "cache_control": {"type": "ephemeral"}
            }],
            messages=[{"role": "user", "content": task_context}],
            max_tokens=2000
        )
        return response.content[0].text

上下文工程的常见反模式

反模式 问题 正确做法
把所有文档塞给 AI 注意力稀释 只给与当前问题最相关的 Top-5 片段
保留完整对话历史 上下文爆炸 定期压缩为结构化摘要
系统提示词过长 浪费 Token 和预算 提炼核心,非必须内容放在外部
每次请求重建上下文 延迟高、成本高 使用 Prompt 缓存(固定部分)
不考虑信息组织顺序 关键信息被忽略 遵循”先总后分、先重要后次要”

2026 年工具推荐

工具 功能 适用场景
LangChain 上下文管理 + RAG + 链式调用 Python 开发者
LlamaIndex 文档索引 + 上下文检索 大量文档场景
Anthropic Prompt Caching Prompt 缓存 API Claude 用户降成本
Vercel AI SDK 前端/全栈 AI 上下文管理 Web 应用
Dify 可视化上下文编排 低代码场景

常见问题

Q: 上下文工程和 Prompt Engineering 有什么区别?

Prompt Engineering 关注”怎么说”,上下文工程关注”给什么信息”。两者互补——好的上下文工程让 Prompt Engineering 事半功倍。

Q: 上下文窗口这么大(200K),为什么还要裁剪?

因为模型对长上下文的”注意力”是不均匀的。实验表明,当上下文超过 50K Token 时,模型检索中间部分信息的准确率会明显下降。精准裁剪比全量塞入更有效。

Q: 多轮对话怎么管理上下文?

定期(每 5-10 轮)让模型总结对话摘要,用摘要替代完整历史。关键决策点单独标记保留。


下一步建议: 选一个你正在做的 AI 项目,尝试用本文的四层架构重组上下文,对比优化前后的输出质量差异。