這個更新主要是在 State 定義中通過 Annotated 來自動處理的。在 State 類型中,我們對 dialog_state 字段綁定了 update_dialog_stack 函數,如下所示:
class State(TypedDict):messages: Annotated[list[AnyMessage], add_messages]user_info: strdialog_state: Annotated[list[Literal["assistant","update_flight","book_car_rental","book_hotel","book_excursion",]],update_dialog_stack, # 這里綁定了 update_dialog_stack]
當某個節點(例如 create_entry_node)返回一個新的狀態字典,其中包含 "dialog_state": new_dialog_state
(例如 “update_flight”),LangGraph 框架會自動調用 update_dialog_stack,將新值與原來的狀態堆棧合并。也就是說,如果原狀態是 ["assistant"]
,而 create_entry_node 返回了 "dialog_state": "update_flight"
,則 update_dialog_stack 會執行:
update_dialog_stack(["assistant"], "update_flight") # 返回 ["assistant", "update_flight"]
這就是系統如何將對話狀態堆棧從 ["assistant"]
更新為 ["assistant", "update_flight"]
的。