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 小时前
Spring Bean 生命周期
java·后端·spring
Wang's Blog5 小时前
Java 项目实战: 交友项目:登录链路回顾与今日任务地图
java·开发语言·状态模式·交友
信誓旦旦的程序猿5 小时前
【Python量化实战宝典 #08】可转债与债券接口手册:转股价·溢价率·纯债价值(Python 可跑)
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
砚底藏山河5 小时前
python量化:行情数据回溯
java·开发语言·python·金融·maven
今年下半年5 小时前
AI智能体项目实战记录(02):初始化 Python 项目
开发语言·人工智能·python·fastapi
Jlzn88886 小时前
华东电芯分选通道数怎么配才不堵线
java·人工智能·架构·自动化·制造
Williamtym6 小时前
PickGo Lab实践:用浏览器、Python和MCP串起机器人搬运仿真
开发语言·python·机器人
流烟默6 小时前
MCP第 5 篇:用 Spring AI 写 MCP:注解、自动配置、ChatClient 集成
人工智能·spring·mcp封装
香吧香6 小时前
GRPC连接机制---长连接分析
java·网络与传输协议
CS创新实验室6 小时前
Python 对象“死“了之后去了哪?——引用计数与分代垃圾回收
开发语言·jvm·python