当前位置: 首页 > article >正文

Spring AI Alibaba——支持Agent Skill

文章目录前言版本准备1、新建skills2、自定义tools3、启动类4、测试类总结前言Spring AI Alibaba是阿里团队针对Spring AI框架在国内应用风格的一种包装、扩展与延伸。对Agent Skills的支持比Langchain4j更早但对springboot 版本要求更高点。之前写了demo忘了做记录。今天补上。版本准备jdk 17maven 3.6.3springboot 3.5.4spring-ai 1.1.2spring-ai-alibaba 1.1.2.0完整pom信息?xml version1.0 encodingUTF-8?projectxmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion3.5.4/versionrelativePath//parentartifactIdspring-ai-alibaba/artifactIdpropertiesmaven.compiler.source17/maven.compiler.sourcemaven.compiler.target17/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/propertiesdependencyManagementdependenciesdependencygroupIdcom.alibaba.cloud.ai/groupIdartifactIdspring-ai-alibaba-bom/artifactIdversion1.1.2.0/versiontypepom/typescopeimport/scope/dependencydependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-bom/artifactIdversion1.1.2/versiontypepom/typescopeimport/scope/dependencydependencygroupIdcom.alibaba.cloud.ai/groupIdartifactIdspring-ai-alibaba-extensions-bom/artifactIdversion1.1.2.1/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementdependenciesdependencygroupIdcom.alibaba.cloud.ai/groupIdartifactIdspring-ai-alibaba-agent-framework/artifactId/dependency!-- 百炼大模型 --dependencygroupIdcom.alibaba.cloud.ai/groupIdartifactIdspring-ai-alibaba-starter-dashscope/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependency/dependencies/project#测试代码1、新建skills在src/main/resources下新建目录skills并在其中新增weather目录。SKILL.md是在https://skills.sh/随便找的也可以自己写。--- name: weather description: Get current weather conditions and forecasts. --- # Weather Two free services, no API keys needed. ## wttr.in (primary) Quick one-liner: bash curl -s wttr.in/London?format3 # Output: London: ⛅️ 8°C Compact format: bash curl -s wttr.in/London?format%l:%c%t%h%w # Output: London: ⛅️ 8°C 71% ↙5km/h Full forecast: bash curl -s wttr.in/London?T Format codes: %c condition · %t temp · %h humidity · %w wind · %l location · %m moon Tips: - URL-encode spaces: wttr.in/NewYork - Airport codes: wttr.in/JFK - Units: ?m (metric) ?u (USCS) - Today only: ?1 · Current only: ?0 - PNG: curl -s wttr.in/Berlin.png -o /tmp/weather.png ## Open-Meteo (fallback, JSON) Free, no key, good for programmatic use: bash curl -s https://api.open-meteo.com/v1/forecast?latitude51.5longitude-0.12current_weathertrue Find coordinates for a city, then query. Returns JSON with temp, windspeed, weathercode. Docs: https://open-meteo.com/en/docs2、自定义tools编写一个自定义的tools类。importorg.springframework.ai.chat.model.ToolContext;importorg.springframework.ai.tool.annotation.ToolParam;importjava.util.function.BiFunction;/** * 工具 */publicclassMyCityToolsimplementsBiFunctionString,ToolContext,String{OverridepublicStringapply(ToolParam(descriptionThe city name)Stringcity,ToolContexttoolContext){returnThe Citys name is city!;}}3、启动类importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.boot.context.properties.EnableConfigurationProperties;SpringBootApplicationEnableConfigurationPropertiespublicclassApplication{publicstaticvoidmain(String[]args){SpringApplication.run(Application.class,args);}}4、测试类importcn.xj.Application;importcn.xj.toos.MyCityTools;importcom.alibaba.cloud.ai.dashscope.api.DashScopeApi;importcom.alibaba.cloud.ai.dashscope.chat.DashScopeChatModel;importcom.alibaba.cloud.ai.dashscope.chat.DashScopeChatOptions;importcom.alibaba.cloud.ai.graph.RunnableConfig;importcom.alibaba.cloud.ai.graph.agent.ReactAgent;importcom.alibaba.cloud.ai.graph.agent.hook.skills.SkillsAgentHook;importcom.alibaba.cloud.ai.graph.checkpoint.savers.MemorySaver;importcom.alibaba.cloud.ai.graph.exception.GraphRunnerException;importcom.alibaba.cloud.ai.graph.skills.registry.filesystem.FileSystemSkillRegistry;importorg.junit.jupiter.api.Test;importorg.springframework.ai.chat.messages.AssistantMessage;importorg.springframework.ai.tool.ToolCallback;importorg.springframework.ai.tool.function.FunctionToolCallback;importorg.springframework.boot.test.context.SpringBootTest;importjava.util.List;SpringBootTest(classesApplication.class)publicclassTestDemo{Testpublicvoidtest()throwsGraphRunnerException{// 加载百炼大模型 配置keyDashScopeApidashScopeApiDashScopeApi.builder().apiKey(System.getenv(ALI_AI_KEY))//.baseUrl().build();// 构建chatmodelDashScopeChatModelchatModelDashScopeChatModel.builder().dashScopeApi(dashScopeApi).defaultOptions(DashScopeChatOptions.builder()// qwen-plus.model(DashScopeChatModel.DEFAULT_MODEL_NAME).temperature(0.5).maxToken(1000).build()).build();// 加载 toolsToolCallbackgetCityNameTollFunctionToolCallback.builder(getCityNameForLocation,newMyCityTools()).description(Get name for a given city).inputType(String.class).build();// 加载agent skillsFileSystemSkillRegistryskillRegistryFileSystemSkillRegistry.builder().projectSkillsDirectory(System.getProperty(user.dir)/src/main/resources/skills/).build();SkillsAgentHookskillsAgentHookSkillsAgentHook.builder().skillRegistry(skillRegistry).build();// 构建agentReactAgentagentReactAgent.builder().name(test_agent).model(chatModel).tools(List.of(getCityNameToll))// tools.hooks(List.of(skillsAgentHook))// skills.systemPrompt(You are a helpful assistant).saver(newMemorySaver())// RedisSaver MysqlSaver.build();// threadId 是给定对话的唯一标识符StringthreadId001;RunnableConfigrunnableConfigRunnableConfig.builder().threadId(threadId).addMetadata(user_id,1).build();// 第一次调用AssistantMessageresponseagent.call(What is the name of the city where China Optics Valley is located ?,runnableConfig);System.out.println(response.getText());// 问题命中 skillsresponseagent.call(Whats the weather like in Wuhan now?,runnableConfig);System.out.println(response.getText());// 注意我们可以使用相同的 threadId 继续对话responseagent.call(thank you!,runnableConfig);System.out.println(response.getText());}}总结AI Alibaba框架的配置Agent Skills和tools相对Langchain4j而言使用的是独立的配置。但是在Langchain4j中却是共用一个。AI AlibabaLangchain4j

