Spring AI 2.0:Skills

一、简介

Skills是表示做某件事情的一套SOP标准。可以做到按需加载,防止上下文过大,对上下文污染。

二、代码

  1. pom.xml
xml 复制代码
<dependency>
   <groupId>org.springaicommunity</groupId>
    <artifactId>spring-ai-agent-utils</artifactId>
    <version>0.10.0</version>
</dependency>
  1. application.properties
bash 复制代码
agent.skills.dirs=classpath:/.agents/skills
  1. src/main/resources/.agents/skills/travel-agent-skill/SKILL.md
md 复制代码
---
name: travel-agent-skill
description: 旅行管家,用于查询航班订单和取消航班订单。当用户询问航班订单详情、订单状态或要求取消航班时使用。
---

# 旅行管家

提供以下能力:

- `queryFlightOrder`:查询航班订单信息。
- `cancelOrder`:取消航班订单。

## 操作规则

1. 取消前先调用 `queryFlightOrder` 核对订单信息和当前状态。
2. 向用户展示关键订单信息,并明确确认是否取消。
3. 用户确认后调用 `cancelOrder`。
4. 返回取消结果;失败时说明原因,不得声称取消成功。
  1. Configuration
java 复制代码
@Configuration
public class SpringAiConfig {

    @Bean
    public ChatClient chatClient(DeepSeekChatModel deepSeekChatModel,
                                 ChatMemory chatMemory,
                                 MyTools myTools,
                                 ToolCallbackProvider toolCallbackProvider,
                                 @Value("${agent.skills.dirs}") List<Resource> agentSkillsDirs) {
        ChatClient.Builder chatClientBuilder = ChatClient.builder(deepSeekChatModel)
                .defaultSystem("你是AI助手,回答用户的问题。")
                .defaultAdvisors(MessageChatMemoryAdvisor.builder(chatMemory).build());
        chatClientBuilder.defaultTools(
                SkillsTool.builder().addSkillsResources(agentSkillsDirs).build(),
                myTools,
                toolCallbackProvider,
                ShellTools.builder().build(),
                FileSystemTools.builder().build(),
                SmartWebFetchTool.builder(chatClientBuilder.clone().build()).build()
        );
        return chatClientBuilder.build();
    }
}

"请确认是否取消该航班订单?"说明Skill生效了。

而且在没有用户确认前,没有调用cancelOrder方法

三、长期记忆

agent-utils还支持长期记忆。

  1. application.properties
bash 复制代码
agent.memory.dir=${user.home}/.agents/memory
  1. 配置工具
    增加工具:AutoMemoryTools.builder().memoriesDir(memoryDir).build()
java 复制代码
@Configuration
public class SpringAiConfig {

    @Bean
    public ChatClient chatClient(DeepSeekChatModel deepSeekChatModel,
                                 ChatMemory chatMemory,
                                 MyTools myTools,
                                 ToolCallbackProvider toolCallbackProvider,
                                 @Value("${agent.skills.dirs}") List<Resource> agentSkillsDirs,
                                 @Value("${agent.memory.dir}") String memoryDir) {
        ChatClient.Builder chatClientBuilder = ChatClient.builder(deepSeekChatModel)
                .defaultSystem("你是AI助手,回答用户的问题。")
                .defaultAdvisors(MessageChatMemoryAdvisor.builder(chatMemory).build());
        chatClientBuilder.defaultTools(
                SkillsTool.builder().addSkillsResources(agentSkillsDirs).build(),
                myTools,
                toolCallbackProvider,
                ShellTools.builder().build(),
                FileSystemTools.builder().build(),
                SmartWebFetchTool.builder(chatClientBuilder.clone().build()).build(),
                AutoMemoryTools.builder().memoriesDir(memoryDir).build()
        );
        return chatClientBuilder.build();
    }
}

这个保存没有区别用户,在实际工作中如果作为服务器为多个用户提供服务,肯定是不能行的,应该根据用户分开维护。

相关推荐
天诰9 分钟前
SA-K-11 检索会消失吗与四个未解问题
java·服务器·人工智能·python·机器学习·ai编程
benchmark_cc1 小时前
用 QuantDash 读取美股行情:AAPL.US 的运行前检查、排错顺序与数据校验清单
python·数据分析·pandas·量化交易·股票数据·quantdash
这个昵称不容易4 小时前
SpringBoot「衣依」服装销售平台:144个Java文件180个接口,从挑衣服到收货评价整条链路都在
java·springboot·毕设
计算机毕设定制辅导-无忧学长4 小时前
《基于微信小程序的居家医疗陪护预约系统设计与实现》
java·spring boot·微信小程序·uniapp·居家医疗陪护预约系统
羲云网络4 小时前
GPT Image 2.6 接入指南:Flare、Sunburst 怎么选,编辑失败如何排查
人工智能·python·aigc·图像生成·acedatacloud
文丑颜不良啊5 小时前
LeetCode2221~2240题目解析
java·leetcode
秋饼6 小时前
Computer Use Agent Java 落地实战:感知-行动循环、执行器与安全围栏生产级实现
java·ai·技术分享·后端开发
文丑颜不良啊7 小时前
LeetCode2161~2180题目解析
java·leetcode
橙橙笔记8 小时前
具身智能的学习 - 完成一个机械臂 第1节
python·学习·机械臂·具身智能
小小张说故事8 小时前
Python 的 class 语句到底执行了什么?拆开 __prepare__、metaclass.__new__ 和那个被讲反的 __set_name__ 顺序
python