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();
    }
}

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

相关推荐
小羊没烦恼!4 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
默_笙4 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
俊昭喜喜里4 天前
java中的继承和多态的区别
java
小羊没烦恼!4 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
qq_426003964 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
譕痕4 天前
JSONObject与JSONArray封装数据格式区别
java·json
虎头金猫4 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
胡写代码4 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖4 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
长沙三为智能科技4 天前
家政小程序开发从0到上线:五阶段交付流程与验收清单
python