Skip to main content
版权归属于 LangChat Team
官网:https://langchat.cn

09 - Tools 工具调用

版本说明

本文档基于 LangChain4j 1.10.0 版本编写。

学习目标

通过本章节学习,你将能够:
  • 理解工具调用(Function Calling)的概念
  • 掌握 @Tool 注解的使用
  • 学会定义和创建自定义工具
  • 理解工具参数和返回值
  • 掌握工具执行和错误处理
  • 实现一个带工具调用的聊天机器人

前置知识

  • 完成《01 - LangChain4j 简介》章节
  • 完成《02 - 你的第一个 Chat 应用》章节
  • 完成《03 - 深入理解 ChatModel》章节

核心概念

什么是工具调用(Function Calling)?

工具调用是允许 LLM 在需要时调用外部函数或 API 的机制。 类比理解: 如果把 LLM 比作一个智能助手,那么工具就像是助手的手机:
  • LLM 可以打电话(调用工具)获取实时信息
  • LLM 可以查天气(调用天气 API)
  • LLM 可以搜索数据库(调用数据库查询)
为什么需要工具调用?
  1. 实时信息 - 获取最新天气、股票价格等
  2. 数据访问 - 查询数据库、文件系统等
  3. 外部服务 - 调用第三方 API(如支付、邮件等)
  4. 计算能力 - 执行数学计算、数据分析等
  5. 系统操作 - 读写文件、发送通知等

工具调用的流程

LangChain4j 中的工具调用

LangChain4j 通过以下机制支持工具调用:
  1. @Tool 注解 - 标记工具方法
  2. 自动调用 - LLM 决定何时调用哪个工具
  3. 参数提取 - 自动从用户消息中提取工具参数
  4. 结果返回 - 将工具执行结果返回给 LLM

定义工具

使用 @Tool 注解

使用 @Tool 注解标记一个方法为工具:

工具方法的要求

工具方法需要满足:
  1. 返回值 - 必须有返回值(通常是 String)
  2. 参数 - 可以有零个或多个参数
  3. 参数类型 - 支持:
    • 基本类型(String、int、double、boolean 等)
    • 复杂类型(自定义对象、Map 等)
  4. 注解 - 使用 @Tool 注解,可提供描述

工具描述

工具参数

基本类型参数

复杂类型参数

工具执行

AI Services 集成

使用 AiServices 创建带工具的服务:

工具执行流程

完整示例:智能客服机器人

测试代码示例

实践练习

练习 1:创建数据库查询工具

实现一个查询数据库的工具:

总结

本章要点

  1. 工具调用概念
    • 允许 LLM 调用外部函数或 API
    • LLM 自动决策何时调用工具
    • 工具执行结果返回给 LLM
  2. @Tool 注解
    • 标记方法为工具
    • 可以提供名称和描述
    • 支持 @ToolParam 标记参数
  3. 工具参数
    • 支持基本类型和复杂类型
    • 参数可以有默认值
    • 自动提取和验证参数
  4. 工具执行
    • LLM 生成工具调用请求
    • 执行工具并获取结果
    • 将结果返回给 LLM
  5. AI Services 集成
    • 使用 tools() 方法注册工具
    • 自动处理工具调用流程
    • 简化工具使用

下一步

在下一章节中,我们将学习:
  • AI Services 高级特性
  • 多轮对话中的工具调用
  • 并行工具调用
  • 工具的错误处理和重试
  • 自定义工具调用逻辑

常见问题

Q1:@Tool 和 @ToolParam 有什么区别? A:
  • @Tool - 标记方法为工具,可以提供名称和描述
  • @ToolParam - 标记方法参数,可以提供名称和默认值
Q2:工具可以调用其他工具吗? A:可以,但需要谨慎设计以避免无限循环。建议将工具设计为独立的、原子性的操作。 Q3:如果工具执行失败会怎样? A:工具执行的错误会返回给 LLM,LLM 可以根据错误生成适当的响应或尝试其他方法。建议在工具中实现良好的错误处理和验证。 Q4:工具可以有多个返回值吗? A:工具方法必须返回单个值(通常是 String),但这个值可以包含复杂的数据结构(如 JSON)。 Q5:如何测试工具? A:
  1. 单元测试工具方法本身
  2. 集成测试整个工具调用流程
  3. 手动模拟 LLM 的工具调用请求
  4. 使用模拟数据进行测试

参考资料


版权归属于 LangChat Team
官网:https://langchat.cn