从LangChain到LangGraph:构建智能Agent的实战指南(二)——LangGraph,当Agent需要“思考循环“

#langgraph_core

目录

第二部分:LangGraph------当Agent需要"思考循环"

[2.1 为什么需要LangGraph?](#2.1 为什么需要LangGraph?)

[2.2 LangGraph核心概念](#2.2 LangGraph核心概念)

[2.3 实战:带反思能力的Agent](#2.3 实战:带反思能力的Agent)


第二部分:LangGraph------当Agent需要"思考循环"

2.1 为什么需要LangGraph?

在上一篇中,我们用LangChain搭了个简单的Agent。但如果你想做一个更聪明的助手,比如让它写代码,写错了自己改,或者写完文章自己润色,你会发现LangChain原本那种"直肠子"(Chain)的结构不太好使了

传统的Chain就像是一条单行道,从A到B再到C,一路走到黑。但真实的思考过程往往是循环往复的:写初稿 -> 检查 -> 修改 -> 再检查 -> 满意为止。这种"循环"(Loop)和"分支"(Branching)的能力,正是LangGraph要解决的核心痛点

来看看这两者的区别:

2.2 LangGraph核心概念

LangGraph引入了图(Graph)的概念来编排Agent的流程。要玩转它,只需要掌握三个核心概念:

  1. State(状态):这就好比教室前面的"共享黑板"。所有的节点(Node)都可以往上写东西,也可以读取上面的信息。整个流程就是围绕着这个State在不断更新

  2. Node(节点):这就像是负责不同任务的"同学"。有的负责写代码,有的负责测试,有的负责写文档。每个节点接收当前的State,干完活后把结果更新回State

  3. Edge(边) :这是流程的"指挥棒"。它决定了下一步该轮到哪个节点干活。除了普通的边,最厉害的是条件边(Conditional Edge),它能根据当前的状态动态决定下一步去哪

2.3 实战:带反思能力的Agent

下面我们来构建一个能自我反思的Agent。它的任务是回答问题,但它会自己检查答案,如果不满意就重写,最多重试3次

python 复制代码
from typing import TypedDict, Literal
from langgraph.graph import StateGraph, END

# 1. 定义状态
# 这里的State就像是一个字典,记录了任务的上下文
class AgentState(TypedDict):
    question: str
    answer: str
    feedback: str
    attempt_count: int

# 2. 定义节点函数
def generate_answer(state: AgentState):
    """生成答案的节点"""
    print(f"--- 第 {state['attempt_count'] + 1} 次尝试生成 ---")
    # 模拟生成过程,实际这里会调用LLM
    return {"answer": f"这是关于 {state['question']} 的答案", "attempt_count": state['attempt_count'] + 1}

def reflect_on_answer(state: AgentState):
    """反思答案的节点"""
    print("--- 正在反思 ---")
    # 模拟反思,这里简单假设如果尝试次数小于3次就不满意
    if state['attempt_count'] < 3:
        return {"feedback": "内容不够详细,请补充"}
    return {"feedback": "perfect"}

def should_continue(state: AgentState) -> Literal["generate", "end"]:
    """决定下一步走向的条件判断函数"""
    if state['feedback'] == "perfect":
        return "end"
    if state['attempt_count'] >= 3:
        return "end"
    return "generate"

# 3. 构建图
workflow = StateGraph(AgentState)

# 添加节点
workflow.add_node("generate", generate_answer)
workflow.add_node("reflect", reflect_on_answer)

# 设置入口点
workflow.set_entry_point("generate")

# 添加边
# generate -> reflect (生成完后必然去反思)
workflow.add_edge("generate", "reflect")

# reflect -> ? (反思完后看情况)
workflow.add_conditional_edges(
    "reflect",       # 上一个节点
    should_continue, # 判断函数
    {                # 路由映射
        "generate": "generate", # 这里的key对应should_continue的返回值
        "end": END
    }
)

# 编译图
app = workflow.compile()

# 运行
inputs = {"question": "LangGraph怎么学?", "attempt_count": 0}
# app.invoke(inputs) # 实际运行时调用这一行

代码解析 : 这个例子的精髓在于should_continue函数和add_conditional_edges。它实现了一个闭环:生成 -> 反思 -> 判断 -> (如果不满意) -> 生成。

这就像给Agent装了一个"自我批评"的机制,让它不再是只会"瞎蒙"的愣头青

掌握了LangGraph,你就拥有了构建复杂Agent系统的钥匙。但要把这套东西真正搬到生产环境,还有不少"坑"要踩。下一篇,我们就来聊聊工程落地时的那些血泪经验

相关推荐
GJGCY13 小时前
2026企业级AI智能体架构对比:RPA+大模型融合在财务场景的表现
大数据·人工智能·ai·rpa·智能体
GJGCY17 小时前
2026制造业RPA技术落地指南:7大核心场景架构对比与跨系统集成实践
人工智能·ai·自动化·制造·rpa·制造业·智能体
Hardworking6661 天前
OpenClaw的特点、产品架构、市场机遇、安全风险
人工智能·安全·架构·智能体·openclaw
云道轩2 天前
Langflow 1.8 正式发布:集中式提供商配置、更可预测的工作流 API,以及 UI 中更快速的调试与迭代。
人工智能·智能体·langflow
放下华子我只抽RuiKe52 天前
机器学习全景指南-进阶篇——解决分类问题的逻辑回归
人工智能·机器学习·分类·逻辑回归·文心一言·ai编程·智能体
Nicolas8932 天前
OpenClaw和Nanobot的安全风险分析以及Nanobot的风险更高
安全·风险·智能体·ai助手·openclaw·nanobot·个人agent
风痕天际3 天前
ESP32-S3开发教程9:扣子智能体快速搭建与API调用例程使用讲解
单片机·esp32-s3·esp-idf·智能体·扣子
无心水3 天前
【OpenClaw:应用与协同】20、OpenClaw Supervisor-Worker架构——搭建多智能体团队化作战系统
人工智能·架构·智能体·bm25·openclaw·openclaw·三月创作之星
kong79069283 天前
AI大模型应用开发-智能体架构
人工智能·智能体
金智维科技官方3 天前
信通院认证,金智维的政务智能体让政务工作“智能自动化”
人工智能·ai·自动化·agent·智能体