Module 3:Tool Use 🛠️ 工具使用设计模式

一、核心概念:工具对智能体的价值

🔍 通俗解读
智能体的“能力边界”由工具决定——就像人类需要用电脑、手机、计算器完成不同任务,智能体需要调用各种工具,才能完成单一AI模型做不到的事(比如查实时数据、执行代码、查询数据库)。

⚙️ 技术干货
吴恩达课程中定义的“智能体工具分类”,按功能分为4类,覆盖绝大多数应用场景:

  • 信息获取类:学术数据库API、搜索引擎API(如Google Search API)、新闻接口。
  • 计算执行类:Python代码执行环境、计算器工具、数据分析工具(如Pandas)。
  • 内容生成类:文本生成API、图片生成API、视频剪辑工具。
  • 交互协作类:邮件发送工具、即时通讯API、团队协作工具(如Notion API)。

二、核心技术:函数调用与Model Context Protocol (MCP)

🔍 通俗解读
函数调用是智能体“调用工具的方式”——比如智能体想查实时天气,就调用天气API的函数,传入参数(城市、日期),就能获取结果;MCP则是“智能体与工具的通信协议”,确保智能体能正确识别工具、传递参数、接收结果。

⚙️ 技术干货
MCP的核心规范(必须遵守,否则工具调用失败):

  1. 工具描述规范:每个工具必须明确“功能、参数、返回值、异常情况”,让智能体能快速理解。
  2. 参数传递规范:参数类型、格式必须统一(如日期格式为YYYY-MM-DD),避免歧义。
  3. 结果接收规范:工具返回结果需结构化(如JSON格式),方便智能体解析和反思。

三、工具封装与安全调用(实操重点,附代码)

⚙️ 技术干货
工具封装的核心是“简化调用逻辑、提升安全性”,吴恩达推荐用“类封装”的方式,统一工具调用接口,同时加入“参数校验、异常处理”,避免智能体调用工具时出错。

# 工具封装示例:学术数据库API工具封装
import requests

class AcademicDatabaseTool:
    def __init__(self, api_key):
        self.api_key = api_key
        self.base_url = "https://api.academic-db.com/v1/search"  # 模拟学术数据库API
    
    # 工具描述(符合MCP规范)
    def tool_description(self):
        return {
            "功能": "搜索近1-5年的学术文献,支持关键词、作者、领域筛选",
            "参数": {
                "keyword": "字符串,搜索关键词(必填)",
                "years": "整数,搜索年限(1-5,必填)",
                "field": "字符串,学术领域(可选,如AI、CS)"
            },
            "返回值": "JSON格式,包含文献标题、作者、摘要、发表时间",
            "异常": "参数缺失时返回错误提示,API调用失败时返回重试建议"
        }
    
    # 工具调用核心方法(带参数校验和异常处理)
    def call(self, keyword, years, field=None):
        # 1. 参数校验
        if not keyword or not isinstance(years, int) or years < 1 or years > 5:
            return {"error": "参数错误:keyword必填,years需为1-5的整数"}
        # 2. 构造请求参数
        params = {
            "keyword": keyword,
            "years": years,
            "api_key": self.api_key
        }
        if field:
            params["field"] = field
        # 3. 调用API并处理异常
        try:
            response = requests.get(self.base_url, params=params)
            response.raise_for_status()  # 抛出HTTP错误
            return response.json()
        except requests.exceptions.RequestException as e:
            return {"error": f"API调用失败:{str(e)},建议重试或检查API密钥"}

# 智能体调用工具示例
tool = AcademicDatabaseTool(api_key="your_api_key")
# 智能体先获取工具描述,理解工具功能
print(tool.tool_description())
# 调用工具搜索文献
result = tool.call(keyword="Agentic AI", years=1, field="AI")
print("文献搜索结果:", result)

四、工具调用实战:数据库查询与API对接

🔍 通俗解读
以“智能体查询用户信息数据库”为例,演示工具调用的完整流程——智能体接收任务(“查询用户ID为1001的用户信息”),调用数据库查询工具,传入参数,获取结果,再整理成自然语言反馈。

📊 流程图(文字版)

接收任务 → 推理(需要调用数据库工具) → 调用数据库工具(传入用户ID) → 接收工具返回结果 → 整理结果 → 输出反馈

⚙️ 技术干货
实战关键点:① 工具参数必须精准,避免查询错误;② 异常处理要全面(如数据库连接失败、用户ID不存在);③ 结果整理要符合用户需求,避免返回原始数据库数据。


Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