【ChatGPT】解锁AI思维链:如何让机器像人类一样思考?

news2024/12/19 23:40:54

在人工智能领域,我们一直在追求让机器像人类一样思考。然而,即使是最先进的AI,也常常被诟病缺乏“常识”,难以理解复杂问题,更不用说像人类一样进行逻辑推理和解决问题了。最经常的表现就是遇到不会的地方,或者一些人一眼能看出来的地方AI在那里胡扯。🤔

为了解决这个问题,一种名为“思维链(Chain of Thought, COT)”的技术应运而生。COT的核心思想是:将复杂问题分解成一系列简单的子问题,并逐步推理出最终答案。这就像人类在解决问题时,会先将问题拆解成一个个小步骤,然后一步步推理,最终得出结论。🧩

在这里插入图片描述

什么是思维链(COT)?

思维链(COT)是一种新兴的AI技术,旨在通过将复杂问题分解为多个简单的子问题来提高AI的推理能力。COT不仅提升了AI解决复杂问题的能力,还增强了模型的可解释性,使得AI的决策过程更加透明,便于人类理解和调试。🔍

理解COT的实践

为了更好地理解COT,我们来看一个简单的例子:数单词“strawberry”中有几个字母“r”。

from langchain_openai import ChatOpenAI
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate

# 模型
model = ChatOpenAI(
    model='deepseek-chat', 
    openai_api_key='sk-xxx',
    openai_api_base='https://api.deepseek.com',
    max_tokens=4096
)
# 定义一个简单的提示模板
prompt_template = PromptTemplate(
    input_variables=["user_input"],
    template="用户: {user_input}\nAI:"
)
# 创建一个链,将提示模板与模型连接起来
chain = LLMChain(llm=model, prompt=prompt_template)

# 手动输入一个值并发送给模型
user_input = "strawberry里面有几个r"
# 发送消息给模型并获取响应
response = chain.run(user_input=user_input)
print(f"\n\nAI: {response}\n")

初步结果

我们得到的结果是:

AI: 在单词 "strawberry" 中,有两个字母 "r"。

显然,这个结果是错误的。AI没有正确地数出“r”的数量。😅

使用COT解决问题

接下来,我们尝试使用COT来解决这个问题。通过将问题分解为多个步骤,AI可以更准确地得出答案。

user_input = '''
回答下面问题并注意回答的时候严格按照以下步骤,逐步进行:
1.将单词拆开
2.从左到右一个,一个对比字母是不是,是的话你要记录他的位置,并记住数量加一
3,第2步数出来多少个r直接输出 
问题:'strawberry'里面有几个r
'''

# 发送消息给模型并获取响应
response = chain.run(user_input=user_input)
print(f"\n\nAI: {response}\n")

改进后的结果

通过使用COT,AI得到了正确的答案:

AI: 1. 将单词拆开: s, t, r, a, w, b, e, r, r, y
2. 从左到右一个,一个对比字母是不是r:
   - 第1个字母是s,不是r
   - 第2个字母是t,不是r
   - 第3个字母是r,是r,记录位置3,数量加一
   - 第4个字母是a,不是r
   - 第5个字母是w,不是r
   - 第6个字母是b,不是r
   - 第7个字母是e,不是r
   - 第8个字母是r,是r,记录位置8,数量加一
   - 第9个字母是r,是r,记录位置9,数量加一
   - 第10个字母是y,不是r
3. 第2步数出来多少个r直接输出: 3

通过逐步推理,AI成功地数出了三个“r”。🎉

内置COT的优势

在上面的例子中,我们引导AI解决了一个具体的问题。但如果我们不知道用户想问什么,又想内置思维链怎么办呢?我们可以通过编写一个通用的COT框架来实现这一点。

from langchain_openai import ChatOpenAI
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
import json

# 模型
model = ChatOpenAI(
    model='deepseek-chat', 
    openai_api_key='sk-xxx',
    openai_api_base='https://api.deepseek.com',
    max_tokens=4096
)
# 定义一个简单的提示模板
prompt_template = PromptTemplate(
    input_variables=["user_input"],
    template="用户: {user_input}\nAI:"
)
# 创建一个链,将提示模板与模型连接起来
chain = LLMChain(llm=model, prompt=prompt_template)

# 手动输入一个值并发送给模型
initial_prompt = '''
你是一个能够逐步解释推理过程的专家AI助手。对于每一步,提供一个描述你在该步骤中所做内容的标题,以及相应的内容。决定是否需要另一步骤或你已准备好给出最终答案,
,且每次推理你仅执行一步等我说继续才能执行下一步。输出以JSON格式响应,包含 ‘title’, ‘content’, 和 ‘next_action’(要么是 ‘continue’,要么是 ‘final_answer’)键值。

为了提高指令遵从性,通过大写字母强调指令的重要性,包括一组提示和最佳实践:
1、尽可能多地使用推理步骤。至少5步,且每次推理你仅执行一步等我说继续才能执行下一步
2、意识到作为语言模型你的限制以及你能做什么和不能做什么。
3、包括探索替代答案。考虑你可能是错误的,如果你的推理是错误的,错误可能在哪里。
4、当你说你在重新检查时,实际上要重新检查,并采用另一种方法来做。不要只是说你在重新检查。
5、至少使用3种方法得出答案。
6、使用最佳实践。

问题如下:周五昨天的后天是周几
'''

