HuggingGPT进化,一键控制10万多个AI模型

本文 机器之心  编辑:张倩、蛋酱

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

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

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

14cd35081f3e01ec0deae41137ed90d4.png

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

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

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

1e283a71510efb1387d5ae8de42988ae.png

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

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

8ded78ce1485e22d3ed0e2117c8e528a.png

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

8e2363535c3e88958d8c6e427f006c2d.png

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

736397defdb1f85bb7a9564f1e9a1a84.png

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)

83266b151ea5d896c07da093c02f8d4c.png

朗读文本:

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

输入:A beaver is swimming in the water

输出:

读取文件:

147c5001c63adf0543782695cc0b5f0b.png

快速上手

6c685a6490457c66508caadfa03c3083.png

在运行 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.")

e5f7fe622b66b64749df7d28eae05f4d.png

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

agent.run("Draw me a picture of the sea then transform the picture to add an island")

305b0c5df34169457b4ec0bfdcd8df82.png

每个 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")

ba00d1d09960e8225ecb34e6aa45b243.png

agent.chat ("Transform the picture so that there is a rock in there")

68f29af92b65b8b51bb54ee5cad7019f.png

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

参考链接:

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

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

关注公众号【机器学习与AI生成创作】,更多精彩等你来读

深入浅出stable diffusion:AI作画技术背后的潜在扩散模型论文解读

深入浅出ControlNet,一种可控生成的AIGC绘画生成算法! 

经典GAN不得不读:StyleGAN

0c7f5fb3414f9323970c7e305d62f5f3.png 戳我,查看GAN的系列专辑~!

一顿午饭外卖,成为CV视觉的前沿弄潮儿!

最新最全100篇汇总!生成扩散模型Diffusion Models

ECCV2022 | 生成对抗网络GAN部分论文汇总

CVPR 2022 | 25+方向、最新50篇GAN论文

 ICCV 2021 | 35个主题GAN论文汇总

超110篇!CVPR 2021最全GAN论文梳理

超100篇!CVPR 2020最全GAN论文梳理

拆解组新的GAN:解耦表征MixNMatch

StarGAN第2版:多域多样性图像生成

附下载 | 《可解释的机器学习》中文版

附下载 |《TensorFlow 2.0 深度学习算法实战》

附下载 |《计算机视觉中的数学方法》分享

《基于深度学习的表面缺陷检测方法综述》

《零样本图像分类综述: 十年进展》

《基于深度神经网络的少样本学习综述》

《礼记·学记》有云:独学而无友,则孤陋而寡闻

6f8e723881184fe75c34cd56bb4441dd.jpeg

点击 一顿午饭外卖,成为CV视觉的前沿弄潮儿!,领取优惠券,加入 AI生成创作与计算机视觉 知识星球!

猜你喜欢

转载自blog.csdn.net/lgzlgz3102/article/details/130737979