Skip to content

Fanta5yy/AgentLab

Repository files navigation

AgentLab

一个基于 Spring Boot 3 + Spring AI 构建的企业级 AI Agent 实验平台

Java Spring Boot License

🎯 项目简介

AgentLab 不是一个简单的 Chatbot,而是一个完整的 AI Agent 工程实验平台。它实现了现代 Agent 系统的核心能力:

  • 🧠 智能任务路由 - 自动识别问题复杂度,选择最优执行策略
  • 📚 RAG 知识库 - 结构感知的文档切分和向量检索
  • 💾 分层记忆系统 - 短期、工作、长期记忆的协同管理
  • 🔧 工具调用编排 - 联网搜索、知识库查询、文件操作等
  • 🔄 Plan-Execute-Verify - 复杂任务的规划、执行、验收循环
  • 🔍 执行轨迹可观测 - 完整的 Agent 决策过程追踪
  • 🎨 Web 工作台 - 开箱即用的前端界面

✨ 核心特性

1. 智能任务路由

根据问题类型自动选择执行模式:

  • 简单对话 - 直接 LLM 回答
  • 工具调用 - ReAct Agent 模式
  • 复杂任务 - Plan-Execute-Verify 循环
  • 高风险操作 - 需要用户确认的操作

2. 结构感知 RAG

  • ✅ Markdown H1/H2 章节切分
  • ✅ 代码块保护(不破坏示例代码)
  • ✅ Parent-Child Chunking(精准召回 + 完整上下文)
  • ✅ 标题路径注入(提高主题语义)

3. 分层记忆系统

记忆层 作用 存储方式
最近消息 短期对话上下文 内存
会话摘要 长对话压缩 数据库
工作记忆 当前任务状态 数据库
长期记忆 跨会话知识沉淀 向量库

4. 联网搜索编排

  • 🔍 多查询生成和结果合并
  • 📊 来源可信度评分
  • 🔄 Provider 降级策略
  • 💰 搜索预算控制

5. Plan-Execute-Verify 循环

用户问题 → 任务规划 → 逐步执行 → 结果验收
              ↑                        ↓
              └────── 计划修订 ←────────┘
  • 自动生成任务计划
  • 逐步执行并收集证据
  • 验收结果质量
  • 失败时修订计划或澄清需求

🚀 快速开始

环境要求

  • Java 17+
  • Maven 3.8+
  • Docker & Docker Compose
  • DashScope API Key(阿里云通义千问)

1. 克隆项目

git clone https://github.com/Fanta5yy/AgentLab.git
cd AgentLab

2. 配置环境变量

创建 .env 文件:

# 必需:DashScope API Key
DASHSCOPE_API_KEY=your-api-key-here

# 可选:联网搜索(Tavily)
TAVILY_API_KEY=your-tavily-key
AGENT_SEARCH_PROVIDER=tavily
AGENT_SEARCH_ENABLED=true

3. 一键启动

make init

这个命令会:

  1. 启动 PostgreSQL + pgvector 容器
  2. 启动 Spring Boot 应用
  3. 等待服务就绪
  4. 上传示例学习资料

4. 访问应用

打开浏览器访问:http://localhost:9900

📖 使用指南

常用命令

# 开发模式启动
make dev

# 查看应用日志
make logs

# 查看数据库状态
make db-status

# 停止所有服务
make stop && make db-down

# 运行测试
make test

# 构建项目
make build

API 端点

端点 方法 说明
/ GET Web 工作台
/api/chat_stream POST SSE 流式对话
/api/pev/chat_stream POST 强制 PEV 模式
/api/upload POST 上传文档到知识库
/api/trace/{traceId} GET 查询执行轨迹
/api/skills GET 查询技能列表
/vector-store/health GET 健康检查

示例请求

普通对话:

curl -X POST http://localhost:9900/api/chat \
  -H "Content-Type: application/json" \
  -d '{
    "id": "session-1",
    "userId": "user-1",
    "question": "什么是 Spring AI?"
  }'

SSE 流式对话:

curl -N -X POST http://localhost:9900/api/chat_stream \
  -H "Content-Type: application/json" \
  -d '{
    "id": "session-1",
    "userId": "user-1",
    "question": "帮我设计一个 RAG 系统",
    "enableWebSearch": false
  }'

上传文档:

curl -X POST http://localhost:9900/api/upload \
  -F "file=@learning-materials/spring_ai_guide.md"

🏗️ 架构设计

核心流程

用户请求
  ↓
