LangGraph开发实战-1

发布时间:2026-04-07 23:19:11编辑:123阅读(16)

    LangGraph生态介绍

    随着大模型应用日趋复杂,开发者需要一种既能利用Agent灵活性又能保证可靠性的基础设施。LangChain通过"Chain"工作流(固定顺序步骤)虽然简单但缺乏适应性,而完全自主的Agent虽灵活却容易不可控。LangGraph正是在这种背景下出现,核心定位是低门槛构建"可控且持久"的智能代理流程,以平衡确定性和自主性的取舍。


    LangGraph是由LangChain AI团队与2023年8月11日正式开源的AI Agent框架,旨在支撑和编排复杂的生成式AI Agent工作流

    LangGraph主要针对构建长时间运行、可回溯的智能体流程所面临的挑战提供一些特定的解决方案,包括:


    可靠性与持续性:提供持久化执行能力,使Agent即使在失败后也能从中断处恢复,支持长时任务不中断运行,例如在复杂业务流程或多轮对话中,Agent可以保存中间状态,避免上下文丢失。


    状态与记忆:内置短期工作记忆和长期存储记忆,允许Agent跨对话会话保留上下文,这解决了以往仅依赖模型上下文窗口导致的记忆局限,使Agent能记住历史互动,提供更连贯的服务。


    人机协作与监督:引入Human-in-the-loop(人类在环)机制,支持在关键步骤由人工审核或干预,以防止Agent偏离轨道,这使企业能在敏感任务中加入人工把关,提升最终结果可信度。


    调式与可观测性:通过与LangSmith、LangGraph Studio等工具集成,实现对复杂Agent行为的可视化追踪和调式,开发者可以观察每步决策、工具调用、状态变化,方便定位问题,优化Agent策略。


    生产级扩展:提供面向生产的部署支持,包括水平扩展、任务队列、缓存重试等容错机制。帮助Agent应对大规模并发和长流程的稳定运行。这使企业能在敏感任务中加入人工把关,提升最终结果可信度。


    LangGraph官方开源地址:https://github.com/langchain-ai/langgraph

    LangGraph与其它框架对比

    框架架构特点主要优势适用场景局限/劣势
    LangGraph有向图 ,基于状态机,节点控制显式逻辑。确定性极高,支持状态持久化、时间旅行调试和人工审批(HITL)。金融审批、医疗决策、需要严格合规的复杂工业流程。学习曲线最陡;开发初期代码量大,构建速度慢。
    CrewAI角色驱动,模仿企业职员架构,强调任务委派。开发效率高,API 极其直观,适合快速组建 Agent 团队协作。内容创作、市场营销自动化、快速原型开发。黑盒逻辑较多,难以精确控制 Agent 间的微观对话。
    AutoGen对话驱动,Agent 通过相互交谈、甚至自主写代码解决问题。解决复杂问题能力强,擅长代码沙盒执行和自动推理纠错。科学研究、辅助编程、需要高度灵活性和推理的任务。运行成本高(易耗 Token);对话过程可能产生不可控的偏移。
    LlamaIndex事件驱动,以数据流为中心,侧重于事件触发。数据处理之王,深耕 RAG,擅长解析复杂文档(表格、LaTeX、Base64)。企业级知识库、法律/技术文档检索、重度依赖私有数据的系统。跨领域的通用 Agent 协作(非数据类任务)能力较弱。


    LangGraph图结构对象创建方法与核心语法

    安装Langgraph

    pip install langgraph

    pip show langgraph

    版本:Version: 1.1.3


    LangGraph框架是通过组合Nodes和Edges去创建复杂的循环工作流程,通过消息传递的方式串联所有的节点形成一个通路。那么维持消息能够及时的更新并向该去的地方传递,则依赖langgraph构建的State概念。在LangGraph构建的流程中,每次执行都会启动一个状态,图中的节点在处理时会传递和修改该状态。这个状态不仅仅是一组静态数据,而是由每个节点的输出动态更新,然后影响循环内的后续操作。

    除了通过打印的方式查看构建图的结构,LangGraph还提供了多种内置的图形可视化方法,能够将任何Graph以图形的形式展示出来,帮助更好地理解节点之间的关系和流程的动态变化,可视化最大的好处是:直接从代码中生成图形化的表示,可以检查图的执行逻辑是否符合构建的预期。


    先构建state,在定义两个节点,addition节点是一个加法逻辑,接收当前状态StateGraph(dict),而subtraction节点是一个减法逻辑,接受从addition节点传来的状态StateGraph(dict),然后进行图结构设计。

    代码如下:

    from langgraph.graph import StateGraph
    from langgraph.graph import START,END
    
    # 使用StateGraph接收一个字典
    builder = StateGraph(dict)
    print(builder)
    print(builder.schemas)
    
    
    def addition(state):
        # 接收到的是初始状态
        print(f"init_state: {state}")
        state['x'] = state['x'] + 1
        state['y'] = state['y'] + 1
        return state
    
    def subtraction(state):
        # 接收到的是上一个节点的状态
        print(f"addition_state: {state}")
        state['x'] = state['x'] - 2
        return state
    
    # 向图中添加两个节点
    builder.add_node('addition', addition)
    builder.add_node('subtraction', subtraction)
    
    # 构建节点之间的边
    builder.add_edge(START, 'addition')
    builder.add_edge('addition', 'subtraction')
    builder.add_edge('subtraction', END)
    
    # 当前节点数
    print(builder.edges)
    
    # 执行图的编译,需要通过调用compile()方法将这些设置编译成一个可执行的图。
    graph = builder.compile()
    
    # 定义一个初始化的状态
    initial_state = {"x": 10, "y": 10}
    value = graph.invoke(initial_state)
    print(value)
    
    with open("graph.png", "wb") as f:
        f.write(graph.get_graph(xray=True).draw_mermaid_png())

    运行结果:

    <langgraph.graph.state.StateGraph object at 0x000001D9068444A0>

    {<class 'dict'>: {'__root__': <langgraph.channels.last_value.LastValue object at 0x000001D909DE14C0>}}

    {('subtraction', '__end__'), ('__start__', 'addition'), ('addition', 'subtraction')}

    init_state: {'x': 10, 'y': 10}

    addition_state: {'x': 11, 'y': 11}

    {'x': 9, 'y': 11}

    graph.png结构图

    image.png


    LangGraph的执行模型并不强制要求图中必须由END节点。只要执行路径在某个节点"无后继边"(即到达被视为隐式终点)。

    在图的执行过程中,每个节点的函数会被调用,并且接收到前一个节点返回的状态作为输入。每个函数新的状态,传递给下一个节点。

    关键点:节点函数不需要返回整个状态,而是仅返回更新的部分。也就是说:在每个节点的函数编辑中,需要使用和更新哪些State中的参数,只需要在return的时候指定即可,不必担心未在当前节点处理的State中的值会丢失,因为LangGraph的内部机制已经自动处理了状态的合并和维护。

    该图设置了一个简单的工作流程。其中值首先在第一个节点通过加法函数,然后在第二个节点通过减法函数。这一流程展示了节点如何通过图中的共享状态进行交互。需要注意的是,状态在任何给定时间只包含来自一个节点的数据,这意味着当节点处理状态时,它只能访问与其特定操作直接相关的数据,从而确保每个节点的逻辑时隔离和集中的。

关键字

上一篇: LangChain-接入12306-HTTP MCP智能体

下一篇: 没有了