2026/6/20 11:03:51
网站建设
项目流程
哪里有零基础网站建设教学,外贸公司都是在什么网站做推广,WordPress怎样开发支付,cdr做网站Spring AI 函数调用#xff08;Tool/Function Calling#xff09;轻松入门 #xff08;2026年最新实用写法 零到上手完整示例#xff09;
函数调用是让大模型“知道自己不知道”并主动调用你提供的工具/函数来获取实时信息或执行操作的核心能力。
目前#xff08;2026年…Spring AI 函数调用Tool/Function Calling轻松入门2026年最新实用写法 · 零到上手完整示例函数调用是让大模型“知道自己不知道”并主动调用你提供的工具/函数来获取实时信息或执行操作的核心能力。目前2026年初Spring AI 已经从早期的FunctionCallback升级到更强大的Tool Calling体系主要有三种主流写法按推荐顺序排名写法风格优点缺点/注意点推荐指数难度1Tool注解 对象实例最简洁、最现代、最推荐1.0主流需要实例化类★★★★★★☆☆2Bean Description函数式纯函数风格、方便测试描述写在注解里稍显分散★★★★☆★★☆3手动FunctionToolCallback.builder()最大灵活性、可动态代码量多★★★☆☆★★★推荐写法1使用Tool注解最简单、最常用// 1. 先定义一个工具类可以是普通的POJOComponent// 可选如果想自动扫描publicclassWeatherTools{Tool(valueget_current_weather,// 工具唯一名称模型会用这个名字调用description获取指定城市当前的天气信息支持摄氏度和华氏度)publicStringgetWeather(ToolParam(description城市名称如 北京, Shanghai, Las Vegas)Stringcity,ToolParam(description温度单位celsius 或 fahrenheit默认celsius)Stringunit){// 模拟真实查询也可以换成调用第三方APIStringtempswitch(city.toLowerCase()){casebeijing,北京-今天北京 -5℃寒冷刺骨多穿点;caseshanghai,上海-上海今天12℃阴天有点湿冷;caselas vegas-拉斯维加斯现在是(unit.equalsIgnoreCase(fahrenheit)?68°F:20℃)阳光明媚适合游泳;default-抱歉目前只知道北京、上海、拉斯维加斯的天气;};returntemp;}}// 2. Controller中使用最常用写法RestControllerRequestMapping(/ai/tool)RequiredArgsConstructorpublicclassToolDemoController{privatefinalChatClientchatClient;GetMapping(/weather)publicStringaskWeather(RequestParamStringquestion){// 直接把工具类实例传进去支持多个returnchatClient.prompt().user(question).tools(newWeatherTools())// ← 这里最关键// .tools(工具实例1, 工具实例2, ...) // 支持多个工具类.call().content();}}测试例子浏览器或postman直接试http://localhost:8080/ai/tool/weather?question拉斯维加斯现在天气怎么样用华氏度告诉我 http://localhost:8080/ai/tool/weather?question北京今天冷不冷模型会自动判断是否需要调用工具 → 调用 → 把结果塞回上下文 → 最终给出自然语言回答推荐写法2函数式Bean Description适合喜欢函数式风格的同学也非常常用ConfigurationpublicclassToolFunctionsConfig{BeanDescription(获取指定城市的当前天气支持celsius/fahrenheit两种单位)publicFunctionWeatherQuery,StringcurrentWeather(){returnquery-{// 模拟实现returnswitch(query.city().toLowerCase()){casebeijing-北京 (query.unit().equals(f)?-5℃ ≈ 23°F:-5℃)冷到想回家;caselas vegas-Las Vegas (query.unit().equals(f)?68°F:20℃)适合户外活动;default-暂无该城市天气数据;};};}// 记录类型作为输入参数publicrecordWeatherQuery(Stringcity,Stringunit){}}使用方式chatClient.prompt().user(上海天气如何).functions(currentWeather)// ← 使用bean名称.call().content();进阶小技巧生产常用多个工具一起用并行调用.tools(newWeatherTools(),newStockPriceTools(),newCalculatorTools())流式 工具调用前端打字机 工具目前大多数模型流式下工具调用支持有限建议先用普通.call()等模型成熟再切.stream()带记忆的工具对话最实用组合chatClient.prompt().system(你是生活助手会用工具帮用户解决问题).user(question).tools(newWeatherTools()).advisors(newMessageChatMemoryAdvisor(chatMemory)).call().content();强制/禁用工具精细控制// 只允许使用某个工具.tools(newWeatherTools())// 强制调用某个工具极少用.toolChoice(ToolChoice.REQUIRED)// 或 ToolChoice.FORCE(get_weather)一句话总结2026年最舒服的入门函数调用方式ChatClient .tools(带有Tool注解的类实例) DeepSeek-R1 / GPT-4o / 通义千问 / 硅基流动兼容模型快速练习建议由易到难实现天气查询工具上面例子实现汇率查询工具调用免费汇率API实现计算器工具加减乘除实现查快递工具实现生成周报/日报小工具需要我帮你把上面任意一个练习做成更完整的可运行小项目包含配置、假数据/真API、测试页面吗直接告诉我你想先实现哪个工具