tnblog
首页
视频
资源
登录

LangChain 代理 Agent(学习笔记)

3723人阅读 2023/9/24 17:42 总访问:3475746 评论:0 收藏:0 手机
分类: AI

LangChain 代理 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

相关文档资料链接:


Python Langchain官方文档
五里墩茶社


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

LangChain 简单应用(学习笔记)

LangChain 简单应用(学习笔记)[TOC] Langchain 简介大型语言模型(LLM)正在成为一种具有变革性的技术,使开发人员能够构...

LangChain 模型(学习笔记)

LangChain 模型(学习笔记)[TOC] Langchain 模型简介Langchain所封装的模型分为两类:——大语言模型 (LLM)——聊天模型 (C...

LangChain 数据连接(学习笔记)

LangChain 数据连接(学习笔记)[TOC] 什么是数据连接?LLM应用往往需要用户特定的数据,而这些数据并不属于模型的训练集。L...

LangChain 提示词(学习笔记)

LangChain 提示词(学习笔记)[TOC] 什么是提示词?提示词(Prompt)是指向模型提供的输入。这个输入通常由多个元素构成。La...

LangChain 输出解析器(学习笔记)

LangChain 输出解析器(学习笔记)[TOC] 简介LLM的输出为文本,但在程序中除了显示文本,可能希望获得更结构化的数据。这就...

LangChain 链(学习笔记)

LangChain 链(学习笔记)[TOC] 单一的LLM对于简单的应用场景已经足够,但是更复杂的应用程序需要将LLM串联在一起,需要多LL...

LangChain 记忆组件(学习笔记)

LangChain 记忆组件(学习笔记)[TOC] 单一的LLM对于简单的应用场景已经足够,但是更复杂的应用程序需要将LLM串联在一起,需...

LangChain 回调 (Callback)

LangChain 回调 (Callback)[TOC] 简介Callback 是 LangChain 提供的回调机制,允许我们在 LLM 应用程序的各个阶段使用 Hoo...

LangChain 一个完整的例子

LangChain 一个完整的例子[TOC] 简介这是该 LangChain 极简入门系列的最后一讲。我们将利用过去9讲学习的知识,来完成一个...

nginx反向代理负载均衡

nginx介绍nginx是一个高效的反向代理工具,可以很方便的实现服务的负载均衡反向代理方式实际上就是一台负责转发的代理服务器...

反向代理,正向代理的区别

A同学在大众创业、万众创新的大时代背景下开启他的创业之路,目前他遇到的最大的一个问题就是启动资金,于是他决定去找马云...

Nginx代理出现Failed to load resource: net::ERR_NAME_NOT_RESOLVED

1、检查client_max_body_size 参数大小是否太小client_max_body_size 100m;2、检查被代理链接是否可以访问。3、检查被代理...

Mybatis 接口代理方式

本文是从传统三层过度而来,不知道传统三层可以看我的文章(传统分层思想)一、实现规则二、类的改变1、修改服务实现类2.1...

代理 XP”组件已作为此服务器安全配置的一部分被关闭。系统管理员可以使用 sp_configure 来启用“代理 XP”。有关启用“代理 XP”的详细信息

新建维护计划的时候遇到下图的报错信息 :“代理 XP”组件已作为此服务器安全配置的一部分被关闭。系统管理员可以使用 sp_co...

sqlserver定时备份执行失败。有关详细信息,请参阅维护计划和 SQL Server 代理作业历史记录日志

考虑是不是SQLServerAgent 没有启动,启动后执行一下定时备份试试
这一世以无限游戏为使命!
排名
2
文章
636
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术