Skip to content

提示词工程:让 LLM 听你的

大模型很强,但「问法」不同,回答质量天差地别。提示词工程就是:用结构和技巧把需求说清楚,让模型稳定输出你想要的结果。下文用一张总览图、若干示例和检查清单,尽量写得能直接照着改 Prompt。

提示词如何进入 LLM 并影响输出

图:系统提示与用户消息共同构成上下文;模型据此预测续写,输出可以是纯文本、结构化 JSON 或工具调用。

模型本质上是在根据上下文猜「下一个词最可能是什么」——系统提示、用户话、历史轮次、Few-shot 示例,全部算上下文。上下文一乱,就容易格式漂移、漏条件、语气不对;写清楚了,角色、格式、边界才站得住。


核心结构:系统提示 + 用户输入

Section titled “核心结构:系统提示 + 用户输入”

大多数 API 把对话拆成两种角色:

角色常见名字作用
系统system定义「你是谁、规则、格式」——模型会优先遵守,且用户通常看不见
用户user本次具体问题或任务

实用建议:把「身份、范围、格式、禁忌」放在 system;把「这一次要做什么」放在 user。例如:system 写「只做订单与产品咨询、中文回复」,user 写「订单 #123 何时发货」——模型一般会遵守 system 的硬约束来答 user


做法:在 system 里写清「你是谁」和「要完成什么类型的任务」。

反例(模糊)

你是一个助手。

正例(具体)

你是一个只处理「退款与换货」的客服助手。你只根据已知的退换货政策回答,不承诺政策外的内容。若用户问库存或新品,请回复「请咨询售前客服」。

效果:模型会主动拒绝政策外问题,减少瞎承诺。


做法:在提示词里直接给「输入 → 输出」示例,或明确写出格式要求(列表、JSON、表格等)。

示例:要求固定 JSON 结构

请根据用户问题,输出一个 JSON,且只包含以下字段:
- intent: 用户意图(query / complaint / other)
- summary: 一句话摘要
- suggested_action: 建议的下一步
示例:
用户说:「我上周买的耳机坏了能换吗」
输出:{"intent":"complaint","summary":"用户反馈耳机损坏希望换货","suggested_action":"核实订单与保修后走换货流程"}

若要更稳,可配合 Structured Outputs(API 的 JSON Schema 约束),见本站 AI 能力体系:Function Call 与 Agent


做法:在 system 或 user 里给 1~3 个「问题 + 理想答案」示例,模型会模仿风格和逻辑。

Few-shot:若干固定 Q-A,再接真实用户问题

适合:代码解释、短摘要、分类、翻译等「风格固定」的任务。


技巧四:思维链(Chain-of-Thought,CoT)

Section titled “技巧四:思维链(Chain-of-Thought,CoT)”

做法:要求模型「先一步步推理,再给结论」,而不是直接给答案。适合数学、逻辑、多步判断。

简单触发方式:在问题末尾加一句引导语。

引导语示例适用场景
请一步步思考,最后给出结论。通用推理
先列出已知条件,再推导答案。数学/逻辑题
先分析原因,再给出建议。故障排查、决策

示例

用户:小明有 20 元,买了 3 支笔每支 4 元,又买了 1 本本子 6 元,还剩多少?
请先一步步列式计算,再写出最终答案。

模型往往会先输出「3×4=12,12+6=18,20-18=2」,再写「还剩 2 元」,便于你检查过程是否正确。


做法:一个复杂需求拆成多条指令或子问题,让模型按步骤做,而不是一次塞进一段长话。

反例(一长段)

帮我写一个 Python 函数:读当前目录下所有 csv,合并成一个 DataFrame,把第二列空值用 0 填上,再按第一列排序,最后返回前 10 行,还要写单元测试。

正例(分步)

第一步:写一个 Python 函数 merge_csv(dir_path),读取 dir_path 下所有 csv 并合并成一个 DataFrame。
第二步:在合并后把第二列空值填充为 0,按第一列排序。
第三步:函数返回排序后的前 10 行。
第四步:为 merge_csv 写 3 个 pytest 用例(空目录、单文件、多文件)。

这样模型更容易每步都做对,你也方便分步验收。


技巧六:负面约束(不要做什么)

Section titled “技巧六:负面约束(不要做什么)”

做法:明确写出「不要做什么」「不要出现什么」,减少跑题和幻觉。

示例

请根据下文写一段 200 字以内的产品简介。
要求:
- 只使用下文出现的信息,不要编造参数或功能。
- 不要出现「最好」「第一」等绝对化用语。
- 不要加标题和列表,只要一段连贯的段落。

写完后可以快速过一遍:

检查项说明
角色/身份system 里是否写清了「你是谁」?
任务范围是否说明了只做哪类事、不回答哪类问题?
输出格式是否用示例或明确要求(JSON/列表/表格/长度)?
示例复杂任务是否给了 1~2 个 Few-shot?
推理方式需要推理时是否要求「先推理再结论」?
负面约束是否有「不要编造 / 不要超出范围」等?
长度与语言是否指定了字数、语言(如中文)?

提示词管「说什么、怎么说」;Function Call / Agent 管「能否调接口、读文件、跑命令」。典型做法是:system 里写清角色与输出格式,同时列出可用工具;模型在没把握时先调工具拿事实,再组织回答。建议在 system 里明确一句:不确定就查工具,禁止瞎编

更多机制见 Function Call 与 Agent


技巧一句话何时用
角色与任务说清「你是谁、只做啥」所有对话型应用
格式与示例用示例或明确格式约束输出需要结构化或统一风格时
Few-shot给 1~3 个示例让模型模仿分类、摘要、翻译等
思维链要求先推理再给结论数学、逻辑、多步判断
分步拆解把大任务拆成小步骤复杂编程或长文档任务
负面约束明确「不要做什么」防幻觉、防跑题

先从「系统提示写清角色 + 任务 + 格式」做起,再按需要加 Few-shot、CoT 和负面约束,就能在少改代码的前提下明显提升输出质量。