简介:提示工程与上下文工程是大模型应用开发中两个常被混淆的概念。本文系统对比二者的定义、能力边界、技术依赖与适用场景,并通过旅行预订智能体的失败案例说明:仅靠打磨提示词为何不够,帮助开发者理解如何构建系统级上下文体系,按任务复杂度做出合理的工程选型与投入决策。
在大模型应用发展的早期阶段,“提示工程”(Prompt Engineering)几乎成了用好大语言模型(LLM)的代名词。开发者投入大量精力打磨指令措辞、设计少样本示例、约束输出格式,确实在大量单轮对话与文本生成任务中取得了显著效果。
但随着应用形态从“一问一答”演进到能够自主规划、调用工具、跨多轮执行任务的智能体系统,一个问题逐渐暴露:即使提示词写得再精致,模型仍会犯“低级错误”,理解错地点、忽略预算约束、忘记用户偏好。问题的根源往往不在“措辞”,而在于模型在推理那一刻“看到了什么”。于是,一个范围更广、更系统化的概念——“上下文工程”(Context Engineering)开始受到关注。
本文将围绕这两个概念展开系统对比:它们分别是什么、有何相同与不同、各自适合什么场景、团队应如何在二者之间分配投入。
提示工程是指编写用于提示大语言模型的输入文本的过程,典型手段包括:
它关注的是“怎么说”——如何用恰当的语言让模型理解意图并产生期望结果。提示工程的产出物通常是一段段可直接维护、可版本化管理的提示词文本。
上下文工程是一个范围更大的学科,它以程序化的方式整合大模型在推理时所见的全部内容。除了提示词本身,还涵盖:
它的目标是为模型提供系统级支持,确保模型在信息完备的前提下合理、准确地完成复杂任务。如果说提示工程是“措辞的艺术”,那么上下文工程就是“构建智能体生态系统的科学”。
二者并非对立关系,存在明显的共性:
提示工程的作用对象是“一次请求的输入文本”;上下文工程面对的是模型推理时可见的全部信息流,包括动态注入的检索结果、工具返回值、记忆内容与状态数据。
提示工程的产出是文本,改一段话就能生效;上下文工程的产出是检索管道、记忆存储、工具网关、状态机等一组可运行的系统组件,需要设计、开发、测试与部署。
提示词通常离线打磨、上线后相对稳定;上下文则需要在每次请求时按需实时组装,且要处理“该取什么、取多少、以什么顺序排布”的动态决策。
提示工程更多依赖语言表达、任务拆解与实验分析能力;上下文工程则需要系统架构、数据工程、检索与存储选型、接口设计等后端工程能力,团队画像明显不同。
提示工程的典型失效:指令歧义、格式漂移、模型“自由发挥”;上下文工程的典型失效:关键信息缺失、检索不准、上下文过载稀释重点、工具返回错误数据、长期记忆污染。归因方式不同,优化手段也完全不同。
提示工程的成本主要是人工调优与评估的人力成本;上下文工程在此之上引入了额外的基础设施成本(存储、检索服务、工具服务)与运维责任(数据更新、权限控制、监控告警、容量管理)。
为了更直观地理解差异,看一个自主旅行预订智能体的案例。
用户请求:“帮我订一间巴黎的酒店,下月去参加DevOps会议。”
智能体回复:“没问题!已为您预订巴黎某连锁酒店,Wi-Fi优质,停车免费。”
问题:这家酒店位于美国肯塔基州一个同样名叫“巴黎”的城市,而会议实际在法国巴黎举行。
失败归因:
结论:当输入存在歧义时,仅靠“追问话术写得多好”是不够的,智能体需要具备主动获取和整合信息的系统级能力。
用户补充:“我的会议在法国巴黎。”
智能体回复:“已为您预订当地某高端酒店,每晚900欧元,含香槟早餐。”
问题:价格远超公司差旅标准。
失败归因:智能体缺少公司差旅政策的上下文。理想情况下,它应能访问一份结构化的差旅政策文件,例如示意性的JSON配置:
{"policy_version": "2025-v1","region_rules": {"欧洲": { "max_hotel_price_per_night_eur": 300 }},"over_budget_action": "ask_for_approval"}
在执行预订动作前,智能体应将候选酒店价格与政策上限做程序化校验,而不是仅凭用户一句“订酒店”就自由发挥。
要让该智能体稳定完成任务,需要同时具备:
用示意伪代码表达上下文的组装过程:
def build_context(user_id, user_input):ctx = []ctx.append(system_prompt) # 提示工程层:角色、规则、输出格式ctx.append(load_policy(user_org)) # 上下文数据:差旅政策ctx.append(retrieve_docs(user_input)) # RAG:检索相关文档ctx.append(query_schedule(user_id)) # 工具调用:日程与会议信息ctx.append(load_memory(user_id)) # 记忆系统:历史偏好return assemble(ctx, user_input) # 按优先级与长度预算组装
这个案例揭示了上下文工程的核心价值:不依赖用户“把话说明白”,而是构建一个完整的信息生态系统,让模型在每次决策时都能“看到该看的东西”。
| 对比维度 | 提示工程 | 上下文工程 |
|---|---|---|
| 核心问题 | “怎么说”:如何表达指令 | “给模型看什么”:如何组织推理时的全部信息 |
| 作用范围 | 单次请求的输入文本 | 模型推理时可见的完整信息流 |
| 典型组成 | 指令、示例、格式约束、角色设定 | RAG检索、记忆系统、工具调用、状态管理 |
| 工程形态 | 文本写作与迭代调优 | 程序化系统设计与集成 |
| 动态性 | 相对静态、离线打磨 | 按请求实时动态组装 |
| 技能要求 | 语言表达、任务分析、实验评估 | 架构设计、数据工程、后端开发 |
| 典型失效模式 | 指令歧义、格式漂移 | 信息缺失、检索不准、上下文过载、记忆污染 |
| 成本结构 | 以人力调优成本为主 | 增加存储、检索、工具链等基础设施与运维成本 |
| 适用复杂度 | 单轮、封闭、信息自足的任务 | 多轮、多步、需外部信息的智能体系统 |
| 相互关系 | 上下文的组成部分,可视为子集 | 包含并超越提示工程 |
适合以提示工程为主的场景:
必须引入上下文工程的场景:
从“纯提示词方案”演进到“上下文工程体系”时,需要重点评估:
提示工程与上下文工程不是替代关系,而是“局部与系统”的关系:提示工程解决“怎么说”,上下文工程解决“给模型看什么、什么时候看、以什么形式看”。对于信息自足的简单任务,打磨提示词即可获得高性价比收益;对于需要检索、记忆、工具与状态管理的复杂智能体,只有构建系统级的上下文工程体系,才能让模型稳定可靠地完成端到端任务。选型的核心不是“哪个更好”,而是判断当前任务的失败究竟来自“措辞”还是“信息缺失”,再决定在哪一层加大投入。