这个更新主要是在 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"]
的。