跳到主要内容

经验模块(Experience)

1. 模块介绍

经验模块是 Assistant Agent 的知识积累与复用机制,支持将最佳实践、代码模式、行为策略等以"经验"的形式存储,并在 Agent 执行时自动检索和注入。

核心概念

概念说明
Experience经验领域对象,包含类型、标题、内容、元数据等
ExperienceType经验类型:CODE(代码经验)、REACT(行为经验)、COMMON(通用常识)
ExperienceProvider经验读取 SPI,负责检索经验
FastIntentService快速意图服务,根据条件直接匹配经验执行

经验类型

类型说明应用场景
CODE代码经验代码片段、编码规范、最佳实践
REACT行为经验Agent 行为策略、工具调用模式
COMMON通用常识安全提示、注意事项、规范约束

工作流程

用户输入


┌─────────────────────────────────────────┐
│ FastIntent 快速匹配(可选) │
│ 条件匹配 → 直接执行经验产物 │
└────────────────┬────────────────────────┘
未匹配 ↓
┌─────────────────────────────────────────┐
│ ExperienceProvider │
│ 根据输入检索相关经验 │
└────────────────┬────────────────────────┘

┌─────────────────────────────────────────┐
│ PromptBuilder │
│ 将经验注入到 System Prompt │
└────────────────┬────────────────────────┘

Agent 执行(参考经验)

2. 快速接入方式

步骤 1:配置经验模块

# application.yml
spring:
ai:
alibaba:
codeact:
extension:
experience:
enabled: true
code-experience-enabled: true
react-experience-enabled: true
common-experience-enabled: true
max-items-per-query: 5
in-memory:
enabled: true

步骤 2:实现 ExperienceProvider

import com.alibaba.assistant.agent.extension.experience.spi.ExperienceProvider;
import com.alibaba.assistant.agent.extension.experience.model.*;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.ArrayList;

@Component
public class MyExperienceProvider implements ExperienceProvider {

@Override
public List<Experience> query(ExperienceQuery query, ExperienceQueryContext context) {
List<Experience> experiences = new ArrayList<>();

// 根据查询条件检索经验
// 这里简单演示,实际可从数据库/向量库检索
if (query.getType() == ExperienceType.CODE) {
experiences.add(createCodeExperience());
}

return experiences;
}

private Experience createCodeExperience() {
Experience exp = new Experience();
exp.setType(ExperienceType.CODE);
exp.setTitle("日志规范");
exp.setContent("""
代码中的日志应遵循以下格式:
logger.info("类名#方法名 - reason=说明原因");

示例:
logger.info("UserService#createUser - reason=创建用户成功, userId={}", user.getId());
""");
exp.getTags().add("logging");
return exp;
}
}

步骤 3:初始化经验数据

import com.alibaba.assistant.agent.extension.experience.ExperienceDataInitializer;
import com.alibaba.assistant.agent.extension.experience.model.*;
import org.springframework.stereotype.Component;
import jakarta.annotation.PostConstruct;
import java.util.List;

@Component
public class MyExperienceInitializer {

private final ExperienceDataInitializer initializer;

public MyExperienceInitializer(ExperienceDataInitializer initializer) {
this.initializer = initializer;
}

@PostConstruct
public void init() {
// 初始化代码经验
Experience codeExp = new Experience();
codeExp.setType(ExperienceType.CODE);
codeExp.setTitle("异常处理规范");
codeExp.setContent("捕获异常时需要记录完整堆栈...");

// 初始化行为经验
Experience reactExp = new Experience();
reactExp.setType(ExperienceType.REACT);
reactExp.setTitle("查询订单流程");
reactExp.setContent("当用户询问订单状态时,优先调用 order.get_status...");

initializer.initialize(List.of(codeExp, reactExp));
}
}

3. 经验结构

Experience exp = new Experience();
exp.setId("exp-001"); // 唯一 ID
exp.setType(ExperienceType.CODE); // 经验类型
exp.setTitle("日志格式规范"); // 标题
exp.setContent("日志格式为..."); // 主体内容
exp.setScope(ExperienceScope.GLOBAL); // 生效范围
exp.setOwnerId("user-123"); // 所属用户
exp.setProjectId("project-456"); // 所属项目
exp.setLanguage("java"); // 编程语言
exp.getTags().add("logging"); // 标签
exp.getTags().add("best-practice");

经验生效范围

ExperienceScope说明
GLOBAL全局生效
PROJECT项目级别生效
USER用户级别生效
SESSION会话级别生效

Spring AI Alibaba 开源项目基于 Spring AI 构建,是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践,提供高层次的 AI API 抽象与云原生基础设施集成方案,帮助开发者快速构建 AI 应用。