给AI用工具的能力——Agent

ReAct框架:

Reason + Action,推理与行动结合

可以借助思维链,用小样本提示展示给模型一个ReAct框架

推理:针对问题或上一步观察的思考

行动:基于推理,与外部环境的一些交互(调用外部工具,比如搜索引擎、代码解释器等,也可以自定义工具)

观察:对行动得到的结果进行查看

agent(智能体、代理):

能理解用户查询或指令,进行推理并执行特定任务,最后输出响应。

三要素:

模型(agent的大脑)

工具列表

提示词(告诉模型要遵循ReAct框架,以及可以使用的工具有哪些)

1、temperature=0:因为不希望模型太有创造力,而是在后序能严格按照ReAct框架进行输出。

2、自定义工具:

需继承自BaseTool类,实际调用_run方法来使用工具。

记得把工具放进tools列表里。

tools = [ TextLengthTool() ]

3、提示模板可以在langchain hub上找

langchain hub:用于管理和共享Langchain相关资源的在线平台

比如要使用ReAct,可以用里面名为structured-chat-agent的提示模板。

pip install langchainhub(才能从该hub拉取内容)

from langchain import hub

prompt = hub.pull("hwchase17/structured - chat - agen") 参数为要拉取的提示词在langchain hub上的路径

返回值类型是ChatPromptTemplate。内容就是让模型遵循ReAct,并把工具介绍作为变量。

如何使用?

准备好三要素后,

 1、除了agent,实际执行的叫agent executor(agent执行器),

在agent中传入tools只是为了让agent知道有哪些工具可以使用,发出指令;

agent执行器才是实际调用工具的那个,所以它也要能访问tools。

2、如果想连续对话,需要指定memory参数。

注意:memory_key要为"chat_history",因为提示模板里记忆的变量名叫chat_history。

3、handle_parsing_errors = True,当agent在解析工具输出、生成回复等过程中遇到解析错误时,Agent Executor会尝试采取措施处理错误,而不是让程序直接终止。此处表示如果模型没有按ReAct框架输出时,agent执行器会把错误作为观察返回给模型。

4、verbose = True:以详细模式运行。agent执行器被调用后不是直接返回最终结果,而是还返回具体行动过程。默认为False。

5、AgentExecutor像是一个协调者,它会将用户输入(input)、工具调用结果以及对话内存(memory)等信息整合处理,并按照agent的决策机制所要求的格式和方式,把输入数据传递给agent,以便agent基于此进行决策和规划。这样的设计实现了职责分离,agent专注于决策规划,AgentExecutor负责执行和信息整合传递等工作 。

所以把input和memory传给agent executor而不是agent。

 

6、最后调用agent_executor.invoke方法,参数是一个字典,含键值" input "。

更多现成agent执行器: 

PAL(Program - aided Language Models):程序辅助语言模型,一种将自然语言处理与编程能力相结合以解决复杂问题的 AI 系统。

python_agent

比如可以让AI生成做计算的代码,借助Python解释器,算出最终答案。(即Agent生成代码后,再指示Agent Executor调用相应工具来执行代码。为什么是Agent生成代码?因为懂代码知识的是模型。)

pip install langchain_experimental

from langchain_experimental.tools import PythonREPLTool(Python交互式解释器,可以用于执行Python命令)

from langchain_experimental.agents.agent_toolkits import create_python_agent(LangChain 中用于创建专门处理 Python 相关任务的智能体执行器的函数)

1、为什么不用显式传入提示模板?

因为create_python_agent函数通常有内置的默认提示模板。

2、在create_python_agent函数的内部创建了智能体(agent)。

 

create_python_agent函数会根据传入的语言模型(如ChatOpenAI对象)、工具(如PythonREPLTool)等参数,按照 LangChain 内部的逻辑和机制,构建出一个适合处理 Python 相关任务的智能体。之后,该函数会基于创建好的智能体等信息,进一步实例化并返回AgentExecutorAgentExecutor来负责执行智能体的决策等操作 。

3、不直接支持handle_parsing_errors参数,但是可以把它放进更多参数里,作为键值。

 csv_agent

