LangChain之Agent代理(上)

Agent代理

概述

Agent代理的核心思想是使用语言模型来选择要采取的一系列动作。在链中,动作序列是硬编码的。在代理中,语言模型用作推理引擎来确定要采取哪些动作以及按什么顺序进行。

因此,在LangChain中,Agent代理就是使用语言模型作为推理引擎,让模型自主判断、调用工具和决定下一步行动。

Agent代理像是一个多功能接口,能够使用多种工具,并根据用户输入决定调用哪些工具,同时能够将一个工具的输出数据作为另一个工具的输入数据。

分类

根据几个维度对所有可用的代理进行分类:

makefile复制代码模型类型:代理适用于那类模型。Chat(接收消息,输出消息)、LLM(接收字符串,输出字符串)

聊天历史: 代理是否支持聊天历史。如果支持,这意味着它可以用作聊天机器人。如果不支持,那么它更适合单一任务。

多输入工具:  代理是否支持具有多个输入的工具。如果一个工具只需要单个输入,那么LLM通常更容易知道如何调用它。

并行函数调用: 让LLM同时调用多个工具可以大大提高代理的效率

所需模型参数: 代理是否需要模型支持任何其他参数。某些代理类型利用了OpenAI 函数调用等功能,这些功能需要其他模型参数。如果不需要,则意味着一切都通过提示完成
代理名称 模型类型 聊天历史 多输入工具 并行函数调用 所需模型参数 描述 Agent
OpenAI tools Chat tools OpenAI将调用单个函数的能力称为 函数,将调用一个或多个函数的能力称为工具。 create_openai_tools_agent
OpenAI functions Chat x functions 使用Op0nAl函数集合的代理。已弃用转而使用OpenAI tools create_openai_functions_agent
XML Agent LLM x x 某些语言模型(例如 Anthropic 的 Claude)特别擅长推理/编写 XML。 create_xml_agent
Structured chat Chat x 使用结构化工具集的代理 create_structured_chat_agent
JSON Chat Agent Chat x x 代理使用 JSON 来格式化其输出,旨在支持聊天模型。 create_json_chat_agent
ReAct LLM x x 推理和执行,推理后决定调用工具或者根据工具返回结果确定完成任务 create_react_agent
Self-ask with search LLM x x x 通过追问和中间答案,引导发现最终答案 create_self_ask_with_search_agent

Agent的基本使用

构建一个具有两种工具的代理:一种用于在线查找,另一种用于查找加载到索引中的特定数据。

准备操作

在LangChain中有一个内置的工具,可以方便地使用Tavily搜索引擎作为工具。

访问Tavily(用于在线搜索)注册账号并登录,获取API 密钥

设置OpenAI和TAVILY的API密钥

python复制代码import os
os.environ["OPENAI_BASE_URL"] = "https://xxx.com/v1"
os.environ["OPENAI_API_KEY"] = "sk-BGFnOL9Q4c99B378Bxxxxxxxxxxxxxxxx13bc437B82c2"
os.environ["TAVILY_API_KEY"] = 'tvly-Scx77cTxxxxxxxxxxxxx3rmxRIM8'

定义工具

首先需要创建想要使用的工具。这里使用两个工具:

复制代码Tavily(用于在线搜索)

创建的本地索引的检索器

1.Tavily在线搜索

python复制代码# 加载所需的库
from langchain_community.tools.tavily_search import TavilySearchResults

# 查询 Tavily 搜索 API 并返回 json 的工具
search = TavilySearchResults()
# 执行查询
res = search.invoke("目前市场上苹果手机15的平均售价是多少?")
print(res)

执行查询结果如下: 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.创建检索器

根据上述查询结果中的某个URL中,获取一些数据创建一个检索器。

这里使用一个简单的本地向量库FAISS,使用FAISS的CPU版本,需要安装FAISS库:

python

复制代码pip install faiss-cpu
python复制代码from langchain_community.document_loaders import WebBaseLoader
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter

### 如何使用 LangChain 构建和配置 Agent 构建和配置基于 LangChainAgent 是一个涉及多个模块的过程,主要包括定义代理类型、配置工具集以及集成语言模型等核心组件。以下是关于如何利用 LangChain 实现这一过程的具体说明。 #### 定义代理类型 LangChain 提供了多种类型的 Agent 来满足不同的需求,例如反应型 Agent (`create_react_agent`) 和结构化 Agent 等。这些 Agent 类型决定了其行为模式和解决问题的方式[^2]。通过选择合适的 Agent 类型,可以更好地适配具体的应用场景。 #### 配置工具集 (Tools) 为了增强 Agent 的功能,需要为其提供一组预定义的工具集合。每种工具都对应特定的功能逻辑,可以通过装饰器 `@tool` 进行声明并注册到工具列表中。例如,在给定的例子中有如下自定义工具用于计算单词长度: ```python from langchain.agents import tool @tool def get_word_length(word: str) -> int: """Returns the length of a word.""" return len(word) tools = [get_word_length] ``` 此部分展示了如何创建简单实用的小型工具函数,并将其纳入整体架构之中以便后续调用[^5]。 #### 整合语言模型 Agent 的智能化水平很大程度上取决于所使用的语言模型质量及其参数设置情况。因此,在实际操作过程中需指定恰当的语言模型实例并与之前准备好的其他要素相结合形成完整的执行链路——即所谓的 `agent_executor` 对象: ```python from langchain.llms import OpenAI from langchain.agents import create_react_agent model = OpenAI() # 初始化OpenAI LLM agent_executor = create_react_agent(model, tools=tools) ``` 上述代码片段体现了将选定的大规模预训练模型与先前定制化的工具组相连接的操作方法。 #### 应用部署 完成以上准备工作之后即可考虑把组装完毕后的 Agent 投入生产环境当中投入使用。当面对诸如查询数据库记录之类的任务时,经过良好设计调整过的系统能够自动解析输入请求内容进而生成相应的解决方案[^4]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值