通过Prompt提示构建思维链

《DEEPSEEK原生应用与智能体开发实践 王晓华 书籍 图书》【摘要 书评 试读】- 京东图书

思维链技术开启了人工智能通向人类智能的崭新路径。它让模型不再仅仅是机械地执行指令,而是开始具备类似人类的思考方式,能够理解问题的本质,进行深层次的推理和分析。这一突破,让人工智能的发展进入了一个全新的阶段,也为未来智能系统的进化奠定了坚实的基础。

前面我们讲解了思维链,对比了通过Prompt提示完成的思维链对问题的拆解。基于这种思维链的推理过程,DeepSeek提出了一种新的推理模型——DeepSeek-Reasoner,其作用犹如一把精准的手术刀,在人工智能的复杂领域中发挥着关键作用。

首先,DeepSeek-Reasoner充当着“思维解码器”的角色。在面对复杂问题时,它能够深入剖析问题的内在结构,将隐藏在问题背后的思维逻辑清晰地呈现出来。就像一位密码破译专家,能够解读出问题中的关键信息,为后续的推理过程提供清晰的指引。例如,在处理一道复杂的数学证明题时,它能够识别出题目中的已知条件、未知结论以及它们之间的逻辑关系,将证明过程拆解为一系列合理的推理步骤。

其次,DeepSeek-Reasoner是一个“智能推理引擎”。它依据思维链的原理,自动生成一系列有序的子问题,并引导模型逐步求解。在这个过程中,它能够根据模型的推理进展,动态调整推理策略,确保推理过程的高效和准确。就像一位经验丰富的赛车手,能够根据赛道情况灵活调整驾驶策略,以最快的速度到达终点。

然后,DeepSeek-Reasoner还具备“知识融合与创新”的能力。它能够将模型内部存储的海量知识与当前的推理任务相结合,在解决问题的过程中创造出新的知识和推理模式。例如,在处理跨领域的复杂问题时,它能够融合不同领域的知识,提出新颖的解决方案,为模型的推理能力注入新的活力。

最后,DeepSeek-Reasoner还是一个“可解释性增强器”。在传统的深度学习模型中,推理过程往往是一个黑箱,难以理解和解释。而DeepSeek-Reasoner通过思维链的推理方式,将模型的推理过程以清晰、直观的方式呈现出来,让人们能够理解模型是如何得出最终答案的。这不仅提高了模型的可信度,也为模型的进一步优化和改进提供了有力的支持。

4.2.1  通过Prompt提示构建思维链

对于普通的文本问答,大模型倾向于直接对结果进行回复。下面我们先举一个经典的计算字母的例子对大模型进行问答,代码如下:

from openai import OpenAIclient = OpenAI(api_key="sk-dfd742ec38dc4ede96977974085485b0", base_url="https://api.deepseek.com")prompt = """
strawberry里面有几个r字母。用中文回答。
"""response = client.chat.completions.create(model="deepseek-chat",messages=[{"role": "user", "content": prompt},],max_tokens=1024,temperature=0.95,stream=False
)print(response.choices[0].message.content)

代码运行结果如下所示:

C:\Users\xiayu\miniconda3\python.exe C:\Users\xiayu\PycharmProjects\DeepSeek应用开发实践-源码\第四章\demo_0.py 
### 第一步:理解题目首先,我们需要清楚地理解题目在问什么。题目问的是“strawberry”这个英文单词中有几个字母“r”。也就是说,我们需要数一数这个单词中出现了多少次“r”这个字母。### 第二步:写出单词为了更清楚地数出“r”的数量,我们可以先把“strawberry”这个单词写出来:s t r a w b e r r y### 第三步:逐个字母检查现在,我们逐个字母来看,看看哪些是“r”:1. 第一个字母:s — 不是r
2. 第二个字母:t — 不是r
3. 第三个字母:r — 是r,计数1
4. 第四个字母:a — 不是r
5. 第五个字母:w — 不是r
6. 第六个字母:b — 不是r
7. 第七个字母:e — 不是r
8. 第八个字母:r — 是r,计数2
9. 第九个字母:r — 是r,计数3
10. 第十个字母:y — 不是r### 第四步:核对计数根据上面的逐个检查:- 第三个字母:r — 1
- 第八个字母:r — 2
- 第九个字母:r — 3所以,总共有3个“r”。### 第五步:验证为了确保我们的答案正确,让我们再快速看一遍单词:s t r a w b e r r y标出所有的“r”:- 第三个字母:r
- 第八个字母:r
- 第九个字母:r确实有3个“r”。### 可能的误区有时候,人们可能会忽略连续相同的字母。例如,在“strawberry”中,“rr”是连续的两个“r”,可能会被误认为是一个“r”或者发音上的一个音。但是题目问的是字母的数量,不是发音,所以“rr”是两个独立的“r”字母。### 结论经过以上步骤和验证,“strawberry”这个单词中共有**3个字母“r”**。### 最终答案“strawberry”里面有**3个字母“r”**。Process finished with exit code 0