csv(Comma - Separated Values,逗号分隔值),一种常见的用于储存数据的纯文本格式。

注意是英文逗号。可以用excel打开csv文件,是表格的形式。

pip install  pandas

pip install tabulate(因为CSV agent底层会用到Pandas库和Tabulate库)

内置默认提示模板:

1、为什么create_csv_agent没有tools参数,而create_python_agent有agent参数?

create_csv_agent:

内部已集成专门针对 CSV 文件处理的工具,用户无需额外提供工具列表。

专注于 CSV 文件处理任务,功能相对单一和固定,适用于仅需处理 CSV 文件相关任务的场景。

create_python_agent:

本身不预设特定工具,而是要求用户根据具体任务需求传入所需工具。

因为 Python 应用场景广泛,从简单的代码执行、文件操作到复杂的网络交互、数据处理等,不同任务所需工具差异很大,所以需要用户灵活配置工具,以满足多样化的 Python 任务需求。

2、实际上也是通过执行Python代码得到的答案。

 让工具箱集成多种工具:

现有自定义工具,和现成的agent执行器(需要转换成Tool类型)

func参数赋值为使用工具时调用的函数名或方法名,因为使用agent执行器时,调用的是invoke方法,所以把执行器的invoke方法作为参数传入即可。

(函数:一段独立的代码块,用于完成特定的任务。它可以在模块的顶层定义,不依赖于任何特定的类或对象,是全局范围内可调用的代码单元。

方法:与类或对象相关联的函数,定义在类的内部,是类的一部分。它通常用于操作对象的属性或执行与对象相关的特定行为。如list.append()是列表类的一个方法。)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

实验十 Servlet(一)

实验十 Servlet(一) 【实验目的】 1.了解Servlet运行原理 2.掌握Servlet实现方式 【实验内容】 1、参考课堂例子,客户端通过login.jsp发出登录请求,请求提交到loginServlet处理。如果用户名和密码相同则视为登录成功&#xff0c…

PAT甲级1052、Linked LIst Sorting

题目 A linked list consists of a series of structures, which are not necessarily adjacent in memory. We assume that each structure contains an integer key and a Next pointer to the next structure. Now given a linked list, you are supposed to sort the stru…

【BUUCTF杂项题】荷兰宽带数据泄露、九连环

一.荷兰宽带数据泄露 打开发现是一个.bin为后缀的二进制文件,因为提示宽带数据泄露,考虑是宽带路由器方向的隐写 补充:大多数现代路由器都可以让您备份一个文件路由器的配置文件,软件RouterPassView可以读取这个路由配置文件。 用…

【Game】Powerful——The Dragon Hiding in Deep Waters(3)

文章目录 1、规则2、条件——宠物2.1、宠物装备2.1、宠物突破2.2、洗练石 3、条件——符石4、条件——化龙鼎5、附录——星穹 1、规则 寒渊城,神秘老兵处可查看 霜风携雨掠寒江,孤城独影人心凉 贤才此件难相遇,忠骨何日还故乡 宠物、符石、…

差分数组的学习

文章目录 1.差分数组的应用场景2.如何构造一个差分数组2.1 原数组转换为差分数组2.2 差分数组还原为原数组 3.差分数组的特性 1.差分数组的应用场景 需要频繁对某个区间的数组进行增减操作 2.如何构造一个差分数组 2.1 原数组转换为差分数组 # 存在一个数组Nums,求出他的差分…

AES 与 SM4 加密算法:深度解析与对比

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…

【C++】线程池实现

目录 一、线程池简介线程池的核心组件实现步骤 二、C11实现线程池源码 三、线程池源码解析1. 成员变量2. 构造函数2.1 线程初始化2.2 工作线程逻辑 3. 任务提交(enqueue方法)3.1 方法签名3.2 任务封装3.3 任务入队 4. 析构函数4.1 停机控制 5. 关键技术点解析5.1 完美转发实现5…

[EAI-023] FAST,机器人动作专用的Tokenizer,提高VLA模型的能力和训练效率

