智能體常用策略FunctionCalling和ReAct有什么區(qū)別?
Dify 內(nèi)置了兩種 Agent 策略:Function Calling 和 ReAct,但二者有什么區(qū)別呢?在使用時又該如何選擇呢?接下來我們一起來看。
1.Function Calling
Function Call 會通過將用戶指令映射到預(yù)定義函數(shù)或工具,LLM 先識別用戶意圖,再決定調(diào)用哪個函數(shù)并提取所需參數(shù)。
它的核心是調(diào)用外部函數(shù)或工具,屬于一種明確的工具調(diào)用機制。
優(yōu)點:
- 精確:對于明確的任務(wù),可以直接調(diào)用相應(yīng)的工具,無需復(fù)雜的推理過程。
- 易于集成外部功能可以將各種外部 API 或工具封裝成函數(shù)供模型調(diào)用。
- 結(jié)構(gòu)化輸出:模型輸出的是結(jié)構(gòu)化的函數(shù)調(diào)用信息,方便下游節(jié)點處理。
- 執(zhí)行效率高:對于簡單、明確的任務(wù),執(zhí)行速度快。
缺點:
- 如果任務(wù)定義不明確或用戶意圖模糊,LLM 可能難以準確選擇工具或提取參數(shù)。
- 對于需要多輪推理才能確定調(diào)用哪個工具的任務(wù),不夠靈活。
適用場景:
- 需要根據(jù)用戶意圖精確調(diào)用特定工具的自動化任務(wù)。
- 需要與外部 API 或服務(wù)進行交互的場景。
- 數(shù)據(jù)檢索、信息查詢并以特定格式呈現(xiàn)的應(yīng)用
2.ReAct
ReAct=Reason+Act,推理+行動,LLM 首先思考當前狀態(tài)和目標,然后選擇并調(diào)用合適的工具,工具的輸出結(jié)果又將引導(dǎo) LLM 進行下一步的思考和行動,如此循環(huán),直到問題解決。
舉例說明
舉個例子,正常情況下,當我們在計算一個商品的價格時,它的執(zhí)行步驟是這樣的:
- 查詢商品原價。
- 計算商品優(yōu)惠價。
- 計算商品最終價格=商品原價-優(yōu)惠價。
但某個商品情況比較特殊,它在以上第二步中存儲的不是優(yōu)惠價,而是折扣價(例如 8 折優(yōu)惠),那么此時商品的最終價格的計算公式就變成了以下方式:
- 查詢商品原價。
- 查詢商品折扣價。
- 計算商品最終價格=商品原價 X 商品折扣價。
在這種情況下就要使用 ReAct 策略了,因為 ReAct 策略會根據(jù)第二步的觀測結(jié)果,分析并改變第三步的計算公式,保證任務(wù)的精準執(zhí)行,這種情況下就要使用 React 策略。
核心機制:
- ReAct 是一個迭代過程,LLM 在“思考(Reason)-> 行動(Act)-> 觀察(Observe)”的循環(huán)中逐步推進任務(wù)。
- LLM 首先分析當前狀態(tài)和目標,選擇并調(diào)用工具,然后根據(jù)工具的輸出進行下一步的思考和行動,直到問題解決。
優(yōu)點:
- 利用外部信息:可以有效使用外部工具來收集模型單獨無法處理的任務(wù)所需的信息。
- 可解釋性好:推理和行動步驟交織在一起,允許一定程度上跟蹤 Agent 的過程。
- 廣泛適用性:適用于需要外部知識或特定行動的任務(wù),例如問答、信息檢索和任務(wù)執(zhí)行。
- 靈活性高:對于復(fù)雜、多步驟的任務(wù),以及需要探索和動態(tài)調(diào)整策略的場景,具有更好的適應(yīng)性。
缺點:
- 執(zhí)行速度和成本:由于涉及多次 LLM 調(diào)用,ReAct 通常比 Function Calling 更慢,并且消耗更多的 tokens。
- 推理穩(wěn)定性:在很大程度上取決于 LLM 的推理能力以及提示(Instruction)的質(zhì)量。
- 輸出解析復(fù)雜:ReAct 過程中 LLM 產(chǎn)生的“思考”文本格式可能不一致,給解析和提取關(guān)鍵信息帶來挑戰(zhàn)。
適用場景:
- 需要進行探索性研究、從多個來源收集和綜合信息的任務(wù)。
- 問題解決方案路徑不明確,需要通過迭代嘗試和調(diào)整來找到答案的復(fù)雜問題。
- 需要較高可解釋性,希望了解 Agent 決策過程的場景。
3.Function Calling VS React
Function Calling 和 React 區(qū)別如下:
- Function Calling 更適合簡單、明確的任務(wù),強調(diào)直接調(diào)用工具的高效性。
- ReAct 更適合復(fù)雜、多步驟的任務(wù),強調(diào)推理過程的靈活性和可解釋性。