🤗Hugging Face Transformers Agent
就在两天前,🤗Hugging Face 发布了 Transformers Agent——一种利用自然语言从精选工具集合中选择工具并完成各种任务的代理。听着是不是似曾相识? 没错,Hugging Face Transformers Agent 跟🦜🔗LangChain 工具和代理很像。 本文,我将介绍什么是 Transformers Agent 以及它与 🦜🔗LangChain Agent 的比较。
什么是 Transformers Agent?
简而言之,Transformers Agent 在 Transformer 之上提供了一个自然语言 API:我们可以定义一组精选工具并设计了一个代理来解释自然语言并使用这些工具。
世界各地的开发者在 Hugging Face 上托管了很多超赞的模型。 这么多模型要如何挑选使用呢?于是有人突发灵感——我们可以将这些模型与 LLM 融合吗? 我们可以使用 LLM 来决定使用哪个模型、编写代码、运行代码并生成结果吗? 从本质上讲,没有人需要再学习所有复杂的特定任务模型。只要给它一个任务,LLMs(Agent)就会为我们包办一切。
实现步骤如下:
图片来源:https://huggingface.co/docs/transformers/transformers_agents
- 指令(Instruction):用户给出的提示;
- 提示(Promt):添加了具体说明的提示模板,其中列出了多个要使用的工具;
- 工具(Tools):精选的 Transformer 模型列表,例如用于问答的 Flan-T5;
- 代理(Agen):解释问题、决定使用哪些工具并生成代码以使用工具执行任务的 LLM;
- 受限 Python 解释器(Restricted Python Interpreter):执行 Python 代码。
Transformers Agent 工作原理
第一步:实例化代理
第一步是实例化一个代理。 代理只是一个 LLM,它可以是 OpenAI 模型、StarCoder 模型或 OpenAssistant 模型。
其中 OpenAI 模型不是免费的,需要提供 OpenAI API 密钥。
StarCoder 模型和 OpenAssistant 模型是免费的。从 HuggingFace Hub 加载 StarCoder 模型和 OpenAssistant 模型,需要 HuggingFace Hub API 密钥。
from transformers import HfAgent
# OpenAI
agent = OpenAiAgent(model="text-davinci-003", api_key="<your_api_key>")
from transformers import OpenAiAgent
from huggingface_hub import login
login("<YOUR_TOKEN>")
# Starcoder
agent = HfAgent("https://api-inference.huggingface.co/models/bigcode/starcoder")
# OpenAssistant
agent = HfAgent(url_endpoint="https://api-inference.huggingface.co/models/OpenAssistant/oasst-sft-4-pythia-12b-epoch-3.5")
第二步:运行Agent
通过执行 agent.run("prompt")
方法并带上提示,即可自动理解任务,并为任务选择工具,例如选择图像生成工具来创建图像。
agent.chat("prompt")
方法保留聊天记录。 例如,这里它知道我们之前生成了一张图片,它可以转换图像。
与 🦜🔗LangChain Agent 的区别
Transformers Agent 仍处于试验阶段。 它的使用范围比 LangChain Agent 小得多,灵活性也较差。 Transformers Agent 目前主要聚焦于使用 Transformer 模型和执行 Python 代码,而 LangChain Agent 则“几乎” 可以做任何事情。 我们具体比较一下 Transformers Agent 和 LangChain Agents 之间各组件的不同:
工具(Tools)
🤗Hugging Face
🤗Hugging Face Transfomers Agent 有一个超赞的工具列表,每个工具都由 Transformer 模型提供支持。这些工具提供了三个显著优势:
- 尽管 Transformers Agent 目前只能与少数工具进行交互,但它有与超过 100,000 个 Hugging Face 模型进行通信的潜能。它拥有完整的多模态功能,包括文本、图像、视频、音频和文档。
- 由于这些模型是为特定任务专门构建的,与仅依赖 LLM 相比,使用它们可以更直接,并可以生成更准确的结果。 例如,我们可以简单地部署专为文本分类设计的 BART,而不是为 LLM 设计文本分类的提示;
- 这些工具解锁了 LLM 无法单独完成的功能。以 BLIP 为例,它使我们能够生成引人入胜的图像说明——这是一项超出 LLM 范围的任务。
🦜🔗LangChain
🦜🔗LangChain 的工具都是外部API,比如Google Search,Python REPL等。事实上,LangChain 通过 load_huggingface_tool
函数支持 HuggingFace Tools。LangChain 可以做很多 Transformers Agent 已经可以做的事情。 另一方面,Transformers Agents 也有可能整合所有 LangChain 工具。
这两种情况下,每个工具都只是一个 Python 文件。这是 🤗Hugging Face Transformers Agent 工具的源代码,这是 🦜🔗LangChain 工具的源代码。 如你所见,每个 Python 文件代表一个工具,一个工具一个类。
代理(Agent)
🤗Hugging Face
🤗Hugging Face Transformers Agent 使用提示模板,根据工具的描述来决定使用哪个工具。它要求 LLM 提供解释,并在提示中提供一些小样本学习示例。
🦜🔗LangChain
🦜🔗LangChain 默认使用 ReAct 框架,根据工具的描述来决定使用哪个工具。关于 ReAct 框架的更多信息,请阅读此论文。LangChain Agent不仅能对决定采取行动,还能提供想法和推理,这类似于 Transformers Agent 使用的解释。此外,🦜🔗LangChain 有四种代理类型:
zero-shot-react-description
该代理使用 ReAct 框架,仅根据工具的描述来确定要使用的工具。可以提供任意数量的工具。此代理要求为每个工具提供描述。
react-docstore
该代理使用 ReAct 框架与文档库进行交互。必须提供两个工具:一个搜索工具
和一个查找工具
(它们的名称必须完全一样)。搜索工具
负责搜索文档,而查找工具
负责在最近找到的文档中查找术语。该代理与原始 ReAct 论文 一致,特别是维基百科的例子。self-ask-with-search
该代理使用一个名为
Intermediate Answer
的工具。该工具能够查找问题的事实答案。该代理来自 self ask with search 原始论文,其中提供了一个 Google 搜索 API 作为工具。conversational-react-description
该代理被设计用于会话设置。提示旨在让代理更健谈、更有用。它使用 ReAct 框架来决定使用哪个工具,并使用内存来记住之前的对话交互。
自定义代理
在 🤗Hugging Face Transformers Agent 和 🦜🔗LangChain Agent 上创建自定义代理都很容易:
🤗Hugging Face Transformers Agent**:请参阅此 colab 末尾的 HuggingFace Transformer Agent 示例。
代码执行
🤗Hugging Face
🤗Hugging Face Transformers Agent 包括“代码执行”作为 LLM 选择工具并生成代码后的步骤之一。这限制了 Transformers Agent 执行 Python 代码的目标。
🦜🔗LangChain
🦜🔗LangChain 将“代码执行”作为其工具之一,这意味着执行代码并不是整个过程的最后一步。这为任务目标是什么提供了更多的灵活性:它可以是执行 Python 代码,也可以是其他的东西,比如进行谷歌搜索并返回搜索结果。
结论
本文我们探索了🤗Hugging Face Transformers Agents 的功能,并将其与🦜🔗LangChain Agents 进行了比较。尽管现在 🤗Hugging Face Transformers Agents 的功能还不如 🦜🔗LangChain 灵活强大,但 🤗Hugging Face Transformers Agents 背靠Hugging Face后面庞大的模型库,尤其自身的突出优势。期待 🤗Hugging Face Transformers Agents 的进一步发展和进步。
如果你想快速体验 🤗Hugging Face Transformers Agent,可以通过 Hugging Face 提供的 Colab 进行体验。