LangChain 代理 Agent(学习笔记)

news2024/11/18 19:32:02

原文:LangChain 代理 Agent(学习笔记) - 尘叶心繁的专栏 - TNBLOG

LangChain 代理 Agent(学习笔记)

  • LangChain 代理 Agent(学习笔记)
    • 简介
    • Agent
      • Zero-shot ReAct
      • Structured Input ReAct
      • OpenAI Functions
      • Conversational
      • Self ask with search
      • ReAct document store
      • Plan-and-execute agents
    • Tool
    • Toolkit
    • AgentExecutor
    • 组件实例
      • Tool
        • 1. 通过工具类创建工具实例
        • 2. 通过辅助函数 load_tools 加载
      • Agent
    • 总结
      • 相关文档资料链接:

简介


Agent 也就是代理,它的核心思想是利用一个语言模型来选择一系列要执行的动作。
LangChain 的链将一系列的动作硬编码在代码中。
而在 Agent 中,语言模型被用作推理引擎,来确定应该执行哪些动作以及以何种顺序执行。
这就涉及到几个关键组件:

  • Agent 代理
  • Tool 工具
  • Toolkit 工具包
  • AgentExecutor 代理执行器


接下来我们做逐一介绍。

Agent


Agent 由一个语言模型和一个提示词驱动,决定下一步要采取什么措施的类。
提示词可以包括以下内容:

  • 代理的个性(用于使其以特定方式回应)
  • 代理的背景(用于为其提供更多关于所要执行任务类型的上下文信息)
  • 引导策略(用于激发更好的推理能力)


LangChain 提供了不同类型的代理:

Zero-shot ReAct


利用 ReAct 框架根据工具的描述来决定使用哪个工具,可以使用多个工具,但需要为每个工具提供描述信息。
工具的选择单纯依靠工具的描述信息。
关于 ReAct 框架的更多信息,请参考 ReAct。

Structured Input ReAct


相较于单一字符串作为输入的代理,该类型的代理可以通过工具的参数schema创建结构化的动作输入。

OpenAI Functions


该类型的代理用来与OpenAI Function Call机制配合工作。

Conversational


这类代理专为对话场景设计,使用具有对话性的提示词,利用 ReAct 框架选择工具,并利用记忆功能来保存对话历史。


这类代理利用工具查找问题的事实性答案。

ReAct document store


利用 ReAct 框架与文档存储进行交互,使用时需要提供 Search 工具和 Lookup 工具,分别用于搜索文档和在最近找到的文档中查找术语。

Plan-and-execute agents


代理规划要做的事情,然后执行子任务来达到目标。

这里我们多次提到 “工具”,也就是 Tool,接下来我们就介绍什么是 Tool

Tool


Tool 工具,是代理调用的功能,通常用来与外部世界交互,比如维基百科搜索,资料库访问等。
LangChain 内置的工具列表,请参考 Tools。

Toolkit


通常,在达成特定目标时,需要使用一组工具。
LangChain 提供了 Toolkit 工具包的概念,将多个工具组合在一起。

AgentExecutor


代理执行器是代理的运行时。
程序运行中,由它来调用代理并执行其选择的动作。

组件实例

Tool


LangChain 提供了一系列工具,比如 Search 工具,AWS 工具,Wikipedia 工具等。
这些工具都是 BaseTool 的子类。
通过调用 run 函数,执行工具的功能。
我们以 LangChain 内置的工具 DuckDuckGoSearchRun 为例,来看看如何使用工具。

注:要使用DuckDuckGoSearchRun工具,需要安装以下python包:

 
  1. pip install duckduckgo-search

1. 通过工具类创建工具实例


该类提供了通过 DuckDuckGo 搜索引擎搜索的功能。

 
  1. from langchain.tools import DuckDuckGoSearchRun
  2. search = DuckDuckGoSearchRun()
  3. search.run("Who is winner of FIFA worldcup 2018?")


你应该期望如下输出:

注:限于篇幅,这里对模型的回答文本在本讲中做了截取。

2. 通过辅助函数 load_tools 加载


LangChain 提供了函数 load_tools 基于工具名称加载工具。
先来看看DuckDuckGoSearchRun类的定义:

 
  1. class DuckDuckGoSearchRun(BaseTool):
  2. """Tool that adds the capability to query the DuckDuckGo search API."""
  3. name = "duckduckgo_search"
  4. description = (
  5. "A wrapper around DuckDuckGo Search. "
  6. "Useful for when you need to answer questions about current events. "
  7. "Input should be a search query."
  8. )


