当前位置: 首页 > news >正文

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

文章目录

  • 1. 什么是提示词工程?
  • 2. 一条优秀提示词的基本结构
  • 3. 这几个要素一定要全部用上吗?
  • 4. 底层思维:Zero-shot 与 Few-shot
    • 4.1 Zero-shot(零样本)
    • 4.2 Few-shot(少样本)
    • 4.3 这两种思想在提示词框架中的位置
  • 5. 调用大模型知识回顾
  • 6. 实战案例:文本语义匹配

🔗 前置知识:大模型调用部署知识
📅 更新日期:2026-06-09


1. 什么是提示词工程?

简单说,提示词(Prompt)就是我们向大模型发出的指令,引导大模型进行内容生成的命令,也就是你在网页端输入的那段话,比如:

  • “讲个笑话”
  • “用 Python 写一个贪吃蛇游戏”
    提示词工程(Prompt Engineering),就是通过有技巧地设计和优化这些指令,让模型输出尽可能符合我们预期的内容,并且持续迭代改进这个过程

它不是一次性写一句话那么简单,而是一套系统的方法论:怎么把任务说清楚、怎么给模型立人设、怎么约束格式、怎么提供示例……都是提示词工程的范畴。


2. 一条优秀提示词的基本结构

很多时候我们写提示词有一个习惯:只把需求问题简单的一口气扔进去。
但其实,只要掌握下面这个六要素框架,提示词质量和生成内容质量会上一个台阶。

六要素框架

  1. 设定角色与能力
    告诉模型“你是谁”,它能用什么知识、以什么视角来回答。
  2. 明确核心请求与任务
    你到底想让模型做什么,一句话讲清楚。
  3. 按步骤拆解复杂任务
    把大任务拆成几个小步骤,减少模型“偷懒”或跑偏的可能。
  4. 指定风格与语气
    是要学术严谨,还是要小红书体,还是口语化课堂风?直接说。
  5. 明确输出格式
    是要 JSON、Markdown 表格、分点列举,还是有特殊结构?白纸黑字写清楚。
  6. 提供输入输出示例
    给一个或几个范例,模型会模仿得非常像。这就是后面要说的 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 client=OpenAI(api_key=os.environ.get('DEEPSEEK_API_KEY'),# 从环境变量读取密钥,更安全base_url="https://api.deepseek.com")response=client.chat.completions.create(model="deepseek-v4-pro",# 使用的模型名称,注意要和你的 API Key 匹配messages=[{"role":"system","content":"You are a helpful assistant"},{"role":"user","content":"Hello"},],stream=False,reasoning_effort="high",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_effortextra_body等,不同模型可能有所区别,可根据业务需要调整。
    最终的回复内容从response.choices[0].message.content中取出。

这段代码是后续提示词实践的基础,后面的案例会重点关注messages


6. 实战案例:文本语义匹配

下面我们来看一个完整案例。
任务:判断两句话是否语义匹配,回答“是”、“不是”或“不确定”。我们将使用 Few-shot 思想,在提示词中嵌入多个示例,让模型稳定输出。

fromopenaiimportOpenAIimportos client=OpenAI(api_key=os.environ.get('DEEPSEEK_API_KEY'),base_url="https://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 + 当前问题,不会把之前的回答带入下一次请求response=client.chat.completions.create(model="deepseek-v4-pro",messages=messages+[{"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。

以上为个人学习总结,旨在梳理个人理解。如有疏漏或不当之处,欢迎指正与交流。如果文章对你有帮助,别忘了点个赞、留个言,让更多的小伙伴看到~ 我们下篇再见!

http://www.jsqmd.com/news/984855/

相关文章:

  • 【华为OD机试真题 新系统】1019、文档特征提取 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)
  • 2026最新漳州市黄金回收价格一览表 避坑攻略与靠谱商家推荐 - 余生黄金回收
  • 从LINUX等平台高速连接Windows中的miniQMT_socket_server
  • Got timeout reading communication packets解决方法
  • 告别编译焦虑!Windows 10下用LLVM-MinGW和Ninja一键搞定OLLVM-14.x(附成品下载)
  • 别再截图了!用Altium Designer 23原生功能导出PCB高清丝印图,5分钟搞定SW贴图素材
  • 微信投票小程序怎么用丨图文视频投票制作全过程(海投票实时更新) - 微信投票小程序
  • 广州、佛山有技术实力的外贸GEO推广公司推荐。 - 热点速览
  • 别再死记硬背了!用一张图+对比表彻底搞懂Vue3自定义指令的生命周期
  • 通化黄金回收2026大盘价结算无套路攻略 - 润富黄金回收
  • Claude Code 超详细完整指南(手把手教学)
  • windows server RDP登录
  • AI小助手开发与应用(下):API迁移实践与多性格交互引擎
  • Redis 分布式锁进阶第一百二十七篇
  • 云南研学旅行包车公司排行:5家合规靠谱服务商盘点 - 奔跑123
  • 天津黄金回收店五大门店,耀辉优质:2026消费者避坑指南与正规品牌选择标准 - 奢侈品回收
  • 不只是混淆:手把手教你将OLLVM-14.x集成到Android Studio NDK,打造专属加固工具链
  • 2026潍坊防水补漏哪家靠谱?正规公司排名及避坑价格指南 - 苏易修缮
  • 2026年高县水上乐园重磅开业:皮划艇比赛、无动力乐园、端午狂欢节全攻略 - 年度推荐企业名录
  • 信号分解算法选型指南:从EMD到VMD,如何根据你的数据特征避开模态混叠?
  • 屏蔽多云差异:多云底座的架构设计与实践
  • JUC 概述
  • logo设计大赛/服务明星评选微信投票小程序怎么做?这5个坑90%的人都在踩|众星评选避坑指南 - 微信投票小程序
  • 2026年6月拖地机厂家推荐排行榜:手推式/驾驶式/自走式/电瓶式拖地机,全自动拖地车源头厂家深度解析 - 企业推荐官【官方】
  • 下水管道爬行检测机器人品牌推荐 - 资讯焦点
  • 温州洞头区商圈实测:当前金价与回收避坑指南 - 专业黄金回收
  • 广州白云区厂区园区排污运维工程|化粪池清理抽粪隔油池清洗管道高压清洗|下水道疏通管道改管一站式施工 - 天堂海洋
  • Elastic Agent独立模式避坑指南:从API密钥权限到服务启动的完整配置流程
  • 2026聚焦工业与市政清洁:高压清洗机厂家评估与选择策略 - 企业推荐官【官方】
  • 手把手教你用MATLAB复现圆柱绕流POD分解(附Brunton案例完整代码与避坑指南)