机器之心报导
编辑:张倩、蛋酱
经过 Transformers Agents,你能够控制 10 万多个 Hugging Face 模型完结各种多模态使命。
从谈天到编程再到支持各种插件,强壮的 ChatGPT 早就不是一个简单的对话帮手,而是朝着 AI 界的「管理层」不断前进。
3 月 23 号,OpenAI 宣告 ChatGPT 开始支持各类第三方插件,比方闻名的理工科神器 Wolfram Alpha。凭借该神器,本来鸡兔同笼都算不准的 ChatGPT 一跃成为理工科尖子生。Twitter 上许多人评论说,ChatGPT 插件的推出看起来有点像 2008 年 iPhone App Store 的推出。这也意味着 AI 谈天机器人正在进入一个新的进化阶段 ——「meta app」阶段。
紧接着,4 月初,浙江大学和微软亚研的研究者提出了一种名为「HuggingGPT」的重要办法,能够看做是上述路线的一次大规模演示。HuggingGPT 让 ChatGPT 充任控制器(能够了解为管理层),由它来管理其他的大量 AI 模型,从而处理一些杂乱的 AI 使命。具体来说,HuggingGPT 在收到用户请求时运用 ChatGPT 进行使命规划,依据 HuggingFace 中可用的功能描述选择模型,用选定的 AI 模型履行每个子使命,并依据履行结果汇总响应。
这种做法能够补偿当时大模型的许多缺乏,比方可处理的模态有限,在某些方面比不上专业模型等。
尽管调度的是 HuggingFace 的模型,但 HuggingGPT 毕竟不是 HuggingFace 官方出品。刚刚,HuggingFace 总算出手了。
和 HuggingGPT 理念相似,他们推出了一个新的 API——HuggingFace Transformers Agents。经过 Transformers Agents,你能够控制 10 万多个 Hugging Face 模型完结各种多模态使命。
比方在下面这个比方中,你想让 Transformers Agents 大声解说图片上描绘了什么内容。它会测验了解你的指令(Read out loud thecontent of the image),然后将其转化为 prompt,并挑选适宜的模型、东西来完结你指定的使命。
英伟达 AI 科学家 Jim Fan 点评说:这一天总算来了,这是迈向「Everything APP」(万事通 APP)的重要一步。
不过也有人说,这和 AutoGPT 的主动迭代还不一样,它更像是省掉了写 prompt 并手动指定东西这些步骤,距离万事通 APP 还为时过早。
Transformers Agents 地址:huggingface.co/docs/transf…
Transformers Agents 怎样用?
在发布的一起,HuggingFace 就放出了 Colab 地址,任何人都能够上手一试:
huggingface.co/docs/transf…
简而言之,它在 transformers 之上提供了一个自然言语 API:首要界说一套策划的东西,并规划了一个智能体来解说自然言语和运用这些东西。
而且,Transformers Agents 在规划上是可扩展的。
团队已经确认了一组能够授权给智能体的东西,以下是已集成的东西列表:
-
文档问答:给定一个图画格式的文档(例如 PDF),回答关于该文档的问题 (Donut)
-
文本问答:给定一段长文本和一个问题,回答文本中的问题(Flan-T5)
-
无条件的图画阐明:为图画增加阐明 (BLIP)
-
图片问答:给定一张图片,回答关于这张图片的问题(VILT)
-
图画分割:给定图画和 prompt,输出该 prompt 的分割掩码(CLIPSeg)
-
语音转文本:给定一个人说话的录音,将语音转录成文本 (Whisper)
-
文本到语音:将文本转换为语音(SpeechT5)
-
零样本文本分类:给定文本和标签列表,确认文本与哪个标签最对应 ( BART )
-
文本摘要:用一个或几个句子来概括一个长文本(BART)
-
翻译:将文本翻译成给定的言语(NLLB)
这些东西集成在 transformers 中,也能够手动运用:
fromtransformersimportload_tool
tool=load_tool("text-to-speech")
audio=tool("Thisisatexttospeechtool")
用户还能够将东西的代码推送到 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("Captionthefollowingimage",image=image)
朗读文本:
agent.run("Readthefollowingtextoutloud",text=text)
输入:A beaver is swimming in the water
输出:
一段1秒的音频,tts_example
读取文件:
快速上手
在运转 agent.run, 之前,需要先实例化一个大言语模型智能体。这儿支持 OpenAI 的模型以及 BigCode、OpenAssistant 等开源模型。
首要,请装置 agents 附加组件以装置一切默许依赖项:
pipinstalltransformers[agents]
要运用 openAI 模型,需要在装置依赖项后实例化一个「OpenAiAgent」 openai:
pipinstallopenai
fromtransformersimportOpenAiAgent
agent=OpenAiAgent(model="text-davinci-003",api_key="<your_api_key>")
要运用 BigCode 或 OpenAssistant,首要登录以访问推理 API:
fromhuggingface_hubimportlogin
login("<YOUR_TOKEN>")
然后,实例化智能体:
fromtransformersimportHfAgent
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("Drawmeapictureofriversandlakes.")
它会主动选择合适要履行的使命的东西并适当地履行,可在同一指令中履行一项或多项使命(不过指令越杂乱,智能体失利的可能性就越大)。
agent.run("Drawmeapictureoftheseathentransformthepicturetoaddanisland")
每个 run () 操作都是独立的,因此能够针对不同的使命接连运转多次。假如想在履行过程中坚持状况或将非文本对象传递给智能体,用户能够经过指定期望智能体运用的变量来完成。例如,用户能够生成第一张河流和湖泊图画,并经过履行以下操作要求模型更新该图片以增加一个岛屿:
picture=agent.run("Generateapictureofriversandlakes.")
updated_picture=agent.run("Transformtheimageinpicturetoaddanislandtoit.",picture=picture)
当模型无法了解用户的请求并混合运用东西时,这会很有协助。一个比方是:
agent.run("Drawmethepictureofacapybaraswimminginthesea")
在这儿,模型能够用两种方式解说:
-
让 text-to-image 水豚在海里游泳
-
或许,生成 text-to-image 水豚,然后运用 image-transformation 东西让它在海里游泳
假如用户想强制履行第一种状况,能够经过将 prompt 作为参数传递给它来完成:
agent.run("Drawmeapictureoftheprompt",prompt="acapybaraswimminginthesea")
根据谈天的履行
智能体还有一种根据谈天的办法:
agent.chat("Generateapictureofriversandlakes")
agent.chat("Transformthepicturesothatthereisarockinthere")
这是一种能够跨指令坚持状况时。它更合适实验,但在单个指令上体现更好,而 run () 办法更拿手处理杂乱指令。假如用户想传递非文本类型或特定 prompt,该办法也能够承受参数。
参阅链接:
twitter.com/DrJimFan/st…
twitter.com/cryptonerdc…