TaskExecutionRouter (路由判断)
  ↓
SessionMemoryContextLoader (加载短期记忆)
  ↓
LongTermMemoryContextLoader (检索长期记忆)
  ↓
AgentTaskLoopService (任务循环)
  ├─ TaskPlanningService (规划)
  ├─ TaskExecutionService (执行)
  ├─ TaskVerificationService (验收)
  └─ PlanRevisionService (修订)
  ↓
MemoryOrchestratorService (更新记忆)
  ↓
ReflectionService (反思学习)
  ↓
TraceCollector (记录轨迹)

项目结构

src/main/java/org/example/
├── agent/          # Spring AI 工具和切面
├── capability/     # Knowledge/Memory 能力门面
├── config/         # Spring 配置
├── controller/     # REST API 和 SSE
├── memory/         # 记忆相关模型
├── mcp/            # MCP 客户端/服务端
├── reflection/     # 反思数据模型
├── search/         # 联网搜索编排
├── service/        # 核心业务逻辑
├── skill/          # Markdown Prompt Skill
└── trace/          # 执行轨迹追踪

src/main/resources/
├── db/             # 数据库 Schema
├── skills/         # Skill 定义文件
├── static/         # 前端工作台
└── application.yml # 主配置文件

⚙️ 配置说明

模型配置

agent:
  model:
    provider: qwen
    default-tier: pro  # pro 或 flash
    qwen-pro-model: qwen3-max
    qwen-flash-model: qwen-turbo

文档切分配置

document:
  chunk:
    max-size: 400          # child chunk 大小
    overlap: 80            # 重叠字符数
    min-size: 150          # 最小 chunk 大小
    parent-max-size: 1500  # parent chunk 大小

记忆配置

memory:
  recent-message-limit: 12              # 最近消息数量
  summary-trigger-message-count: 6      # 触发摘要的消息数
  long-term-top-k: 4                    # 长期记忆召回数量
  max-extracted-memories-per-exchange: 3 # 每轮最多抽取记忆数

搜索配置

agent:
  search:
    enabled: true
    provider: tavily  # tavily 或 searxng
    max-tool-calls-per-run: 10
    max-queries-per-tool-call: 1
    max-merged-results: 10

🧪 测试

# 运行所有测试
make test

# 或使用 Maven
mvn test

当前测试覆盖:

  • ✅ 搜索编排逻辑
  • ✅ 任务验收规则
  • ✅ 任务路由判断
  • ✅ 计划修订逻辑

📊 性能优化

数据库优化

  • 使用 pgvector 的 IVFFlat 索引
  • Parent-Child Chunking 减少检索开销
  • 长期记忆分层检索和重排

响应优化

  • SSE 流式输出
  • 异步记忆更新
  • 异步反思学习
  • 工具调用预算控制

🔒 安全特性

  • 文件操作白名单机制
  • 敏感文件黑名单过滤
  • 文件大小和行数限制
  • 操作审计日志

🛠️ 开发指南

添加新工具

  1. agent/tool/ 下创建工具类
  2. 使用 @Tool 注解标记方法
  3. AgentConfig 中注册
@Component
public class MyTools {
    @Tool(description = "工具描述")
    public String myTool(String param) {
        // 实现逻辑
        return result;
    }
}

添加新 Skill

  1. src/main/resources/skills/ 下创建 .md 文件
  2. 定义 Skill 的角色、行为和示例
  3. 重启应用自动加载

自定义记忆策略

实现 MemoryExtractionStrategy 接口:

@Component
public class CustomMemoryStrategy implements MemoryExtractionStrategy {
    @Override
    public List<Memory> extract(ChatMessage message) {
        // 自定义抽取逻辑
    }
}

📝 待办事项

  • 支持更多 LLM Provider(OpenAI、Claude 等)
  • 实现 workspace 文件读写工具
  • 添加 git 操作工具
  • 支持 shell 命令执行
  • 实现权限控制系统
  • trace 持久化到数据库
  • 添加更多单元测试

🤝 贡献指南

欢迎提交 Issue 和 Pull Request!

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启 Pull Request

📄 License

本项目采用 MIT 许可证 - 详见 LICENSE 文件

🙏 致谢

📮 联系方式


⭐ 如果这个项目对你有帮助,请给个 Star!

About

一个基于 Java / Spring Boot / Spring AI 的 AI Agent 实验平台,支持 Planner-Executor 并行执行、工具调用、文件操作、RAG、记忆系统和多文档分析工作台。

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors