LangChain 代理 Agent(学习笔记)

原文: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.mzph.cn/news/147792.shtml

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

相关文章

cesium雷达扫描(模糊圆效果)

cesium雷达扫描(模糊圆效果) 1、实现思路 使用ellipse方法加载圆型,修改ellipse中‘material’方法重写自己的glsl来实现当前效果 1、示例源码 index.html <!DOCTYPE html> <html lang="en"><head><!<

场景交互与场景漫游-场景漫游器(6)

场景漫游 在浏览整个三维场景时&#xff0c;矩阵变换是非常关键的&#xff0c;通过适当的矩阵变换可以获得各种移动或者渲染效果。因此&#xff0c;在编写自己的场景漫游操作器时&#xff0c;如何作出符合逻辑的矩阵操作器是非常重要的&#xff0c;但这对初学者来说还是有一定难…

Java集合大总结——List的简单使用

List简单介绍 鉴于Java中数组用来存储数据的局限性&#xff0c;我们通常使用java.util.List替代数组List集合类中元素有序、且可重复&#xff0c;集合中的每个元素都有其对应的顺序索引。JDK API中List接口的实现类常用的有&#xff1a;ArrayList、LinkedList和Vector。 List…

【腾讯云云上实验室-向量数据库】TAI时代的数据枢纽-向量数据库 VectorDB

一、向量数据库的发展历程和时代机遇 回顾向量数据库的发展历程&#xff1a; 2012年开始&#xff0c;深度神经网络的发展催生了向量数据库的发展&#xff1b;2015年至2016年&#xff0c;Google和微软发布了标志性的论文&#xff1b;2017年&#xff0c;Facebook开源了Faiss框架…

生物信息基础:实用Git命令,掌握这些就够了

我发现有搞了几年生信的朋友还不会用Github管理代码&#xff0c;这不免令人意外。我一直强调基础知识的重要性&#xff0c;而这些知识又是可以在短时间内掌握的。Github管理平时写的代码&#xff0c;要用到Git命令。虽然官方Git命令非常多&#xff0c;但我们只要掌握常用的几个…

PyTorch微调终极指南2:提升模型的准确性

作为一名机器学习从业者&#xff0c;你可能经常会发现自己处于这样一种情况&#xff1a;你正在针对特定任务微调预先训练的模型&#xff0c;但已经达到了无法进一步提高模型准确性的地步。 在本文中&#xff0c;我们将探讨可用于提高模型准确性的各种技术和策略。 这些方法旨在…

Python武器库开发-flask篇之session与cookie(二十六)

flask篇之session与cookie(二十六) 在 Flask 中&#xff0c;可以使用 session 来在不同请求之间存储和传递数据。Session 在客户端和服务器端之间交换&#xff0c;但是数据存储在服务器端。 Session 与 Cookie 的区别 session 和 cookie 都可以用来在不同请求之间存储和传递…

Vue3-readonly(深只读) 与 shallowReadonly(浅只读)

Vue3-readonly(深只读) 与 shallowReadonly&#xff08;浅只读&#xff09; readonly(深只读)&#xff1a;具有响应式对象中所有的属性&#xff0c;其所有值都是只读且不可修改的。shallowReadonly(浅只读)&#xff1a;具有响应式对象的第一层属性值是只读且不可修改的&#x…

使用requests库进行网络爬虫:IP请求错误的解决方法

目录 引言 一、了解requests库 二、遇到的问题 三、解决方法 1、随机化IP地址 2、减少请求频率 3、使用User Agent模拟浏览器行为 4、使用Cookies 四、注意事项 五、使用代理池 六、总结 引言 在利用Python的requests库进行网络爬虫操作时&#xff0c;我们有时会遇…

系列七、JVM的内存结构【堆(Heap)】

