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

深入浅出提示词工程(结合 DeepSeek)

提示词工程
Prompt 即提示、指令,所以提示工程也叫「指令工程」
用户输入的问题称为 Prompt,本文主要探讨 System Prompt(我将其翻译成「系统预设」)
使用 Prompt 的目的

直接提问
如「我该学 Vue 还是 React?」,能获得该问题的具体结果

固化到程序
通过设置 System Prompt,将大模型结合到程序中,成为系统功能的一部分
如「流量套餐客服系统」,能根据用户的问题有针对性的回答

Prompt 调优
找到好的 Prompt 是个持续迭代的过程,需要不断调优
训练数据已知
如果知道训练数据是怎样的,参考训练数据来构造 Prompt 是最好的选择
如 DeepSeek 的训练数据主要来自于中文互联网,它可能更擅长中文,那么就可以将提示词构造为中文
训练数据未知
如果不知道训练数据,可以:

向 AI 直接提问,看它是否会告诉你
如 ChatGPT 对 Markdown 格式友好,Claude 对 XML 友好

不断尝试不同的提示词

高质量 Prompt 核心要点:具体、丰富、少歧义
Prompt 经典构成

角色
给 AI 定义一个最匹配的任务角色,比如「你是一位软件工程师」
先定义角色,其实就是在开头把问题域收窄,减少二义性。有论文指出,在 Prompt 前加入角色定义,大模型的输出效果会更好
Lost in the Middle,大模型对 Prompt 开头、结尾的信息更敏感

指示
对任务进行具体描述

上下文
给出与任务相关的其他背景信息(尤其是在多轮交互中)

例子
必要时给出举例,学术中称为 one-shot learning, few-shot learning 或 incontext learning
能大幅度提升输出效果

输入
任务的输入信息,在提示词中明确的标识出输入

输出
输出的格式描述,以便后继模块自动解析模型的输出结果,如「以 Markdown 格式输出回答」

对话系统构建

在这里插入图片描述
在这里插入图片描述
核心思路:

把输出的自然语言对话,转成结构化的表示
从结构化的表示,生成策略
把策略转成自然语言输出
定义出的 Prompt:

