自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

大模型的“手和腳”——連接外部應用的通道函數調用(function calling),AI Agent的實現方式之一 原創(chuàng)

發(fā)布于 2024-7-3 05:51
瀏覽
0收藏

“ AI Agent就是大模型通過外部接口構建的手腳健全的智能體”

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

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

01、什么是函數調用,為什么選擇函數調用?

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

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

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

大模型的“手和腳”——連接外部應用的通道函數調用(function calling),AI Agent的實現方式之一-AI.x社區(qū)

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

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

但大模型本身又不具備調用網絡的能力,那么怎么才能實現這個功能呢?

這時函數調用的作用就體現出來了,所謂的函數就是一個能實現特定功能的代碼段,它們有設定的輸入參數和返回值,這樣就可以使用函數調用各種工具實現大模型無法實現的功能。

之所以選擇函數調用,原因就是因為函數調用比較簡單,大模型只需要返回幾個參數即可實現函數調用。

02、function call的實現過程

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

沒了解過function call的人可能會認為,函數調用就是大模型調用python等語言的解釋器,執(zhí)行目標代碼并獲得結果。

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

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

大模型的“手和腳”——連接外部應用的通道函數調用(function calling),AI Agent的實現方式之一-AI.x社區(qū)

因此,在實現function call的過程中,應用開發(fā)者需要預先設定一個工具集,并負責工具集的實現。

# 定義工具集
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"],
                },
            },
        }
    ]
    # 工具集函數d 實現
    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"})

用戶在調用大模型時,需要把當前工具集傳給大模型。

# 在參數tools中傳入工具集
response = client.chat.completions.create(
    model='gpt-4o', 
    messages=messages, 
    tools= tools, 
    tool_choice="auto"
)

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

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

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

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

大模型的“手和腳”——連接外部應用的通道函數調用(function calling),AI Agent的實現方式之一-AI.x社區(qū)

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

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

3. 根據函數聲明,模型會給出工具選取建議和相關的請求參數。注意,模型僅會輸出建議的工具和請求參數,并不會實際調用函數

4. & 5. 應用程序根據模型響應調用相關 函數

6. & 7. 將 函數的響應內容再次輸入模型,生成人類可讀的內容

8. 應用程序將最終響應返回給用戶,然后再次回到第 1 步,如此循環(huán)往復


本文轉載自公眾號AI探索時代 作者:DFires

原文鏈接:??https://mp.weixin.qq.com/s/4-26O_8lMVx3L_z-t9MxFA??



?著作權歸作者所有,如需轉載,請注明出處,否則將追究法律責任
標簽
已于2024-7-3 05:53:10修改
收藏
回復
舉報
回復
相關推薦