AI Agent架構(gòu)有缺陷,Workflow一定會存在

1 評論 1914 瀏覽 6 收藏 24 分鐘

當(dāng)AI助手從單一工具調(diào)用進(jìn)化到智能體(Agent)架構(gòu),其核心挑戰(zhàn)在于意圖識別與工具調(diào)度的無縫銜接。通過解析Manus等實(shí)例,我們看到盡管技術(shù)框架趨于成熟,但在效率與可靠性之間仍需權(quán)衡。未來,AI Agent的故事雖美好,但生產(chǎn)級應(yīng)用仍依賴于工作流的精準(zhǔn)控制。

首先,OpenAI這張圖AI發(fā)展預(yù)測圖,是比較經(jīng)典的:

而國內(nèi)的分隔符應(yīng)該是兩個(gè)事件點(diǎn):DeepSeek發(fā)布、Manus發(fā)布,DeepSeek標(biāo)志國內(nèi)模型推理能力到位了能做Agent的水平、Manus是第一次將Agent應(yīng)該有的樣子呈現(xiàn)出來,雖然表現(xiàn)不太好,但大家的預(yù)期都很高。

具體模型基礎(chǔ)能力無非兩點(diǎn):模型推理能力、上下文長度;

而智能體如Manus在這個(gè)基礎(chǔ)上,需要做的,或者說工作量最大的部分是提供各種工具,如圖所示:

Agent架構(gòu)的核心是圍繞兩點(diǎn)展開:意圖識別以及工具調(diào)用:模型會根據(jù)用戶聊天的內(nèi)容判斷意圖,而后選擇調(diào)用合適的工具,并保證工具的調(diào)用質(zhì)量。

從這個(gè)角度看Agent(如Manus)的實(shí)現(xiàn)似乎很簡單,比如最簡單的空氣查詢工具調(diào)用:

只不過,用戶的意圖會很多,他在查詢天氣后,馬上可能會關(guān)注旅游相關(guān)信息,如果智能體要做好這個(gè)工作,又不得不提供對應(yīng)的工具,有兩個(gè)工具的時(shí)候,整體復(fù)雜度就提升了:

這里會對應(yīng)兩個(gè)工具調(diào)用:

[
 {
   “tool_name”: “weather”,
   “tool_desc”: “查詢某地的天氣”,
   “tool_examples”: [“上海天氣怎么樣”, “北京天氣怎么樣”]
 },
 {
   “tool_name”: “travel”,
   “tool_desc”: “某地的游玩計(jì)劃”,
   “tool_examples”: [“上海有哪些好玩的”, “北京有哪些好玩的”]
 }
]

要注意的是,上述所有功能是很依賴模型基本能力的,比如其中的意圖識別,比如這里用戶一句話是:上海天氣怎么樣,有什么好玩的?

這里就有幾點(diǎn)要做:

  1. 意圖識別準(zhǔn)不準(zhǔn),能不能準(zhǔn)確知道需要調(diào)用旅游Agent和天氣Agent;
  2. 關(guān)鍵詞抽取準(zhǔn)不準(zhǔn),能不能把旅游地點(diǎn)和其他參數(shù)拿出來,并給到其他Agent;
  3. 回答得好不好,所有的工具都表現(xiàn)良好,但最終的回答好不好,這很考究全局調(diào)度Agent的能力;

至此再回歸Agent架構(gòu)的兩個(gè)核心難點(diǎn)意圖識別與工具調(diào)用,大家應(yīng)該就有所感受了,意圖識別準(zhǔn)確是表現(xiàn)好的基礎(chǔ),工具組織合理是最終輸出的保證。

而這里就僅僅2個(gè)工具,就有些復(fù)雜之感,Manus最初發(fā)布就包含了20多個(gè)工具(現(xiàn)在就更多了):