可以看到,对于普通的大模型而言,其回复过程往往是一种基于自身对问题理解的笼统考量,而非对问题进行细致入微的分解剖析。这种缺乏系统性分解的处理方式,就如同在迷雾中摸索前行,使得模型难以精准把握问题的核心要点与关键细节,进而不可避免地造成了结果的不准确性。

在面对复杂问题时,普通大模型的这种局限性尤为明显。复杂问题通常包含着多个相互关联又各自独立的子问题,它们如同一张错综复杂的网,需要有条理地梳理和分析。然而,普通大模型却难以做到这一点,它可能会将不同子问题的信息混淆在一起,或者在处理过程中遗漏某些重要环节,从而导致最终回复与实际情况相去甚远。

我们通过提示(Prompt)分解问题,构建一个完整思维链对问题解答的示例,代码如下所示:

from openai import OpenAI# for backward compatibility, you can still use 'https://api.deepseek.com/v1' as 'base_url'.
client = OpenAI(api_key="sk-dfd742ec38dc4ede96977974085485b0", base_url="https://api.deepseek.com")prompt = """
回答下面问题并注意回答的时候严格按照以下步骤,
逐步进行:
1.将单词拆开
2.从左到右一个一个对比字母是不是r,是的话你要记录它的位置,并记住数量加-3.
第2步数出来多少个r直接输出,不要有任何分析和判断 问题:"strawberry"里面有几个r
"""response = client.chat.completions.create(model="deepseek-chat",messages=[{"role": "user", "content": prompt},],max_tokens=1024,temperature=0.95,stream=False
)print(response.choices[0].message.content)

在这里我们通过提示prompt对问题的求解过程进行拆分,并指示模型在回答时依据步骤进行,回答如下:

C:\Users\xiayu\miniconda3\python.exe C:\Users\xiayu\PycharmProjects\DeepSeek应用开发实践-源码\第四章\demo_1.py 
1. 将单词拆开:s, t, r, a, w, b, e, r, r, y  
2. 从左到右一个一个对比字母是不是r:  
- s: 不是  
- t: 不是  
- r: 是(位置3,数量1)  
- a: 不是  
- w: 不是  
- b: 不是  
- e: 不是  
- r: 是(位置8,数量2)  
- r: 是(位置9,数量3)  
- y: 不是  输出:3Process finished with exit code 0

可以看到,这里我们将问答步骤进行拆分,并且以清晰、有条理的方式引导模型完成任务。这种基于思维链的提示方法,让模型的回答过程不再是一个黑箱操作,而是变得透明、可解释。

通过这种方式,模型不再是盲目地给出答案,而是按照我们设定的步骤,一步一步地进行推理和计算。这不仅提高了答案的准确性,还使得模型的推理过程具有可复现性。如果出现问题,我们可以很容易地回溯到具体的步骤,检查是哪一步出现了偏差。

而且,这种拆分步骤的方法具有很强的通用性。对于不同类型的问题,我们只需要根据问题的特点,设计相应的步骤提示,就可以引导模型进行有效的求解。例如,在处理数学问题时,我们可以将解题过程拆分为分析问题、列出已知条件、确定解题方法、进行计算等步骤;在处理文本分析问题时,我们可以将解题过程拆分为文本预处理、特征提取、模型推理等步骤。

此外,将问答步骤拆分还有助于提升模型的学习能力。模型在按照步骤进行多次任务后,会逐渐理解每个步骤的意义和作用,从而在面对类似问题时,能够更加自主地运用这些步骤进行求解。这就像是人类在学习新技能时,通过反复练习分解动作,最终能够熟练掌握整个技能一样。

