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

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

相关推荐
2601_962100548 分钟前
python包和模块的内容整理
python·模块·导入·虚拟环境·
二进制漫游记28 分钟前
FastAPI项目集成 Qdrant向量数据库+阿里云Embedding完整实战(工具封装+业务调用)
数据库·python·阿里云·embedding
-今昭-1 小时前
《V2V 迁移实战:将 VMware 虚拟机转为 OpenStack 可用 Glance qcow2 镜像》
开发语言·python
2601_962381582 小时前
【转】Python渗透测试工具:sqlmap
python·渗透测试·sql注入·sqlmap·数据库安全
zww89491112 小时前
匿名树洞系统开发实战:从需求分析到部署指南
java·eclipse
用户3721574261352 小时前
如何使用 Python 从 Word 文档中提取图片
python
黑马程序员毕设3 小时前
基于Java的医院药品管理系统的优化设计与实现
java·开发语言·spring boot·小程序·架构·课程设计·毕设
木井巳3 小时前
【BFS/DFS 解决 FloodFill 算法】太平洋大西洋水流问题
java·算法·leetcode·深度优先·广度优先·宽度优先·推荐算法
白山编程大哥3 小时前
Java 集合算法:从排序、查找到底层原理的实战指南
java·python·算法
devpotato4 小时前
缓存与数据库更新顺序不一致问题
java·数据库·redis