一、概述 一个JVM实例只存在一个堆内存&#xff0c;堆内存的大小是可以手动调节的。类加载器读取了类文件后&#xff0c;需要把类、方法、常变量放到堆内存中&#xff0c;保存所有引用类型的真实信息&#xff0c;以方便执行器执行&#xff0c;堆内存分为三个部分&#xff0c;即…

给openlab搭建web网站

1.作业的要求 2.访问www.openlab.com网站 2.1先准备好相关的包和关闭防火墙等操作 mount /dev/sr0 /mnt/ //先挂载 yum install httpd -y //下载htppd systemctl stop firewalld //关闭防火墙 setenforce 02.2然后开始配置文件和仓库 这一步比较关键,之前改了接口…

【OpenCV实现图像:OpenCV进行OCR字符分割】

文章目录 概要基本概念读入图像图像二值化小结 概要 在处理OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;时&#xff0c;利用传统的图像处理方法进行字符切分仍然是一种有效的途径。即便当前计算机视觉领域主导的是卷积神经网络&#xf…

DAO和增删改查通用方法-BasicDao

文章目录 一、BasicDao是什么&#xff1f;二、BasicDao分析三、BasicDao实现&#xff08;1&#xff09;BasicDao&#xff08;2&#xff09;ActorDao&#xff08;3&#xff09;TestDao 四、总结 一、BasicDao是什么&#xff1f; BasicDao:基础的数据对象&#xff0c;可以完成通用…

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

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

DeepMind发布新模型Mirasol3B:更高效处理音频、视频数据

Google DeepMind日前悄然宣布了其人工智能研究的重大进展&#xff0c;推出了一款名为“Mirasol3B”的新型自回归模型&#xff0c;旨在提升对长视频输入的理解能力。该新模型展示了一种颠覆性的多模态学习方法&#xff0c;以更综合和高效的方式处理音频、视频和文本数据。 Googl…

MATLAB 模糊设计器 构建 模糊系统

系列文章目录 文章目录 系列文章目录前言一、创建 FIS 结构二、定义输入变量三、定义输出变量四、定义成员函数五、定义规则库六、设计分析七、存储和修改设计八、导出 FIS总结 前言 本例演示如何使用 Fuzzy Logic Designer 应用程序交互式创建 1 型 Mamdani 模糊推理系统&…

在线文档频繁故障不稳定,其实可以自己搭一个Etherpad在线文档

正文共&#xff1a;1116 字 20 图&#xff0c;预估阅读时间&#xff1a;2 分钟 最近某头部云厂商多次出现故障&#xff0c;导致在线文档使用受限&#xff0c;虽说影响不大&#xff0c;但我们有必要考虑一下是否有备用方案。 在自己搭建在线文档方面&#xff0c;我们之前测试过部…

[Jenkins] 物理机 安装 Jenkins

这里介绍Linux CentOS系统直接Yum 安装 Jenkins&#xff0c;不同系统之间类似&#xff0c;操作命令差异&#xff0c;如&#xff1a;Ubuntu用apt&#xff1b; 0、安装 Jenkins Jenkins是一个基于Java语言开发的持续构建工具平台&#xff0c;主要用于持续、自动的构建/测试你的软…

uniapp基础学习笔记01

文章目录 本博客根据黑马教程学习uniapp一、技术架构二、创建项目2.1 Hbuilder创建2.2 插件安装2.3 微信开发者工具配置与运行2.3.1 简单修改基础页面 2.4 pages.json和tabBar2.4.1 pages.json与tabBar配置2.4.2 案例 3.1 通过命令行创建项目3.2 命令行运行项目3.2.1 命令行总结…

五、Linux目录结构

1.基本介绍 1.Linux的文件系统是采用级层式的树状目录结构&#xff0c;在此结构中的最上层是根目录"r/"&#xff0c;然后在此目录下再创建其他的目录。 2.深刻理解linux树状文件目录是非常重要的 3.记住一句经典的话&#xff1a;在Linux世界里&#xff0c;一切皆文件…