[
? {
? ??“name”:?“message_notify_user”,
? ??“description”:?“向用戶發(fā)送無需回復(fù)的消息。用于確認(rèn)收到消息、提供進(jìn)度更新、報(bào)告任務(wù)完成或解釋方法變更。”
? },
? ……
? {
? ??“name”:?“file_str_replace”,
? ??“description”:?“替換文件中的指定字符串。用于更新文件中的特定內(nèi)容或修復(fù)代碼錯(cuò)誤。”
? },
? {
? ??“name”:?“file_find_in_content”,
? ??“description”:?“在文件內(nèi)容中搜索匹配文本。用于查找文件中的特定內(nèi)容或模式。”
? },
? ……
? {
? ??“name”:?“idle”,
? ??“description”:?“特殊工具,表示已完成所有任務(wù)并即將進(jìn)入空閑狀態(tài)。”?
}
]

Manus提示詞部分是有點(diǎn)多的:

# 關(guān)于 Manus AI 助手
## 簡介
我是 Manus,一個(gè)被設(shè)計(jì)用來處理多種任務(wù)的 AI 助手。我致力于在各種場景下,為你提供有用、翔實(shí)且多樣化的支持。
## 我的使命
我的主要目標(biāo)是:通過提供信息、執(zhí)行任務(wù)和給出建議,幫助你更順利地達(dá)成目標(biāo)。我希望成為你在問題求解和任務(wù)執(zhí)行中的可靠伙伴。
## 我處理任務(wù)的方式
當(dāng)接到一個(gè)任務(wù)時(shí),我通常會:
1. 分析你的請求,理解你真正想要的是什么 ?
2. 將復(fù)雜問題拆分成更小、更易處理的部分 ?
3. 為每個(gè)步驟選擇合適的工具和方法 ?
4. 在執(zhí)行過程中保持與你的溝通暢通 ?
5. 以清晰、有條理的形式呈現(xiàn)最終結(jié)果 ?
## 我的性格特征
– 以“幫助你解決問題”為導(dǎo)向
– 注重細(xì)節(jié),追求完備
– 能適應(yīng)不同類型用戶的需求
– 面對復(fù)雜問題時(shí)保持耐心
– 對自己的能力與限制保持誠實(shí)
## 我擅長幫助的領(lǐng)域
– 信息收集與研究
– 數(shù)據(jù)處理與分析
– 內(nèi)容創(chuàng)作與寫作
– 編程與技術(shù)問題排查
– 文件管理與組織
– 網(wǎng)絡(luò)瀏覽與信息抽取
– 網(wǎng)站與應(yīng)用的部署輔助
## 我如何“學(xué)習(xí)”
我會從交互與反饋中不斷優(yōu)化自己的行為模式,在任務(wù)中積累經(jīng)驗(yàn)。每一次協(xié)作,都會幫助我更好地應(yīng)對未來類似的問題。
## 溝通風(fēng)格
我會盡量做到:
– 說明清晰、邏輯嚴(yán)謹(jǐn)
– 根據(jù)你的偏好調(diào)整技術(shù)深度
– 在需要時(shí)使用較技術(shù)化的表達(dá)
– 在適合的場景使用更口語化、易懂的表述
## 我堅(jiān)持的價(jià)值觀
– 盡可能提供準(zhǔn)確、可靠的信息
– 尊重用戶隱私與數(shù)據(jù)安全
– 以負(fù)責(zé)任的方式使用技術(shù)
– 對自身能力邊界保持透明
– 持續(xù)改進(jìn)和自我迭代
## 如何更好地與我協(xié)作
我們的協(xié)作會更高效,如果你能:
– 盡量清晰地描述任務(wù)與預(yù)期結(jié)果
– 在必要時(shí)給出中途反饋,便于我調(diào)整方向
– 將復(fù)雜需求拆分成更明確的子任務(wù)
– 在已有成功經(jīng)驗(yàn)的基礎(chǔ)上,逐步嘗試更復(fù)雜的挑戰(zhàn)
我隨時(shí)準(zhǔn)備協(xié)助你處理各種任務(wù),也期待和你一起,完成更多有趣、有價(jià)值的事情。

