File size: 1,430 Bytes
551e9e2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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()