如果你最近在找提示词工程(Prompt Engineering)的学习资料,看到最多的应该是两类内容:一类是各种“万能提示词模板”,复制进去就能用;另一类是几十上百集的视频教程,从 LLM 原理讲到实战案例,内容量很大。
这次我们直接给一套能落地的提示词工程学习与实操框架。不管你是用 ChatGPT、Claude、通义千问、DeepSeek 这类在线大模型,还是准备在本地部署开源 LLM 配合 API 做应用开发,这套框架都适用。文章会把“提示词工程到底是什么”“和 RAG、微调怎么选”“如何系统学习”“如何验证提示词效果”讲清楚,并且给出可以直接套用的模板和测试脚本。
先说结论:提示词工程不是“跟模型说好话”,而是一套通过结构化输入、示例引导、约束条件和迭代反馈来稳定控制大模型输出的工程方法。它的价值不是让你写出“一句神奇咒语”,而是让你在面对不同任务时,都能用一套可复现、可测量、可优化的流程,把大模型的输出质量拉到稳定水平。
文章适合三类读者:刚接触大模型、被各种教程绕晕的入门者;已经在用 LLM 做应用开发,但觉得输出不够稳定的开发者;以及想给团队建立一套统一提示词规范的算法工程师。
1. 提示词工程核心概念速览
在进入学习路线之前,先统一基础概念。下面这些术语会贯穿整篇文章,也是你在任何教程、模型文档、开源项目里都会看到的高频词。
| 概念 | 说明 | 在提示词工程中的作用 |
|---|---|---|
| LLM | 大语言模型,基于海量文本训练的概率模型,核心能力是根据上文预测下一个 token | 提示词工程的操作对象 |
| Prompt | 用户输入给模型的文本指令,包括任务描述、背景信息、示例、输出格式要求 | 提示词工程的核心产物 |
| Token | 模型处理文本的最小单位,中文通常一个字到几个字算一个或多个 token | 影响输入成本、上下文长度、输出长度 |
| 上下文窗口 | 模型单次能接收的最大 token 数量 | 决定你能塞多少背景信息和示例 |
| System Prompt | 系统级指令,通常用于设定角色、行为边界和全局规则 | 稳定模型行为的最重要位置 |
| Few-shot | 在提示词中给出若干输入输出示例,引导模型按模式生成 | 显著提升格式稳定性和任务理解 |
| Chain of Thought | 思维链,引导模型分步推理而不是直接给答案 | 提升数学、逻辑、复杂任务准确率 |
| 温度参数 | 控制生成随机性,温度越低输出越确定 | 决定重复实验结果是否稳定 |
| RAG | 检索增强生成,先从外部知识库检索相关内容,再拼进上下文让模型回答 | 与提示词工程搭配解决知识时效性问题 |
| 微调 | 用特定数据集继续训练模型,改变模型本身参数 | 与提示词工程相比,成本更高、效果更固化 |
这里要单独强调一个容易混淆的点:提示词工程和模型调试参数不是一回事。写提示词解决的是“怎么把任务描述清楚”,调温度、top_p、max_tokens 解决的是“生成过程的随机性和长度控制”。两者要配合使用,只调参数不优化提示词,效果提升很有限。
从硬件门槛来看,提示词工程本身不依赖显卡。如果你使用在线大模型 API,只需要能联网和调用接口;如果你要在本地部署开源模型再练手,才需要关注显存和推理速度。我的建议是:学习阶段先把 API 跑通,把提示词方法论练熟,再考虑本地部署。
2. 提示词工程、RAG 与模型微调的选型边界
很多初学者会问同一个问题:AI 客服这类产品,提升效果到底应该用提示词工程、RAG 检索,还是直接微调模型?这个问题没有标准答案,但有一个清晰的判断顺序。
| 维度 | 提示词工程 | RAG | 微调 |
|---|---|---|---|
| 目标 | 让模型更好地理解任务意图 | 给模型补充外部知识 | 让模型学会特定风格、格式或能力 |
| 改动对象 | 输入文本 | 检索流程 + 上下文拼接 | 模型权重 |
| 成本 | 最低,修改即时生效 | 中等,需要构建知识库和检索服务 | 最高,需要训练数据和 GPU 资源 |
| 适合场景 | 任务指令不清晰、输出格式不稳定 | 知识密集型问答、私有文档问答 | 输出格式强约束、特定领域术语、固定话术风格 |
| 上线速度 | 分钟级 | 天级 | 周级 |
回到 AI 客服的例子:如果问题是“客服经常答非所问”,优先检查知识库和检索是不是准确,这属于 RAG 的范畴;如果问题是“客服说话太死板、不会按流程引导用户”,优先优化 System Prompt,这属于提示词工程;如果问题是“客服必须严格按照公司话术模板输出,连标点都不能错”,这时候才需要考虑微调。
更稳妥的判断是:先做提示词工程,把所有能在输入侧解决的问题解决掉;再上 RAG,解决知识不足和时效性问题;最后才考虑微调,因为微调会让模型在某些能力上“固化”,后续想调整又得重新训练。这个顺序能帮你少走很多弯路。
3. 系统学习路线:从入门到工程落地
如果要把提示词工程分成一个完整学习路径,大致可以拆成四个阶段。这套路线也是在面对那类几百集视频教程时,比较推荐的观看和实操顺序。
3.1 第一阶段:理解模型行为机制
这一阶段的目标不是学提示词技巧,而是理解你正在对话的对象是怎么工作的。
- 了解 token 和上下文窗口的关系,知道为什么长文本会被截断。
- 了解大模型的“预测下一个 token”机制,明白为什么同一个提示词每次结果可能不同。
- 了解 System Prompt、User Prompt、Assistant 消息这三者的分工。
- 了解温度、top_p、max_tokens 等生成参数的实际影响。
这个阶段不用做复杂实验,打开任意一个大模型对话界面,把一个任务用不同措辞问三遍,观察输出的差异,就能建立基本感觉。
3.2 第二阶段:掌握核心提示词技巧
这一阶段是学习路线的重点,你要逐个掌握以下技巧,并且每个技巧都配一个实际任务去验证。
| 技巧 | 做法 | 验证任务 |
|---|---|---|
| 角色设定 | 在 System Prompt 中定义角色、目标、约束 | 让模型扮演客服、老师、代码审查员 |
| 任务分解 | 把复杂任务拆成多个小步骤指令 | 让模型先提取要点,再写摘要,再给建议 |
| 示例引导 | 给出 1 到 3 组输入输出示例 | 让模型按指定格式输出 JSON |
| 格式约束 | 明确输出结构、长度、语言、不能出现的内容 | 要求模型输出 Markdown 表格 |
| 思维链 | 用“请逐步思考”或“先分析再回答”引导推理 | 数学题、逻辑推理题 |
| 负面约束 | 明确告诉模型不要做什么 | 不要编造数据、不要使用专业术语 |
| 迭代优化 | 根据输出质量调整提示词,循环验证 | 同一个任务连续改 3 版提示词 |
3.3 第三阶段:场景化实践
这一阶段的核心是“带着真实任务练”。建议至少完成以下几个场景:
- 长文档总结:输入一篇长文,要求模型按“背景—核心观点—关键数据—待办事项”输出摘要。
- 结构化信息抽取:从对话记录中抽取用户意图、时间、地点、情绪等字段,输出 JSON。
- 代码生成与解释:让模型根据需求写代码,再让模型解释代码逻辑,观察提示词对代码质量的影响。
- 多轮对话管理:通过 System Prompt 控制助手在每轮对话中的行为边界。
- 批量任务处理:准备 10 条输入,用同一个提示词循环调用,统计成功率和输出格式一致性。
这个阶段你会发现,提示词工程的核心难点不是“写出一个好提示词”,而是“写出一个在批量数据上稳定生效的提示词”。
3.4 第四阶段:工程化与评估
最后回到工程视角。你要学会:
- 把提示词当作代码管理,记录版本和修改原因。
- 建立测试集,用固定输入集合评估提示词改动前后的效果。
- 设计兜底逻辑,当模型输出不符合格式要求时,如何重新生成或降级处理。
- 控制成本和延迟,评估提示词长度对每次调用开销的影响。
从材料看,像 LLM Wiki、Karpathy 提出的相关方法论,本质上也是把提示词工程从“零散技巧”推向“系统化沉淀”:把与模型协作的经验整理成结构化的文档和工作流,让团队可以复用。这个方向可以作为进阶目标,但前提是先把基础方法论练扎实。
4. 一套可以直接套用的提示词模板
下面这套模板,覆盖了大多数文本生成和数据处理任务。它不是“万能咒语”,而是一个结构化框架,你只需要根据任务替换对应字段。
# 角色 你是一个[角色描述],擅长[核心能力]。 # 任务 请完成以下任务:[任务描述] # 背景信息 [业务背景、限制条件、数据来源说明] # 输入数据 [待处理的具体内容] # 输出要求 - 输出格式:[JSON / Markdown / 纯文本] - 输出字段:[字段1、字段2、字段3] - 长度要求:[控制在多少字以内] - 禁止事项:[不要编造数据,不要重复输入内容]举个例子,如果你想让模型从客户评论中提取结构化信息,可以这样写:
# 角色 你是一名专业的数据标注员,擅长从用户评论中提取结构化信息。 # 任务 从下面的客户评论中提取三个字段:用户情绪、核心问题、建议改进方向。 # 输入数据 “手机收到第二天就出现屏幕闪烁,联系客服一直排队,体验很差。希望尽快处理换机,另外建议客服增加在线留言功能。” # 输出要求 - 输出 JSON 格式,不要输出其他内容。 - 用户情绪取值为:正面 / 中性 / 负面。 - 核心问题和建议改进方向各不超过 20 字。这个模板的价值在于:它把模型的注意力引导到固定字段上,减少了自由发挥的空间。在实际批量任务中,输出格式的稳定性往往比内容质量更重要。
需要说明的是,不同模型对提示词格式的敏感度不一样。同一个模板在 GPT 系列和开源模型上的表现可能有差异。使用前,建议先在你的目标模型上做一轮小样本测试,再放入生产环境。
5. 从模糊提示词到高质量提示词的迭代实战
很多人写提示词遇到的问题是:第一版输出总是“差点意思”。这里用一次文本总结任务,展示完整的迭代过程。
第一版:任务描述太模糊
请帮我总结下面这段话。这种提示词的问题很明显:模型不知道总结多长、以什么结构输出、侧重什么内容。结果是输出时短时长、有时列点有时成段,批量使用时很难处理。
第二版:补充背景和格式要求
请总结下面的文章,输出 200 字以内的摘要,包含核心观点、关键数据、结论三部分,使用 Markdown 列表格式。这一版已经能产出结构化的结果,但可能还是会出现一个问题:模型把原文里的某些表述直接抄过来,没有做信息压缩,导致摘要冗长或者关键数据缺失。
第三版:加入示例和负面约束
请总结下面的文章,输出 200 字以内的摘要,包含核心观点、关键数据、结论三部分,使用 Markdown 列表格式。 参考示例: - 核心观点:AI Agent 正在从单一任务执行走向多工具协作。 - 关键数据:2025 年企业级 Agent 渗透率同比提升 18%。 - 结论:标准化接口和权限管理是落地前提。 注意:不要复制原文中的完整长句,用你自己的话压缩;如果没有明确数据,写“文中未提供具体数据”,不要编造。 文章正文: [粘贴文章内容]加了 Few-shot 示例和负面约束之后,输出质量明显更可控。这个迭代过程就是提示词工程的核心工作方式:写一个版本,看输出,发现问题,修改约束,再测试,直到输出稳定。
我建议你在做这类优化时,每个版本都留一份记录。可以用表格对比不同版本提示词在同一个输入上的输出结果,这样你能直观看到是哪一处修改带来了提升。
下面是一个简单的提示词效果对比记录表:
| 版本 | 修改内容 | 输出问题 | 是否保留 |
|---|---|---|---|
| v1 | 仅任务描述 | 输出过长、格式不统一 | 否 |
| v2 | 增加长度和格式要求 | 关键数据缺失 | 否 |
| v3 | 增加示例和负面约束 | 无明显问题 | 是 |
6. 如何验证提示词效果:测试集与批量评估
提示词工程不能靠“感觉好就行”。在应用到生产环境之前,你需要建立一套可重复的验证流程。
6.1 建立固定测试集
准备 10 到 50 条覆盖不同情况的输入数据。比如做客服意图识别,测试集要包含正常问题、情绪化表达、错别字、多意图混合、无明确意图等类型。测试集一旦确定,就不轻易改动,这样才能对比不同提示词版本的差异。
6.2 批量调用与结果记录
下面是一段通用的批量评估脚本示例,使用 Python 调用 OpenAI 兼容接口。实际使用时,需要按照你使用的模型服务和 API 文档调整base_url、api_key和model参数。
import json import time from openai import OpenAI client = OpenAI( base_url="http://127.0.0.1:8000/v1", # 本地或云端 API 地址,按实际环境修改 api_key="your-api-key" # 换成你的密钥 ) system_prompt = """你是一名专业的数据标注员,擅长从用户评论中提取结构化信息。""" user_prompt_template = """ 从下面的客户评论中提取用户情绪、核心问题、建议改进方向三个字段。 输入数据: {input_text} 输出 JSON 格式,不要输出其他内容。 """ test_cases = [ "手机收到第二天就出现屏幕闪烁,联系客服一直排队,体验很差。", "物流很快,包装完整,整体满意。", "产品能用,但说明书不清楚,第一次安装花了很久。" ] results = [] for case in test_cases: try: response = client.chat.completions.create( model="your-model-name", messages=[ {"role": "system", "content": system_prompt}, {"role": "user", "content": user_prompt_template.format(input_text=case)} ], temperature=0.2, max_tokens=300 ) output = response.choices[0].message.content results.append({"input": case, "output": output}) print(f"输入: {case}\n输出: {output}\n") except Exception as e: print(f"调用出错: {e}") time.sleep(0.5) # 控制请求频率 with open("eval_results.json", "w", encoding="utf-8") as f: json.dump(results, f, ensure_ascii=False, indent=2)这段脚本的核心价值不是直接给你一个可用系统,而是把“提示词验证”变成可重复动作:跑一次,看输出,写问题记录,改提示词,再跑一次。
6.3 评估维度
针对结构化输出任务,建议使用以下评估维度:
| 维度 | 说明 | 判断标准 |
|---|---|---|
| 格式正确率 | 输出是否为合法 JSON 或 Markdown | 可被程序直接解析的比例 |
| 字段完整度 | 是否包含要求的全部字段 | 缺少字段视为不合格 |
| 内容准确率 | 提取结果是否与原文一致 | 是否误判、漏判 |
| 稳定性 | 同一输入多次生成结果是否一致 | 温度设为 0 或 0.2 后重复运行观察 |
| 成本效率 | 单次调用 token 消耗与响应时间 | 是否在可接受范围 |
如果批量测试中格式正确率低于 90%,优先优化输出格式约束;如果字段完整度低,要考虑用 Few-shot 示例补足;如果内容准确率低,可能是任务描述本身有歧义,需要回到最初的需求定义。
7. 进阶方向:从文本提示词到多模态与 Agent
提示词工程并不是只能用于聊天和文本生成。最近的热门方向已经延伸到了多模态生成和 Agent 工作流,这些领域同样需要提示词方法论。
7.1 Agent 提示词设计
在 Agent 场景中,提示词的核心不是“让模型回答一个问题”,而是“让模型理解自己有哪些工具、在什么条件下调用哪个工具、如何处理工具的返回结果”。
典型的设计要素:
- 工具列表:说明每个工具的功能、参数、适用条件。
- 决策规则:什么情况下使用工具,什么情况下直接用自身知识回答。
- 失败处理:工具调用出错时,是重试、换工具,还是向用户说明。
- 上下文管理:多轮交互中哪些信息需要保留,哪些可以丢弃。
从实际经验看,Agent 提示词比单轮任务提示词更难调,因为它涉及循环决策。建议先用固定流程测试每个工具调用的准确性,再逐步放开让模型自主决策。
7.2 多模态生成提示词
在图像生成和视频生成场景中,提示词工程的重点从“描述任务”变成了“描述视觉细节”。相关实践里经常提到的规则包括:情绪靠肌肉、手部靠结构、接触靠阴影、真实靠受力,这类经验本质上是一套针对视觉模型的提示词方法论。
如果你在 SDXL、Flux、Seedance 等模型上做图像或视频生成,提示词需要包含主体、环境、光线、镜头、风格、情绪等多个维度。这类提示词与文本提示词的共性是都需要结构化表达,区别是视觉模型对负面提示词和风格关键词的敏感度更高,需要大量实验积累。
7.3 本地模型与精度问题
如果你准备在本地部署开源 LLM 做提示词实验,你需要额外关注模型精度推理问题。fp16、bf16、fp32 的选择会影响显存占用和生成质量。从很多开源项目的经验看,fp16 是显卡推理的常用选择,bf16 对部分新硬件的支持度更好。具体选哪个精度,需要结合你的显卡驱动和推理框架确认,不能只看理论对比。
这里要提醒的是:本地部署练手,建议从 7B 到 14B 参数量的模型开始,先用 CPU 小批量测试提示词效果,确认逻辑没问题后再上 GPU 加速。不要把提示词调试和硬件调试混在一起,否则问题很难定位。
8. 常见误区与排查方法
在学习和实践提示词工程的过程中,下面这些问题出现频率很高。
| 问题现象 | 可能原因 | 排查思路 | 解决方案 |
|---|---|---|---|
| 提示词写得很详细,但输出还是不符合预期 | 约束条件太多且互相冲突,模型无法权衡 | 检查每条约束是否必要 | 精简约束,按优先级排序 |
| 批量任务中偶尔出现格式错误 | 模型生成具有随机性,格式约束不够强 | 检查是否使用 Few-shot 示例 | 增加示例、降低 temperature |
| 模型输出内容包含编造信息 | 任务超出模型知识范围,缺少事实约束 | 确认输入是否包含足够背景 | 接入 RAG 提供事实依据,或明确要求无法回答时直接说明 |
| 上下文越长,回答质量越差 | 关键信息被淹没在长文本中 | 检查提示词信息排布 | 把关键指令放在开头和结尾,精简背景信息 |
| 改了提示词后效果反而变差 | 改动之间相互影响 | 对比新旧版本输出 | 用测试集回测,不要凭个例判断 |
| 多轮对话中模型逐渐“跑偏” | 缺少 System Prompt 的全局约束 | 检查系统提示词是否稳定 | 在每一轮用户输入前重新注入关键规则 |
| API 调用报错 | 参数配置错误或接口地址错误 | 查看错误日志 | 检查 model、api_key、base_url、max_tokens 等参数 |
| 本地模型生成速度很慢 | 显存不足或精度选择不当 | 查看资源占用 | 降低上下文长度、切换更小模型或调整推理精度 |
关于“提示词越复杂越好”这个误区要单独说。提示词的本质是降低模型的理解成本,而不是显示你掌握多少技巧。很多场景下,简短明确的指令加上一个示例,比长篇大论的角色设定更有效。你可以把复杂提示词看成最后手段,而不是默认手段。
9. 工程化最佳实践与合规提醒
提示词工程要真正落地到业务中,还需要一套工程化规范。
9.1 版本管理与团队协作
- 给每个提示词文件加版本号,记录修改人和修改原因。
- 把提示词模板和业务代码分离,不要硬编码在业务逻辑里。
- 建立统一的测试集,所有改动用同一套输入评估。
- 新建 Prompt 目录结构,例如
prompts/system/、prompts/tasks/、prompts/examples/。
9.2 稳定性与降级策略
- 生产环境温度建议设为 0 或 0.2,保证输出可复现。
- 接口调用要设置超时和重试机制,重试次数建议 2 到 3 次。
- 对模型输出做格式校验,校验不通过时自动重新生成一次。
- 批量任务要记录每次调用的输入、输出、响应时间和错误信息。
9.3 合规与隐私边界
- 不要把用户隐私信息、商业机密、未公开数据直接写入提示词,尤其是发送到云端模型接口时,要先脱敏。
- 涉及人脸、声音、肖像、版权素材的生成任务,必须确认已获得对应授权,并在系统层面记录使用范围。
- 对模型输出做内容安全校验,特别是面向公众的产品,要建立人工抽检机制。
- 发布或商用前,要对提示词生成的批量结果做效果复核,不能直接全量上线。
10. 总结与下一步
提示词工程不是一个靠“背模板”就能掌握的技能。它需要你理解模型的输入输出机制,掌握角色设定、任务分解、示例引导、格式约束、迭代优化这些核心方法,并且用测试集和批量评估来验证每一次改动。
如果你想开始实践,建议按这个顺序推进:先花一天时间把文章里那套基础模板用在 5 个不同任务上,对比输出差异;然后挑一个你实际工作中的任务,按第三部分的迭代流程连续改三版提示词;最后用第六部分的批量评估脚本,测试提示词在不同输入上的稳定性。
最容易踩的坑是:看到大量教程后,把所有技巧一次性塞进提示词,结果输出变得更不稳定。正确做法是每次只改一个变量,用小批量样本验证,再决定是否保留。
提示词工程这一个方向,在 LLM 应用、RAG 检索、Agent 开发、多模态生成中都有用武之地。先把基础方法论练透,后续扩展到本地部署、模型微调、知识库搭建都会更顺手。这篇可以建议收藏备用。