天天看點

一鍵控制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

繼續閱讀