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,互不干扰。

相关推荐
ServBay9 小时前
9 个 Python 第三方库推荐,不用 AI 都好像多出一个团队
后端·python
用户8356290780519 小时前
如何使用 Python 添加和管理 Excel 批注(完整示例)
后端·python
用户8356290780519 小时前
使用 Python 管理 Excel 工作表:创建、复制、删除与重命名
后端·python
荣码18 小时前
LangGraph多Agent协作:3个Agent干活比1个强,但我踩了4个坑
java·python
用户8356290780511 天前
Python 操作 PDF 附件:添加、查看与管理指南
后端·python
宇宙之一粟2 天前
乐企版式文件生成平台
java·后端·python
学测绘的小杨2 天前
CompassFusion:一个从 GNSS 到 GNSS/INS 组合导航的独立工程包
python
zzzzzz3103 天前
当产品经理说这个很简单:我用Python自动化处理奇葩需求的实战指南
python·pycharm·产品经理
雪隐3 天前
个人电脑玩AI-06让5060 Ti给你打工——不光能画画,Qwen3-TTS还能学人说话,连我老板都信了!
人工智能·后端·python
兵慌码乱3 天前
面向桌面端的资产管理系统分层架构设计与核心模块实现
python·系统架构·sqlite·pyqt5·数据库设计·桌面应用开发·mvc架构