日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

大模型的“手和腳”——連接外部應(yīng)用的通道函數(shù)調(diào)用(function calling),AI Agent的實現(xiàn)方式之一

 kbmgmg 2024-07-13 發(fā)布于福建

 AI Agent就是大模型通過外部接口構(gòu)建的手腳健全的智能體

怎么讓大模型像真正的人類一樣能夠獨立思考,使用外部工具;這是很多人都在考慮的問題,而這就是AI Agent(AI 代理),一個類人的智能體。

但怎么實現(xiàn)AI Agent又是一個值得思考的問題,而今天就講解一下通過調(diào)用外部工具實現(xiàn)AI Agent的方式——函數(shù)調(diào)用(function calling)。

01

什么是函數(shù)調(diào)用,為什么選擇函數(shù)調(diào)用?

大模型作為人工智能最火的技術(shù),從功能上來講它更像一個“大腦”,它沒有“手和腳”,因此它的能力范圍很有限。

而且因為大模型無法獲取實時信息,所以從這一點來說它和人的差距有點大。

但能不能讓它具備人的能力呢?也就是通過外部工具獲取實時信息,或者是它能力圈之外的事情。

圖片

舉個例子,你問大模型今天的天氣怎么樣,溫濕度是多少?這樣的問題,即使是人也無法給出準(zhǔn)確的回答,但可以通過天氣APP獲取到這些信息。

因此,只需要讓大模型具有訪問查詢天氣情況接口的能力,那么這個問題就可以被解決了,而類似于查詢天氣的這種接口,統(tǒng)一稱為工具(tool)。

但大模型本身又不具備調(diào)用網(wǎng)絡(luò)的能力,那么怎么才能實現(xiàn)這個功能呢?

這時函數(shù)調(diào)用的作用就體現(xiàn)出來了,所謂的函數(shù)就是一個能實現(xiàn)特定功能的代碼段,它們有設(shè)定的輸入?yún)?shù)和返回值,這樣就可以使用函數(shù)調(diào)用各種工具實現(xiàn)大模型無法實現(xiàn)的功能。

之所以選擇函數(shù)調(diào)用,原因就是因為函數(shù)調(diào)用比較簡單,大模型只需要返回幾個參數(shù)即可實現(xiàn)函數(shù)調(diào)用。

02


function call的實現(xiàn)過程

在正常的開發(fā)流程中,不論是函數(shù)調(diào)用還是API調(diào)用,都是開發(fā)者進(jìn)行傳參,然后獲得返回值。

沒了解過function call的人可能會認(rèn)為,函數(shù)調(diào)用就是大模型調(diào)用python等語言的解釋器,執(zhí)行目標(biāo)代碼并獲得結(jié)果。

事實上,在function call中,大模型并不負(fù)責(zé)函數(shù)的執(zhí)行,大模型的作用是根據(jù)用戶的問題,理解用戶的需求,然后根據(jù)用戶需求確定具體的回調(diào)函數(shù)以及函數(shù)所需要的參數(shù)。

openAI官方文檔明確指出,大模型不會真正執(zhí)行函數(shù)調(diào)用,而是由應(yīng)用開發(fā)者根據(jù)大模型的返回進(jìn)行具體的函數(shù)調(diào)用。

圖片

因此,在實現(xiàn)function call的過程中,應(yīng)用開發(fā)者需要預(yù)先設(shè)定一個工具集,并負(fù)責(zé)工具集的實現(xiàn)。

# 定義工具集tools = [ { 'type': 'function', 'function': { 'name': 'get_current_weather', 'description': 'Get the current weather in a given location', 'parameters': { 'type': 'object', 'properties': { 'location': { 'type': 'string', 'description': 'The city and state, e.g. San Francisco, CA', }, 'unit': {'type': 'string', 'enum': ['celsius', 'fahrenheit']}, }, 'required': ['location'], }, }, } ]    # 工具集函數(shù)d 實現(xiàn) def get_current_weather(location, unit='fahrenheit'): '''Get the current weather in a given location''' if 'tokyo' in location.lower(): return json.dumps({'location': 'Tokyo', 'temperature': '10', 'unit': unit}) elif 'san francisco' in location.lower(): return json.dumps({'location': 'San Francisco', 'temperature': '72', 'unit': unit}) elif 'paris' in location.lower(): return json.dumps({'location': 'Paris', 'temperature': '22', 'unit': unit}) else: return json.dumps({'location': location, 'temperature': 'unknown'})

用戶在調(diào)用大模型時,需要把當(dāng)前工具集傳給大模型。

# 在參數(shù)tools中傳入工具集client = openAI(api_key='你的openai密鑰')response = client.chat.completions.create(    model='gpt-4o',     messages=messages,     tools= tools,     tool_choice='auto')

這時,大模型就可以通過理解用戶的輸入,然后返回所需工具的名稱和參數(shù),然后就可以根據(jù)名稱和參數(shù)調(diào)用具體的工具,如天氣查詢接口。

大模型函數(shù)調(diào)用的流程如下圖所示,從下圖可以看出,大模型使用工具需要兩次輸入。

# 大模型返回的需要調(diào)用的函數(shù)名稱和參數(shù){'role': 'assistant', 'content': '', 'tool_calls': [{'function': {'name': 'get_current_weather', 'arguments': '{\'properties\': {\'location\': {\'description\': \'北京市\(zhòng)', \'type\': \'string\'}}}'}, 'id': '', 'type': 'function'}]}

第一次輸入是用戶提問,大模型根據(jù)提問內(nèi)容解析出需要調(diào)用的函數(shù);第二次是把函數(shù)的執(zhí)行結(jié)果傳入到模型中;最后,模型根據(jù)函數(shù)的執(zhí)行結(jié)果返回給用戶。

圖片

1. 用戶向應(yīng)用程序發(fā)出提示詞(prompt)

2. 應(yīng)用程序會傳遞用戶提供的提示詞和函數(shù)聲明(Function Declaration(s)),即對模型所需工具的描述信息

3. 根據(jù)函數(shù)聲明,模型會給出工具選取建議和相關(guān)的請求參數(shù)。注意,模型僅會輸出建議的工具和請求參數(shù),并不會實際調(diào)用函數(shù)

4. & 5. 應(yīng)用程序根據(jù)模型響應(yīng)調(diào)用相關(guān) 函數(shù)

6. & 7. 將 函數(shù)的響應(yīng)內(nèi)容再次輸入模型,生成人類可讀的內(nèi)容

8. 應(yīng)用程序?qū)⒆罱K響應(yīng)返回給用戶,然后再次回到第 1 步,如此循環(huán)往復(fù)

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多