一文搞懂Prompt、AI Agent、MCP和function calling
概要
在人工智能領域,智能體作為AI與用戶溝通的橋梁,通過接收和發送包含特定信息的提示詞,即用戶提示詞-user prompt和系統提示詞-system prompt,來模擬人類對話。系統提示詞設定智能體的角色和行為,用戶提示詞則傳達用戶的需求。功能編碼-AI tools是允許智能體調用預定義函數以執行具體任務的方法,增強了智能體的實用性。MCP(Model Communication Protocol)作為一種專為AI設計的通信協議,使得智能體能夠與各種工具和服務交互,實現更復雜的功能,并支持工具的標準化管理,包括查詢可用工具、參數和功能描述等。這些技術綜合起來,展示了從用戶詢問到AI生成響應的完整流程,強調了它們在AI自動化協作中的重要性。
接下來我們通過一些場景,來學習prompt,agent、mcp以及function calling的基礎概念。
場景1
現實中對話
現實生活中,當我們和不同人聊天真實,即便是完全相同的話,對方也會根據自己的經驗給出不同的答案。比如我說我肚子疼,我媽可能會問病了吧?,我爸可能說吃多了吧?,我女朋友可能直接就來一句滾吧。 但是AI并沒有這樣的人設,所以他就只能給出一個通用的四平八穩的回答,如果感覺不適請就醫。
圖片
于是我們就希望給AI也加上人設,最直接的方法就是把人設信息和用戶要說的話打包成一條user prompt發過去。比如你扮演我的女朋友,我說我肚子疼,然后AI就可能回復滾一邊去,老娘也疼,這樣就對味兒了。
圖片
但問題是你扮演我溫柔的女朋友這句話并不是我們真正想說的內容,顯得有一點出戲。于是人們干脆把人設信息單獨的拎了出來,放到另外一個里面,這就是system prompt系統提示詞。
場景1總結
在AI模型與用戶交互的過程中,什么是user prompt?
user prompt就是用戶提示詞,是我們通過聊天框發送給AI模型的消息,通常是我們提出的問題或想說的話。
為什么AI給出的答案往往顯得無趣且缺乏個性?
因為AI沒有人的設定,只能給出通用的回復。為了賦予AI個性,人們開始將人設信息與用戶輸入的內容結合,形成更自然的對話。
什么是system prompt,它在對話中起到什么作用?
System prompt是用來描述AI的角色、性格、背景、信息、語氣等非用戶直接說出來的內容,它與user prompt一起發送給AI模型,以使對話更加自然。
在網頁端的聊天機器人中,system prompt如何設定和使用?
網頁端的system prompt通常是系統預設的,但用戶可以通過網站提供的設置功能自定義偏好,這些偏好會被整合進system prompt中。
場景2
即使人設設定的再完美,說到底AI還是個聊天機器人。你問一個問題它最多給你答案或者告訴你怎么做,但實際動手的還是你自己。那么能不能讓AI自己去完成任務呢?
第一個做出嘗試的是一個開源項目叫做auto GPT,它是本地運行的一個小程序。如果你想讓auto GPT幫你管理電腦里的文件,那你得先寫好一些文件的管理函數。
圖片
比如說list files用來列目錄,read files用來讀文件等等。然后你把這些函數以及它們的功能描述、使用方法注冊到auto GPT中。
圖片
Auto GPT會根據這些信息生成一個system prompt,告訴AI模型用戶給了你哪些工具,他們都是干什么的,以及AI如果想要使用它們應該返回什么樣的格式。
最后把這個system prompt連同用戶的請求,比如說幫我找一找原神的安裝目錄,一起發給AI模型。
圖片
如果AI模型足夠的聰明,就會按照要求的格式返回一個調用某個函數的消息。Auto GPT進行解析之后就可以調用對應的函數了。然后再把結果丟回給AI,AI再根據函數調用的結果決定下一步應該做什么操作。這個過程就這樣反復,直到任務完成為止。
圖片
人們把auto GPT這種負責在模型工具和最終用戶之間傳話的程序就叫做AI agent。而這些提供給AI調用的函數或者服務就叫做agent tools。
圖片
不過這個架構有一個小問題,雖然我們在system prompt里面寫清楚了AI應該用什么格式返回,但AI模型說到底它是一個概率模型,還是有可能返回格式不對的內容。為了處理這些不聽話的情況,很多AI agent會在發現AI返回的格式不對時,自動進行重重試,一次不行我們就來第二次。但這種反復的重試總歸讓人覺得不太靠譜,于是大模型廠商開始出手了,紛紛推出了一個叫做function calling的新功能,這個功能的核心思想就是統一格式,規范描述。
Function calling則對這些描述進行了標準化,比如每個tool都用一個Json對象來定義,工具名寫在name字段,功能說明寫在description字段,所需要的參數寫在parameters里面等等。然后這些對象也從system prompt中被剝離了出來,單獨放到了一個字段里面。
圖片
最后Function calling也規定了AI使用工具時應該返回的格式,所以system prompt中的格式定義也可以刪掉了。
圖片
這樣一來,所有的工具描述都放在相同的地方,所有工具描述也都依照相同的格式,AI使用工具時的回復也都依照相同的格式,于是人們就能更加有針對性的訓練AI模型,讓它理解這種調用的場景。甚至在這種情況下,如果AI依然生成了錯誤的回復,因為回復的格式是固定的,AI服務器端自己就可以檢測到并且進行重試,用戶根本感覺不到。這樣一來,不僅降低了用戶端的開發難度,也節省了用戶端重試帶來的token開銷。
圖片
場景2總結
auto GPT是如何實現讓AI完成任務的?
auto GPT通過讓用戶注冊一些函數及其功能描述,生成一個包含這些工具信息的system prompt,然后根據用戶請求調用AI模型,AI模型按要求格式返回操作結果,auto GPT解析后執行相應函數。
什么是AI agent以及其與function calling的關系?
AI agent是負責在模型工具和最終用戶之間傳話的程序,而function calling是一種規范AI回復格式的新功能,旨在解決AI返回結果可能不準確的問題,并通過統一格式降低用戶端開發難度和token開銷。
場景3
以上我們講的都是AI agent和AI模型之間的通信方式。接下來我們再看另一邊,AI agent是怎么跟AI tools來進行通信的。
最簡單的做法是把AI agent和agent tools寫在同一個程序里面,直接函數調用搞定,這也是現在大多數agent的做法。
圖片
但是后來人們逐漸發現有些AI tools的功能其實挺通用的。比如說一個瀏覽網頁的工具,可能多個agent都需要,但我總不能在每個agent里面都拷貝一份相同的代碼吧,太麻煩了,也不優雅。于是大家想到了一個辦法,把tools變成服務統一的托管,讓所有的agent都來調用,這就是MCP。
圖片
MCP是一個通信協議,專門用來規范agent和tools服務之間是怎么交互的。運行tools的服務叫做MCP server,調用它的agent叫做MCP client。MCP規定了MCP server如何和MCP client通信,以及MCP server要提供哪些接口。
圖片
MCP server也可以直接提供數據,提供類似文件讀寫的服務叫做resource,或者為agent提供提示詞的模板叫做prompt。MCP server既可以和agent跑在同一臺機器上,通過標準輸入輸出進行通信,也可以被部署在網絡上,通過HTTP進行通信。
圖片
圖片
場景3總結
AI agent與AI tools之間如何通信?
最初是直接函數調用,后來發展為將常用工具作為服務統一托管在網絡上的MCP server,使得所有agent可以通過MCP協議進行交互。
MCP(Message Passing to Function)是什么?
MCP是一個通信協議,用于規范AI agent與AI tools之間的交互,它規定了MCP server(服務提供者)與MCP client(服務調用者)之間的接口和交互方式。
全文總結
最后我們梳理一下全場景的整個流程。我說:女朋友肚子疼,怎么辦?于是問AI agent或者說MCP client,我女朋友肚子疼應該怎么辦?Agent會把問題包裝在user prompt中,然后agent通過MCP協議從MCP server里面獲取所有tool的信息。AI agent會把這些tool的信息或者轉化成system prompt,或者轉化成function calling的格式,然后和用戶請求user prompt一起打包發送給AI模型。 AI模型發現有一個叫做web browse的網頁瀏覽工具,于是通過普通回復或者function calling格式產生一個調用這個tool的請求,希望去網上搜索答案。Agent收到了這個請求之后,通過MCP協議去調用MCP server里的web browse工具。web browse訪問指定的網站之后,將內容返還給agent,agent再轉發給AI模型。AI模型再根據網頁內容和自己的頭腦風暴,生成最終的答案,多喝熱水,最后由agent把結果展示給用戶之后。
圖片


































