實(shí)戰(zhàn)LangGraph中實(shí)現(xiàn)「人機(jī)交互」!如何確保Agent系統(tǒng)每一步都符合預(yù)期?
嘿,大家好!這里是一個(gè)專注于AI智能體的頻道!
今天我們聊聊如何在LangGraph中實(shí)現(xiàn)“人機(jī)交互”(Human-in-the-Loop,簡稱HIL)的機(jī)制。這可是讓智能系統(tǒng)更懂你、更貼心的秘密武器哦!
想象一下,你的智能助手在執(zhí)行任務(wù)時(shí)突然停下來,問你:“嘿,我接下來要用這個(gè)工具,你覺得怎么樣?”這就是HIL的核心——在關(guān)鍵時(shí)刻讓人類介入,確保每一步都符合你的期望。
具體怎么做呢?我們通過在LangGraph中設(shè)置斷點(diǎn)來實(shí)現(xiàn)。這些斷點(diǎn)會(huì)在執(zhí)行圖的關(guān)鍵點(diǎn)暫停,等待你的輸入。在我的例子中,我們在一個(gè)工具被執(zhí)行之前設(shè)置了一個(gè)斷點(diǎn),檢查智能助手是否選擇了正確的工具。如果選對了,我們繼續(xù);如果沒選對,那就停下來,等待你的指示。
考慮到代碼塊放在文章之中太長,影響觀看體驗(yàn),獲取本文代碼腳本,請后臺私信 人機(jī)交互agent
為了展示這個(gè)過程,我們用Streamlit做了一個(gè)應(yīng)用。你需要下載代碼,然后在cmd運(yùn)行它。代碼中,我們首先設(shè)置了環(huán)境變量,定義了模型(我們用的是OpenAI的GPT-4o模型,當(dāng)然你也可以嘗試其他模型)。
接下來,我們定義了兩個(gè)工具:一個(gè)是用來做互聯(lián)網(wǎng)搜索的,另一個(gè)是簡單的加法工具。通過ToolExecutor,我們管理并執(zhí)行這些工具。然后,我們定義了一些函數(shù),比如should_continue?來判斷是否繼續(xù)執(zhí)行,call_model?來調(diào)用模型,call_tool來執(zhí)行工具。
最后,我們用LangGraph定義了一個(gè)工作流程圖,有兩個(gè)節(jié)點(diǎn):agent和action。agent節(jié)點(diǎn)調(diào)用模型,action節(jié)點(diǎn)調(diào)用工具。我們設(shè)置了從agent到action的條件邊,以及從action回agent的正常邊,形成了一個(gè)循環(huán)。
關(guān)鍵的是,我們在編譯圖時(shí)加入了檢查點(diǎn),這樣在執(zhí)行過程中可以支持中斷。我們使用SqliteSaver來保存狀態(tài),確保在中斷前能夠保存當(dāng)前的執(zhí)行狀態(tài)。
運(yùn)行這個(gè)應(yīng)用時(shí),用戶輸入一個(gè)問題,智能助手會(huì)選擇合適的工具,并顯示工具名稱。然后,系統(tǒng)會(huì)生成一個(gè)驗(yàn)證消息,詢問用戶是否批準(zhǔn)。如果用戶回答“yes”,那么工具調(diào)用消息會(huì)被添加到狀態(tài)中,繼續(xù)執(zhí)行。如果用戶回答其他內(nèi)容,執(zhí)行將從用戶輸入的新消息開始。
通過這種方式,HIL機(jī)制不僅讓智能助手的操作更加透明,還讓你能夠?qū)崟r(shí)干預(yù)和批準(zhǔn)工具的選擇,確保每一步都符合你的期望。是不是很酷?這就是LangGraph和HIL的魅力所在!
本文轉(zhuǎn)載自 ??探索AGI??,作者: 獼猴桃