就像我在以前的文章里面说过的以LLM(大语言模型)为核心,整合其他专业模型是实现多模态一个大趋势。这两天又有人这么做了:HuggingFace 发布了Transformers Agent。其实我在前一段时间看到HaggingGPT的时候就想,用ChatGPT调用HuggingFace上的模型,这件事何必让别人干呢,HuggingFace自己干,它不香么?果然现在就来了。
colab: https://colab.research.google.com/drive/1c7MHD-T1forUPGcC_jlwsIptOzpG3hSj
简而言之,它就是在Transformers之上提供了一个自然语言 API:HuggingFace定义了一组精选工具并设计了一个代理来解释自然语言并使用这些工具。它在设计上是可扩展的;HuggingFace策划了一些相关工具,但是可以轻松扩展系统以使用社区开发的任何工具。架构如下图所示:

这里的“Agent”是一个大型语言模型,我们正在提示它以便它可以访问一组特定的工具。LLM 非常擅长生成小代码示例,利用了这一点, API 通过提示 LLM 生成一小部分代码,进而来调用一组工具来执行任务。
工具非常简单:它们是一个单一的功能,有一个名称和一个描述。然后我们使用这些工具的描述来提示代理。通过提示,我们向代理展示它将如何利用工具来执行查询中请求的内容。
文档问答:给定一个图像格式的文档(例如 PDF),回答关于该文档的问题(Donut)
文本问答:给定一段长文本和一个问题,回答文本中的问题(Flan-T5)
无条件图像说明:为图像添加说明!(BLIP)
图片问答:给定一张图片,回答关于这张图片的问题(VILT)
图像分割:给定图像和提示,输出该提示的分割掩码(CLIPSeg)
语音转文本:给定一个人说话的录音,将语音转录成文本(Whisper)
文本到语音:将文本转换为语音(SpeechT5)
零样本文本分类:给定文本和标签列表,确定文本与哪个标签最对应 ( BART )
文本摘要:用一个或几个句子来概括一个长文本(BART)
翻译:将文本翻译成给定的语言(NLLB)
例如先让它画一个湖:
agent.chat( "Generate a picture of rivers and lakes" )

然后让它改造图片,让里面有一块石头。
agent.chat( "Transform the picture so that there is a rock in there" )

或者先画个海狸:

再加上雪