name 变量定义了工具的名称。
这正是我们使用 load_tools 函数加载工具时所需要的。
当然,目前比较棘手的是,load_tools 的实现对工具名称做了映射,因此并不是所有工具都如实使用工具类中定义的 name
比如,DuckDuckGoSearchRun 的名称是 duckduckgo_search,但是 load_tools 函数需要使用 ddg-search 来加载该工具。

请参考源代码 load_tools.py 了解工具数据初始化的详情。


用法

 
  1. from langchain.agents import load_tools
  2. tools = load_tools(['ddg-search'])
  3. search = tools[0]
  4. search.run("Who is winner of FIFA worldcup 2018?")


你应该期望与方法1类似的输出。


最后,分享一个辅助函数 get_all_tool_names,用于获取所有工具的名称。

 
  1. from langchain.agents import get_all_tool_names
  2. get_all_tool_names()


当前 LangChain 版本 0.0.235 中,我们应该能看到如下列表:

Agent


Agent 通常需要 Tool 配合工作,因此我们将 Agent 实例放在 Tool 之后。
我们以 Zero-shot ReAct 类型的 Agent 为例,来看看如何使用。代码如下:

 
  1. from langchain.agents import load_tools
  2. from langchain.agents import initialize_agent
  3. from langchain.agents import AgentType
  4. from langchain.llms import OpenAI
  5. import os
  6. os.environ['OPENAI_API_KEY'] = "您的有效openai api key"
  7. llm = OpenAI(temperature=0)
  8. tools = load_tools(["ddg-search", "llm-math"], llm=llm)
  9. agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
  10. agent.run("What is the height difference between Eiffel Tower and Taiwan 101 Tower?")


代码解释:

