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