作者:WangQiaomei版本:1.0(2026/3/16)
核心亮点:AI 自主分析问题→选择工具→执行操作→输出结果,告别 "只会嘴说不会动手" 的尴尬!
你是否遇到过:
- AI 能看懂数学题,但算不对复杂运算?
- AI 知道要查天气,却不会调用天气 API?
- AI 想分析数据,却不会用 Excel / 数据库工具?
LangGraph Agent 模式 完美解决这个问题:✅ 让 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
运行
GPT plus 代充 只需 145 # -*- 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
运行
GPT plus 代充 只需 145 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
GPT plus 代充 只需 145 问题:What is (3 + 5) * 12? 答案:The result of $(3 + 5) imes 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 添加记忆功能
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/243858.html