AI开发-python-LangGraph框架(3-25-LangGraph介绍)

LangGraph:AI 智能体开发进阶方案

一、前言

  在基于 LangChain 开发大模型应用时,绝大多数开发者入门阶段,都会采用原生链式调用的开发模式。  通过拼接提示词模板、大模型实例、输出解析器与自定义工具,搭配硬编码条件判断,就能快速实现基础问答、单步工具调用等轻量化需求。  这种开发方式逻辑直观、上手门槛低,非常适合流程固定、逻辑简单的短期场景。但随着业务复杂度升级,需要实现多轮推理、循环重试、分支分流、全局状态留存等能力时,纯手动编写的链式代码会高度耦合、冗余臃肿,后期维护与扩展难度急剧上升。  而在 LangChain 生态体系中,LangGraph 正是为解决复杂 AI 流程编排、工业化智能体开发而生的核心框架。

二、什么是 LangGraph

  LangGraph 是 LangChain 官方推出的开源工作流编排框架,专为大模型智能体、复杂 AI 任务调度量身设计。  它摒弃了传统线性串联的链式结构,核心依托有向状态图理念,将 LLM 推理、工具调用、决策判断、答案生成等能力,拆分为独立可复用的节点,通过定向边配置流程流转规则,同时统一管理全局运行状态。  简单理解:LangGraph 是一套可分支、可循环、有状态、高可控的 AI 智能体调度引擎,核心用于构建具备自主思考、迭代纠错、复杂决策能力的高阶大模型应用。

三、LangGraph 核心作用

  1、打破线性流程限制    传统链式调用属于单向流水线模式,执行步骤固定、无法回溯,仅能依靠代码硬写判断实现简单分支。    LangGraph 原生支持条件分支、循环迭代、自定义步骤跳转,完美适配智能体反思纠错、多轮检索、工具重复调用等复杂业务场景。
  2、全局统一状态管理    内置轻量化共享状态容器,可在所有节点之间持久化传递数据,自动留存对话上下文、工具返回结果、决策记录、中间变量等内容。    彻底告别传统链式开发中,参数多层嵌套传递的冗余写法,大幅简化多步骤任务的数据交互逻辑。
  3、贴合工程化落地需求    天然支持执行日志追溯、异常容错、断点续跑、人工介入审核,流程可视化程度高,便于线上调试与问题排查。    无论是多智能体协同、复杂 RAG 检索拆解,还是长周期任务持续执行,都能提供稳定可靠的调度能力。
  4、无缝兼容 LangChain 生态    无需重构原有业务代码,可直接复用项目中已有的大模型实例、提示词、自定义工具、输出解析器等组件,实现从简单链式开发到图式化开发的平滑过渡。

四、LangGraph 核心特点

   1、模块化图式编排    以「节点 + 定向边」搭建整体工作流,每个节点只负责单一职责,比如决策判断、外部工具调用、最终答案生成等。    业务逻辑高度解耦,结构清晰规整,新增需求、修改流程时只需调整对应节点与流转规则,迭代效率更高。
   2、原生支持非线性流转    区别于传统链式只能单向执行,LangGraph 可根据大模型输出、业务结果动态判断下一步动作。    例如:信息不足自动二次检索、调用失败自动重试、回答不合格重新生成,轻松实现闭环自主推理逻辑。
   3、轻量化有 state 设计    全程维护全局共享状态,所有节点可读可写,数据全局互通。    无需手动拼接上下文、缓存中间结果,天然适配多轮对话、长会话、复杂链式任务场景。
   4、低侵入高灵活性    框架轻量化、无强制开发规范,开发者可自由自定义节点逻辑、流转条件、异常处理规则。    既能搭建极简轻量流程,也能支撑超大型、多节点、多分支的企业级复杂系统。
 

五、传统链式调用 与 LangGraph 对比

  结合常规工具调用场景来看,传统原生多链路开发,需要手动编写大量判断逻辑,强行区分「直接回答」「调用工具后回答」两大分支。  一旦业务升级,需要增加多轮查询、多层判断、循环任务时,代码会快速膨胀,耦合严重,后期几乎难以扩展。
  而 LangGraph 从架构层面解决了这类痛点:  - 简单场景:轻量化使用,保持开发高效;  - 复杂场景:无需重构底层逻辑,仅新增节点、配置流转规则即可快速扩展。
  核心差异总结:  - 流程模式:链式 = 线性单向;LangGraph = 非线性图结构  - 逻辑扩展:链式 = 硬编码判断;LangGraph = 原生分支 + 循环  - 状态管理:链式 = 参数层层传递;LangGraph = 全局统一状态  - 适用场景:链式 = 简单固定流程;LangGraph = 复杂智能体工业化落地

