Agent基本架構
????先談談Agent基本架構概念,如果看得云里霧里,等看完本篇之后,再回頭看就會豁然開朗的,而我盡量寫得更易懂:?) 這里面會穿插著上一篇的內容,請大家記得往回翻翻,傳送門:
AI菜鳥向前飛 — LangChain系列之十四 - Agent系列:從現象看機制(上篇)
-
AgentAction
? ? 其中,兩個重要屬性(其實、還有tool_call_id,以后用到再介紹)
-
-
tool:可理解成“函數名”
-
tool_input:可理解成“函數參數”
-
????為了好理解,我這樣寫
func_ret = {"search_article": search_article()}[each.tool].invoke(each.tool_input)
????其實,如果按照更正規的寫法應該這樣
# 注意,這里我用了observation(“觀察”),可參考我的上一篇文章進行回顧
observation = {tool.name: tool for tool in tools}[each.tool].invoke(each.tool_input)
-
AgentFinish
????可以通過這個key:return_values獲得結果內容
intermediate_steps = []
while not isinstance(res := agent.invoke({"input": "AI菜鳥向前飛系列文章出自哪里?", "intermediate_steps": intermediate_steps}), AgentFinish):for each in res:observation = {tool.name: tool for tool in tools}[each.tool].invoke(each.tool_input)intermediate_steps.append((each, observation))# 請注意這里:)
print(res.return_values)
-
Intermediate Steps (中間步驟)
????感覺稱它為“之前”的步驟,更易懂
????記錄之前AgentAction的內容和結果
intermediate_steps.append((each, func_ret.content))
????在下一次調用的時候,一定要帶上它
agent.invoke({"input": "AI菜鳥向前飛系列文章出自哪里?", "intermediate_steps": intermediate_steps}
-
AgentInput
所需要輸入的intermediate_steps,上面介紹了👆
-
AgentOutput
????所要采取的下一步行動(Action)或發送給用戶的最終響應結果(return_values),即:AgentAction或AgentFinish.
????現在,相信你更懂它了,對吧?
????讓我們稍微深入了解它們,官方資料如是說:
next_action = agent.get_action(...)
while next_action != AgentFinish:
observation = run(next_action)
next_action = agent.get_action(..., next_action, observation)
return next_action
????但是也是浮于表面,例如:什么時候才真正的AgentFinish?Tool與LLM的交互到底是怎樣的?先看這張圖吧, 讓我們通過源碼分析吧。
????不會真的看代碼吧,那太復雜了,當然不會,請看圖吧:?)
Agent運行機制
????抽絲剝繭~ 看以下兩張圖就懂了,不懂可找我:?)
-
圖一:(是不是很熟悉,這就是LCEL,同時也是Agent的創建方式)
請參考:
AI菜鳥向前飛 — LangChain系列之六 - 深入淺出LCEL與Chain(上篇)
AI菜鳥向前飛 — LangChain系列之七 - 深入淺出LCEL與Chain(中篇)
AI菜鳥向前飛 — LangChain系列之八 - 深入淺出LCEL與Chain(下篇)
-
圖二:(重點來了,一個Agent的“旅行”)
????看完之后是不是清晰多了,但還不夠,例如:
-
-
tool_calls是如何與Agent執行結果以及和LLM交互之后,可以找到正確的結果的
-
這里面沒提到的ToolCall、ToolMessage 以及它們之間的關系
-
過程對象,如:ChatResult、LLMResult,它們各是指什么?
-
還有,各種XXChunks是什么?各代表什么含義?
-
additional_kwargs的用處是什么?
-
…………
-
????若大家對這方面感興趣,可持續關注我,有需要我還會“娓娓道來”,再給大家做深入介紹:)