相关文章:

Spring AI Alibaba——支持Agent Skill

文章目录前言版本准备1、新建skills2、自定义tools3、启动类4、测试类总结前言 Spring AI Alibaba是阿里团队针对Spring AI框架在国内应用风格的一种包装、扩展与延伸。 对Agent Skills的支持,比Langchain4j更早,但对springboot 版本要求更高点。 之前…...

如何优雅地绕过网盘下载限制:一个完全在本地运行的解决方案

如何优雅地绕过网盘下载限制:一个完全在本地运行的解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 /…...

FreeMove:高效安全的Windows目录迁移完整指南

FreeMove:高效安全的Windows目录迁移完整指南 【免费下载链接】FreeMove Move directories without breaking shortcuts or installations 项目地址: https://gitcode.com/gh_mirrors/fr/FreeMove FreeMove是一款专为Windows用户设计的开源工具,通…...

从流水灯看FPGA时序:用Nexys A7的100MHz时钟实现精准0.5秒延时

从流水灯看FPGA时序:用Nexys A7的100MHz时钟实现精准0.5秒延时 在数字电路设计中,时序控制是一切逻辑实现的基础。当我们用FPGA开发板上的LED灯实现流水效果时,表面看似简单的闪烁背后,隐藏着精密的时钟分频与计数器设计原理。本…...

别只盯着CDGP考试!用DAMA车轮图,手把手搭建你的第一个数据治理看板

用DAMA车轮图构建数据治理健康度看板的实战指南 数据治理不再是纸上谈兵的理论框架,而是需要落地到日常运营中的实践体系。对于数据工程师、分析师和IT从业者来说,如何将DAMA知识体系转化为可操作的监控工具,是提升团队协作效率和决策质量的关…...

告别Postman!用Apifox测试套件搞定团队接口自动化(附CI/CD集成实战)