# 发送消息给模型并获取响应
response = chain.run(user_input=initial_prompt)
print(f"\n\nAI: {response}\n")

通过这种方式,我们可以让AI在不明确问题的情况下,自动进行问题拆解和推理。🤖

COT的优势

  1. 提升复杂问题的解决能力:传统的AI模型通常只能处理简单、直接的任务,而COT可以将复杂问题分解成多个简单的子问题,从而提升模型解决复杂问题的能力。

  2. 增强模型的可解释性:COT将推理过程可视化,使得模型的决策过程更加透明,便于人类理解和调试。

  3. 促进模型的学习和进化:COT可以帮助模型更好地理解问题的本质,从而促进模型的学习和进化,使其在解决新问题时更加高效。

COT的未来展望

COT作为一种新兴的技术,目前还处于发展初期,但其潜力巨大。未来,随着技术的不断进步,COT有望在以下几个方面取得突破:

  1. 更强大的推理能力:未来的COT模型将能够处理更加复杂、抽象的问题,并进行更加深入的推理。

  2. 更强的可解释性:未来的COT模型将能够提供更加清晰、易懂的推理过程,使得人类可以更好地理解和信任AI的决策。

【CodeMoss】集成13个种AI模型(GPT4、o1等)、提示词助手100+、支持Open API调用、自定义助手、文件上传等强大功能,助您提升工作效率!

请添加图片描述

CodeMoss点击访问 >>> https://pc.aihao123.cn/index.html#/page/login?invite=1141439&fromChannel=1_Moss1213siwei

结语

思维链(COT)技术为AI的推理能力带来了革命性的提升。通过将复杂问题分解为简单的子问题,COT不仅提高了AI解决问题的能力,还增强了模型的可解释性和学习能力。随着技术的不断进步,COT将在更多领域发挥重要作用,为人类带来更多便利和创新。🌟

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

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

相关文章

重新定义页签!Choerodon UI Tabs让管理更高效

01 引言 Tabs 组件通过提供平级区域,将大块内容进行有效的收纳和展现,从而保持界面整洁。但在企业应用的快速发展中,这样传统的页签组件已无法满足我们对界面布局和个性化展示的追求。Choerodon UI Tabs 组件通过支持多级分组、个性化配置、…

机器学习之偏差

机器学习中的偏差(Bias)是指模型的预测值与真实值之间的系统性误差,或者说模型无法准确捕捉数据中复杂模式的能力。偏差通常与模型的假设或学习能力有关,过高的偏差会导致模型的性能不佳,表现为欠拟合。 偏差的来源 模…

SSH连接监控以及新用户创建和系统资源访问限制

目录 监控连接数SSH连接数的限制和影响理论限制可能的影响 创建SSH新用户为每个ssh用户配置系统资源限制1. 使用 /etc/security/limits.conf 限制资源2. 使用 cgroups 控制资源3. 磁盘配额限制4. 限制 SSH 访问5. 使用 PAM 限制6. 监控脚本示例7. 设置定期任务清理8. 检查配置是…

测试工程师八股文04|计算机网络 和 其他

一、计算机网络 1、http和https的区别 HTTP和HTTPS是用于在互联网上传输数据的协议。它们都是应用层协议,建立在TCP/IP协议栈之上,用于客户端(如浏览器)和服务器之间的通信。 ①http和https的主要区别在于安全性。http是一种明…

单片机学习笔记——入门51单片机

