从之前了解的知识可以看出,在LangChain之中,Agent是核心之重。
而在Agent之中,可以将LLM看作一个大脑,其可以使用的工具可以看作是其四肢,供其与世界交互,控制并改造世界。
而在LangChain中,工具可以是一个通用的程序,比如搜索,也可以是其他链,甚至是其他的Agent。
上面多种功能,最终都被封装为一个工具,每个工具都有自己的输入和输出。以及告诉大模型自己的能力,那么当agent得到一个任务,其内部的llm会根据任务的类型和需求。来选择不同的策略,选择不同的工具来执行。最终得到答案,将其输出给客户或者另一个agent。
那么在LangChain之中,支持的内置工具主要有:
https://python.langchain.com/docs/integrations/tools/
这里给出一些内置工具列表。
当然在LangChain之中,也支持自定义工具
https://python.langchain.com/docs/modules/agents/tools/custom_tools
这里我们拿arXiv作为举例,配合OpenAI形成一个Agent,进行使用
arXiv是一个论文研究工具,专门供我们搜索论文并进行分析,获取论文点。
llm = ChatOpenAI(temperature=0.0)
tools = load_tools( [“arxiv”], ) # 初始化链 agent_chain = initialize_agent( tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True, ) # 运行链 agent_chain.run(“介绍一下2005.14165这篇论文的创新点?”) |
这就是一个简单的代理使用方式。
除了简单的工具之外,LangChain还将工具封装为了工具箱,每一个工具箱之中有一系列的工具:
https://python.langchain.com/docs/integrations/toolkits/
这里我们也给出一些示例
这里我们可以以Gmail Toolkit来进行一个简单的示例开发。
我们进行集成Gmail邮箱,让AI助手自动检查邮箱,并获取邮件内容。
这里假设我们已经拥有了gmail的token了,之后就是使用这个token生成对应的Gmail 客户端,并且利用Gmail的agent来调用Gmail获取邮件相关信息。
# 导入与Gmail交互所需的工具包
from langchain.agents.agent_toolkits import GmailToolkit # 从gmail工具中导入一些有用的功能 from langchain.tools.gmail.utils import build_resource_service, get_gmail_credentials # 获取Gmail API的凭证,并指定相关的权限范围 credentials = get_gmail_credentials( token_file=”token.json”, # Token文件路径 scopes=[“https://mail.google.com/”], # 具有完全的邮件访问权限 client_secrets_file=”credentials.json”, # 客户端的秘密文件路径 ) # 使用凭证构建API资源服务 api_resource = build_resource_service(credentials=credentials) toolkit = GmailToolkit(api_resource=api_resourc # 获取工具 tools = toolkit.get_tools() print(tools) |
这样我们就可以利用这个tools,来生成一个Agent了。
# 导入与聊天模型相关的包
from langchain.chat_models import ChatOpenAI from langchain.agents import initialize_agent, AgentType # 初始化聊天模型 llm = ChatOpenAI(temperature=0, model=’gpt-4′) # 通过指定的工具和聊天模型初始化agent agent = initialize_agent( tools=toolkit.get_tools(), llm=llm, agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION, ) # 使用agent运行一些查询或指令 result = agent.run( “今天都有谁给我发邮件了?” ) |
最终我得到的回答是,今天有xxx给我发来了广告促销的邮件。
最后总结一下
在LangChain之中,我们利用Tool和Toolkit,从而实现了将多个功能集成给同一个Agent从而扩展了能力,可以处理多种类型的输入。