我们使用的AI助手,一般是经过了预训练和微调这2个步骤,尽管训练出的模型能回答许多通用类问题,但是在遇到复杂问题时还是束手无策。

直到有人提出了思维链方式,才解决了模型在面对复杂问题时的推理能力。

1、什么是思维链

思维链(Chain of Thought, CoT)是用于提高AI模型推理能力的方式。其核心原理就8个字:化繁为简、逐个击破

思维链的工作原理是,模拟人类思考问题的过程,通过将复杂的问题逐步分解,然后逐个向前解决这些简单问题,从而得出最终答案。

2、实现智能体的方式

智能体(AI Agent)用于更加智能 更加强调推理的场景,思维链便是用于AI Agent的场景,在这种场景下可以发挥它的优势。

在AI Agent领域里,常见的实现思维链的机制有2种,Plan-and-Executor机制和ReAct机制。

2.1、Plan-and-Executor机制

Plan-and-Executor机制是分离规划 和 执行这2个环节。它将问题解决过程分为两个阶段:规划和执行

规划阶段:

在这个阶段,主要是在智能体里分析问题,制定一个详细的解决方案计划。这个阶段通常会涉及到大量的计算过程,用来确定出最优的行动计划。规划的结果是:输出一个具体的行动计划

执行阶段:

在这个阶段,智能体按照规划阶段生成的行动计划去逐步执行每个步骤。并在执行过程中监控和调整,确保计划的顺利执行。

优点

这种机制的特点就是规划和执行的分离,这种分离可以使每个阶段更加专注于当前任务,从而提高效率。适用于需要复杂度较高,需要提前做复杂规划的任务。

缺点

在执行过程中,可能存在不确定因素,这种方式因为是提前规划好的,所以可能不适应变化,需要频繁调整计划。

举例说明Plan-and-Executor步骤

比如,我想知道2024年周杰伦最新的演唱会是时间和地点是什么,通过Plan-and-Executor机制,会被拆解成以下步骤:

计划阶段:

1. 在搜索引擎上查找“2024年周杰伦最新演唱会时间和地点”。
2. 查看官方网站或可信的新闻网站的相关信息。
3. 汇总并记录演唱会的时间和地点。

执行阶段:

1. 在搜索引擎上查找“2024年周杰伦最新演唱会时间和地点”。
- 结果:找到了一些相关的网页链接。
2. 查看官方网站或可信的新闻网站的相关信息。
- 结果:在周杰伦的官方网站上找到了2024年最新演唱会的时间和地点。
3. 汇总并记录演唱会的时间和地点。
- 结果:2024年周杰伦最新演唱会将在2024年5月20日于北京举行。

2.2、ReAct机制

ReAct机制是一种将推理(Reasoning)和行动(Action)结合在一起的实现方式,同时还引入了观察(Observation)环节,在每次执行(Action)之后,都会先观察(Observation)当前现状,然后再进行下一步的推理(Reason)。

它强调的是在感知环境变化后,立即做出反应并采取行动,而不是先制定一个详细的计划。

优点

适应性强,能够快速响应环境变化。更适合动态和不确定性高的环境。

缺点

由于没有预先规划,可能在复杂任务中效率较低,每一步都在执行:观察、推理、行动。

举例说明ReAct步骤

比如,我要知道2024年周杰伦最新的演唱会是时间和地点是什么,通过ReAct机制,会被拆解成以下步骤:

推理1:用户想知道2024年周杰伦最新的演唱会是时间和地点是什么,需要查找最新的信息。
行动1:调用Google的搜索API进行搜索。
观察1:搜索结束,搜索的结果中出现一些关于《2024年周杰伦最新的演唱会》的网页信息。 推理2:搜索出来的网页较多,大概浏览前6个网页的具体内容。
行动2:点击第一个网页,开始浏览。
观察2:浏览结束,浏览的网页内容提及到了2024年周杰伦最新的演唱会信息。 推理3:针对网页的内容进行,问题的总结。
结果:将最终的答案输出给用户。

3、代码示例

3.1、Plan-and-Executor机制

LangChain框架已经实现了Plan-and-Executor机制,三行代码即可调用:

核心代码:

# 加载计划
planner = load_chat_planner(model)
# 加载执行器
executor = load_agent_executor(model, tools, verbose=True)
# 加载代理
agent = PlanAndExecute(planner=planner, executor=executor, verbose=True)

完整代码:

from langchain_openai import ChatOpenAI
from langchain_experimental.plan_and_execute import (
PlanAndExecute, load_agent_executor, load_chat_planner
)
from langchain.tools import BaseTool
from langchain_experimental.tools import PythonREPLTool model = ChatOpenAI(
model="gpt-3.5-turbo",
openai_api_key="sk-xxxxxx",
openai_api_base="https://api.xiaoai.plus/v1",
) # 定义工具
class SumNumberTool(BaseTool):
name = "数字相加计算工具"
description = "当你被要求计算2个数字相加时,使用此工具" def _run(self, a, b):
return a["title"] + b["title"] # 加入到工具合集
tools = [SumNumberTool()] # 加载计划
planner = load_chat_planner(model)
# 加载执行器
executor = load_agent_executor(model, tools, verbose=True)
# 加载代理
agent = PlanAndExecute(planner=planner, executor=executor, verbose=True) agent.run("你帮我算下 3.941592623412424 + 4.3434532535353的结果")

执行过程:

执行过程见下图,从过程中,我们可以看出,Agent确实是先规划了N个steps,然后一步步执行step

3.2、ReAct机制

LangChain框架已经实现了ReAct机制,两行代码即可调用:

核心代码:

# 使用reAct的提示词
prompt = hub.pull("hwchase17/structured-chat-agent")
# 创建Agent
agent = create_structured_chat_agent(llm=model, tools=tools, prompt=prompt)

完整代码:

from langchain import hub
from langchain.agents import create_structured_chat_agent, AgentExecutor, tool
from langchain.memory import ConversationBufferMemory
from langchain.schema import HumanMessage
from langchain.tools import BaseTool
from langchain_openai import ChatOpenAI model = ChatOpenAI(
model="gpt-3.5-turbo",
openai_api_key="sk-xxxxxx",
openai_api_base="https://api.xiaoai.plus/v1",
) # 定义工具
class SumNumberTool(BaseTool):
name = "数字相加计算工具"
description = "当你被要求计算2个数字相加时,使用此工具" def _run(self, a, b):
return a["title"] + b["title"] # 加入到工具合集
tools = [SumNumberTool()] # 使用reAct的提示词
prompt = hub.pull("hwchase17/structured-chat-agent") # 创建Agent
agent = create_structured_chat_agent(llm=model, tools=tools, prompt=prompt) # 创建记忆组件
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True) # 创建Agent执行器
agent_executor = AgentExecutor.from_agent_and_tools(
agent=agent, tools=tools, memory=memory, verbose=True, handle_parsing_errors=True
) agent_executor.invoke({"input": "你帮我算下 3.941592623412424 + 4.3434532535353的结果"})

执行过程:

ReAct机制的执行过程,读者自行尝试。与Plan-and-Executor相比,ReAct机制少了规划steps这个环节。

4、完结

本篇主要聊了思维链、AI Agent场景下思维链的2种实现机制、代码示例,具体选择取决于应用场景和问题的复杂性。希望对你有帮助!

本篇完结!欢迎 关注、加微信(yclxiao)交流、全网可搜(程序员半支烟)

原文链接:https://mp.weixin.qq.com/s/MTh0x9RYwnLNvaV_U1jOcQ

最近推出了知识星球开发者AI加持》,一个AI应用开发专栏,旨在助力开发者在这个艰难和变革的时代多一技傍身。还有1V1技术咨询,扫清职业发展和技术道路上的障碍。早鸟价9元,加微信(yclxiao)咨询。

