import operator from typing import Annotated, List from typing_extensions import TypedDict from langchain_core.messages import AnyMessage from langgraph.graph import StateGraph, END # 从我们的组件文件中导入模型补全节点 from comp import completion_node # --- 图状态定义 --- # 状态是我们图的内存或上下文。它是一个字典, # 保存了对话过程中交换的所有消息。 class GraphState(TypedDict): """ 表示我们图的状态。 Attributes: messages: 一个随时间自动累积的消息列表。 `operator.add` 注解告诉 LangGraph 将新消息附加到此列表, 而不是覆盖它。这就是图如何维护对话历史(上下文)的方式。 """ messages: Annotated[List[AnyMessage], operator.add] # --- 图工作流构建 --- # 使用我们定义的状态创建一个新的状态图 workflow = StateGraph(GraphState) # 将补全节点添加到图中。我们将其命名为 “llm”。 # 这个节点负责调用语言模型。 workflow.add_node("llm", completion_node) # 设置图的入口点。第一个被调用的节点是 “llm”。 workflow.set_entry_point("llm") # 从 “llm” 节点到 END 添加一条简单的边。 # 这意味着在调用 LLM 后,图的执行就完成了。 workflow.add_edge("llm", END) # 将工作流编译成一个可运行的应用。 app = workflow.compile()