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