🎯 智能体 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评估是否完成"
输出最终答案
🚀 真正的智能体特点
- 自主规划:LLM分析问题并制定计划
- 工具使用:动态选择并调用工具
- 自我评估:判断任务是否完成
- 循环迭代:持续思考-行动直到解决
💡 升级到完整智能体
要更接近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}
# 这样就形成了完整循环:规划 → 思考 → 行动 → 反思 → 调整
真正的智能体:能够自主理解问题、规划解决方案、执行动作、评估结果并持续改进。工作流只是固定路径的自动化,而智能体具备真正的决策能力。