你的任务是识别用户对手机流量套餐产品的选择条件。
每种流量套餐产品包含三个属性:名称(name),月费价格(price),月流量(data)
根据用户输入,识别用户在上述三种属性上的倾向。历史对话:
【此处将历史对话放入】以 JSON 格式输出
1. name 字段的取值为 string 类型,取值必须为以下之一:经济套餐、畅游套餐、无限套餐、校园套餐 或 null2. price 字段的取值为一个结构体或 null,包含两个字段:
(1operator, string 类型,取值范围:'<='(小于等于),'>='(大于等于),'=='(等于)
(2)value,int 类型3. data 字段的取值为一个结构体或 null,包含两个字段:
(1operator, string 类型,取值范围:'<='(小于等于),'>='(大于等于),'=='(等于)
(2)value, int 类型或 string 类型,string 类型只能是'无上限'4. 用户的意图可以包含 price 或 data 排序,以 sort 字段标识,取值为一个结构体:
(1)结构体中以"ordering"="descend"表示按降序排序,以"value"字段存储待排序的字段
(2)结构体中以"ordering"="ascend"表示按升序排序,以"value"字段存储待排序的字段只输出用户提及的字段,不要猜测任何用户未提及的字段,不输出为 null 的值一些例子:
便宜的套餐:{"sort":{"ordering"="ascend","value"="price"}}
有没有不限流量的:{"data":{"operator":"==","value":"无上限"}}
流量大的:{"sort":{"ordering"="descend","value"="data"}}
月费不超过200的:{"price":{"operator":"<=","value":200}}
就要月费180那个套餐:{"price":{"operator":"==","value":180}}

用户输入:

办个 100G 以上的套餐

执行的结果:

{"data": {"operator": ">=","value": 100}
}

在这个 Prompt 中,将多轮对话(上下文)带入、规定了输出格式、给出了举例,这三种方式混合可以使输出效果达到最优
实现思路解析

上面的方式是用 Prompt 实现 DST,优点是节省了开发量,缺点是调优相对复杂

也可以用大模型 + 传统方法的形式进行开发,比如让大模型生成数据库查询语句,然后将该语句用传统方法进行数据库查询,再将查询结果替换掉大模型输出结果中的对应部分
优点是使得 DST 的可控性更高,缺点是开发量大

调优

加入指定回答模板,使回答更专业

非常抱歉,我们目前没有 200 元以内的套餐产品。不过,我们有一款经济套餐,每月只需支付 50 元,包含 10G 流量。这个套餐性价比很高,您可以考虑一下。如果您对其他套餐有任何需求或者疑问,我也可以为您提供更多选择。

增加约束

回答亲切一些,不用说“抱歉”,直接给出回答。

统一口径(用例子实现)

遇到类似问题,请参照以下回答:
问:流量包太贵了
答:亲,我们都是全省统一价哦
架构师思考
大模型应用架构师需要考虑哪些方面?

怎样能更准确?
让更多的环节可控

怎样能更省钱?
减少 Prompt 长度,减少 Tokens 的长度

怎样让系统简单好维护?

进阶技巧
思维链(Chain-of-Thought, CoT)
思维链是大模型自己涌现出来的一种神奇能力

它是被偶然发现的
有人在提问时以「Let’s think step by step」开头,发现 AI 会将问题分解成多步解决,使得输出的结果更加精确

原理:
让 AI 生成更多相关的内容,构成更丰富的「上文」,从而提升「下文」的正确率
对涉及计算和逻辑推理等复杂问题尤为有效
DeepSeek、GPT-o3 等均使用了思维链
自洽性(Self-Consistency)
一种有效对抗「幻觉」的手段,就像我们做数学题需要多次验算
核心:

同样的 Prompt 跑多次
通过投票选出最终结果

资料推荐

💡大模型中转API推荐
✨中转使用教程

http://www.xdnf.cn/news/2655.html

相关文章:

  • yolo-world踩坑指南
  • 服务器数据备份,服务器怎么备份数据呢?
  • 【Google Colab】利用unsloth针对医疗数据集进行大语言模型的快速微调(含跑通原代码)
  • 实现一个瀑布流布局
  • 文章记单词 | 第48篇(六级)
  • 【计算机组成原理实验】实验一 运算部件实验_加法器及计算机性能指标
  • 每日算法-250427
  • java异常
  • C++中的继承
  • 前端面试高频算法
  • 从增量式到绝对式 —— 深度理解编码器的原理与选型
  • 香港GPU显卡服务器与GPU云服务器的区别
  • linux blueZ 第六篇:嵌入式与工业级应用案例——在 Raspberry Pi、Yocto 与 Buildroot 上裁剪 BlueZ 并落地实战
  • 【遥感科普】不同波段的卫星影像分别有什么实际应用场景?
  • C语言内敛函数
  • Linux 进程替换
  • 深度解析 `FOR UPDATE`:数据库行锁的精准掌控之道
  • G1(Garbage-First)垃圾回收器与JVM内存
  • http://noi.openjudge.cn/_2.5基本算法之搜索_2152:Pots
  • C++ 数组长度sizeof(a)/sizeof(a[0])(易错)
  • 《代码整洁之道》第6章 对象和数据结构 - 笔记
  • 【第三十三周】BLIP论文阅读笔记
  • 如何将数据输入到神经网络中
  • I2S音频模块结构设计
  • 【GESP】C++三级练习 luogu-B2114 配对碱基链
  • flutter实践:比例对比线图实现
  • 第35课 常用快捷操作——用“鼠标左键”拖动图元
  • 集成方案 | Docusign + 甄零科技,赋能企业海外业务高效增长!
  • 第十三步:vue
  • 【实战篇】数字化打印——打印格式设计器的功能说明