人手AutoGPT!讓ChatGPT自選10萬+AI模型,HuggingFace官方出品
前段時間,浙大微軟團隊提出的HuggingGPT在整個科技圈爆火。
這個大模型協作系統利用ChatGPT作為控制器,隨意調用HuggingFace中的各種模型,以實現多模態任務。
讓ChatGPT當「老板」,已經成為許多人看好的方向。
這不,該來的還是來了......
全球最火的AI社區HuggingFace官方出品「Transformers Agent」,通過控制10萬多個AI,也能實現魔法。
英偉達科學家Jim Fan稱贊道,這是向Everything App邁出的第一步,隨著生態系統的擴大,它的能力也不斷增長。
他繼續表示,HuggingGPT是這一想法首次大規模地展示,它使用GPT作為控制器,動態地選擇工具(模型)來解決多階段任務。
ChatGPT的「App Store」當然是AI工具生態系統應用的一個實例。全新Transformers Agent讓你擁有超強buff,快速構建AI智能體。
Transformers,無所不能
用上Transformers Agent,你可以張口來圖,還能讓它為你讀出來。
先來看看幾個例子~
agent.run("Caption the following image", image=image)
第一個先從簡單的開始。輸入一張圖片然后配個解說,一只可愛的河貍在水里游泳(超可愛,想rua)。
agent.run("Read the following text out loud", text=text)
第二個也不難,簡簡單單文字轉語音。
agent.run(
"In the following `document`, where will the TRRF Scientific Advisory Council Meeting take place?",
document=document,
)
這個上了點難度。輸入的要求是,說出科學咨詢委員會會議將在哪里舉辦。
當然對AI來說,檢索到最后一行也是找到了答案。
用戶在使用agent.run之前,需要將一個智能體實例化,也就是一個大型語言模型(LLM)。
研究人員提供了對OpenAI模型的支持,以及來自BigCode和OpenAssistant的開源替代品。
雖然OpenAI的模型性能更好,但用戶得有OpenAI的API密鑰,所以不是免費使用。
Hugging Face表示,正在提供BigCode和OpenAssistant等模型的免費訪問端點。
首先,用戶需要安裝智能體附加程序。
pip install transformers[agents]
要想使用OpenAI的模型,用戶需要在安裝OpenAI dependency項后實例化一個OpenAiAgent:
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")
這是在使用Hugging Face目前免費提供的推理API。如果用戶有自己的推理端點,就可以替換上面的URL。
StarCoder和OpenAssistant是免費使用的,在簡單的任務上表現得不錯。
然而,在處理更復雜的提示時,檢查點就不成立了。如果用戶面臨這樣的問題,可以嘗試一下OpenAI模型,雖然很遺憾它不是開源的,但勝在表現不錯。
單一執行方法是在使用代理的run()方法時使用的:
agent.run("Draw me a picture of rivers and lakes.")
它自動選擇適合你要執行的任務的工具(或工具)并適當地運行它們。它可以在同一指令中執行一個或幾個任務(你的指令越復雜,就越有可能失敗)。
agent.run("Draw me a picture of the sea then transform the picture to add an island")
每個run()操作都是獨立的,所以你可以用不同的任務連續運行幾次。
請注意,用戶的智能體只是一個大語言模型,所以prompt中的小變化可能產生完全不同的結果。盡可能清楚地解釋要執行的任務是很重要的。
研究人員深入地討論了如何寫出更好的prompt。
如果你想在整個執行過程中保持一個狀態,或者向智能體傳遞非文本對象,你可以通過指定變量來做到這一點。
例如,你可以生成第一張河流和湖泊的圖片,并要求模型通過以下方式更新該圖片以增加一個島嶼:
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.chat("Generate a picture of rivers and lakes")
這里讓系統生成一張河流湖泊的照片。
agent.chat("Transform the picture so that there is a rock in there")
下一步,研究人員又讓系統給原圖中加一個島嶼。
當用戶想保持跨指令的狀態時,這是一個很有趣的方法。
它更適合于實驗,但往往在單條指令而不是復雜指令方面會好很多。
如果你想傳遞非文本類型或特定的提示,這個方法也可以接受參數。
要了解如何自己設置遠程執行器工具,研究人員建議用戶閱讀自定義工具指南。
為了與遠程工具一起運行,在run()或chat()中指定remote=True就可以了。
例如,以下命令可以在任何設備上有效地運行,不需要大量的RAM或GPU:
agent.run("Draw me a picture of rivers and lakes", remote=True)
對chat()來說也是一樣的:
agent.chat("Draw me a picture of rivers and lakes", remote=True)
網友表示,Transformers Agent就像AutoGPT一樣。
還有人表示,Transformers Agent打開了自然語言編程的大門,可以想象,未來的操作系統就是智能模型,人類通過自然語言編排任務,越來越多的非開發者可以自己實現各種計算機應用。
什么是工具?什么是智能體?
Transformers Agents整體的運作流程簡單分為四步:
設定目標、提供工具、展示示例、下達任務。
智能體會使用鏈式思考推理來確定其任務,并用提供的工具輸出Python代碼。
如何安裝和使用,官方給出了具體步驟。
https://colab.research.google.com/drive/1c7MHD-T1forUPGcC_jlwsIptOzpG3hSj#scrollTo=fA8jPddeUSMO
其中,這里的「智能體」指的是,一個大型語言模型。通過提示LLM,讓其訪問特定的一組工具。
因為LLM非常擅長生成較小的代碼樣本,所以API利用了這一點優勢。
你可以用抱抱臉自家的OpenAssistant、StarCoder,甚至還可以用OpenAI的模型。
提示LLM給出一個小的代碼樣本,并用一組工具執行一個任務。這個提示包括,給智能體的任務,以及工具的描述。
這樣,「智能體」就可以找到所使用工具的文檔,特別是預期的輸入和輸出,并可以生成相關的代碼。
而「工具」就非常好理解,是一個單獨的函數,帶有名稱和描述。
然后,使用這些工具的描述來提示「智能體」,作用就在于可以像智能體展示如何用工具來執行查詢中的請求內容。
再之后,通過利用Python解釋器在與工具一起上傳的一組輸入中執行代碼。
如果唯一調用的函數是你自己提供的工具和print函數,那么,開發者會在可執行內容上受到限制。當然了,抱抱臉社區的工具,是比較安全的。
除此之外,HuggingFace在Transformers Agents中還集成了以下工具:
- 文檔問答:給定一個圖像格式的文檔(PDF),回答文檔的問題(Donut)
- 文本問答:給定一個長文本和一個問題,回答文本中的問題(Flan-T5)
- 無條件給圖像加標題:(BLIP)
- 圖像問答:給定一個圖像,回答關于這個圖像的問題(VILT)
- 圖像分割:給定一個圖像和一個提示,輸出該提示的分割掩碼(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")
此外,還有一些定制的工具集成在Transformers Agents中,其中包括文本下載器、文本到圖像的擴散模型stable diffusion、圖像變換instruct pix2pix stable diffusion,以及文本到視頻damo-vilab。
官方給出了一個自定義工具和提示的教程:
https://huggingface.co/docs/transformers/en/custom_tools
代碼生成
如上,已經展示了如何使用Transformers Agents流程。
但是,智能體只生成代碼,通過使用非常受限的Python解釋器執行這些代碼。
如果你希望使用在不同設置中生成的代碼,可以提示智能體返回代碼,對工具定義,并準確導入。
比如,根據以下步驟實現:
agent.run("Draw me a picture of rivers and lakes", return_code=True)
返回以下代碼:
from transformers import load_tool
image_generator = load_tool("huggingface-tools/text-to-image")
image = image_generator(prompt="rivers and lakes")
然后,你就可以修改和執行自己的工具了。