方法论
2026-06-03
从 Prompt 到上下文工程
Context Engineering
Prompt
Agent
上下文
背景
过去一年大家都在聊“Prompt Engineering”——怎么写一句更聪明的提示词。但当应用从“问答”走向“能动手的 Agent”,我发现真正的瓶颈往往不在那一句话,而在于:推理这一刻,模型到底看到了什么。
2025 年前后,“Context Engineering(上下文工程)”被越来越多地提起。它的核心观点是:上下文窗口是有限且昂贵的资源,工程师的活儿不是雕琢一句 prompt,而是在每次推理时,动态地组装出最合适的一整批信息。
核心思路
上下文工程把“喂给模型的东西”拆成几类来源,每次调用时按需拼装:
- 1 指令(System Prompt):角色、边界、输出规范,相对稳定。
- 2 检索内容(RAG):从知识库、向量库拉取的相关片段,动态注入。
- 3 工具定义(Tool Schema):当前可用的函数签名,模型据此决定调用。
- 4 历史与记忆:对话记录、长期记忆,需要压缩以控制长度。
- 5 示例(Few-shot):少量示范,帮模型对齐风格与格式。
与“写一句好 prompt”相比,上下文工程更像是一场带预算的内容编排:窗口就那么大,放什么、砍什么、按什么顺序放,直接影响结果。
示例
一次典型的 Agent 调用,上下文由多个模块在运行期组装而成:
context = [
system_prompt, # 稳定指令
retrieve_relevant_docs(query), # RAG 动态检索
compress(history, budget=4000), # 历史压缩,控制长度
few_shot_examples(task), # 示例
tool_definitions, # 当前可用工具
]
response = llm(messages=context)
这里的“压缩”很关键:直接把整段对话塞进窗口,不仅贵,还会稀释重点。常见做法是对旧消息做摘要、只保留最近几轮原文,或者用检索从记忆里挑相关片段。
总结
对简单问答,一句好 prompt 够了;但对 Agent,上下文工程比 prompt 技巧更值钱——它决定了模型是否“看得到”关键信息。
下一步我打算在我们 Agent 工作台里做一个“上下文面板”,把每次调用的组装内容可视化出来,方便调试“为什么模型没用上某条知识”。