在LangChain中,“Agent”是一个与各种“Tool”交互以执行任务或回答查询的AI实体。工具本质上是通过允许代理执行特定操作(如检索当前时间或访问外部数据库)来扩展代理功能。在LangChain中创建代理的基本代码包括定义工具、加载提示模板和初始化语言模型。然后使用AgentExecutor执行代理,该代理管理代理与工具之间的交互。这种设置允许动态和上下文感知响应,使AI能够以结构化的方式进行推理和采取行动。本文带你一步一步实践,让你快速理解Agent,并能进行实践满足你的需求。
概述
在 LangChain 中,代理(Agents)和工具(Tools)是两个重要的概念,它们相互配合,使得语言模型能够更灵活、更强大地处理各种任务,以下是简要介绍:
代理(Agents)
-
定义:代理是 LangChain 中能够根据给定的任务或输入决定采取何种行动的组件,它可以根据一系列的规则和语言模型的输出,动态地决定下一步应该做什么,比如是否需要调用工具、调用哪个工具,以及如何根据工具的返回结果来生成最终的回答。
-
作用
决策与调度:代理能够根据输入和当前的上下文,决定是否需要调用工具以及调用哪些工具来完成任务,起到了决策和调度的核心作用。
增强语言模型能力:通过与工具的结合,代理可以弥补语言模型自身在某些特定任务上的不足,如获取实时信息、进行复杂的计算等,从而增强了整个系统的能力。
提供灵活交互:可以根据不同的用户输入和场景,灵活地调整交互策略,提供更加个性化和自适应的交互体验。
-
示例:在一个问答系统中,代理可以根据用户的问题判断是否需要调用搜索引擎工具来获取最新的信息,若问题是 “2024 年奥运会的举办城市是哪里”,代理会调用搜索工具获取相关信息后再回答用户。
工具(Tools)
-
定义:工具是 LangChain 中为代理提供额外功能的组件,它们可以是各种外部的 API、数据库、计算引擎等,用于执行特定的任务,如搜索信息、进行数学计算、调用知识图谱等。
-
作用
拓展功能边界:工具的存在使得 LangChain 能够利用外部资源和专业服务,极大地拓展了语言模型能够处理的任务范围,让语言模型可以与现实世界的各种数据和服务进行交互。
提高准确性和效率:在处理一些需要特定领域知识或专业计算的任务时,工具可以提供更准确和高效的解决方案,避免语言模型仅凭自身能力可能出现的错误或低效。
-
示例:常见的工具包括搜索引擎工具,如调用百度、谷歌搜索来获取网页信息;还有计算工具,用于进行复杂的数学运算;以及知识图谱工具,用于查询特定的知识实体和关系等。
实战示例
下面实例,我们分步骤进行讲解说明,最后给出完整示例,建议你也可以动手进行测试。
Import语句:这个块导入必要的库和模块:
from dotenv import load_dotenv
from langchain import hub
from langchain.agents import (
AgentExecutor,
create_react_agent,
)
from langchain_core.tools import Tool
from langchain_openai import ChatOpenAI
# from langchain_community.chat_models import ChatZhipuAI (智普大模型)
# Load environment variables from .env file
load_dotenv()
-
load_dotenv:这个函数将环境变量从.env文件加载到系统的环境变量中。这种方式避免将AP