天天看点

一键控制10万多个AI模型,HuggingFace做了个「APP Store」

作者:机器之心Pro

机器之心报道

编辑:张倩、蛋酱

通过 Transformers Agents,你可以控制 10 万多个 Hugging Face 模型完成各种多模态任务。

从聊天到编程再到支持各种插件,强大的 ChatGPT 早就不是一个简单的对话助手,而是朝着 AI 界的「管理层」不断前进。

3 月 23 号,OpenAI 宣布 ChatGPT 开始支持各类第三方插件,比如著名的理工科神器 Wolfram Alpha。借助该神器,原本鸡兔同笼都算不准的 ChatGPT 一跃成为理工科尖子生。Twitter 上许多人评论说,ChatGPT 插件的推出看起来有点像 2008 年 iPhone App Store 的推出。这也意味着 AI 聊天机器人正在进入一个新的进化阶段 ——「meta app」阶段。

一键控制10万多个AI模型,HuggingFace做了个「APP Store」

紧接着,4 月初,浙江大学和微软亚研的研究者提出了一种名为「HuggingGPT」的重要方法,可以看做是上述路线的一次大规模演示。HuggingGPT 让 ChatGPT 充当控制器(可以理解为管理层),由它来管理其他的大量 AI 模型,从而解决一些复杂的 AI 任务。具体来说,HuggingGPT 在收到用户请求时使用 ChatGPT 进行任务规划,根据 HuggingFace 中可用的功能描述选择模型,用选定的 AI 模型执行每个子任务,并根据执行结果汇总响应。

这种做法可以弥补当前大模型的很多不足,比如可处理的模态有限,在某些方面比不上专业模型等。

虽然调度的是 HuggingFace 的模型,但 HuggingGPT 毕竟不是 HuggingFace 官方出品。刚刚,HuggingFace 终于出手了。

一键控制10万多个AI模型,HuggingFace做了个「APP Store」

和 HuggingGPT 理念类似,他们推出了一个新的 API——HuggingFace Transformers Agents。通过 Transformers Agents,你可以控制 10 万多个 Hugging Face 模型完成各种多模态任务。

比如在下面这个例子中,你想让 Transformers Agents 大声解释图片上描绘了什么内容。它会尝试理解你的指令(Read out loud thecontent of the image),然后将其转化为 prompt,并挑选合适的模型、工具来完成你指定的任务。

一键控制10万多个AI模型,HuggingFace做了个「APP Store」

英伟达 AI 科学家 Jim Fan 评价说:这一天终于来了,这是迈向「Everything APP」(万事通 APP)的重要一步。

一键控制10万多个AI模型,HuggingFace做了个「APP Store」

不过也有人说,这和 AutoGPT 的自动迭代还不一样,它更像是省掉了写 prompt 并手动指定工具这些步骤,距离万事通 APP 还为时过早。

一键控制10万多个AI模型,HuggingFace做了个「APP Store」

Transformers Agents 地址:https://huggingface.co/docs/transformers/transformers_agents

Transformers Agents 怎么用?

在发布的同时,HuggingFace 就放出了 Colab 地址,任何人都可以上手一试:

https://huggingface.co/docs/transformers/en/transformers_agents

简而言之,它在 transformers 之上提供了一个自然语言 API:首先定义一套策划的工具,并设计了一个智能体来解释自然语言和使用这些工具。

而且,Transformers Agents 在设计上是可扩展的。

团队已经确定了一组可以授权给智能体的工具,以下是已集成的工具列表:

  • 文档问答:给定一个图像格式的文档(例如 PDF),回答关于该文档的问题 (Donut)
  • 文本问答:给定一段长文本和一个问题,回答文本中的问题(Flan-T5)
  • 无条件的图像说明:为图像添加说明 (BLIP)
  • 图片问答:给定一张图片,回答关于这张图片的问题(VILT)
  • 图像分割:给定图像和 prompt,输出该 prompt 的分割掩码(CLIPSeg)
  • 语音转文本:给定一个人说话的录音,将语音转录成文本 (Whisper)
  • 文本到语音:将文本转换为语音(SpeechT5)
  • 零样本文本分类:给定文本和标签列表,确定文本与哪个标签最对应 ( BART )
  • 文本摘要:用一个或几个句子来概括一个长文本(BART)
  • 翻译:将文本翻译成给定的语言(NLLB)

这些工具集成在 transformers 中,也可以手动使用:

from transformers import load_tool

tool = load_tool("text-to-speech")
audio = tool("This is a text to speech tool")
           

