一个基于 Spring Boot 3 + Spring AI 构建的企业级 AI Agent 实验平台
AgentLab 不是一个简单的 Chatbot,而是一个完整的 AI Agent 工程实验平台。它实现了现代 Agent 系统的核心能力:
- 🧠 智能任务路由 - 自动识别问题复杂度,选择最优执行策略
- 📚 RAG 知识库 - 结构感知的文档切分和向量检索
- 💾 分层记忆系统 - 短期、工作、长期记忆的协同管理
- 🔧 工具调用编排 - 联网搜索、知识库查询、文件操作等
- 🔄 Plan-Execute-Verify - 复杂任务的规划、执行、验收循环
- 🔍 执行轨迹可观测 - 完整的 Agent 决策过程追踪
- 🎨 Web 工作台 - 开箱即用的前端界面
根据问题类型自动选择执行模式:
- 简单对话 - 直接 LLM 回答
- 工具调用 - ReAct Agent 模式
- 复杂任务 - Plan-Execute-Verify 循环
- 高风险操作 - 需要用户确认的操作
- ✅ Markdown H1/H2 章节切分
- ✅ 代码块保护(不破坏示例代码)
- ✅ Parent-Child Chunking(精准召回 + 完整上下文)
- ✅ 标题路径注入(提高主题语义)
| 记忆层 | 作用 | 存储方式 |
|---|---|---|
| 最近消息 | 短期对话上下文 | 内存 |
| 会话摘要 | 长对话压缩 | 数据库 |
| 工作记忆 | 当前任务状态 | 数据库 |
| 长期记忆 | 跨会话知识沉淀 | 向量库 |
- 🔍 多查询生成和结果合并
- 📊 来源可信度评分
- 🔄 Provider 降级策略
- 💰 搜索预算控制
用户问题 → 任务规划 → 逐步执行 → 结果验收
↑ ↓
└────── 计划修订 ←────────┘
- 自动生成任务计划
- 逐步执行并收集证据
- 验收结果质量
- 失败时修订计划或澄清需求
- Java 17+
- Maven 3.8+
- Docker & Docker Compose
- DashScope API Key(阿里云通义千问)
git clone https://github.com/Fanta5yy/AgentLab.git
cd AgentLab创建 .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=truemake init这个命令会:
- 启动 PostgreSQL + pgvector 容器
- 启动 Spring Boot 应用
- 等待服务就绪
- 上传示例学习资料
打开浏览器访问:http://localhost:9900
# 开发模式启动
make dev
# 查看应用日志
make logs
# 查看数据库状态
make db-status
# 停止所有服务
make stop && make db-down
# 运行测试
make test
# 构建项目
make build| 端点 | 方法 | 说明 |
|---|---|---|
/ |
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-turbodocument:
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 流式输出
- 异步记忆更新
- 异步反思学习
- 工具调用预算控制
- 文件操作白名单机制
- 敏感文件黑名单过滤
- 文件大小和行数限制
- 操作审计日志
- 在
agent/tool/下创建工具类 - 使用
@Tool注解标记方法 - 在
AgentConfig中注册
@Component
public class MyTools {
@Tool(description = "工具描述")
public String myTool(String param) {
// 实现逻辑
return result;
}
}- 在
src/main/resources/skills/下创建.md文件 - 定义 Skill 的角色、行为和示例
- 重启应用自动加载
实现 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!
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
本项目采用 MIT 许可证 - 详见 LICENSE 文件
⭐ 如果这个项目对你有帮助,请给个 Star!