当前位置: 首页 > news >正文

给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()是列表类的一个方法。)

http://www.lryc.cn/news/531351.html

相关文章:

  • Jupyter Lab的使用
  • 【从零开始的LeetCode-算法】922. 按奇偶排序数组 II
  • RabbitMQ深度探索:前置知识
  • 『 C++ 』中不可重写虚函数的实用案例
  • Redis - String相关命令
  • pytorch基于FastText实现词嵌入
  • 3D人脸建模:高精度3D人脸扫描设备快速生成真人脸部3D模型
  • 4.PPT:日月潭景点介绍【18】
  • 冷链监控系统
  • VSCode中代码颜色异常
  • 表格标签的使用
  • llama.cpp GGUF 模型格式
  • 嵌入式硬件篇---HAL库内外部时钟主频锁相环分频器
  • 【IoCDI】_@Bean的参数传递
  • [特殊字符] ChatGPT-4与4o大比拼
  • 【模型】Bi-LSTM模型详解
  • directx12 3d开发过程中出现的报错 一
  • Ubuntu 24.04 安装 Poetry:Python 依赖管理的终极指南
  • 读写锁: ReentrantReadWriteLock
  • 上海路网道路 水系铁路绿色住宅地工业用地面图层shp格式arcgis无偏移坐标2023年
  • 爬虫学习笔记之Robots协议相关整理
  • Python小游戏29乒乓球
  • 220.存在重复元素③
  • 使用 Go 语言调用 DeepSeek API:完整指南
  • AJAX笔记原理篇
  • ubuntu直接运行arm环境qemu-arm-static
  • 尝试把clang-tidy集成到AWTK项目
  • 一文了解性能优化的方法
  • 【怎么用系列】短视频戒断——对推荐算法进行干扰
  • C#中的委托(Delegate)