一鍵控制10萬多個AI模型,HuggingFace給類ChatGPT模型們做了個「APP Store」
從聊天到編程再到支持各種插件,強大的 ChatGPT 早就不是一個簡單的對話助手,而是朝著 AI 界的「管理層」不斷前進。
3 月 23 號,OpenAI 宣布 ChatGPT 開始支持各類第三方插件,比如著名的理工科神器 Wolfram Alpha。借助該神器,原本雞兔同籠都算不準(zhǔn)的 ChatGPT 一躍成為理工科尖子生。Twitter 上許多人評論說,ChatGPT 插件的推出看起來有點像 2008 年 iPhone App Store 的推出。這也意味著 AI 聊天機器人正在進入一個新的進化階段 ——「meta app」階段。
緊接著,4 月初,浙江大學(xué)和微軟亞研的研究者提出了一種名為「HuggingGPT」的重要方法,可以看做是上述路線的一次大規(guī)模演示。HuggingGPT 讓 ChatGPT 充當(dāng)控制器(可以理解為管理層),由它來管理其他的大量 AI 模型,從而解決一些復(fù)雜的 AI 任務(wù)。具體來說,HuggingGPT 在收到用戶請求時使用 ChatGPT 進行任務(wù)規(guī)劃,根據(jù) HuggingFace 中可用的功能描述選擇模型,用選定的 AI 模型執(zhí)行每個子任務(wù),并根據(jù)執(zhí)行結(jié)果匯總響應(yīng)。
這種做法可以彌補當(dāng)前大模型的很多不足,比如可處理的模態(tài)有限,在某些方面比不上專業(yè)模型等。
雖然調(diào)度的是 HuggingFace 的模型,但 HuggingGPT 畢竟不是 HuggingFace 官方出品。剛剛,HuggingFace 終于出手了。
和 HuggingGPT 理念類似,他們推出了一個新的 API——HuggingFace Transformers Agents。通過 Transformers Agents,你可以控制 10 萬多個 Hugging Face 模型完成各種多模態(tài)任務(wù)。
比如在下面這個例子中,你想讓 Transformers Agents 大聲解釋圖片上描繪了什么內(nèi)容。它會嘗試?yán)斫饽愕闹噶睿≧ead out loud thecontent of the image),然后將其轉(zhuǎn)化為 prompt,并挑選合適的模型、工具來完成你指定的任務(wù)。
英偉達(dá) AI 科學(xué)家 Jim Fan 評價說:這一天終于來了,這是邁向「Everything APP」(萬事通 APP)的重要一步。
不過也有人說,這和 AutoGPT 的自動迭代還不一樣,它更像是省掉了寫 prompt 并手動指定工具這些步驟,距離萬事通 APP 還為時過早。
Transformers Agents 地址:https://huggingface.co/docs/transformers/transformers_agents
Transformers Agents 怎么用?
在發(fā)布的同時,HuggingFace 就放出了 Colab 地址,任何人都可以上手一試:
https://huggingface.co/docs/transformers/en/transformers_agents
簡而言之,它在 transformers 之上提供了一個自然語言 API:首先定義一套策劃的工具,并設(shè)計了一個智能體來解釋自然語言和使用這些工具。
而且,Transformers Agents 在設(shè)計上是可擴展的。
團隊已經(jīng)確定了一組可以授權(quán)給智能體的工具,以下是已集成的工具列表:
- 文檔問答:給定一個圖像格式的文檔(例如 PDF),回答關(guān)于該文檔的問題 (Donut)
- 文本問答:給定一段長文本和一個問題,回答文本中的問題(Flan-T5)
- 無條件的圖像說明:為圖像添加說明 (BLIP)
- 圖片問答:給定一張圖片,回答關(guān)于這張圖片的問題(VILT)
- 圖像分割:給定圖像和 prompt,輸出該 prompt 的分割掩碼(CLIPSeg)
- 語音轉(zhuǎn)文本:給定一個人說話的錄音,將語音轉(zhuǎn)錄成文本 (Whisper)
- 文本到語音:將文本轉(zhuǎn)換為語音(SpeechT5)
- 零樣本文本分類:給定文本和標(biāo)簽列表,確定文本與哪個標(biāo)簽最對應(yīng) ( 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 : 根據(jù) prompt 生成圖像,利用 Stable Diffusion
- 圖像轉(zhuǎn)換:在給定初始圖像和 prompt 的情況下修改圖像,利用 instruct pix2pix stable diffusion
- Text to video : 根據(jù) prompt 生成小視頻,利用 damo-vilab
具體玩法的話,我們先看幾個 HuggingFace 的示例:
生成圖像描述:
agent.run("Caption the following image", image=image)
朗讀文本:
agent.run("Read the following text out loud", text=text)
輸入:A beaver is swimming in the water
輸出:
tts_example音頻:00:0000:01
讀取文件:
在運行 agent.run, 之前,需要先實例化一個大語言模型智能體。這里支持 OpenAI 的模型以及 BigCode、OpenAssistant 等開源模型。
首先,請安裝 agents 附加組件以安裝所有默認(rèn)依賴項:
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:
單次執(zhí)行
單次執(zhí)行是在使用智能體的 run () 方法時:
agent.run("Draw me a picture of rivers and lakes.")
它會自動選擇適合要執(zhí)行的任務(wù)的工具并適當(dāng)?shù)貓?zhí)行,可在同一指令中執(zhí)行一項或多項任務(wù)(不過指令越復(fù)雜,智能體失敗的可能性就越大)。
agent.run("Draw me a picture of the sea then transform the picture to add an island")
每個 run () 操作都是獨立的,因此可以針對不同的任務(wù)連續(xù)運行多次。如果想在執(zhí)行過程中保持狀態(tài)或?qū)⒎俏谋緦ο髠鬟f給智能體,用戶可以通過指定希望智能體使用的變量來實現(xiàn)。例如,用戶可以生成第一張河流和湖泊圖像,并通過執(zhí)行以下操作要求模型更新該圖片以添加一個島嶼:
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)
當(dāng)模型無法理解用戶的請求并混合使用工具時,這會很有幫助。一個例子是:
agent.run("Draw me the picture of a capybara swimming in the sea")
在這里,模型可以用兩種方式解釋:
- 讓 text-to-image 水豚在海里游泳
- 或者,生成 text-to-image 水豚,然后使用 image-transformation 工具讓它在海里游泳
如果用戶想強制執(zhí)行第一種情況,可以通過將 prompt 作為參數(shù)傳遞給它來實現(xiàn):
agent.run("Draw me a picture of the prompt", prompt="a capybara swimming in the sea")
基于聊天的執(zhí)行
智能體還有一種基于聊天的方法:
agent.chat("Generate a picture of rivers and lakes")
agent.chat ("Transform the picture so that there is a rock in there")
這是一種可以跨指令保持狀態(tài)時。它更適合實驗,但在單個指令上表現(xiàn)更好,而 run () 方法更擅長處理復(fù)雜指令。如果用戶想傳遞非文本類型或特定 prompt,該方法也可以接受參數(shù)。