其实在前面的学习已经多次提到了工具的概念,这一部分的工具,我觉得更多的是在解释工具和代理的协同工作机制,工具是代理的武器,工具来与世界进行交互,控制并改变世界。
我来仔细整理一下代理和工具的协调过程,代理接收到一个任务,它会根据任务的类型和需求,通过大模型的推理,来选择合适的工具处理这个任务。这个选择过程可以基于各种策略,例如基于工具的性能,或者基于工具处理特定类型任务的能力。 接下来LangChain就会将任务的输入传递给这个工具,然后工具会处理这些输入并生成输出。这个输出又经过大模型的推理,可以被用作其他工具的输入,或者作为最终结果,被返回给用户。
几个小例子,可以使用 arXiv 工具开发科研助理,也可以使用 Gmail 工具箱开发个人助理,期望AI Agent能够成为全能自动助理,开发出的智能应用应该能帮助检查邮件、写草稿,甚至发邮件、写文档:
# 设置OpenAI API的密钥
import os
os.environ["OPENAI_API_KEY"] = 'Your Key'
# 导入与Gmail交互所需的工具包
from langchain.agents.agent_toolkits import GmailToolkit
# 初始化Gmail工具包
toolkit = 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_resource)
# 获取工具
tools = toolkit.get_tools()
print(tools)
# 导入与聊天模型相关的包
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(
"今天易速鲜花客服给我发邮件了么?最新的邮件是谁发给我的?"
)
# 打印结果
print(result)
以上就是工具和代理的协同工作机制,下面我们将介绍检索增强生成(RAG,Retrieval-Augmented Generation)。
RAG的主要内容可以理解为将传统语言生成模型和大规模外部知识库相结合进行工作。RAG在业务领域有众多的应用,我们在下一篇文章中进行详细的叙述。这里我们简单叙述一下。
RAG的工作原理,可以分为三个部分,首先是检索,通常基于密集向量搜索,例如ChromaDB、Faiss这样的向量数据库;其次是上下文编码,找到相关文档,同原始输入一起编码;最后,就是大模型的结果生成。