工具,则是代理身上延展出的三头六臂,是代理的武器,代理通过工具来与世界进行交互,控制并改造世界
工具
LangChain通过提供一个统一的框架来集成功能的具体实现。在这个框架中,每个功能都被封装成一个工具。每个工具都有自己的输入和输出,以及处理这些输入和生成输出的方法。
大模型与工具的交互是多次的,通过某种策略或者大模型自己的推理,选择了一种工具得到一个输出,大模型可能又利用这个输出再次推理出使用别的工具......
如何加载工具
这里就直接放小册中的内容了。
在程序中,可以使用以下代码片段加载工具。
from langchain.agents import load_tools
tool_names = [...]
tools = load_tools(tool_names)
某些工具(例如链、代理)可能需要 LLM 来初始化它们。
from langchain.agents import load_tools
tool_names = [...]
llm = ...
tools = load_tools(tool_names, llm=llm)
arXiv工具的使用
具体细节还是直接看链接吧:arXiv工具的使用
过程很简单,依旧是把这个工具作为代理初始化的一个参数,当加入这个参数后,代理的提示词会做相应的变化,使得模型遇到问题可以调用这个工具去搜索。
LangChain工具箱一览
使用 Gmail 工具箱开发个人助理
具体细节依旧是直接看链接:[Gmail工具箱开发个人助理]
整个过程也比较简单,但是很有趣。和传统的不同,原本我们需要一步步去编写代码去指定在某个时间,需要去哪里使用什么api去查看邮件或者发送邮件,这一个个代码全都是具体的、清晰的。但是如果我们采用LangChain这种方式去操作邮箱,我们只需要指定提示词,或者换句话说只需要用自然语言去交流我们想要实现的功能,代理就会根据大模型的推理去自动选定Gmail的工具包去实现查看邮件等等功能。
当然这里的难点主要在于搞懂Gmail的api如何配置🤣🤣
简单总结一下LangChain的好处,我们一直在强调LangChain是一个框架,事实上他就是一个架子,我们使用这个框架呢其实就是搭积木。把架子一放,然后就是不断组合各种积木去实现我们想要实现的功能。这里的架子呢其实指的是一个通用的盒,这个盒内部帮我们做了很多事使我们不必花时间去纠结细节,而只需关注外部的输入和输出;积木呢其实就是各种工具,通过组合工具,再配合llm,最终我们实现的功能就会非常强大。