用户还可以将工具的代码推送到 Hugging Face Space 或模型存储库,以便直接通过智能体来利用该工具,比如:

  • 文本下载器:从 web URL 下载文本
  • Text to image : 根据 prompt 生成图像,利用 Stable Diffusion
  • 图像转换:在给定初始图像和 prompt 的情况下修改图像,利用 instruct pix2pix stable diffusion
  • Text to video : 根据 prompt 生成小视频,利用 damo-vilab

具体玩法的话,我们先看几个 HuggingFace 的示例:

生成图像描述:

agent.run("Caption the following image", image=image)           
一键控制10万多个AI模型,HuggingFace做了个「APP Store」

朗读文本:

agent.run("Read the following text out loud", text=text)
           

输入:A beaver is swimming in the water

读取文件:

一键控制10万多个AI模型,HuggingFace做了个「APP Store」

快速上手

一键控制10万多个AI模型,HuggingFace做了个「APP Store」

在运行 agent.run, 之前,需要先实例化一个大语言模型智能体。这里支持 OpenAI 的模型以及 BigCode、OpenAssistant 等开源模型。

首先,请安装 agents 附加组件以安装所有默认依赖项:

pip install transformers[agents]           

要使用 openAI 模型,需要在安装依赖项后实例化一个「OpenAiAgent」 openai:

pip install openai

from transformers import OpenAiAgent

agent = OpenAiAgent(model="text-davinci-003", api_key="<your_api_key>")           

要使用 BigCode 或 OpenAssistant,首先登录以访问推理 API:

from huggingface_hub import login

login("<YOUR_TOKEN>")           

然后,实例化智能体:

from transformers import HfAgent

Starcoder
agent = HfAgent("https://api-inference.huggingface.co/models/bigcode/starcoder")
StarcoderBase
agent = HfAgent("https://api-inference.huggingface.co/models/bigcode/starcoderbase")
OpenAssistant
agent = HfAgent(url_endpoint="https://api-inference.huggingface.co/models/OpenAssistant/oasst-sft-4-pythia-12b-epoch-3.5")           

如果用户对此模型(或另一个模型)有自己的推理端点,可以将上面的 URL 替换为自己的 URL 端点。

接下来,我们了解一下 Transformers Agents 提供的两个 API:

单次执行

单次执行是在使用智能体的 run () 方法时:

agent.run("Draw me a picture of rivers and lakes.")           
一键控制10万多个AI模型,HuggingFace做了个「APP Store」

它会自动选择适合要执行的任务的工具并适当地执行,可在同一指令中执行一项或多项任务(不过指令越复杂,智能体失败的可能性就越大)。

agent.run("Draw me a picture of the sea then transform the picture to add an island")
           
一键控制10万多个AI模型,HuggingFace做了个「APP Store」

每个 run () 操作都是独立的,因此可以针对不同的任务连续运行多次。如果想在执行过程中保持状态或将非文本对象传递给智能体,用户可以通过指定希望智能体使用的变量来实现。例如,用户可以生成第一张河流和湖泊图像,并通过执行以下操作要求模型更新该图片以添加一个岛屿:

picture = agent.run("Generate a picture of rivers and lakes.")
updated_picture = agent.run("Transform the image in picture to add an island to it.", picture=picture)
           

当模型无法理解用户的请求并混合使用工具时,这会很有帮助。一个例子是:

agent.run("Draw me the picture of a capybara swimming in the sea")
           

在这里,模型可以用两种方式解释:

  • 让 text-to-image 水豚在海里游泳
  • 或者,生成 text-to-image 水豚,然后使用 image-transformation 工具让它在海里游泳

如果用户想强制执行第一种情况,可以通过将 prompt 作为参数传递给它来实现:

agent.run("Draw me a picture of the prompt", prompt="a capybara swimming in the sea")
           

基于聊天的执行

智能体还有一种基于聊天的方法:

agent.chat("Generate a picture of rivers and lakes")
           
一键控制10万多个AI模型,HuggingFace做了个「APP Store」
agent.chat ("Transform the picture so that there is a rock in there")
           
一键控制10万多个AI模型,HuggingFace做了个「APP Store」

这是一种可以跨指令保持状态时。它更适合实验,但在单个指令上表现更好,而 run () 方法更擅长处理复杂指令。如果用户想传递非文本类型或特定 prompt,该方法也可以接受参数。

参考链接:

https://twitter.com/DrJimFan/status/1656352534213332996

https://twitter.com/cryptonerdcn/status/1656367960175575040

继续阅读