参考 initialize_agent 的实现,我们会看到它返回的是 AgentExecutor 类型的实例。
这也是代理执行器的常见用法。
请前往源代码 initialize.py 了解更多初始化代理执行器的详情。

 
  1. def initialize_agent(
  2. tools: Sequence[BaseTool],
  3. llm: BaseLanguageModel,
  4. agent: Optional[AgentType] = None,
  5. callback_manager: Optional[BaseCallbackManager] = None,
  6. agent_path: Optional[str] = None,
  7. agent_kwargs: Optional[dict] = None,
  8. *,
  9. tags: Optional[Sequence[str]] = None,
  10. **kwargs: Any,
  11. ) -> AgentExecutor:
  12. """Load an agent executor given tools and LLM.


你应该期望如下输出:

总结


本节课程中,我们学习了什么是 Agent 代理,Tool 工具,以及 AgentExecutor 代理执行器,并学习了它们的基本用法。下一讲我们将学习 Callback 回调。
本节课程的完整示例代码,请参考 08_Agents.ipynb。

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

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

相关文章

斯坦福机器学习 Lecture1 (机器学习,监督学习、回归问题、分类问题定义)

https://www.bilibili.com/video/BV1JE411w7Ub?p1&vd_source7a1a0bc74158c6993c7355c5490fc600 笔记如下 机器学习的定义:不需要明确编程就能让计算机去学习做某件事情 另一个定义 什么是监督学习? 给定一组 (x,y) 样本,学习一个 x-&g…

十三、Linux文件目录指令

pwd 指令 基本语法:pwd (功能描述:显示当前工作目录的绝对路径) 应用实例:案例:显示当前工作目录的绝对路径 ls 指令 基本语法:ls 【选项】【目录或是文件】 常用选项 -a :显示当…

【STL】string类 (上) <vector>和<list>的简单使用

目录 一,什么是 STL 二,STL 的六大组件 三,标准库中的 string 类 1,string 类 2,string 类的常用接口 1,string类对象的常见构造 2,string(const string& str&#xff…

PHP常用的数组函数

PHP是一种流行的服务器端脚本语言,广泛用于Web开发。数组是PHP中最重要且最常用的数据类型之一,它提供了许多强大的数组函数,用于在数组上执行各种操作。在本文中,我们将深入解析PHP中一些常用的数组函数,以便更好地理…

【考研数学神作】你不能错过的学习教材

【文末送书】今天推荐一些考研数学优质书籍,带你筑牢知识体系 目录 导语优美的数学思维:问题求解与证明数学分析线性代数线性代数及其应用代数初等数论及其应用数论概论概率论基础教程概率论与统计推断统计学基础:透过数据看世界数理统计及其…

前端为什么要工程化

前端为什么要工程化 文章目录 前端为什么要工程化传统开发的弊端一个常见的案例更多问题 工程化带来的优势开发层面的优势团队协作的优势统一的项目结构统一的代码风格可复用的模块和组件代码健壮性有保障团队开发效率高 求职竞争上的优势 现在前端的工作与以前的前端开发已经完…

【Seata源码学习 】篇三 seata客户端全局事务开启、提交与回滚

1.GlobalTransactionalInterceptor 对事务方法对增强 我们已经知道 GlobalTransactionScanner 会给bean的类或方法上面标注有GlobalTransactional 注解 和 GlobalLock的 添加一个 advisor (DefaultPointcutAdvisor ,advisor 绑定了PointCut 的 advise) 而此处的 …

更新文章分类

CategoryController PutMappingpublic Result update(RequestBody Validated Category category){categoryService.update(category);return Result.success();} CategoryService //更新分类void update(Category category); CategoryServiceImpl Overridepublic void update(…

大数据Doris(二十六):数据导入(Routine Load)介绍

文章目录 数据导入(Routine Load)介绍 一、​​​​​​​适用场景

asp.net智能考试系统VS开发sqlserver数据库web结构c#编程计算机网页项目

一、源码特点 asp.net 智能考试系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 系统运行视频 https://www.bilibili.com/video/BV1gz4y1A7Qp/ 二、功能介绍 本系统使用Microsoft Visual Studio 201…

数据结构【DS】队列

队列:只允许在表尾(队尾)进行插入,而在表头(队头)进行删除的线性表。 循环队列 初始(队空)时: 𝑸.𝒇𝒓𝒐𝒏𝒕𝑸.𝒓𝒆𝒂&am…

iOS源码-工程目录讲解

1、 工程目录 1.1、xib 主要的界面渲染控制,ios开发常用的界面,可以在这里快速开发出来 1.2、base 基本的类,子类继承base类,就具备父类的方法,无需在重写 1.3、util 基础的类一些,处理时间等 1.4、…

Schrodinger Shape Screen 工具使用方法

schrodinger的shape screen方法是一种基于ligand的筛选方法。需要提供一个参考分子,和需要筛选的分子库。shape screen可以根据原子类型、药效团对分子的形状相似度进行打分。 shape screen面板 shape screen面板如下: 1. 参考分子来源,可以…

Unity使用Visual Studio Code 调试

Unity 使用Visual Studio Code 调试C# PackageManager安装Visual Studio EditorVisual Studio Code安装Unity 插件修改Unity配置调试 PackageManager安装Visual Studio Editor 打开 Window->PackageManger卸载 Visual Studio Code Editor ,这个已经被官方废弃安…

数据结构【DS】树的性质

度为m的树 m叉树 至少有一个节点的度m 允许所有节点的度都<m 一定是非空树&#xff0c;至少有m1个节点 可以是空树 节点数 总度数 1m叉树&#xff1a; 高度为h的m叉树 节点数最少为&#xff1a;h具有n个结点的m叉树 最大高度&#xff1a;n度为m的树&#xff1a; 具有…

portraiture2024ps磨皮插件参数设置教程

ps磨皮插件一般是第三方软件&#xff0c;通过安装的方式放在ps的相关文件夹中。但也有一些插件是放置在系统软件目录的&#xff0c;不与ps文件放在一起。本文会给大家具体介绍以上两种不同的情况&#xff0c;方便大家了解ps磨皮插件放在哪个文件夹&#xff0c;ps的磨皮插件在哪…

【网络】OSI模型 与 TCP/IP模型 对比

一、OSI模型 OSI模型包含7个层次&#xff0c;从下到上分别是&#xff1a; 1. 物理层&#xff08;Physical Layer&#xff09; - 功能&#xff1a;处理与电子设备物理接口相关的细节&#xff08;如电压、引脚布局、同步&#xff0c;等等&#xff09;。 - 协议&#xff1a;以…

从关键新闻和最新技术看AI行业发展(2023.11.6-11.19第十期) |【WeThinkIn老实人报】

Rocky Ding 公众号&#xff1a;WeThinkIn 写在前面 【WeThinkIn老实人报】旨在整理&挖掘AI行业的关键新闻和最新技术&#xff0c;同时Rocky会对这些关键信息进行解读&#xff0c;力求让读者们能从容跟随AI科技潮流。也欢迎大家提出宝贵的优化建议&#xff0c;一起交流学习&…

系列一、堆里面的分区:Eden、From、To、老年代各自的特点

一、堆里面的分区&#xff1a;Eden、From、To、老年代各自的特点 堆是对象共享的区域&#xff0c;也是垃圾回收器主要工作的地方。主要分为新生区、养老区和元空间&#xff0c;而这三块地方中GC主要工作在新生区和养老区&#xff0c;其中新生区占1/3、养老区占2/3&#xff0c;新…

airlearning-ue4安装的踩坑记录

最近要安装airlearning-ue4&#xff0c;用于实现无人机仿真环境&#xff0c;该项目地址为&#xff1a;GitHub - harvard-edge/airlearning-ue4: Environment Generator for Air Learning Project. This version is build on top of UE4 game engine 由于这个项目已经完成好几年…