LangGraph标准构建示例

第一部分:专门定义状态(类似于 state.py)

在这里,我们只关心数据结构长什么样,完全不引入任何大模型的代码。Python

复制代码
from langgraph.graph import MessagesState

# 1. 定义状态类
# 继承 MessagesState 以获取历史对话功能,同时增加自定义字段
class AgentState(MessagesState):
    user_intent: str       # 记录用户意图
    extracted_params: dict # 记录从对话中提取的结构化参数
    retry_count: int       # 记录发生错误的重试次数
第二部分:专门定义节点逻辑(类似于 nodes.py)

这里是纯粹的业务函数。它只需要声明自己接收 AgentState 作为参数,然后返回需要更新的字典即可。它不需要知道图(Graph)是怎么流转的。

复制代码
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-3.5-turbo")

# 2. 定义独立的节点函数
def analyze_intent_node(state: AgentState):
    """专门负责分析意图的节点"""
    messages = state["messages"]
    
    # 这里可以有非常复杂的 LLM 调用、Prompt 拼接逻辑
    # 为了演示,我们直接写死一个返回值
    # 实际应用中,这里可能是 llm.with_structured_output().invoke(...)
    intent = "query_weather" 
    
    # 只返回需要更新的状态字段
    return {"user_intent": intent}


def generate_reply_node(state: AgentState):
    """专门负责生成最终回复的节点"""
    intent = state.get("user_intent", "unknown")
    
    # 结合当前状态中的自定义字段去调用 LLM
    response = llm.invoke([
        {"role": "system", "content": f"用户的意图是: {intent},请回复。"},
        *state["messages"]
    ])
    
    return {"messages": [response]}
第三部分:组装智能体图(类似于 graph.py)

在这里,我们将前面定义好的"状态类"和"节点函数"像拼图一样拼起来。

复制代码
from langgraph.graph import StateGraph, START, END

# 3. 组装图
# 传入状态类
workflow = StateGraph(AgentState)

# 添加节点函数
workflow.add_node("intent_analyzer", analyze_intent_node)
workflow.add_node("reply_generator", generate_reply_node)

# 定义流转逻辑
workflow.add_edge(START, "intent_analyzer")
workflow.add_edge("intent_analyzer", "reply_generator")
workflow.add_edge("reply_generator", END)

# 编译运行
app = workflow.compile()

为什么要这样分开设计?

  1. 代码极度清晰 :如果您的智能体有 10 个节点,把逻辑全写在一起会变成一场灾难。分开后,您只需去 state.py 看数据结构,去 nodes.py 修改 LLM 的提示词和解析逻辑。

  2. 方便独立测试 :因为节点就是普通的 Python 函数,您可以在不运行整个图的情况下,单独给 analyze_intent_node 传入一个假造的 AgentState 字典进行单元测试。

  3. 团队协作:一个人可以负责设计状态数据结构,另一个人去专心调优 LLM 节点的 Prompt,互不干扰。

相关推荐
专注仿真1 小时前
引擎扩展性与集成设计深度剖析:从 14 个扩展点到 DIS→HLA 演进之路
开发语言·算法·仿真引擎·推演引擎
Best-Wishes1 小时前
科来网络分析系统(技术交流版)使用说明书
开发语言·junit·php
代码不停2 小时前
自动化测试(java)
java·开发语言·selenium·自动化
Smoothcloud润云2 小时前
PyTorch大模型权重加载与启动耗时优化实战:定位磁盘、内存与显存瓶颈
人工智能·pytorch·python·深度学习·gpu算力
databook3 小时前
从循环到向量化:NumPy提速的7个关键思维
python·数据分析·numpy
棉猴3 小时前
玩游戏学Python1-Python和pgzero库的安装
python·pygame·玩游戏·pgzero·pgzrun
诺伦3 小时前
GEO优化数据实证:78%引用流向官网的机制拆解与小品牌三步管线实战教程 | RiseClaw玄策
python·seo·geo·内容营销·ai搜索
oooost4 小时前
pytorch学习笔记1
python·学习方法
鬼手点金4 小时前
opencode-rules 插件
java·开发语言·前端·人工智能·chrome·git·github
爱上网的小舟4 小时前
星际战士2启动错误怎么办?5种游戏报错解决方法
开发语言·php