从之前了解的知识可以看出,在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从而扩展了能力,可以处理多种类型的输入。

发表评论

邮箱地址不会被公开。 必填项已用*标注