提示词入门解决「怎么把话说清楚」,而生产级 AI 产品面对的是更棘手的问题:任务太复杂一次答不好、上下文太长太贵、输出格式不稳定、模型更新后行为漂移。本文介绍提示词工程的高阶方法——结构化提示词、复杂推理技巧、上下文工程、结构化输出、链式调用与企业级实践。前置基础见 提示词工程,对抗攻击与防护见 提示词安全。
入门阶段的提示词是一段「散文」;到了生产阶段,提示词应该是一份结构化文档——模块清晰、可维护、可版本管理,团队任何人都能看懂并修改。
把提示词拆成固定骨架与可变槽位,业务变化只改槽位,不重写全文。骨架部分进代码仓库,槽位在运行时由程序填充。
1 2 3 4 5 | |
模板化带来的三个收益:变量与规则分离(检索内容、用户信息等易变数据不进固定规则);可复用(同一模板换变量即可服务不同业务线);可评测(评测集绑定模板,改动可追踪)。维护纪律:模板本身也要版本化;变量在注入前做清洗与长度限制;不得允许变量内容「覆盖」模板中的规则——如果某个变量需要改规则,那是产品逻辑变更,走代码评审,而不是靠变量内容实现。
把「分情况处理」写进提示词,让模型在运行时按条件分支。条件指令要写得具体、可判断,避免「视情况而定」这种无法执行的模糊指令。
1 2 3 4 5 6 | |
条件指令的关键是条件可判断:把「用户情绪为负面」定义成「出现抱怨、投诉词汇」这样的可检查条件,模型才知道什么时候走哪个分支。条件分支多了以后(超过 5-6 个),建议把分支逻辑从提示词里挪出来——交给程序路由(见「多步分解与链式调用」),提示词只保留单分支的职责。
用固定的分隔符标记提示词的不同区段,让模型明确知道「这一段是什么、该怎么对待」。常见的三类标记:
<system>、<developer>;<meta>;<scratchpad>、<tool_result>。1 2 3 4 5 6 7 8 9 | |
当任务需要多步推理、搜索空间大或对可靠性要求高时,单次「直接回答」不够用,需要引入推理增强技巧。它们有一个共同点:用多次生成或显式结构换取正确率,成本随技巧强度上升,要按任务价值取舍。
自洽性是对同一个问题做多次独立采样(temperature 适当调高),得到多个候选推理与答案,再用投票或一致性判断选出最终答案。原理:单次生成可能因采样路径、早期假设错误而走偏;多条独立路径收敛到同一结论,说明该结论在模型分布中更稳健。对数学、逻辑、多跳问答,自洽性常能显著提升正确率(该方法的原始论文在 GSM8K 等数学基准上展示了稳定提升,是「多路径投票优于单路径」的经典证据)。
实现上,可以是多次调用模型,也可以是一次调用生成多个候选:
1 2 3 | |
思维树(ToT) 在思维链的基础上更进一步:不只是沿一条路径推理,而是生成多个候选「思维状态」,对每个状态做评估,选择有希望的路径继续扩展,必要时回溯重来。适合搜索空间大的任务——谜题、规划、多方案比较、复杂策略设计。
| 维度 | 思维链 CoT | 思维树 ToT |
|---|---|---|
| 推理结构 | 单路径链式 | 多路径树状搜索 |
| 适用任务 | 多步但路径较明确 | 搜索空间大、需比较候选 |
| 实现方式 | 提示词即可 | 需要候选生成 + 评分 + 选择 + 回溯的工程框架 |
| 成本 | 较低 | 高(生成量与评分调用都成倍增加) |
ToT 不是让模型「想得更多」,而是把候选路径显式化并引入评估机制。一个简化的 ToT 循环:生成 3 个候选思路 → 逐个评估可行性 → 选最优继续扩展 → 发现走不通就回溯到上一分支。生产落地要控制最大分支数、最大深度与超时,否则响应会慢到不可用;评估器本身可能出错,候选质量差时树搜索会在错误空间里越挖越深。
反思是让模型对已有答案做自我检查(对照检查清单),发现遗漏、矛盾、格式错误后再修正。与自洽性的区别:自洽性是多条独立路径 + 聚合决策,反思是同一条路径上的复查,容易受原答案锚定影响,纠错能力有限。
有效的反思必须有明确的检查清单,而不是笼统的「再检查一遍」:
1 2 3 4 5 6 | |
反思的工程要点:限制轮数(一般一轮即可,多轮反思收益递减而成本线性增长);反思清单与任务绑定(代码任务查「是否处理异常输入」,事实任务查「是否有引用支撑」);反思输出与原始输出都留档,便于评测「反思到底有没有用」。
把「生成」与「校验」拆成两个角色:生成器负责产出候选,验证器负责判断候选是否满足约束——验证器可以是程序(schema 校验、单元测试、计算器)、检索(事实核对)或另一个模型(LLM-as-Judge)。它的价值在于:让模型负责「建议」,让程序负责「把关」。对代码任务,验证器就是跑测试;对抽取任务,验证器就是 schema 校验 + 失败重试;对事实任务,验证器就是引用溯源。验证器模式的成本可控(只在关键节点启用),是生产系统最常用的推理增强手段。
1 2 3 4 5 6 7 8 | |
ReAct(Reasoning and Acting)让模型在任务中交替进行「推理」和「行动」:推理决定下一步做什么,行动通常是调用工具、检索资料、执行代码、查询 API。它把「想」和「做」编成循环,是 Agent 类产品提示词的核心形态:
1 2 3 4 5 6 | |
与普通工具调用的区别:普通工具调用可能是固定流程(每次都先检索再回答),ReAct 强调模型根据当前状态自主选择下一步动作——是否检索、是否再次检索、是否调用计算器、是否询问用户。这种灵活性带来能力提升,也带来风险:模型可能调用错误工具、传错参数、循环调用、忽略工具结果。因此 ReAct 提示必须配套权限边界、最大步数、超时控制与日志追踪(风险治理见 提示词安全)。
| 技巧 | 提升点 | 主要成本 | 适用 |
|---|---|---|---|
| 自洽性 | 多路径投票,抗单次偶然错误 | 多次生成 | 数学、逻辑、多跳问答 |
| 思维树 | 搜索 + 评估 + 回溯 | 高 | 规划、谜题、多方案 |
| 反思 | 查漏纠错 | 一次额外生成 | 代码、长文、格式任务 |
| 验证器 | 程序/检索/模型把关 | 按需调用 | 所有高价值任务的收尾环节 |
上下文是模型的「临时外挂记忆」:模型参数里的知识是训练时固化的,而上下文可以在每次请求时注入最新的、私有的、任务相关的信息。上下文工程就是决定「放什么、不放什么、按什么顺序放」的系统方法——它直接决定输出质量,也直接决定每次请求的成本。
判断「放不放」的一个实用标准:这段内容对本次输出的正确性有贡献吗? 没有贡献的内容(客套话、旧版本资料、用户上一轮的无关闲聊)全部不进上下文。上下文不是聊天记录的回放区,而是为当前任务组装的工作台。
多轮对话是上下文工程的高频战场:用户会用省略、代词、追问(「它支持退款吗?」里的「它」指上一轮的产品),但把全部历史塞进上下文既贵又稀释注意力。常用策略:
核心原则:上下文窗口服务当前任务,而不是成为历史堆积区。
上下文越长,成本越高、注意力越容易被稀释。压缩手段:
压缩的目标不是「省 token」,而是让模型聚焦在真正影响输出的内容上——省 token 只是副产品。压缩后必须重跑评测集:压缩过度导致关键信息缺失,省下的钱不够赔准确率的。
主流厂商的 API 都提供提示词缓存:请求中与上一次前缀相同的部分,按远低于正常输入的单价计费(典型降本幅度 50-90%,具体以各厂商官方文档为准)。这意味着两件事:
对高频调用(客服、助手类产品),缓存往往是最大的单项成本优化手段:一个 10 万 token 的系统提示,命中缓存后的成本可能只有原来的十分之一。设计提示词时就把「哪些内容会变、哪些不会变」想清楚,比事后优化便宜得多。
最重要的约束、任务与安全规则放在提示词最前面。模型对前置指令的遵循度显著高于埋在长文中间的指令;把「只基于给定资料回答」这类关键约束埋在 3000 token 的检索内容之后,效果会大打折扣。一个实用的布局顺序:系统身份 → 核心约束 → 任务 → 参考材料 → 动态内容。
自然语言输出无法被程序直接消费,结构化输出是把模型接入业务系统的关键环节,按「约束强度」从弱到强有四层手段:
1 2 3 4 5 6 7 8 9 | |
要点:给 schema 时说明字段类型、枚举值、缺失信息填 null 还是空字符串、是否允许额外文本;生产系统必须「提示词约束 + API 结构化能力 + schema 校验 + 重试修复」四层共同保证,任何单层都不可靠。重试时把校验错误信息回传给模型(「字段 label 取值应为 positive/negative/neutral 之一,你输出的是 xxx」),比无信息地重试一次命中率高得多。
大模型在一次长提示里同时承担「理解、规划、推理、生成、格式化、自检」时,错误难以定位——你不知道是哪一步出的问题。把复杂任务拆成多个子提示词(Prompt Chaining),每一步只做一件可验证的事,上一步的输出作为下一步的输入:
例:把「读简历 → 生成面试问题」拆成「抽取结构化信息 → 构建能力画像 → 识别风险点 → 生成问题 → 生成评分标准」五步链。每一步的输出是下一步的输入,任何一步出错都能定位到具体环节。链式调用的中间产物本身是资产:可以缓存、可以人工抽查、可以喂给评测集。
1 2 3 4 5 6 7 | |
1 2 3 4 5 6 7 8 | |
路由本身的阈值要用评测集校准,上线后监控各档位的命中率与成本占比——路由策略也要按数据迭代,而不是拍脑袋定。
拆链与路由的设计本质上是在写产品逻辑:哪些步骤自动化、哪些步骤必须人工确认、失败时升级还是降级——这些决策要像产品需求一样被评审、被记录,而不是散落在代码里。生产系统落地时给每个子任务设预算:最大步数、最大 token、最大耗时,防止链路失控(一个被注入的步骤可能让整条链无限循环,见 提示词安全)。
| 实践项 | 关键动作 | 常见坑 |
|---|---|---|
| 版本化 | 提示词入 Git,版本组合可回溯 | 只记代码版本,不记提示词版本 |
| 灰度 | 按场景切片放量,指标恶化即回滚 | 全量直上,行为漂移无法归因 |
| 评测 | 评测集接 CI,未过不得上线 | 凭单个案例判断好坏 |
| 成本 | 缓存 + 压缩 + 路由 | 只算单价不算缓存命中率 |
| 失败模式 | 表现 | 对策 |
|---|---|---|
| 指令过载 | 规则太多互相打架,关键约束失效 | 精简规则、明确优先级、关键规则前置 |
| 示例污染 | 示例与任务分布不符或互相矛盾,模型模仿错误模式 | 重建示例集:与任务同分布、覆盖边界、格式一致 |
| 格式漂移 | 输出格式时好时坏,JSON 偶尔带解释 | 结构化输出四层手段齐上,不要只靠提示词 |
| 温度敏感 | 同一提示词输出方差过大 | 降温度;分类/抽取任务检查是否需要推理增强而非加温度 |
调试流程:
调试的基本纪律:一次只改一个变量,改完跑评测集,记录在案。没有评测集的调试是「玄学调参」,有评测集的调试是工程。
为「客服工单自动分类」设计一条生产级提示词链路:先用路由判断问题类型,再按类型进入不同子提示词(退款/技术/咨询),每步输出结构化 JSON,最后用 schema 校验 + 失败重试收尾。为每一步写一个验证器,并估算每轮请求的 token 成本。
以下来源访问验证日期 2026-08-23,结论以官方页面为准;本文为原创转述,未大段照抄原文。
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面贡献者:AI-PM Wiki Team
本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用