一、简介
Skills是表示做某件事情的一套SOP标准。可以做到按需加载,防止上下文过大,对上下文污染。
二、代码
- pom.xml
xml
<dependency>
<groupId>org.springaicommunity</groupId>
<artifactId>spring-ai-agent-utils</artifactId>
<version>0.10.0</version>
</dependency>
- application.properties
bash
agent.skills.dirs=classpath:/.agents/skills
- src/main/resources/.agents/skills/travel-agent-skill/SKILL.md
md
---
name: travel-agent-skill
description: 旅行管家,用于查询航班订单和取消航班订单。当用户询问航班订单详情、订单状态或要求取消航班时使用。
---
# 旅行管家
提供以下能力:
- `queryFlightOrder`:查询航班订单信息。
- `cancelOrder`:取消航班订单。
## 操作规则
1. 取消前先调用 `queryFlightOrder` 核对订单信息和当前状态。
2. 向用户展示关键订单信息,并明确确认是否取消。
3. 用户确认后调用 `cancelOrder`。
4. 返回取消结果;失败时说明原因,不得声称取消成功。
- 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还支持长期记忆。
- application.properties
bash
agent.memory.dir=${user.home}/.agents/memory
- 配置工具
增加工具: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();
}
}



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