LangChain4j Function Call 工具调用

学习时间:2026/4/4
技术栈:Spring Boot 4.0.5 + LangChain4j 1.12.2 + 通义千问模型

一、什么是 Function Call?

Function Call(函数调用/工具调用)允许 AI 模型调用外部工具或函数,扩展 AI 的能力边界。

核心价值

  • 🎯 突破知识限制:访问实时数据(天气、股票、订单)
  • 🔧 执行实际操作:退票、下单、发送邮件
  • 📊 获取精确信息:数据库查询、API 调用

工作流程

用户:我要退票
    ↓
AI 分析意图,发现需要退票工具
    ↓
AI 返回工具调用请求:cancelOrder(orderId="123", reason="行程变更")
    ↓
LangChain4j 自动执行 cancelOrder() 方法
    ↓
将结果返回给 AI
    ↓
AI 生成最终回复:您的订单已成功取消

二、定义工具函数

2.1 基础语法

@Service
public class ToolsService {
    
    @Tool("取消订单")
    public String cancelOrder(@P("订单号") String orderId,
                             @P("用户名") String username,
                             @P("取消原因") String reason) {
        System.out.println("cancelOrder:" + orderId);
        System.out.println("username:" + username);
        System.out.println("reason:" + reason);
        // todo 实际取消订单业务逻辑
        return "取消成功";
    }
}

2.2 核心注解

注解 作用 示例
@Tool 标识工具方法,描述功能 @Tool("取消订单")
@P 参数描述,帮助 AI 理解参数含义 @P("订单号")

2.3 更多工具示例

@Service
public class ToolsService {

    @Tool("查询天气")
    public String getWeather(@P("城市名称") String city) {
        // 调用天气 API
        return "北京:晴,25°C,空气质量优";
    }

    @Tool("查询订单")
    public String queryOrder(@P("订单编号") String orderId) {
        return "订单状态:已发货,预计明天送达";
    }

    @Tool("发送邮件")
    public String sendEmail(@P("收件人") String to,
                           @P("主题") String subject,
                           @P("内容") String content) {
        // 发送邮件逻辑
        return "邮件已发送";
    }
}

三、注册工具到 AI 服务

@Configuration
public class AiConfig {

    @Bean
    public Assistant assistant(ChatModel qwenChatModel,
                              StreamingChatModel qwenStreamingChatModel,
                              ToolsService toolsService) {
        ChatMemory chatMemory = MessageWindowChatMemory.withMaxMessages(10);
        
        return AiServices.builder(Assistant.class)
                .chatModel(qwenChatModel)
                .streamingChatModel(qwenStreamingChatModel)
                .chatMemory(chatMemory)
                .tools(toolsService)  // 注册工具
                .build();
    }
}

四、实际应用场景

4.1 取消订单对话流程

用户:我要取消订单 12345
    ↓
AI:请问您的姓名是?
用户:李四
    ↓
AI:请问取消原因是?
用户:行程变更
    ↓
AI:[调用 cancelOrder("12345", "李四", "行程变更")]
AI 回复:您的订单已成功取消

4.2 完整 Controller

@RestController
@RequestMapping("/ai")
public class ChatController {

    private final Assistant assistant;

    public ChatController(Assistant assistant) {
        this.assistant = assistant;
    }

    @GetMapping("/memory-chat")
    public String chat(@RequestParam String message) {
        return assistant.chat(message);
    }
}

五、总结

Function Call 极大扩展了 AI 的能力:

  • 工具集成:通过 @Tool 注解轻松定义
  • 自动调用:AI 智能判断何时调用工具
  • 参数提取:自动从对话中提取参数
  • 安全可控:在 Java 层面处理权限和校验

相关笔记:

  1. LangChain4j 入门指南
  2. LangChain4j 声明式 AI 服务开发
  3. LangChain4j 对话记忆与多用户隔离
Logo

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

更多推荐