总之,通过提示(Prompt)对问题求解过程进行拆分,并指示模型依据步骤进行回答,这是一种非常有效的提升模型性能和可解释性的方法。它为人工智能的发展提供了一种新的思路,有望推动人工智能在更多领域取得更好的应用效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:
http://www.pswp.cn/web/86328.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/86328.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV边缘填充方式详解

一、边缘填充概述 在图像处理中,边缘填充(Border Padding)是一项基础而重要的技术,特别是在进行卷积操作(如滤波、边缘检测等)时,处理图像边缘像素需要用到周围的像素值。由于图像边缘的像素没…

如何评估RAG系统?全面指标体系

构建一个可靠的 检索增强生成(Retrieval-Augmented Generation, RAG)系统,不仅要关注模型的构建,更重要的是对系统性能进行科学、系统的评估。评估不仅衡量系统的效果,也为迭代优化提供依据。 本文将围绕 RAG 系统的评…

力扣-合并区间

题目 56. 合并区间 - 力扣&#xff08;LeetCode&#xff09; 解析: 先按开始维度排序&#xff0c;之后依次合并&#xff0c;如果开头 < 当前区间的最后就合并&#xff0c;> 就开辟新区间 代码: class Solution {public int[][] merge(int[][] intervals) {int n in…

【软考高级系统架构论文】论基于构件的软件开发方法及其应用