从Postman迁移到Apifox:打造高效团队接口自动化测试体系 在DevOps和持续交付成为主流的今天,接口自动化测试已成为研发流程中不可或缺的一环。传统方案如PostmanNewman虽然广为人知,但在团队协作、版本管理和CI/CD集成方面存在明显短板。Apif…...

别再被Nacos 2.2.3权限验证卡住!手把手教你补全secret.key配置,解决basicAuthenticationFilter报错

Nacos 2.2.3权限验证全流程避坑指南:从配置补全到稳定运行 当你第一次在Nacos 2.2.3中启用权限验证功能时,是否也被那一连串晦涩的报错信息搞得焦头烂额?特别是那个关于basicAuthenticationFilter的bean创建失败错误,看似复杂的问…...

告别云端:在树莓派4B上搭建你的私有AI聊天机器人(基于llama.cpp)

在树莓派4B上构建私有AI聊天机器人的完整实践指南 从零开始的边缘智能革命 当ChatGPT掀起全球AI浪潮时,大多数用户只能通过云端服务体验大语言模型的魅力。但有一群技术极客正在探索另一种可能——如何将这些强大的AI能力装进口袋大小的设备里。树莓派4B作为最受欢迎…...

D3KeyHelper终极指南:5分钟掌握暗黑3鼠标宏工具,游戏效率翻倍提升

D3KeyHelper终极指南:5分钟掌握暗黑3鼠标宏工具,游戏效率翻倍提升 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper D3KeyHelpe…...

DS4Windows完整指南:3步让PlayStation手柄在Windows电脑上完美运行

DS4Windows完整指南:3步让PlayStation手柄在Windows电脑上完美运行 【免费下载链接】DS4Windows Like those other ds4tools, but sexier 项目地址: https://gitcode.com/gh_mirrors/ds/DS4Windows 想要在Windows电脑上使用PlayStation手柄畅玩所有游戏吗&am…...

软件工程中设计模式的最佳实践与应用场景深度分析

软件工程中设计模式的最佳实践与应用场景深度分析 在软件开发过程中,设计模式是解决常见问题的经典方案,它们不仅能提高代码的可维护性和复用性,还能帮助开发团队更高效地协作。随着软件系统复杂度的提升,合理运用设计模式成为工…...

4步掌握量化交易核心技能:从零到策略实盘的终极指南

4步掌握量化交易核心技能:从零到策略实盘的终极指南 【免费下载链接】Tutorials Jupyter notebook tutorials from QuantConnect website for Python, Finance and LEAN. 项目地址: https://gitcode.com/gh_mirrors/tutorials2/Tutorials 你是否曾经看着金融…...

HSTracker:macOS炉石传说终极套牌追踪与管理完全指南

HSTracker:macOS炉石传说终极套牌追踪与管理完全指南 【免费下载链接】HSTracker A deck tracker and deck manager for Hearthstone on macOS 项目地址: https://gitcode.com/gh_mirrors/hs/HSTracker 你是否曾在炉石传说对战中忘记对手还剩什么牌&#xff…...

Python高级应用系列(十三)Python C扩展与性能加速:Cython、ctypes、cffi

前言 Python以开发效率和可读性著称,但「性能」始终是其软肋。在CPU密集型场景下,纯Python代码的执行速度可能比C/C++慢数十甚至上百倍。 然而Python生态提供了多种性能加速方案,从调用C库到将Python代码编译为C,层次丰富、适用场景各异: 方案 定位 适用场景 ctypes 调用…...

nli-MiniLM2-L6-H768应用场景:智能合约条款与自然语言解释的矛盾性检测

nli-MiniLM2-L6-H768应用场景:智能合约条款与自然语言解释的矛盾性检测 1. 模型核心能力解析 nli-MiniLM2-L6-H768是一个专为文本关系判断设计的轻量级自然语言推理(NLI)模型。与生成式模型不同,它的核心价值在于精准判断两段文本之间的逻辑关系&#…...

疾病防治电脑版v考虑放大缴纳开工

此件客户都是啊u覅业务i啊...

医疗AI项目实战:手把手教你用pydicom库为PNG图像注入DICOM‘灵魂’(含完整元数据配置)

医疗AI数据工程实战:用Python构建符合临床标准的DICOM元数据体系 在医疗AI项目的开发流程中,数据工程环节往往决定着模型的成败。当我们使用公开的PNG/JPG医学图像数据集时,如何将其转化为具有完整临床元数据的DICOM文件,是每个医…...

手把手搭建你的第一个AI Agent(零基础实战教程)