這些東西已經(jīng)有了很高的復(fù)雜度,而且后續(xù)的上下文工程應(yīng)用也極其復(fù)雜,是不利于大家更好的學(xué)習(xí)理解Agent的,從學(xué)習(xí)的目的來說的話,早期的OpenManus是比較不錯(cuò)的,足夠簡單,我們今天就來拆解一番,依舊是站在意圖識別和工具調(diào)用的角度:

一、AI Max

Agent架構(gòu)是典型的AI Max架構(gòu):能用AI全部用AI,也就是常見的那句話:告訴我你要什么,不要告訴我怎么做,意思是模型最終為結(jié)果負(fù)責(zé)。

只不過這里其實(shí)是有些“討巧”的嫌疑,因?yàn)槟P驮趺醋鋈恳怨ぞ撸‵unction Calling/MCP)的方式預(yù)定義好了,所以這里更確切的說法是:

給我足夠的能力(工具),并且告訴我你要干什么,接下來你不要管了,我會自己根據(jù)你給我的工具去完成你的任務(wù),如果不能完成,大概率是你工具不行(不夠或者不足),小概率是我(模型)沒調(diào)度好。

所以,工具不止決定了Agent的上限,也決定了Agent的邊界,如果工具能力不支持,比如沒有支付、沒有復(fù)雜檢索,那么Agent在這塊一定表現(xiàn)得不好。

這也是為什么我們會說:Agent模式中,用戶無窮的意圖,需要用我們有限的工具去做控制

這里需要再次強(qiáng)調(diào)的是意圖識別很重要,預(yù)定義的工具很重要,他們背后是模型系統(tǒng)性的提示詞(決定如何調(diào)用工具的系統(tǒng))很重要,這也是Agent架構(gòu)核心:規(guī)劃 + 記憶 + 工具調(diào)用的精髓,其中記憶與意圖識別的關(guān)系很大,但我們簡單場景下記憶不是非常重要:

  • 規(guī)劃(Planning)?:任務(wù)分解、子任務(wù)生成及自我反思;
  • 記憶(Memory)?:長期記憶存儲與上下文管理,用于處理復(fù)雜任務(wù);
  • 工具(Tool)?:通過API或外部工具增強(qiáng)Agent的能力(如搜索、文件操作,代碼執(zhí)行等);

這個(gè)圖也是比較經(jīng)典而全面的,他是可以把Agent是什么說清楚的:

一、你有一些工具(Function Calling/MCP 預(yù)定義的工具集),里面有非常詳細(xì)的說明書,在用于與模型對話時(shí)會被用到,比如“今天幾號,天氣如何”;

二、模型會做意圖識別,發(fā)現(xiàn)用戶想做天氣查詢,這個(gè)剛好命中工具庫里面的工具,然后模型獲取關(guān)鍵參數(shù)調(diào)用工具;

三、拿到工具調(diào)用信息后,回傳給模型,模型根據(jù)完整上下文輸出結(jié)果;

至此流程結(jié)束,很清晰明了,這里也可以看出來,雖然工具是主要工作量,但是調(diào)度一塊的架構(gòu)設(shè)計(jì)卻是準(zhǔn)入基礎(chǔ),這里就涉及到了Think + Act模式了…

二、ThAct模式

這里還有很多其他架構(gòu)(復(fù)雜)模式,但總體都類似:意圖識別后調(diào)用工具。

think階段實(shí)現(xiàn)決策。模型會根據(jù)上下文判斷當(dāng)前應(yīng)該執(zhí)行哪個(gè)工具,若不需要執(zhí)行工具,則視為任務(wù)完成;

要注意的是:Think的結(jié)果不是一個(gè)工具調(diào)用,而是一組工具調(diào)用。