一、单片机基础介绍 1.何为单片机 单片机,英文Micro Controller Unit,简称MCU 。内部集成了中央处理器CPU、随机存储器ROM、只读存储器RAM、定时器/计算器、中断系统和IO口等一系列电脑的常用硬件功能 单片机的任务是信息采集(依靠传感器&a…

【青牛科技】D8563是低功耗的CMOS实时时钟/日历电路,它提供一个可编程时钟输出,一个中断输出和掉电检测器,所有的地址和数据通过IC总线接口串行传递。

概述: D8563是低功耗的CMOS实时时钟/日历电路,它提供一个可编程时钟输出,一个中断输出和掉电检测器,所有的地址和数据通过IC总线接口串行传递。最大总线速度为400Kbitss每次读写数据后,内嵌的字地址寄存器会自动产生增量。 主要特…

安卓获取所有可用摄像头并指定预览

在Android设备中,做预览拍照的需求的时候,我们会指定 CameraSelector DEFAULT_FRONT_CAMERA前置 或者后置CameraSelector DEFAULT_BACK_CAMERA 如果你使用的是平板或者工业平板,那么就会遇到多摄像头以及外置摄像头问题,简单的指…

R语言学习笔记-1

1. 基础操作和函数 清空环境:rm(list ls()) 用于清空当前的R环境。 打印输出:print("Hello, world") 用于输出文本到控制台。 查看已安装包和加载包: search():查看当前加载的包。install.packages("package_na…

Windows如何安装go环境,离线安装beego

一、安装go 1、下载go All releases - The Go Programming Language 通过网盘分享的文件:分享的文件 链接: https://pan.baidu.com/s/1MCbo3k3otSoVdmIR4mpPiQ 提取码: hxgf 下载amd64.zip文件,然后解压到指定的路径 2、配置环境变量 需要新建两个环境…

Mac上使用ln指令创建软链接、硬链接

在Mac、Linux和Unix系统中,软连接(Symbolic Link)和硬连接(Hard Link)是两种不同的文件链接方式。它们的主要区别如下: 区别: 硬连接: 不能跨文件系统。不能链接目录(为…

Unity A*算法实现+演示

注意: 本文是对基于下方文章链接的理论,并最终代码实现,感谢作者大大的描述,非常详细,流程稍微做了些改动,文末有工程网盘链接,感兴趣的可以下载。 A*算法详解(个人认为最详细,最通俗易懂的一…

博弈论3:图游戏SG函数(Graph Games)

目录 一、图游戏是什么 1.游戏特征 2.游戏实例 二、图游戏的必胜策略 1.SG 函数(Sprague-Grundy Function) 2.必胜策略(利用SG函数) 3.拿走游戏转化成图游戏(Take-away Game -> Graph Game) 一、图…

0101多级nginx代理websocket配置-nginx-web服务器

1. 前言 项目一些信息需要通过站内信主动推动给用户,使用websocket。web服务器选用nginx,但是域名是以前通过阿里云申请的,解析ip也是阿里云的服务器,甲方不希望更换域名。新的系统需要部署在内网服务器,简单拓扑图如…

qt-C++笔记之自定义类继承自 `QObject` 与 `QWidget` 及开发方式详解

qt-C笔记之自定义类继承自 QObject 与 QWidget 及开发方式详解 code review! 参考笔记 1.qt-C笔记之父类窗口、父类控件、对象树的关系 2.qt-C笔记之继承自 QWidget和继承自QObject 并通过 getWidget() 显示窗口或控件时的区别和原理 3.qt-C笔记之自定义类继承自 QObject 与 QW…

Elastic 8.17:Elasticsearch logsdb 索引模式、Elastic Rerank 等

作者:来自 Elastic Brian Bergholm 今天,我们很高兴地宣布 Elastic 8.17 正式发布! 紧随一个月前发布的 Elastic 8.16 之后,我们将 Elastic 8.17 的重点放在快速跟踪关键功能上,这些功能将带来存储节省和搜索性能优势…

[C++]类的继承

一、什么是继承 1.定义: 在 C 中,继承是一种机制,允许一个类(派生类)继承另一个类(基类)的成员(数据和函数)。继承使得派生类能够直接访问基类的公有和保护成员&#xf…

Docker 用法详解

文章目录 一、Docker 快速入门1.1 部署 MYSQL1.2 命令解读: 二、Docker 基础2.1 常见命令:2.1.1 命令介绍:2.1.2 演示:2.1.3 命令别名: 2.2 数据卷:2.2.1 数据卷简介:2.2.2 数据卷命令&#xff…

【自动化】Python SeleniumUtil 油猴 工具 自动安装用户脚本

【自动化】Python SeleniumUtil 油猴 工具 【自动化】Python SeleniumUtil 工具-CSDN博客【自动化】Python SeleniumUtil 工具。https://blog.csdn.net/G971005287W/article/details/144565691 油猴工具 import timefrom selenium.webdriver.support.wait import WebDriverW…

盛元广通畜牧与水产品检验技术研究所LIMS系统

一、系统概述 盛元广通畜牧与水产品检验技术研究所LIMS系统集成了检测流程管理、样品管理、仪器设备管理、质量控制、数据记录与分析、合规性管理等功能于一体,能够帮助实验室实现全流程的数字化管理。在水产、畜牧产品的质检实验室中,LIMS系统通过引入…

clickhouse-数据库引擎

1、数据库引擎和表引擎 数据库引擎默认是Ordinary,在这种数据库下面的表可以是任意类型引擎。 生产环境中常用的表引擎是MergeTree系列,也是官方主推的引擎。 MergeTree是基础引擎,有主键索引、数据分区、数据副本、数据采样、删除和修改等功…