你要了解的2种AI思维链的更多相关文章

  1. 2019年所有人必须要掌握的一个技能 - “AI思维”

    或许很多人认为AI只是那些直接从事AI相关岗位的人必须要掌握的技能,但实际上,不分岗位所有人都需要一种能力,那就是“AI思维”.如果没能在合适的时机把自己的认知提升到一定程度,被替代是很自然的事情.在 ...

  2. 如今领占主导地位的19种AI技术!

    如今领占主导地位的19种AI技术! http://blog.itpub.net/31542119/viewspace-2212797/ 深度学习的突破将人工智能带进全新阶段. 2006 年-2015 ...

  3. 微信小程序的功能开发工具跟公众号的差别,小程序是一种减负思维对简单APP是巨大打击

    微信小程序的功能开发工具跟公众号的差别,小程序是一种减负思维对简单APP是巨大打击 摘要: 小程序和公众号最大的区别有如下四点:1.小程序没有粉丝,开发者在后台能看到的只能是累计用户访问数以及实时统计 ...

  4. 俞敏洪:未来教育是互联网+ AI +区块链联合颠覆

    “我对面向未来教育领域,内心是有一丝悲哀的.至少在我思考和理解的范围内,互联网和 AI 是不是有可能彻底的改变中国教育现状?我没有想清楚.”10 月 31 日,在鲸媒体举办的以“教育 +AI”为的主题 ...

  5. 用AI思维给成本降温,腾讯WeTest兼容性测试直击底价!

    WeTest 导读 当AI成为各行业提高产业效率的动能,很多人开始疑惑,这架智能化的“无人机”何时在移动应用测试中真正落地?在今年的国际数码互动娱乐博览会(ChinaJoy)上,腾讯WeTest给出了 ...

  6. “分而治之”,一种AI和动画系统的架构

    译者注:随着国内游戏研发水平的不断提高,对画面品质的不断提升,同时大量手游使用Unity和Unreal 4等成熟的工具开发,动作状态机已经不是什么陌生的概念了.我们在项目开发时也大量使用了动作状态机. ...

  7. 四种 AI 技术方案,教你拥有自己的 Avatar 形象

    大火的 Avatar到底是什么 ? 随着元宇宙概念的大火,Avatar 这个词也开始越来越多出现在人们的视野.2009 年,一部由詹姆斯・卡梅隆执导 3D 科幻大片<阿凡达>让很多人认识了 ...

  8. [python]两种编程思维--面向过程和面向对象

    例如:eg:炒一份西红柿鸡蛋 一.面向过程 面向过程的编程思维,如下 二.面向对象 制作一台炒菜机器人,然后告诉机器人做一道西红柿炒鸡蛋.在这里,我们直接面对的是机器人,而非炒菜的过程,所以这里机器人 ...

  9. 初级ai思维导图,基础人工智能设计图

    2017年2月8日09:35:46 仅供代码和逻辑设计图纸,只提供一个参考设计,后面可能会更新具体实施说明

  10. 24种设计模式--责任链模式【Chain ofResponsibility Pattern】

    中国古代对妇女制定了“三从四德”的道德规范,“三从”是指“未嫁从父.既嫁从夫.夫死从子”,也就是说一个女性,在没有结婚的时候要听从于父亲,结了婚后听从于丈夫,丈夫死了还要听儿子的,举个例子来说,一个女 ...

随机推荐

  1. 牛客小白月赛96(待F)

    比赛链接:牛客小白月赛96 赛时感受 赛时在前面卡的时间有点长,C题没开longlong wa了n发,D题没考虑负数又wa了n发,然后来写E的时候时间就不长了,匆忙写一次交一发. A 思路 当其中一个 ...

  2. 2020-2021 ICPC, NERC, Northern Eurasia Onsite BEIJ 题解

    B. Button lock 题意:有 \(d\) 个 01 按键以及一个 reset 按键,你需要把所有题目给定的 \(n\) 个密码全部表示一遍.只有按下 reset 按键后才能使所有 01 按键 ...

  3. .NET 个人博客-给文章添加上标签

    个人博客-给文章添加上标签 优化计划 置顶3个且可滚动或切换 推荐改为4个,然后新增历史文章,将推荐的加载更多放入历史文章,按文章发布时间降序排列. 标签功能,可以为文章贴上标签 推荐点赞功能 本篇文 ...

  4. Intellij IDEA 'Error:java: 无效的源发行版:13'

    第一步,依次点击,File - Settings - Bulid, Execution,Deployment - Compiler - Java Compiler,修改版本为13(你使用的java是哪 ...

  5. 洛谷P1063

    [NOIP2006 提高组] 能量项链 题目描述 在 Mars 星球上,每个 Mars 人都随身佩带着一串能量项链.在项链上有 \(N\) 颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着 ...

  6. 国内中文版的 Chātgpt,真的好赞。

    这个软件是「Chātgpt」,Chātgpt 中文版是国内刚上线的一款人工智能技术的语言处理工具软件,它不仅可以学习和理解人类的语言来和人对话,还能撰写邮件.文案.翻译.代码等功能. 不需要OpenA ...

  7. oeasy教您玩转vim - 78 - # 操作系统文件格式 fileformat

    ​ 文件系统换行格式 fileformat 回忆保留环境的细节 上次我们了解了viminfo 他能够保存 命令行历史 标记 寄存器 把他和 :mksession 一起使用就可以完美复原环境了 还有什么 ...

  8. AS上的基础中级控件-图形定制

    图形Drawable 1.Drawable表达包含了图片色块画布背景等 2.存在res中的Drawable目录下,保存描述性的XML文件 3.各种视图都可以使用该控件如ViewText,Button, ...

  9. 初读Nginx

    Nginx反向代理:将前端发送的动态请求由Nginx转发到后端服务器 NGINX的好处: 可以缓存,提高访问速度 负载均衡:当请求量过大时,可以按指定方式均衡的分配给集群中的每台服务器 保证后端服务安 ...

  10. mybatisplus实现一次多表联查+分页查询

    众所周知,mybatisplus非常好用,但是他不好用就不好用在不可以多表联查.在mybatisplusjoin中提供了联查的方法,那个参数我没看懂Orz 不过,历经千辛万苦,我通过xml终于写出来了 ...