Pydantic Graph 使用类型提示定义节点和边,每个节点的 run 方法显式声明返回类型(即下一个可能的节点),使图结构在定义时即可验证。
from pydantic_graph import Graph, BaseNode, End
from dataclasses import dataclass
@dataclass
class ConversationState:
user_name: str | None = None
interests: list[str] = field(default_factory=list)
@dataclass
class GreetUser(BaseNode[ConversationState]):
async def run(self, ctx: GraphRunContext[ConversationState]) -> 'AskName':
print("Hello! Welcome to our recommendation system.")
return AskName()
@dataclass
class AskName(BaseNode[ConversationState]):
async def run(self, ctx: GraphRunContext[ConversationState]) -> 'AskInterests':
name = input("What's your name? ")
ctx.state.user_name = name
return AskInterests()
# 定义图
conversation_graph = Graph(
nodes=[GreetUser, AskName, AskInterests, GenerateRecommendations, SayGoodbye],
state_type=ConversationState,
)Graph 支持状态持久化,允许工作流在任意节点暂停并从断点恢复。这对于长时间运行的工作流和人机交互场景尤为重要。
Graph 节点内部可以嵌入 Pydantic AI Agent,实现 AI 驱动的工作流节点。每个步骤都可以调用 Agent 进行结构化输出处理。