赞
踩
LangChain 代理背后的思想是利用大语言模型以及要执行的一系列操作,代理使用推理引擎来确定要执行哪些操作来获取结果,代理对于处理从简单的自动响应到复杂的上下文感知交互等任务至关重要。例如,您可能有一个与 Google 搜索、Wikipedia 和 OpenAI LLM 集成的代理。使用给定的代理工具,他们可以在 Google 中搜索结果,然后使用维基百科工具中检索到的上下文来查找详细信息并扩展上下文。您必须放置明确定义的指令,以确保代理将以正确的顺序调用工具。
下图展示了代理及其组件的示例:
您可以轻松地将不同类型的 Web 搜索作为可用操作添加到您的代理中,可以是 Google 搜索、Baidu搜索、sohu 等。
您可以从检索器创建一个工具并根据需要对其进行描述,代理将使用此工具来获取某种数据,例如相似性检查和嵌入模型。
例如可以在 Internet 上搜索某种信息,执行推理步骤,然后调用操作来创建 Jira 事务。
LangChain框架已经做了很多API集成,你需要做的就是获取API密钥,安装包并将工具附加到代理上。
您可以编写自定义工具,可以集成您的内部 API、文档系统和许多其他应用程序的集成!
除了拥有代理之外,LangChain还支持链的功能。链是要执行的操作的子序列,始终以硬编码的方式进行。这是代理和链之间的关键区别。虽然在代理中,推理模型可以选择其他操作(从给定的工具)来获取特定数据,但链将始终采用我们选择的相同路径。
与链相比,代理的优势:
当您构建自己的 AI LangChain 解决方案时,您需要了解是使用代理还是使用链?如果您的用例始终基于相同的流程和策略,例如:
那么您可以考虑使用链而不是代理,因为agent的使用成本是不可预测的,因为有些问题可能会在调用一个工具后直接回答,而另一些问题可能会使用一套全面的工具进行适当的推理。如果您的用例基于确定的来自不同来源的事物,那么代理似乎是一个很好的解决方案。另一方面,使用单个工具将复杂的查询划分为更简单的查询,这也是决定是使用链查询还是代理的另一个标准。
工具是执行单个任务的代理的主要组件。它可以是 Web 搜索、矢量数据库搜索或任何其他操作。您可以从社区完成的许多完整工具中进行选择,也可以编写自己的工具。
从 Chroma 数据库创建检索器:
代码语言:shell
retriever = Chroma.from_documents(documents_list, embedding_function).as_retriever()
LangChain还具有从检索器创建工具的非常有用的功能:
代码语言:shell
tool = create_retriever_tool(
retriever,
name="companies_database",
description="Useful when you need to find information about company."
)
对检索工具进行良好的描述是非常重要的,因为代理步骤决策机制就是基于此。如果您的描述缺失或不完整,可能会导致跳过代理执行的操作。
工具包是工具与预定义操作的组合,可以在我们的代理中使用:
先决条件:
代码示例如下:
代码语言:shell
from dotenv import load_dotenv from langchain import hub from langchain.agents import AgentExecutor, create_openai_functions_agent, load_tools from langchain.tools.tavily_search import TavilySearchResults from langchain.utilities.tavily_search import TavilySearchAPIWrapper from langchain_openai import ChatOpenAI load_dotenv() def get_function_tools(): search = TavilySearchAPIWrapper() tavily_tool = TavilySearchResults(api_wrapper=search) tools = [ tavily_tool ] tools.extend(load_tools(['wikipedia'])) return tools def init_action(): llm = ChatOpenAI(model="gpt-4", temperature=0.1) prompt = hub.pull("hwchase17/openai-functions-agent") tools = get_function_tools() agent = create_openai_functions_agent(llm, tools, prompt) agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True) agent_executor.invoke({"input": "Who is the owner of Tesla company? Let me know details about owner."}) init_action()
Dotenv 文件配置环境信息:
代码语言:shell
TAVILY_API_KEY=
OPENAI_API_KEY=
从LangChain v0.1.0版本开始,创建新代理的方式是使用AgentExecutor,您可以通过传递代理和工具轻松定义您的执行器。旧的initialize_agent使用方式被标记为从 v0.1.0 版本开始弃用。
代码语言:shell
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
LangChain v0.1.0 版本提供了一种新的初始化代理的方法,我们必须对每种类型的使用方法进行明确定义,而不是使用initialize_agent。还有 prompt 的附加参数,我们可以使用默认提示词。OpenAI 函数代理的默认提示示例:
代码语言:shell
prompt = hub.pull("hwchase17/openai-functions-agent")
本节我们学习的是LangChain Agent(代理),文中详细的介绍了Agent(代理)的示例,与Chain(链)进行了比较,Agent(代理)使用场景,同时对工具和工具包进行了简单介绍,最后学习了Agent(代理)代码示例。通过本节的学习,我们基本理清了LangChain Agent的使用场景和使用方法,希望对想学习Agent(代理)的同学有所帮助。
小编是一名热爱人工智能的专栏作者,致力于分享人工智能领域的最新知识、技术和趋势。这里,你将能够了解到人工智能的最新应用和创新,探讨人工智能对未来社会的影响,以及探索人工智能背后的科学原理和技术实现。欢迎大家点赞,评论,收藏,让我们一起探索人工智能的奥秘,共同见证科技的进步!
作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。
但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料
包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。