六、适用场景划分

  ✅ 优先使用传统链式调用    单轮简单问答、固定流程工具调用、短期演示项目、轻量化脚本开发。
  ✅ 强烈推荐接入 LangGraph    自主决策 AI 智能体、多轮工具检索、复杂业务流程编排、多智能体协作、长会话系统、企业级生产项目。
 
先看看没有LangGraph做流程编排的代码怎么写?
代码逻辑图如下:

图片

代码部分:

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

# ==================== 1. 基础配置(极简版) ====================
# 配置LLM(保留核心,简化注释)
DEEPSEEK_API_KEY = 123
llm = ChatOpenAI(
    api_key=DEEPSEEK_API_KEY,
    base_url="http://192.168.0.100:8087/v1",
    model="qwen3.5-35b-gptq",
    temperature=0.3,
    max_tokens=1024,
)

output_parser = StrOutputParser()

# ==================== 2. 定义工具(极简版) ====================
def searxng_search(query: str):
    """极简版搜索工具,模拟返回结果"""
    print(f"🔍 调用搜索工具,关键词:{query}")
    return "今天晴天,温度25度,适合外出游玩!"

# ==================== 3. 核心:多链路定义(重点突出) ====================
# 链路1:决策链路(判断是否需要调用工具)
decision_prompt = ChatPromptTemplate.from_template("""
你需要判断回答用户问题是否需要调用搜索工具:
1. 如果需要,直接返回搜索关键词(仅返回关键词,无其他内容)
2. 如果不需要,直接返回最终答案(仅返回答案,无其他内容)
用户问题:{input}
""")
decision_chain = decision_prompt | llm | output_parser  # 决策链路-是否需要工具才能给出答案

# 链路2:答案生成链路(基于搜索结果生成最终答案)
answer_prompt = ChatPromptTemplate.from_template("""
根据搜索结果回答用户问题,要求简洁准确:
搜索结果:{observation}
用户问题:{input}
""")
answer_chain = answer_prompt | llm | output_parser  # 答案生成链路

# ==================== 4. 代理执行(核心逻辑:多链路调用) ====================
def run_agent(user_input: str) -> str:
    """
    核心逻辑:多链路调用
    1. 调用决策链路,判断是否需要搜索
    2. 如需搜索:调用工具 → 调用答案生成链路
    3. 无需搜索:直接返回决策链路结果
    """
    # 第一步:调用决策链路
    decision_result = decision_chain.invoke({"input": user_input})
    print(f"📝 决策链路输出:{decision_result}")

    # 第二步:根据决策结果分支处理(多链路核心逻辑)
    # 简单判断:如果是明显的需要需要查询的如"今天", "天气"
    if any(keyword in decision_result for keyword in ["今天", "天气"]):
        # 调用工具 + 调用答案生成链路
        search_result = searxng_search(decision_result)
        final_answer = answer_chain.invoke({
            "input": user_input,
            "observation": search_result
        })
        return final_answer
    else:
        # 无需搜索,直接返回决策链路结果
        return decision_result

# ==================== 5. 测试调用 ====================
if __name__ == "__main__":
    # 测试1:需要调用搜索工具(触发双链路)
    print("【问题1】今天的天气如何?")
    print("【回答1】", run_agent("今天的天气如何?"), "\n")

    # 测试2:无需调用工具(仅触发决策链路)
    print("【问题2】请讲一个简短的中文笑话")
    print("【回答2】", run_agent("请讲一个简短的中文笑话"))

 结果输出:

【问题1】今天的天气如何?
📝 决策链路输出:

今天天气
🔍 调用搜索工具,关键词:

今天天气
【回答1】 

今天晴天,温度 25 度,适合外出游玩。 

【问题2】请讲一个简短的中文笑话
📝 决策链路输出:

有一天,0 跟 8 在街上撞见了。0 不屑地看了 8 一眼,说:“胖就胖呗,还系什么腰带啊!”
【回答2】 

有一天,0 跟 8 在街上撞见了。0 不屑地看了 8 一眼,说:“胖就胖呗,还系什么腰带啊!”

 

 
更多学习资料尽在 老虎网盘资源
posted @ 2026-04-15 15:44  万笑佛  阅读(63)  评论(0)    收藏  举报