论文真题 基于构作的 软件开发 (Component-Based Software Development,CBSD) 是一种基于分布对象技术、强调通过可复用构件设计与构造软件系统的软件复用途径。基于构件的软件系统中的构件可以是COTS (Commercial-Off-the-Shelf) 构件,也可以是通过其它途径获得的构件(如自…

recipes的版本比较老如何更新到新版本?

在 Yocto 项目中,当你发现 “meta-openembedded” 层中的某些 recipe 版本太旧,而你想使用更新版本时,最佳实践是在你自己项目的自定义层 (custom layer) 中使用 “bbappend” 文件进行覆盖或升级。 核心思路: 不要直接修改 “meta-openembedded” 层的 recipe ( “*.bb”…

【软件系统架构】系列四:嵌入式软件-NPU(神经网络处理器)系统及模板

目录 一、什么是 NPU? 二、NPU 与 CPU/GPU/DSP 对比 三、NPU 的工作原理 核心结构: 数据流架构: 四、NPU 芯片架构(简化图) 五、NPU 的优势 六、NPU 应用场景 视觉识别 语音识别 自动驾驶 智能监控 AIoT 设备 七、主流 NPU 芯片/架构实例 八、开发者工具生…

【NLP】使用 LangGraph 构建 RAG 的Research Multi-Agent

本文中&#xff0c;我们介绍了一个使用LangGraph开发的RAG的Research Multi-Agent工具的实际项目。该工具旨在解决需要多个来源和迭代步骤才能得出最终答案的复杂问题。它使用混合搜索和rerank步骤来检索文档&#xff0c;还结合了自我纠正机制&#xff0c;包括幻觉检查过程&…

【Docker基础】Docker容器管理:docker restart详解

目录 1 docker restart命令概述 1.1 命令作用 1.2 与相关命令对比 2 命令语法详解 2.1 基础语法 2.2 核心参数说明 3 核心原理深度解析 3.1 信号传递机制 3.2 状态转换 4 典型应用场景 4.1 服务配置更新 4.2 故障恢复流程 5 进阶使用技巧 5.1 组合命令应用 5.2 …

mongoDB服务本地化部署

mongoDB服务本地化部署 前言mongoDB下载选择版本安装 前言 mongoDB数据库解释 MongoDB 是由C语言编写的&#xff0c;是一个基于分布式文件存储的开源数据库系统&#xff1b;在高负载的情况下&#xff0c;添加更多的节点&#xff0c;可以保证服务器性能&#xff1b;MongoDB 旨在…

YOLOv10tensorRT推理代码C++

最近实现了YOLOv10的tensorRT推理代码除了后处理部分只适合YOLOv10之外&#xff0c;其余部分基本可以在yolo系列通用~学习记录~。 #include <fstream> #include <iostream> #include <vector> #include <opencv2/opencv.hpp> #include "NvInfer.…

软件定时器详解:RTOS 中的“软时钟”机制与源码解析

在嵌入式实时系统开发中&#xff0c;定时器是不可或缺的工具。软件定时器&#xff08;Software Timer&#xff09; 提供了一种无需创建独立任务、便可在特定延时后执行回调函数的机制。它适用于那些不要求高精度、但需要周期性或一次性延时执行操作的场景。 一、什么是软件定时…

从Yocto中获取源码用传统的方式单独编译

要获取 Yocto 构建后的 Linux 内核和 U-Boot 源码,并进行独立编译,需获取完整的源码树(包含所有应用补丁和配置)及原始配置信息。以下是具体步骤: 获取最终源码路径确定构建目录位置: 内核工作目录 KERNEL_WORKDIR=$(bitbake -e virtual/kernel | grep ^WORKDIR= | cut…

【记录】服务器|常见的八种硬盘接口的简介和清晰的接口图片(2025年6月)

硬盘接口很多&#xff0c;在管服务器的时候总是要买&#xff0c;但是偶尔会忘记自己的服务器支持什么接口&#xff0c;此时就需要看引脚。 如果没插满&#xff0c;就可以直接拍接口的图片&#xff0c;与下面这些图片对照一下【文字介绍是AI直接生成的&#xff0c;图片是我到处…

在一个成熟产品中,如何设计数据库架构以应对客户字段多样化,确保系统的可维护性、可扩展性和高性能。

在SaaS系统、平台型应用或高度可配置的企业级软件中&#xff0c;我们常常会遇到一个现实问题&#xff1a;不同客户对同一个业务表存在差异化字段需求。例如&#xff0c;A客户需要一个“业务员等级”字段&#xff0c;B客户不需要&#xff1b;C客户希望订单表中增加“海外仓编码”…

社群营销应该怎么玩

现在做营销&#xff0c;光靠打广告可不行了。大家都喜欢扎堆儿&#xff0c;找志同道合的人一起玩&#xff0c;这就是社群的力量。那怎么用好这股力量呢&#xff1f;咱们慢慢聊。 首先得明白&#xff0c;社群不是拉个群就完事了。关键是要让大家觉得这里有意思&#xff0c;有收…

【论文阅读笔记】TransparentGS:当高斯溅射学会“看穿”玻璃,如何攻克透明物体重建难题?

文章目录 TransparentGS: Fast Inverse Rendering of Transparent Objects with GaussiansInfoAbstractIntroductionMethod预备知识3D GS的概念不再赘述渲染方程透明高斯Gaussian Light Field Probes多阶段重建实验结果和评估消融实验应用讨论和限制结论TransparentGS: Fast In…

某视频网站运维工程师面试题

某视频网站运维工程师面试题 1、 简单写下Xeon和Itanium这两个产品的本质区别&#xff1f; 2、 ECC内存每Bank的颗粒数是单数还是双数的&#xff1f; 3、 假如有5块1T的硬盘&#xff0c;要求组合成尽量多的实际使用空间并至少容忍坏2盘而不影响raid组工作。请问有几种模式来组…

Java底层原理:深入理解JVM性能调优与监控

一、JVM性能调优概述 JVM性能调优是Java应用优化的重要环节&#xff0c;通过合理配置JVM参数&#xff0c;可以提高Java应用的性能和稳定性。JVM性能调优的主要目标是减少垃圾回收的频率和时间&#xff0c;提高线程的运行效率&#xff0c;优化内存的使用。 &#xff08;一&…

Joblib库多进程/线程使用(一):使用generator参数实现边响应边使用

进程与线程的基本概念 特性进程 (Process)线程 (Thread)定义 操作系统分配资源的基本单位&#xff08;独立的内存空间&#xff09; 多进程可真正并行&#xff08;利用多核 CPU&#xff09; 进程内的执行单元&#xff08;共享进程资源&#xff09;独立性完全独立&#xff0c;崩…

css上下滚动文字

效果图 取得是数组里的数据 上下滚动切换 css .notice-new {background: #222222;border-radius: 19rpx;margin-top: 28rpx;font-size: 24rpx;color: white;font-weight: 500;padding: 0 20rpx;height: 55rpx;line-height: 55rpx;overflow: hidden;.notice-scroll-wrapper {pos…