看完上一篇,你可能觉得AI Agent很酷,但"这玩意儿是不是只有程序员才能玩?"答案是:不。今天我就带你从零开始,30分钟搭建一个真正能帮你干活的Agent。 一、先定个小目标:我们要做什么? 实战项目:做一个"周报助手Agent" 它能做什么? 你输入这周做…...

沐曦股份Day0适配阿里千问Qwen3.6-35B-A3B,与FlagOS合作实现模型多芯部署

阿里巴巴千问模型团队最新宣布,开源旗下多模态“智能体小钢炮” Qwen3.6-35B-A3B模型。沐曦股份与FlagOS合作,完成了该模型的Day0 适配。经测试,基于沐曦芯片,实现了“零代码修改”完成 Qwen3.6-35B-A3B 的推理部署及充分验证。这…...

StreamCap:免费开源的多平台直播录制终极指南

StreamCap:免费开源的多平台直播录制终极指南 【免费下载链接】StreamCap Multi-Platform Live Stream Automatic Recording Tool | 多平台直播流自动录制客户端 基于FFmpeg 支持监控/定时/转码 项目地址: https://gitcode.com/gh_mirrors/st/StreamCap 在…...

别再瞎调了!Fluent DPM模型这3个参数设置不对,仿真结果差十倍

Fluent DPM模型参数优化实战:避开颗粒追踪的三大陷阱 在计算流体动力学(CFD)仿真中,离散相模型(DPM)的准确设置往往是决定仿真成败的关键。许多工程师在使用Fluent进行喷雾、粉尘或颗粒两相流分析时,常常陷入"参数调参师"的困境——…...

网页视频下载难题终结者:3分钟学会用VideoDownloadHelper轻松保存在线视频

网页视频下载难题终结者:3分钟学会用VideoDownloadHelper轻松保存在线视频 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否…...

共享汽车功率管理器件选型实战:空间、效率与可靠性的平衡之道

在共享汽车朝着电动化、智能化与高利用率不断演进的今天,其内部的电子控制系统已不再是简单的功能单元,而是直接决定了车辆可用性、用户体验与运营成本的核心。一套设计精良的功率管理方案,是共享汽车实现稳定供电、智能控制与长久耐用寿命的…...

5G下行数据通道全解析:从DL-SCH到PDSCH的映射与DMRS配置

1. 5G下行数据传输的核心流程 当你用手机刷视频时,数据是怎么从基站传到手机里的?这背后是5G下行数据传输的一整套精密机制。简单来说,基站先把数据打包成DL-SCH(下行共享信道),然后通过PDSCH(物…...

如何让普通鼠标在macOS上获得超越触控板的体验:Mac Mouse Fix终极指南

如何让普通鼠标在macOS上获得超越触控板的体验:Mac Mouse Fix终极指南 【免费下载链接】mac-mouse-fix Mac Mouse Fix - Make Your $10 Mouse Better Than an Apple Trackpad! 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix 你是否曾为ma…...

Thorium浏览器:基于Chromium的极致性能与隐私优化深度解析

Thorium浏览器:基于Chromium的极致性能与隐私优化深度解析 【免费下载链接】thorium Chromium fork named after radioactive element No. 90. Source code and Linux releases. Windows/MacOS/ARM builds served in different repos, links are towards the top of…...

第三方检测机构必看:优检云LIMS如何满足CNAS、CMA合规要求?

检测机构的"合规红线"对于第三方检测机构来说,CNAS和CMA是两道绕不开的门槛。CMA(计量认证):国家强制要求,没有CMA出具的报告不具备法律效力CNAS(实验室认可):国际互认&am…...

如何一键检测谁删除了你的微信好友:WechatRealFriends实战指南

如何一键检测谁删除了你的微信好友:WechatRealFriends实战指南 【免费下载链接】WechatRealFriends 微信好友关系一键检测,基于微信ipad协议,看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealFri…...

GEO源码搭建运行报错全解析+2026完整部署上线方案(Docker+宝塔双方案,附避坑指南)

GEO源码搭建运行报错全解析2026完整部署上线方案(Docker宝塔双方案,附避坑指南)前言:GEO源码搭建是地理信息开发、位置服务部署领域的核心技能,广泛应用于本地地理数据可视化、企业级位置服务平台搭建及GIS学习场景。但…...

掌握八大网盘直链解析:LinkSwift下载助手全面解析

掌握八大网盘直链解析:LinkSwift下载助手全面解析 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘…...