AI 编程 6:LangGraph Agent 模式 - 让 AI 自主使用工具
·
LangGraph 封神实战 6:Agent 智能体模式,让 AI 像人类一样 "使用工具"!
作者:WangQiaomei版本:1.0(2026/3/16)
核心亮点:AI 自主分析问题→选择工具→执行操作→输出结果,告别 "只会嘴说不会动手" 的尴尬!
🔥前言:为什么 Agent 模式是 AI 的未来?
你是否遇到过:
- AI 能看懂数学题,但算不对复杂运算?
- AI 知道要查天气,却不会调用天气 API?
- AI 想分析数据,却不会用 Excel / 数据库工具?
LangGraph Agent 模式 完美解决这个问题:✅ 让 AI 拥有 "动手能力",自主选择并调用工具完成任务✅ 支持多轮工具调用(比如先加法→再乘法)✅ 通用架构,换工具就能适配天气、股票、翻译等场景
本文以 "AI 自主计算数学题" 为例,手把手教你搭建能 "使用工具" 的智能体!
🎯核心工作流:AI 如何自主使用工具?
预览


查看代码
用户输入:(3 + 5) × 12 = ?
回到AI节点确认结果
需要工具吗?
执行add(3,5)=8 → multiply(8,12)=96
输出最终答案:96
flowchart TD
A["用户输入:(3 + 5) × 12 = ?"] --> B["llm_call(AI思考节点)"]
B["分析问题,决定调用add+multiply工具"] --> C{需要工具吗?}
C -->|✅ 是| D["tool_executor(工具执行节点)"]
D["执行add(3,5)=8 → multiply(8,12)=96"] --> B["回到AI节点确认结果"]
C -->|❌ 否| E["输出最终答案:96"]
用户输入:(3 + 5) × 12 = ?
回到AI节点确认结果
需要工具吗?
执行add(3,5)=8 → multiply(8,12)=96
输出最终答案:96
工作流炸裂亮点
- 自主决策:AI 自己判断该用什么工具,无需人工指令
- 闭环迭代:工具执行完自动返回 AI 验证,确保结果正确
- 无限扩展:加减乘除只是开始,API / 数据库 / 爬虫都能接!
🛠️完整可运行代码(直接复制即用)
python
运行
# -*- coding: utf-8 -*-
"""
作者:WangQiaomei
版本:1.0(2026/3/18)
"""
# ==================== 1. 定义AI可用的工具(核心!) ====================
# @tool装饰器:把普通函数变成AI能看懂、能调用的工具
@tool
def multiply(a: int, b: int) -> int:
"""Multiply `a` and `b`. (AI靠这个描述理解工具用途)
Args:
a: First int
b: Second int
"""
return a * b
@tool
def add(a: int, b: int) -> int:
"""Adds `a` and `b`.
Args:
a: First int
b: Second int
"""
return a + b
@tool
def divide(a: int, b: int) -> float:
"""Divide `a` and `b`.
Args:
a: First int
b: Second int
"""
return a / b
# 把工具绑定到LLM,让AI知道"我有这些工具可用"
tools = [add, multiply, divide]
tools_by_name = {tool.name: tool for tool in tools}
llm_with_tools = llm.bind_tools(tools) # 关键一步!
# ==================== 2. 定义全局状态 ====================
class State(TypedDict):
# 消息列表自动累加,支撑多轮工具调用
messages: Annotated[list, operator.add]
# ==================== 3. 核心节点函数 ====================
def llm_call(state: State):
"""AI思考节点:分析问题,决定调用哪个工具"""
response = llm_with_tools.invoke(state["messages"])
return {"messages": [response]}
def tool_executor(state: State):
"""工具执行节点:执行AI指定的工具调用"""
last_message = state["messages"][-1]
results = []
# 遍历AI要求调用的所有工具
for tool_call in last_message.tool_calls:
tool_name = tool_call["name"]
tool_args = tool_call["args"]
# 找到工具并执行
tool_fn = tools_by_name[tool_name]
result = tool_fn.invoke(tool_args)
# 封装工具执行结果,让AI能识别
results.append(ToolMessage(
content=str(result),
tool_call_id=tool_call["id"]
))
return {"messages": results}
# ==================== 4. 条件路由:控制流程走向 ====================
def should_continue(state: State):
"""判断是否需要继续调用工具"""
last_message = state["messages"][-1]
# 没有工具调用请求 → 结束流程
if not last_message.tool_calls:
return "end"
# 有工具调用请求 → 执行工具
return "continue"
# ==================== 5. 构建Agent工作流 ====================
agent_builder = StateGraph(State)
# 添加核心节点
agent_builder.add_node("llm_call", llm_call) # AI思考
agent_builder.add_node("tool_executor", tool_executor) # 工具执行
# 配置流程走向
agent_builder.add_edge(START, "llm_call") # 开始 → AI思考
agent_builder.add_conditional_edges(
"llm_call",
should_continue,
{
"continue": "tool_executor", # 需要工具 → 执行工具
"end": END # 无需工具 → 结束
}
)
agent_builder.add_edge("tool_executor", "llm_call") # 工具执行完 → 回到AI
# 编译工作流
agent = agent_builder.compile()
# 可视化工作流(可选,需要网络)
try:
display(Image(agent.get_graph().draw_mermaid_png()))
except Exception as e:
print(f"可视化失败(不影响运行):{e}")
# ==================== 6. 运行测试 ====================
if __name__ == "__main__":
# 测试题:让AI自主计算 (3 + 5) × 12
question = "What is (3 + 5) * 12?"
# 执行Agent
result = agent.invoke({"messages": [HumanMessage(content=question)]})
# 输出结果
print(f"💡 问题:{question}")
print(f"🎉 答案:{result['messages'][-1].content}")
🔑核心知识点拆解(新手也能懂)
1. @tool 装饰器:AI 工具的 "身份证"
python
运行
@tool
def add(a: int, b: int) -> int:
"""Adds `a` and `b`.(AI靠这个注释理解工具用途)"""
return a + b
- ✨ 作用:把普通 Python 函数标记为 AI 可调用工具
- ✨ 关键:函数注释必须清晰,AI 靠这个判断该什么时候用这个工具
2. llm.bind_tools (tools):给 AI"装备库"
python
运行
llm_with_tools = llm.bind_tools(tools)
- ✨ 核心:告诉 AI"你现在有加法、乘法、除法这三个工具可用"
- ✨ 效果:AI 思考时会自动判断该调用哪个工具,无需你手动指定
3. 条件路由:Agent 的 "决策大脑"
python
运行
def should_continue(state: State):
if not last_message.tool_calls:
return "end" # 没工具要调用 → 结束
return "continue" # 有工具要调用 → 执行
- ✨ 作用:实现 Agent 的闭环迭代,直到任务完成
- ✨ 场景扩展:可自定义迭代次数限制,避免无限循环
📌运行效果展示
plaintext
💡 问题:What is (3 + 5) * 12?
🎉 答案:The result of $(3 + 5) \times 12$ is **96**.
- AI 会先调用
add(3,5)得到 8,再调用multiply(8,12)得到 96 - 最终返回格式化的答案,全程无需人工干预!
💡超实用扩展场景(看完就能改)
表格
| 场景 | 改造思路 |
|---|---|
| 📅 天气查询 | 把工具换成「调用天气 API」,让 AI 自主查指定城市天气 |
| 📈 股票分析 | 把工具换成「获取股票数据」,让 AI 自主分析涨跌 |
| 📝 翻译工具 | 把工具换成「调用翻译 API」,让 AI 自主翻译多语言 |
| 🧰 爬虫工具 | 把工具换成「网页爬虫」,让 AI 自主爬取指定内容 |
🚩避坑指南(新手必看)
- API Key 替换:一定要把代码中的
你自己的API_KEY换成阿里云百炼的真实 Key - 工具注释清晰:AI 靠注释理解工具用途,注释写得越清楚,工具调用越准确
- 参数类型匹配:工具函数的参数类型(如 int/float)要和 AI 传入的参数一致
- 迭代次数限制:复杂场景建议添加
max_iterations,避免 Agent 无限循环调用工具
🎯总结
Agent 模式是 LangGraph 最具颠覆性的玩法,核心价值在于:
- 让 AI 从 "语言模型" 升级为 "智能体",拥有 "思考 + 行动" 能力;
- 工具化架构无限扩展,适配几乎所有实际业务场景;
- 闭环迭代确保结果准确,比单纯的 LLM 输出靠谱 10 倍!
下次遇到需要 AI"动手" 的场景,别再手动写逻辑了,直接用 Agent 模式让 AI 自己搞定!💪
想要进阶教程?留言告诉我:✅ 如何添加工具调用次数限制✅ 如何接入第三方 API 工具(如天气 / 股票)✅ 如何给 Agent 添加记忆功能
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)