2026/3/26 23:11:26
网站建设
项目流程
能用的网站,惠州做棋牌网站建设哪家技术好,wordpress 分享微信,专业做网站哪里有Spring AI Alibaba 的 ChatClient 工具注册与 Function Calling 实践总结在实际使用 Spring AI 进行聊天应用开发时#xff0c;碰到工具#xff08;Tool#xff09;注册、函数调用#xff08;Function Calling#xff09;以及
ChatClient 配置的问题。本文将总结从源码到…Spring AI Alibaba 的 ChatClient 工具注册与 Function Calling 实践总结在实际使用 Spring AI 进行聊天应用开发时碰到工具Tool注册、函数调用Function Calling以及ChatClient 配置的问题。本文将总结从源码到实践的一些经验和知识点帮助你更高效地集成 AI 聊天功能。1. ChatClient Builder 的核心方法Spring AI 提供了ChatClient.Builder用于构建一个可用的 AI 聊天客户端。常用方法包括默认系统提示.defaultSystem(AiPrompts.GENERAL_ASSISTANT)默认会话记忆顾问.defaultAdvisors(MessageChatMemoryAdvisor.builder(MessageWindowChatMemory.builder().chatMemoryRepository(chatMemoryRepository).build()).build())工具注册.defaultTools(...)// 注册对象实例.defaultToolNames(...)// 注册 Spring Bean 名称对应的工具.tool(...)// 注册 Tool 注解方法注意.defaultTools()与.defaultToolNames()的作用不同稍后详细说明。2. Function Calling 与工具注册Spring AI 支持把 Spring Bean 自动注册为 AI 可调用的函数function calling。常用方式有两种2.1 Bean Supplier / FunctionBeanDescription(查询所有学生信息)publicSupplierListStudentgetAllStudents(){return()-studentInfoService.selectStudentInfoList(newStudent());}BeanDescription(根据学生ID查询学生信息)publicFunctionLong,StudentgetStudentById(){returnstudentId-studentInfoService.selectStudentInfoByStudentId(studentId);}Supplier无入参返回值为工具输出。FunctionT, R有入参T返回值为工具输出R。通过.defaultToolNames(getAllStudents)自动注册AI 可以直接调用。2.2 Tool 注解方法Tool(namegetAllStudents,description查询所有学生信息)publicListStudentgetAllStudents(){returnstudentInfoService.selectStudentInfoList(newStudent());}适用于更标准的 function calling 方式需要使用.defaultTools()注册3..defaultTools()与.defaultToolNames()区别方法适用场景注意点.defaultTools(Object... tools)注册对象实例Lambda、工具对象如果 Lambda 没有Tool注解会报错 “No Tool annotated methods found”需要使用.toolCallbacks().defaultToolNames(String... beanNames)自动注册 Spring 上下文中 Bean 名称对应的工具只能识别 Bean 名称对应的 Supplier / Function 或Tool方法.toolCallbacks()注册Tool注解方法或ToolCallback支持标准 function-calling✅ 结论Supplier / Function Bean → 推荐.defaultToolNames()普通方法 Tool 注解 →.defaultTools()4. 自动收集 Bean 注册工具在实际项目中如果工具数量较多不希望手动写.defaultToolNames(...)可以通过循环自动收集MapString,SuppliersupplierBeansapplicationContext.getBeansOfType(Supplier.class);MapString,FunctionfunctionBeansapplicationContext.getBeansOfType(Function.class);SetStringallToolNamessupplierBeans.keySet().stream().collect(Collectors.toSet());allToolNames.addAll(functionBeans.keySet());ChatClientclientChatClient.builder(chatModel).defaultSystem(你是智能助手).defaultAdvisors(...).defaultToolNames(allToolNames.toArray(newString[0])).build();自动扫描 Spring 上下文的所有 Supplier / Function Bean避免手动列出工具名称保持 ChatClient 配置简洁5. Supplier 与 Function 区别类型参数返回值使用场景SupplierR无R无输入参数工具直接返回结果FunctionT, RTR需要输入参数的工具例如根据 ID 查询对象示例SupplierListStudentgetAllStudents;// 无入参FunctionLong,StudentgetStudentById;// 入参为学生ID本文记录于 MindCampus 毕设项目开发过程中2024年12月如果对你有帮助不妨留一个赞