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