07_day2-实验-agent分析选择工具-程序阐述

程序解析

day2_qwen_tool_calling.py流程图

🎯 1. 「问题」——为什么需要工具?

❓ “AI 能回答‘现在几点?’吗?”

  • 演示:直接问普通 AI → 它会说“我无法获取实时时间”或胡编。
  • 💡 核心痛点:大模型是“静态知识库”,不知道此刻的真实世界状态(时间、天气、股价、文件内容等)。

解决方案:给 AI 配“工具”(就像给人配手机查天气)!

👉 类比

  • AI = 聪明但闭眼的人
  • 工具 = 它的眼睛和手
  • 我们教它:“当你需要看时间,就调用 get_current_time()

🔧 2. 「整体流程」——两步策略

AI 工具调用 = 两轮对话

第一轮:用户提问 → AI 思考 → 决定是否调工具 + 传什么参数
第二轮:把工具返回的真实数据喂给 AI → AI组织语句 → 生成最终自然语言回答

用户: "现在几点?成都天气?"
       ↓
AI: (思考) → 需要调两个工具!
       ↓
调用 get_current_time() → 返回 "2026-01-24 12:00:00"
调用 get_weather("成都") → 返回 "小雨,18°C"
       ↓
AI: (结合真实数据) → "当前时间是...,成都今天小雨..."

强调:这不是“AI 直接执行代码”,而是调用函数,调用安全的、受控的函数


🧩 3. 代码三要素(核心)

整个程序只需关注 3 个部分

✅ (1) 工具函数(Tools) —— 你写的“能力”

def get_current_time(): ...
def get_weather(city): ...

👉 这是你赋予 AI 的“超能力”,可以任意扩展(查汇率、读文件等)

✅ (2) 工具描述(Tool Schema) —— 告诉 AI “怎么用”

{
  "name": "get_weather",
  "description": "查询天气",
  "parameters": { "city": {"type": "string"} }
}

👉 这是给 AI 看的说明书,必须结构化(JSON Schema),AI 才知道要传什么参数

✅ (3) 两轮调用逻辑 —— 协调者

  • 第一次:Generation.call(..., tools=tools) → 获取 tool_calls
  • 执行本地函数 → 收集结果
  • 第二次:把结果作为 role="tool" 消息传回 → 得到最终回答

💡 关键点:AI 不直接运行你的函数!它只返回“我想调 get_weather,参数是成都”,由你的程序决定是否真的调用(安全可控!)


⚠️ 4. 强调一个易错点(防坑指南)

arguments 是字符串,不是字典!

# 错误 ❌
args = tool_call["function"]["arguments"]  # 这是 '{"city": "成都"}' 字符串!
city = args.get("city")  # 报错!str 没有 .get()

# 正确 ✅
args = json.loads(tool_call["function"]["arguments"])  # 先转成 dict

👉 原因:API 传输的是 JSON 文本,必须解析!


🌟 5. 升华:这是 Agent 的基石(展望未来)

  • 你现在实现的,就是 AI Agent(智能体)的核心机制
  • 真实应用中:
    • 工具可以是:数据库查询、API 调用、代码解释器、文件系统...
    • 多个工具可组合(先查天气,再推荐穿衣)
  • LangChain / LlamaIndex 等框架,底层也是这个原理!

💬 金句总结
“大模型 + 工具 = 从‘知道’到‘做到’”


📚 教学建议

学生水平 讲解重点
初学者 聚焦第 1、2、5 点,用类比理解“为什么需要工具”
有 Python 基础 加入第 3 点,让学生自己添加一个新工具(如 get_date()
进阶学习者 对比 LangChain Agent vs 原生 DashScope,讨论封装与灵活性

这样讲解,学生不仅能跑通代码,更能理解背后的设计思想,为后续学习 Agent 开发打下坚实基础!🎉

posted @ 2026-01-26 22:01  船山薪火  阅读(15)  评论(0)    收藏  举报
![image](https://img2024.cnblogs.com/blog/3174785/202601/3174785-20260125205854513-941832118.jpg)