【LangChain4j学习笔记】LangChain4j Function Call 工具调用
·
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 层面处理权限和校验
相关笔记:
更多推荐
所有评论(0)