Paper Card 论文标题:FAST: Efficient Action Tokenization for Vision-Language-Action Models 论文作者:Karl Pertsch, Kyle Stachowicz, Brian Ichter, Danny Driess, Suraj Nair, Quan Vuong, Oier Mees, Chelsea Finn, Sergey Levine 论文链接&…

介绍一下Mybatis的底层原理(包括一二级缓存)

表面上我们的就是Sql语句和我们的java对象进行映射,然后Mapper代理然后调用方法来操作数据库 底层的话我们就涉及到Sqlsession和Configuration 首先说一下SqlSession, 它可以被视为与数据库交互的一个会话,用于执行 SQL 语句(Ex…

wx050基于django+vue+uniapp的傣族节日及民间故事推广小程序

开发语言:Python框架:djangouniappPython版本:python3.7.7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:PyCharm 系统展示 后台登录界面 管理员主界面 用户管理 …

hot100(6)

51.22.括号生成 字符串回溯的典型问题 char[] path;List<String> res;int n;public List<String> generateParenthesis(int n) {this.n n;path new char[2*n];res new ArrayList<>();dfs(0,0,0);return res;}public void dfs(int index,int left, int r…

【游戏设计原理】98 - 时间膨胀

从上文中&#xff0c;我们可以得到以下几个启示&#xff1a; 游戏设计的核心目标是让玩家感到“时间飞逝” 游戏的成功与否&#xff0c;往往取决于玩家的沉浸感。如果玩家能够完全投入游戏并感受到时间飞逝&#xff0c;说明游戏设计在玩法、挑战、叙事等方面达到了吸引人的平衡…

RocketMQ面试题:进阶部分

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

Deepseek-R1 和 OpenAI o1 这样的推理模型普遍存在“思考不足”的问题

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

结构性多余到结构性消失的现象和案例

在碎片化的现象和案例中提取关联性的信息。 也就是废墟之上如何重生的问题。 碎片化无处不在&#xff0c;普通人无人可以幸免。 当AI能力越来越强大&#xff0c;如下这些都在变为现实。 生产力 98%的人是过剩劳动力 人在大规模地被废弃 当人是生产力主体的时候&#xff0c;如…

(脚本学习)BUU18 [CISCN2019 华北赛区 Day2 Web1]Hack World1

自用 题目 考虑是不是布尔盲注&#xff0c;如何测试&#xff1a;用"1^1^11 1^0^10&#xff0c;就像是真真真等于真&#xff0c;真假真等于假"这个测试 SQL布尔盲注脚本1 import requestsurl "http://8e4a9bf2-c055-4680-91fd-5b969ebc209e.node5.buuoj.cn…

【C++】P1957 口算练习题

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述输入格式&#xff1a;输出格式&#xff1a; &#x1f4af;我的做法代码实现&#xff1a; &#x1f4af;老师的做法代码实现&#xff1a; &#x1f4af;对比分析&am…

【Linux系统】信号:再谈OS与内核区、信号捕捉、重入函数与 volatile

再谈操作系统与内核区 1、浅谈虚拟机和操作系统映射于地址空间的作用 我们调用任何函数&#xff08;无论是库函数还是系统调用&#xff09;&#xff0c;都是在各自进程的地址空间中执行的。无论操作系统如何切换进程&#xff0c;它都能确保访问同一个操作系统实例。换句话说&am…

LabVIEW双光子成像系统:自主创新,精准成像,赋能科研

双光子成像系统&#xff1a;自主创新&#xff0c;精准成像&#xff0c;赋能科研 第一部分&#xff1a;概述 双光子成像利用两个低能量光子同时激发荧光分子&#xff0c;具有深层穿透、高分辨率、低光损伤等优势。它能实现活体深层组织的成像&#xff0c;支持实时动态观察&…

「全网最细 + 实战源码案例」设计模式——策略模式

核心思想 享元模式&#xff08;Flyweight Pattern&#xff09;是一种行为型设计模式&#xff0c;用于定义一系列算法或策略&#xff0c;将它们封装成独立的类&#xff0c;并使它们可以相互替换&#xff0c;而不影响客户端的代码&#xff0c;提高代码的可维护性和扩展性。 结构…