AI Agent,即人工智能代理,一般直接叫做智能体。在是一种能够感知环境、做出决策并采取行动的系统。这些系统能够执行被动的任务,也能够主动寻找解决问题的方法,适应环境的变化,并在没有人类直接干预的情况下做出决策。
见:一文说清楚什么是AI Agent(智能体)
Agent有3个核心组件:规划、记忆、工具。其中规划(同时也包含决策)能力,以有效地执行更复杂的任务,这涉及到子目标的分解、连续的思考、自我反思和批评,以及对表征行动的反思。
见:从0到1开发智能体(一)|基于大模型的AI Agent技术框架
1. ReAct是什么
自我反思是自主智能体通过细化过去的行动决策和纠正之前的错误来迭代改进的重要方面。
ReAct框架正是这个自我反思环节使用到的一个框架,用于指导大模型完成复杂任务的结构化思考和决策过程。ReAct框架包括一系列的步骤,使得大模型能够以更系统和高效的方式处理和回应查询,确保它能够全面和准确地回应用户的需求。
通过 ReAct 框架,Agent获得了动态决策能力。当遇到自己内部知识无法解决的问题时,Agent先搜索或调用工具,拓展自己的知识面。Agent还利用工具的灵活性,协调使用各种工具,在多个数据点之间进行切换,以获得最终的决策数据。Agent在执行每一步后会观察结果,并将新信息用于接下来的决策过程,这体现了Agent出色的学习能力与适应性。
ReAct框架的设计哲学是:在动态和不确定的环境中,有效的决策需要持续的学习和适应,以及快速将推理转化为行动的能力,即形成有效的观察 一 思考 一 行动 一 再观察的循环(见图)
该循环过程主要涉及如下3个步骤
思考(Thought) : 涉及对下一个行动进行推理。在这一步骤中需要评估当前情况并考虑可能的行动方案。
行动(Action): 基于思考的结果,决定采取什么行动。这一步骤是行动计划的选择过程。
观察(Observation): 执行行动后,需要观察并收集反馈。这一步将对行动结果进行评估。它可能影响或改变下一轮次思考的方向。
在LangChain中ReAct框架的实现流程:Agent首先接到任务,然后自动进行推理,最后自主调用工具来完成任务。
整个 ReAct 框架的实现流程强调自主 Agent 在完成任务时如何利用大模型的推理能力和使用外部工具,以及如何与环境互动以产生结果。这个框架凸显了大模型在推理和决策中的中心作用,并说明了工具如何为大模型扩展能力,以及 Agent如何通过与环境的动态交互来驱动任务的完成。
2. 代码实现
整个代码分为几个部分:
导入基于ReAct的提示词创建大模型实例定义搜索工具创建ReAct智能体执行ReAct智能体
代码基于LangChain v0.3
2.1 导入基于ReAct的提示词
从LangChain的Hub(可以理解成一个社区)中直接将hwchase17 这个用户设计好的 ReAct 提示词“拉”进来。
提示词:
把上边提示词翻译成如下伪代码,可以更方便理解这个 ReAct 框架。
而有了这个提示,大模型就会按照图1中的思路走,经过思考,它明白该搜索时就调用搜索工具,而不会轻易“胡言乱语”
这个决策过程或工作流程包含4个步骤:行动、观察、思考和最终答案
2.2 创建大模型实例
若要构建 Agent,首先应创建大模型的实例。因为大模型是 Agent 的推理引擎。
LangChain 支持许多不同的语言模型,可以使用它们进行互换
langchain_openai是其中之一,langchain集成的openai的功能包
其他比如还有集成google的模型:pip install -qU langchain-google-vertexai
其他语言模型、ChatOpenAI的使用见:https://python.langchain.com/docs/tutorials/llm_chain/#using-language-modelshttps://python.langchain.com/api_reference/openai/chat_models/langchain_openai.chat_models.base.ChatOpenAI.html#langchain_openai.chat_models.base.ChatOpenAI
2.3 定义搜索工具
我们已经设置了大模型实例,接下来配置工具--此处只有一个搜索工具。
SerpAPIWrapper是一个包装器,其中封装了与SerpApi的交互以便通过编程方式访问 SerpApi提供的搜索服务。SerpApi是一个服务,它提供了对多个搜索引擎(如 Google、Bing 等)的查询接口。Tool类则是LangChain Agent 可以使用的工具的基础类。一个 Tool实例代表Agent 可以访问的一个外部功能或服务。列表 tools 中包含 Tool 类的实例。列表中的每个元素都代表一个工具,Agent可以利用这些工具来执行任务。
2.4 创建ReAct智能体
有了大模型、工具,以及 ReAct框架提示,接下来就可以开始构建 ReAct Agent的实例。
llm是之前实例化的大模型,tools是之前定义的SerpApi搜索工具,而 prompt 则是包含 ReAct 框架的提示,用来定义 Agent 的行为和任务。
2.5 执行ReAct智能体
最后,创建专门负责运行Agent的AgentExecutor,并通过 AgentExecutor的invoke 方法来执行 ReAct Agent 的实例,以便观察结果。
3. 完整代码
环境:Python 3.10.11依赖版本:langchain 0.3.9langchain-community 0.3.9langchain-core 0.3.21langchain-openai 0.2.11langchain-text-splitters 0.3.2langchainhub 0.1.21langsmith 0.1.147
3.1 执行结果(可以看到整个思考过程)
参考:
https://mp.weixin.qq.com/s/rNDAmOR1hZN2tWdgLGI9DA