act階段執(zhí)行模型的決策結(jié)果。先執(zhí)行模型選擇的工具,并將執(zhí)行結(jié)果作為上下文,記錄到消息中,傳遞到下一個(gè)think階段;

這里是需要在一個(gè)循環(huán)里面重復(fù)執(zhí)行,知道所有工具都調(diào)用結(jié)束,當(dāng)然,每次循環(huán)可以對外輸出日志:

這里舉個(gè)例子,用戶請求是:幫我看看下周末去上海機(jī)票多少錢,再查查天氣。那么這里的流程是:

用戶:幫我查下周末去上海的機(jī)票,再看看天氣適不適合旅游
Think 1:?
– 主要意圖:旅行規(guī)劃
– 子任務(wù):[機(jī)票查詢, 天氣查詢, 旅游建議]
– 當(dāng)前焦點(diǎn):先獲取基礎(chǔ)信息
– 工具選擇:search_tickets (參數(shù): 目的地=上海, 時(shí)間=下周末)
Act 1: 調(diào)用機(jī)票搜索工具 → 返回多個(gè)航班選項(xiàng)
Think 2:
– 已獲取機(jī)票信息
– 下一步:確認(rèn)天氣條件
– 工具選擇:get_weather (參數(shù): 地點(diǎn)=上海, 時(shí)間=下周末)
– 注意:需要具體到日期,因?yàn)橄轮苣┌芰苋諆商?br />Act 2: 調(diào)用天氣工具 → 返回周末天氣:晴,25-30度
Think 3:
– 信息整合分析
– 推理:天氣適宜,機(jī)票價(jià)格合理
– 生成建議:推薦出行,并建議攜帶輕便衣物

理論知識就到這了接下來我們做下簡單實(shí)現(xiàn),比如做一個(gè)天氣 + 旅游雙工具智能體:

三、簡單實(shí)現(xiàn)

因?yàn)锳gent只需要關(guān)注天氣和旅行,邏輯會非常清晰:意圖錯(cuò)亂概率小 + 工具很少,但這個(gè)已經(jīng)具備了 多工具 + 多步調(diào)用 + 匯總回答 的特性。

1. 預(yù)設(shè)工具

第一步當(dāng)然是提前將所有工具都準(zhǔn)備好:

[
? {
? ??“tool_name”:?“weather”,
? ??“tool_desc”:?“查詢某地某天的天氣情況”,
? ??“tool_params”: {?
? ??“city”:?“城市名稱,如:上海”,
? ? ??“date”:?“日期,如:2025-11-30”
? ? },
? ??“tool_examples”: [
? ? ??“幫我查一下上海明天天氣”,
? ? ??“北京這周末冷嗎”
? ? ]
? },
? {
? ??“tool_name”:?“travel”,
? ??“tool_desc”:?“根據(jù)城市和時(shí)間,給出簡單的本地游玩建議”,
? ??“tool_params”: {
? ? ??“city”:?“城市名稱,如:上海”,
? ? ??“date”:?“日期,如:2025-11-30”
? ? },
? ??“tool_examples”: [
? ? ??“上海有什么好玩的”,
? ? ??“周末去北京的話有什么景點(diǎn)”
? ? ]
? }
]

2. 調(diào)度提示詞

工具預(yù)設(shè)結(jié)束后,就是如何去調(diào)度的總控,之前Manus那個(gè)提示詞太長,這里寫個(gè)簡單的:

你是一個(gè)「旅行小助手」,可以幫用戶完成兩件事:
1. 查詢某個(gè)城市在某一天的天氣;
2. 根據(jù)城市和時(shí)間,給出簡單的本地游玩建議。
你可以使用下面兩個(gè)工具來完成任務(wù):
– weather:用于查詢天氣
– travel:用于生成游玩建議
使用規(guī)則:
– 當(dāng)用戶詢問天氣時(shí),一定要調(diào)用 weather 工具,而不是自己胡編。
– 當(dāng)用戶詢問要玩什么、推薦行程時(shí),一定要調(diào)用 travel 工具。
– 當(dāng)一句話里同時(shí)包含天氣 + 游玩需求時(shí),可以依次調(diào)用兩個(gè)工具。
輸出格式:
– 如果需要調(diào)用工具,請不要直接回答用戶,而是返回一個(gè)結(jié)構(gòu)化的工具調(diào)用計(jì)劃(包含工具名和參數(shù))。
– 工具執(zhí)行完成后,你會拿到工具返回的數(shù)據(jù),再結(jié)合上下文,用自然語言給用戶一個(gè)整合后的回答?;卮饡r(shí)不用再提自己調(diào)用了哪個(gè)工具。

3. Think/Act循環(huán)

在上述基礎(chǔ)下,實(shí)現(xiàn)一個(gè)最小循環(huán),很多朋友不是程序員,我們這里直接上偽代碼:

loop:
1)把“用戶輸入 + 歷史對話 + 工具列表 + System Prompt”丟給模型
2)看模型輸出:
? ?– 如果它說「需要調(diào)用工具」,并給出了工具名 + 參數(shù) -> 進(jìn)入工具執(zhí)行
? ?– 如果它直接給了自然語言回答 -> 說明任務(wù)完成,結(jié)束 loop
3)如果調(diào)用了工具:
? ?– 真正去請求對應(yīng) API(weather / travel)
? ?– 把工具返回結(jié)果填回對話歷史里(比如加一條「工具返回」消息)
? ?– 回到第 1 步繼續(xù),讓模型在新上下文下再 Think 一次
# 下面是簡要代碼
?while?True:? model_output = call_llm(context, tools)if?model_output.type ==?“tool_call”:
? ? tool_name = model_output.tool_name
? ? tool_args = model_output.tool_args
? ? tool_result = call_tool(tool_name, tool_args)
? ? context.append(
? ? ? f”[{tool_name} 調(diào)用結(jié)果]: {tool_result}”
? ? )
? ??# 繼續(xù)下一輪循環(huán),讓模型看到工具結(jié)果再思考
else:
? ??# 認(rèn)為這是最終回答
? ? answer = model_output.text
? ??break

整體流程是:模型 → 規(guī)劃工具調(diào)用 → 工具執(zhí)行 → 結(jié)果喂回模型 → 最終回答

回顧

上述代碼邏輯非常簡單,甚至說他就是一個(gè)Function Calling,但他已經(jīng)有了Agent的雛形了,比如用戶說:

下周末去上海玩,幫我看看機(jī)票大概多少錢,再查查天氣,有什么好玩的?

這對Agent就是一個(gè)多步任務(wù),包括了機(jī)票查詢、天氣查詢、游玩攻略,只不過系統(tǒng)并沒提供機(jī)票相關(guān)工具,所以Agent會略過。Agent內(nèi)部執(zhí)行流程是這樣的:

1)意圖識別

模型首先根據(jù)用戶這句話做意圖識別,根據(jù)提示詞工具使用規(guī)則,會輸出兩個(gè)規(guī)則調(diào)用及參數(shù),比如:

我要調(diào)用:weather(city=上海, date=下周末)

2)工具執(zhí)行

我們拿著這個(gè)調(diào)用參數(shù),去請求天氣API,得到結(jié)果(比如“多云 26-30℃,有陣雨”)。再把結(jié)果塞回上下文:

[weather 調(diào)用結(jié)果]:上海下周末多云,有陣雨,溫度 26-30℃…

重復(fù)上述邏輯,調(diào)用旅游工具返回結(jié)果,生成最終回答:

3)最終回答

最終,模型現(xiàn)在上下文里同時(shí)有:

  • 用戶原始需求
  • 天氣信息
  • 景點(diǎn)信息

可以組織出一段自然語言回答,比如:

