【提示词工程】提示词工程笔记:从核心思想到实战代码

发布时间:2026/6/10 9:30:16

【提示词工程】提示词工程笔记:从核心思想到实战代码 文章目录1. 什么是提示词工程2. 一条优秀提示词的基本结构3. 这几个要素一定要全部用上吗4. 底层思维Zero-shot 与 Few-shot4.1 Zero-shot零样本4.2 Few-shot少样本4.3 这两种思想在提示词框架中的位置5. 调用大模型知识回顾6. 实战案例文本语义匹配 前置知识大模型调用部署知识 更新日期2026-06-091. 什么是提示词工程简单说提示词Prompt就是我们向大模型发出的指令引导大模型进行内容生成的命令也就是你在网页端输入的那段话比如“讲个笑话”“用 Python 写一个贪吃蛇游戏”而提示词工程Prompt Engineering就是通过有技巧地设计和优化这些指令让模型输出尽可能符合我们预期的内容并且持续迭代改进这个过程。它不是一次性写一句话那么简单而是一套系统的方法论怎么把任务说清楚、怎么给模型立人设、怎么约束格式、怎么提供示例……都是提示词工程的范畴。2. 一条优秀提示词的基本结构很多时候我们写提示词有一个习惯只把需求问题简单的一口气扔进去。但其实只要掌握下面这个六要素框架提示词质量和生成内容质量会上一个台阶。六要素框架设定角色与能力告诉模型“你是谁”它能用什么知识、以什么视角来回答。明确核心请求与任务你到底想让模型做什么一句话讲清楚。按步骤拆解复杂任务把大任务拆成几个小步骤减少模型“偷懒”或跑偏的可能。指定风格与语气是要学术严谨还是要小红书体还是口语化课堂风直接说。明确输出格式是要 JSON、Markdown 表格、分点列举还是有特殊结构白纸黑字写清楚。提供输入输出示例给一个或几个范例模型会模仿得非常像。这就是后面要说的 Few-shot 思想在提示词里的直接应用。实际例子假设我们的需求是向高中生解释法国大革命爆发的主要原因。如果我们把这六要素用上提示词会变成这样你是一名经验丰富的历史老师擅长用生动有趣的方式讲述复杂的历史事件。现在请完成以下任务1. 核心任务向一位高中生解释法国大革命爆发的主要原因。2. 表达要求语气与风格使用简洁、口语化、充满课堂热情的语气避免学术黑话整体叙事可以借鉴《人类群星闪耀时》中对历史关键时刻的描写手法富有画面感和戏剧性。内容禁忌聚焦于原因分析不要罗列冗长的日期和事件过程表。3. 内容与结构要求开头先用一段话生动描述革命前法国社会的总体氛围和紧张感即背景概述。主体分别从政治、经济、思想三个层面阐述直接原因。每个层面提炼 2 个关键点并为每个关键点配 1 个具体、有说服力的史实例子。结尾提供一个帮助学生记忆的妙招。4. 输出格式请严格按照以下结构组织你的回答【历史现场氛围】在这里写你的背景概述【危机根源解析】政治层面关键点1…… 例子……关键点2…… 例子……经济层面关键点1…… 例子……关键点2…… 例子……思想层面关键点1…… 例子……关键点2…… 例子……【记忆法宝】请提供一个巧妙的比喻、口诀或联想图像将这三大层面串联起来方便学生瞬间记忆这其实就是一个把六要素全部落地了的提示词。模型拿到它会非常清楚自己该干什么、怎么干、输出长什么样。可以把这六要素简单记忆为角色、任务、步骤、风格、格式、示例。3. 这几个要素一定要全部用上吗当然不是。我认为这不是死板的公式而是一套指导思路你可以根据任务的复杂程度灵活增减简单任务比如“翻译以下内容”可能只需要核心任务 输出格式。复杂任务比如“写一份竞品分析报告”就可能需要把六个要素都用上甚至还要加上更多约束如字数限制、需要考虑的维度。当然同理除了这六点你还可以根据具体场景加入其它技巧比如要求模型先思考再作答思维链要求模型自我检查输出内容使用分隔符清晰地隔开不同信息块重点不是套模板而是让模型完全理解你的意图没有歧义。不同的写法只要能达成目的就是好提示词。所以提示词的编写没有绝对的“唯一正确格式”更看重是否贴合业务需求和预期效果。4. 底层思维Zero-shot 与 Few-shot我们在学习提示词的时候一定会碰到这两个词。它们不仅是模型训练中的概念更是提示词工程中两个非常重要的思想。4.1 Zero-shot零样本Zero-shot零样本指在训练阶段不存在与测试阶段完全相同的类别但是模型可以使用训练过的知识来推广到测试集中的新类别上。这种能力被称为“零样本”学习因为模型在训练时从未见过测试集中的新类别这种思想在模型训练和提示词优化中均有体现。对于提示词来说简单理解为不提供任何示例直接向模型描述任务让它执行。比如请判断以下评论是正面还是负面“这个手机用了一天就卡死了。”你只给了任务描述没有给任何示例这就是 Zero-shot 提示。4.2 Few-shot少样本Few-shot少样本是指少样本学习当模型在学习了一定类别的大量数据后对于新的类别只需要少量的样本就能快速学习。这种思想同时也在模型训练和提示词优化中均有体现。对于提示词来说简单理解为在提示词里给出几个示例让模型照着示例的模式输出。对应地One-shot 就是只给一个示例属于 Few-shot 的一种特殊情况。比如请判断评论情感倾向正面/负面。示例1评论“质量很好非常满意。” → 正面示例2评论“客服态度差再也不买了。” → 负面现在请判断“物流快得超乎想象。” →模型会根据给的示例大概率输出“正面”。4.3 这两种思想在提示词框架中的位置其实Few-shot 就是我们前面说的“提供输入输出示例”这一步的底层逻辑。而 Zero-shot 则是我们日常最常用的“直接问”的方式。一般来说任务越复杂、输出格式要求越严格就越推荐使用 Few-shot它能显著提高输出的稳定性和准确性。5. 调用大模型知识回顾在真正进入案例之前我们需要回顾最基础的调用代码。这里以 DeepSeek 的 API 为例OpenAI 兼容格式。# 安装必要库: pip install openaiimportosfromopenaiimportOpenAI clientOpenAI(api_keyos.environ.get(DEEPSEEK_API_KEY),# 从环境变量读取密钥更安全base_urlhttps://api.deepseek.com)responseclient.chat.completions.create(modeldeepseek-v4-pro,# 使用的模型名称注意要和你的 API Key 匹配messages[{role:system,content:You are a helpful assistant},{role:user,content:Hello},],streamFalse,reasoning_efforthigh,extra_body{thinking:{type:enabled}})print(response.choices[0].message.content)关键点解析client.chat.completions.create里包含model字符串指定要调用的模型必须是你 API Key 有权限访问的模型名。messages一个列表列表中的每个元素是一个字典代表对话中的一条消息。{role: system, content: ...}系统消息用来设定模型的角色和能力。{role: user, content: ...}用户消息用来发送你的任务和要求。在多轮对话中还会包含{role: assistant, content: ...}作为历史回复。stream是否流式输出这里设为False表示一次性返回完整结果。其他参数如reasoning_effort、extra_body等不同模型可能有所区别可根据业务需要调整。最终的回复内容从response.choices[0].message.content中取出。这段代码是后续提示词实践的基础后面的案例会重点关注messages。6. 实战案例文本语义匹配下面我们来看一个完整案例。任务判断两句话是否语义匹配回答“是”、“不是”或“不确定”。我们将使用 Few-shot 思想在提示词中嵌入多个示例让模型稳定输出。fromopenaiimportOpenAIimportos clientOpenAI(api_keyos.environ.get(DEEPSEEK_API_KEY),base_urlhttps://api.deepseek.com)# 准备好的示例数据给模型展示什么是“匹配”与“不匹配”examples_data{是:[(公司ABC发布了季度财报显示盈利增长。,财报披露公司ABC利润上升。),(公司ITCAST发布了年度财报显示盈利大幅度增长。,财报披露公司ITCAST更赚钱了。)],不是:[(黄金价格下跌投资者抛售。,外汇市场交易额创下新高。),(央行降息刺激经济增长。,新能源技术的创新。)]}# 待判断的问题questions[(利率上升影响房地产市场。,高利率对房地产有一定的冲击。),(油价大幅度下跌能源公司面临挑战。,未来智能城市的建设趋势越加明显。),(股票市场今日大涨投资者乐观。,持续上涨的市场让投资者感到满意。)]# 第一步构建 system prompt简要说明任务并提示参考示例messages[{role:system,content:你帮我完成文本匹配我给你2个句子每个句子分别被[]包围你判断它们是否匹配回答是或不是如果实在判断不出来可以回答不确定请参考如下示例},]# 第二步把示例按“user/assistant”交替的形式塞进 messagesforkey,valueinexamples_data.items():fortinvalue:messages.append({role:user,content:f句子1[{t[0]}]句子2[{t[1]}]})messages.append({role:assistant,content:key})# 第三步对每个待判断的问题追加到 messages 后面调用模型forqueinquestions:# 注意这里每次调用都使用初始的 messages 当前问题不会把之前的回答带入下一次请求responseclient.chat.completions.create(modeldeepseek-v4-pro,messagesmessages[{role:user,content:f句子1[{que[0]}],句子2[{que[1]}]}],)print(response.choices[0].message.content)代码解读与注意点我们将examples_data中每个示例构造成一轮对话用户给出两个句子助手回答“是”或“不是”。这样模型就学会了这个任务的模式这就是Few-shot 的应用。所有示例都预先放入messages成为固定的上下文。对于每个待测问题我们复制整份上下文再加上新问题避免之前的预测结果污染下一个问题的判断。输出格式没有额外约束模型会直接返回“是”、“不是”或“不确定”因为示例已经固定了这个模式。如果想进一步约束也可以在system中加上“只回复一个字”之类的指令。把今天的所有内容梳理成一句话用清晰的指令和结构降低模型的理解成本同时用示例对齐模型的输出风格。如果再精简一点记住这三点就能应对绝大多数场景角色 任务让模型知道自己是谁、要干什么。约束 格式把输出范围框定下来避免跑偏。示例驱动能用 Few-shot 尽量用 Few-shot稳定性远高于 Zero-shot。以上为个人学习总结旨在梳理个人理解。如有疏漏或不当之处欢迎指正与交流。如果文章对你有帮助别忘了点个赞、留个言让更多的小伙伴看到 我们下篇再见

相关新闻