极简LangGraph智能体Demo

🎯 智能体 vs 工作流的本质区别

维度 工作流 (Workflow) 智能体 (Agent)
决策权 开发者预设路径 LLM实时决策
灵活性 固定分支 动态规划
核心 流程自动化 自主思考+行动
LangGraph实现 if/else条件路由 LLM作为决策函数

🤖 LangGraph智能体Demo

python 复制代码
from langgraph.graph import StateGraph, END
from langchain_openai import ChatOpenAI
from typing import TypedDict, List
import re

# 1. 定义智能体状态
class AgentState(TypedDict):
    messages: List[str]
    thought: str
    action: str
    result: str

# 2. 创建LLM
llm = ChatOpenAI(model="gpt-4", temperature=0.3)

# 3. 定义工具
tools = {
    "search": lambda query: f"搜索[{query}]的结果: 北京当前气温25度",
    "calculate": lambda expr: f"计算[{expr}] = {eval(expr)}",
    "finish": lambda ans: f"最终答案: {ans}"
}

# 4. 思考节点
def think_node(state: AgentState):
    prompt = f"""
    当前对话历史:{state['messages'][-3:] if len(state['messages']) > 3 else state['messages']}
    
    你需要决定下一步:
    1. 如果可以直接回答用户问题 → 使用 finish 工具
    2. 如果需要更多信息 → 使用 search 工具
    3. 如果需要计算 → 使用 calculate 工具
    
    你的思考过程:"""
    
    thought = llm.invoke(prompt).content
    print(f"🤔 智能体思考: {thought[:100]}...")
    
    action = llm.invoke(f"基于思考'{thought}',应该用哪个工具?只返回工具名。").content
    
    return {"thought": thought, "action": action}

# 5. 执行节点
def act_node(state: AgentState):
    action = state["action"].strip().lower()
    thought = state["thought"]
    
    last_msg = state["messages"][-1] if state["messages"] else ""
    
    if action in tools:
        if action == "search":
            param = thought.split("搜索")[-1].split("。")[0] if "搜索" in thought else last_msg
            result = tools["search"](param)
        elif action == "calculate":
            expr = re.findall(r'\d+[\+\-\*/]\d+', thought)
            param = expr[0] if expr else "25-5"
            result = tools["calculate"](param)
        else:  # finish
            result = tools["finish"](thought.split("答案:")[-1] if "答案:" in thought else thought)
    else:
        result = f"未知动作: {action}"
    
    print(f"🔧 执行动作: {action} → {result[:50]}...")
    
    new_messages = state["messages"] + [f"动作: {action}", f"结果: {result}"]
    return {"result": result, "messages": new_messages}

# 6. 决策函数
def should_continue(state: AgentState):
    if "最终答案" in state["result"] or "finish" in state["action"]:
        print("✅ 智能体认为任务完成")
        return END  # 直接返回END
    else:
        print("🔄 智能体需要进一步思考")
        return "think"

# 7. 构建工作流
workflow = StateGraph(AgentState)
workflow.add_node("think", think_node)
workflow.add_node("act", act_node)

workflow.set_entry_point("think")
workflow.add_edge("think", "act")

# 关键修正:正确设置条件边
workflow.add_conditional_edges(
    "act", 
    should_continue,
    {"think": "think"}  # 只有think需要映射,END会自动处理
)

agent = workflow.compile()

# 测试
print("=== 智能体演示开始 ===")
result = agent.invoke({
    "messages": ["用户: 先搜索北京天气,然后计算如果温度下降5度会是多少"],
    "thought": "",
    "action": "",
    "result": ""
})

print(f"\n🎯 任务完成!最终结果: {result['result']}")

🔄 智能体的核心循环

"需要更多信息"
"任务完成"
用户提问
"思考节点

LLM分析问题,规划行动"
"执行节点

调用工具完成任务"
"决策函数

LLM评估是否完成"
输出最终答案

🚀 真正的智能体特点

  1. 自主规划:LLM分析问题并制定计划
  2. 工具使用:动态选择并调用工具
  3. 自我评估:判断任务是否完成
  4. 循环迭代:持续思考-行动直到解决

💡 升级到完整智能体

要更接近AutoGPT那种智能体,只需:

python 复制代码
# 增加记忆管理
def reflect_node(state):
    """反思节点:评估之前行动,调整策略"""
    reflection = llm.invoke(f"反思之前的行动: {state['messages'][-5:]}。有什么改进?")
    return {"thought": state["thought"] + f"\n反思: {reflection}"}

# 增加目标分解
def plan_node(state):
    """规划节点:将大目标分解为小步骤"""
    plan = llm.invoke(f"将目标分解步骤: {state['messages'][0]}")
    return {"plan": plan, "current_step": 0}

# 这样就形成了完整循环:规划 → 思考 → 行动 → 反思 → 调整

真正的智能体:能够自主理解问题、规划解决方案、执行动作、评估结果并持续改进。工作流只是固定路径的自动化,而智能体具备真正的决策能力。

相关推荐
是一碗螺丝粉14 小时前
LangChain 链(Chains)完全指南:从线性流程到智能路由
前端·langchain·aigc
前端付豪14 小时前
LangChain记忆:通过Memory记住上次的对话细节
人工智能·python·langchain
神秘的猪头14 小时前
🔌 给 AI 装上“三头六臂”!实战大模型接入第三方 MCP 全攻略
langchain·llm·mcp
前端付豪1 天前
LangChain链 写一篇完美推文?用SequencialChain链接不同的组件
人工智能·python·langchain
神秘的猪头1 天前
🔌 把 MCP 装进大脑!手把手带你构建能“热插拔”工具的 AI Agent
langchain·llm·mcp
是一碗螺丝粉3 天前
5分钟上手LangChain.js:用DeepSeek给你的App加上AI能力
前端·人工智能·langchain
是一碗螺丝粉3 天前
LangChain 核心组件深度解析:模型与提示词模板
前端·langchain·aigc
大模型真好玩3 天前
大模型训练全流程实战指南工具篇(七)——EasyDataset文档处理流程
人工智能·langchain·deepseek
勇气要爆发4 天前
吴恩达《LangChain LLM 应用开发精读笔记》1-Introduction_介绍
笔记·langchain·吴恩达