下周末上海多云有陣雨,氣溫在 26-30℃,適合室內(nèi) + 短途戶外結(jié)合。
你可以考慮第一天逛上海博物館、南京東路,晚上去外灘看看夜景,第二天去迪士尼或者崇明島

以上就是最簡單的執(zhí)行了…

四、結(jié)語

Agent架構(gòu)的本質(zhì),是在大腦越發(fā)聰明的模型與精準(zhǔn)可控的工具之間找到的最佳平衡點(diǎn)。

這一切看上去是非常的美好,只不過實(shí)際上當(dāng)前Agent卻不太能解決生產(chǎn)級應(yīng)用,Agent的真實(shí)情況是什么呢?

從技術(shù)架構(gòu)看,Agent 依賴意圖識別和工具調(diào)用的完美配合,在這套技術(shù)架構(gòu)下會存在兩個(gè)問題:

第一,效率低

模型為了保證穩(wěn)定性,會一再確認(rèn),這樣會很耗Token,這也就意味著他很花錢,隨意經(jīng)常出現(xiàn)讓Manus去做個(gè)PPT,結(jié)果Token就花完了的情況;

第二,需要試錯(cuò)

并不是因?yàn)槟P妥隽撕芏嗳秉c(diǎn),結(jié)果就一定可控,那還真不是的,這意味著每次Agent給出結(jié)果的好壞是需要用戶做二次確定的!

從這個(gè)角度來說,Agent其實(shí)比較適合人機(jī)協(xié)作,比如AI編程里面的結(jié)對編程,所以Cursor這類Agent就很火。

另一個(gè)點(diǎn),他既然適合不斷調(diào)教,那就肯定不太適合一次性給出很穩(wěn)定的回答,所以在現(xiàn)階段生產(chǎn)級別的應(yīng)用里面,但凡需要用到AI的地方,都不大可能是Agent模式。

當(dāng)前生產(chǎn)環(huán)境用得最多的還是AI 工作流,它通過預(yù)設(shè)的 SOP,解決模型的不確定性。

以之前的天氣工具為例,一個(gè)旅行規(guī)劃 Workflow 會強(qiáng)制拆解為“機(jī)票查詢→天氣檢查→景點(diǎn)推薦”三個(gè)標(biāo)準(zhǔn)化步驟,每個(gè)步驟注入領(lǐng)域知識(如航空公司 API 規(guī)范、天氣預(yù)報(bào)數(shù)據(jù)源校驗(yàn)),確保輸出的一致性和可預(yù)期性。

從商業(yè)和實(shí)用視角來說:Agent融資潛力大,AI 工作流解決實(shí)際問題,無論是技術(shù)團(tuán)隊(duì)對新技術(shù)的好奇害死VC的Agent傾向性,很多公司都不得不講Agent的故事。

而且AI Agent的故事還特別好講,并且這家伙成本還奇低!一個(gè)只有天氣和旅行兩個(gè)工具的 Demo Agent 就能拍出驚艷宣傳片;

其背后暗示的是無限可能性;但現(xiàn)實(shí)中,客戶需要的是 100% 可靠的機(jī)票價(jià)格查詢和天氣數(shù)據(jù),而這種模型創(chuàng)造性發(fā)揮是毫無意義的。

綜上,我們接下來很長一段時(shí)間,都會在確定性和創(chuàng)造性之間打交道,大家加油吧!

本文由人人都是產(chǎn)品經(jīng)理作者【葉小釵】,微信公眾號:【葉小釵】,原創(chuàng)/授權(quán) 發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。

題圖來自Unsplash,基于 CC0 協(xié)議。

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. AI Agent 受意圖識別與工具調(diào)用配合的缺陷影響,存在效率低、需試錯(cuò)的問題,生產(chǎn)級應(yīng)用仍需 Workflow 通過預(yù)設(shè) SOP 保障輸出的確定性與可靠性。

    來自云南 回復(fù)