zhuyongxin
|
4e3502a51b
|
fix(knowledge): 将 category 存储到 fault_source 字段
## 问题
数据库表 api_document 没有独立的 category 字段,导致 frontmatter 的 category 信息无法正确存储。
### 表结构分析
```sql
CREATE TABLE api_document (
fault_category VARCHAR(32) DEFAULT 'EXTERNAL_API', -- 固定枚举,不合适存储自定义分类
fault_source VARCHAR(128), -- 可以存储自定义分类
...
)
```
## 解决方案
使用 `fault_source` 字段存储 frontmatter 的 category:
```java
// 保存时
document.setFaultSource(category); // api, infrastructure, domain, troubleshooting
// 统计时
Map<String, Long> categoryCount = apiDocumentRepository.findAll().stream()
.collect(Collectors.groupingBy(
doc -> doc.getFaultSource() != null ? doc.getFaultSource() : "general",
Collectors.counting()
));
```
## 字段映射关系
| Frontmatter | 数据库字段 | 示例值 |
|-------------|-----------|--------|
| `title` | `api_name` | "支付网关错误码定义" |
| `category` | `fault_source` | "api" / "infrastructure" |
| `keywords` | `metadata` (JSON) | ["ERR_TIMEOUT","超时"] |
| `summary` | `metadata` (JSON) | "记录了..." |
## 优势
1. **充分利用现有字段**:fault_source (VARCHAR 128) 足够存储分类
2. **避免枚举限制**:不受 FaultCategory 枚举约束
3. **查询方便**:直接通过 fault_source 字段查询和统计
4. **向后兼容**:metadata 中仍保留完整的 frontmatter 信息
## 验证
```bash
# 初始化
curl -X POST http://localhost:9900/api/knowledge/init
# 查询统计
curl http://localhost:9900/api/knowledge/stats
# 响应
{
"categories": {
"api": 1,
"infrastructure": 3,
"domain": 1,
"troubleshooting": 1
}
}
```
## 数据库查询
```sql
-- 按分类统计
SELECT fault_source, COUNT(*)
FROM api_document
GROUP BY fault_source;
-- 结果
api | 1
infrastructure | 3
domain | 1
troubleshooting | 1
```
|
2026-06-25 14:08:50 +08:00 |
|
zhuyongxin
|
b01f133efb
|
fix(knowledge): 修复状态字段和 indexed_at 时间戳设置
## 问题
1. **状态字段不正确**:
- 保存到数据库时直接设置 status="INDEXED"
- 实际上此时还未索引到 Milvus
- 应该先设置为 "PENDING",索引成功后更新为 "INDEXED"
2. **indexed_at 时间戳过早**:
- 在保存数据库时就设置了 indexed_at
- 应该在 Milvus 索引成功后才设置
3. **fault_category 字段说明**:
- fault_category 是枚举类型(EXTERNAL_API, DATABASE, CACHE 等)
- frontmatter 的 category 是自定义分类(api, infrastructure, domain 等)
- 两者不匹配,保持 fault_category 默认值
- 真实的分类信息保存在 metadata JSON 中
## 修复内容
### 1. 状态流转正确
```java
// 保存到数据库时
document.setStatus("PENDING"); // 初始状态
// Milvus 索引成功后
document.setStatus("INDEXED");
document.setChunkCount(chunks.size());
document.setIndexedAt(LocalDateTime.now()); // 此时才设置时间戳
// Milvus 索引失败后
document.setStatus("FAILED");
document.setErrorMessage(e.getMessage());
```
### 2. metadata 结构说明
```json
{
"title": "支付网关错误码定义",
"summary": "记录了支付网关所有核心错误码的含义及排查方向",
"category": "api", // 自定义分类,不是 fault_category
"keywords": ["ERR_TIMEOUT","超时","支付网关"]
}
```
### 3. 数据库字段含义
- `fault_category`:固定枚举(EXTERNAL_API, DATABASE 等),保持默认值
- `metadata.category`:frontmatter 自定义分类(api, infrastructure, domain 等)
- `status`:索引状态(PENDING → INDEXED / FAILED)
- `indexed_at`:索引完成时间(索引成功后设置)
## 验证
```bash
# 1. 启动应用(Milvus 可以不启动)
mvn spring-boot:run
# 2. 初始化
curl -X POST http://localhost:9900/api/knowledge/init
# 3. 检查数据库
# - Milvus 未启动:status = "FAILED", indexed_at = NULL
# - Milvus 已启动:status = "INDEXED", indexed_at = 实际时间
# - fault_category:始终为 "EXTERNAL_API"(默认值)
# - metadata:包含真实的 category 信息
```
|
2026-06-25 14:04:10 +08:00 |
|
zhuyongxin
|
3ed48e38cd
|
feat(knowledge): 完整实现知识库初始化 - 包含 Milvus 向量索引
## 核心改动
在上一版本基础上,补充完整的 Milvus (L1) 向量索引功能。
### 新增依赖注入
```java
@Autowired
private DocumentChunkService documentChunkService;
@Autowired
private VectorIndexService vectorIndexService;
@Autowired
private VectorEmbeddingService vectorEmbeddingService;
```
### 完整的数据流
```
knowledge_base/*.md
↓ 1. 扫描 & 解析 frontmatter
↓ 2. 保存到 MySQL (api_document)
↓ 3. 提取正文 & 文档分块
↓ 4. 生成向量并索引到 Milvus
↓ 5. 加入 L0 内存索引
完成 (L0 + L1 双层索引)
```
### 关键代码
```java
// 1. 提取正文(去除 frontmatter)
String body = extractBody(content);
// 2. 文档分块
List<DocumentChunk> chunks = documentChunkService.chunkDocument(body, relativePath);
// 3. 上传到 Milvus
vectorIndexService.indexDocumentChunks(document.getDocId(), chunks, category);
// 4. 更新状态
document.setStatus("INDEXED");
document.setChunkCount(chunks.size());
```
### 错误处理
- Milvus 索引失败时:
- 更新文档状态为 FAILED
- 记录错误信息到 error_message 字段
- 继续处理下一个文档(不中断整个流程)
### 响应示例
```json
{
"success": true,
"scanned": 6,
"inserted": 6,
"failed": 0,
"details": {
"api/payment-errors.md": "导入成功(L0+L1)"
}
}
```
### 数据库字段
新增:
- `chunk_count`:分块数量
- `error_message`:错误信息(失败时)
## 验证步骤
```bash
# 1. 启动应用(确保 Milvus 已运行)
mvn spring-boot:run
# 2. 初始化知识库
curl -X POST http://localhost:9900/api/knowledge/init
# 3. 验证结果
# - MySQL: 检查 api_document 表
# - Milvus: 检查 knowledge_base_collection
# - L0: 日志显示"知识库索引加载完成,共 6 个文档"
# 4. 测试 L1 语义检索
# lookup_knowledge("支付为什么会失败")
# 应该返回 semantic_L1 结果
```
## 文档更新
- 更新使用文档,删除"暂未实现 L1"的说明
- 添加 Milvus 数据结构说明
- 添加 Milvus 相关错误处理
|
2026-06-25 11:00:10 +08:00 |
|
zhuyongxin
|
dec587959c
|
feat(knowledge): 添加知识库批量初始化接口
## 新增功能
1. **KnowledgeBaseController**
- POST /api/knowledge/init - 批量初始化知识库
- GET /api/knowledge/stats - 查询统计信息
2. **KnowledgeBaseInitService**
- 递归扫描 knowledge_base 目录所有 .md 文件
- 解析 frontmatter 提取元数据
- 自动去重(基于文件路径)
- 数据入库到 api_document 表
- 自动加入 L0 内存索引
## 核心特性
### 去重机制
- 基于文件相对路径去重
- 支持 force=true 强制重新导入
- 跳过已存在文档,避免重复插入
### 数据存储
- 数据库:保存文档元数据(title、keywords、summary 等)
- L0 索引:加入 KnowledgeIndexService 内存索引
- L1 索引:暂未实现(TODO)
### 错误处理
- 格式无效:frontmatter 解析失败
- 缺少标题:必填字段验证
- 详细的错误信息反馈
## API 示例
```bash
# 首次导入
curl -X POST http://localhost:9900/api/knowledge/init
# 强制重新导入
curl -X POST http://localhost:9900/api/knowledge/init?force=true
# 查询统计
curl http://localhost:9900/api/knowledge/stats
```
## 响应示例
```json
{
"success": true,
"scanned": 6,
"skipped": 0,
"inserted": 6,
"failed": 0,
"details": {
"api/payment-errors.md": "导入成功(L0)"
}
}
```
## 后续扩展
- [ ] L1 向量索引(Milvus)集成
- [ ] 文档更新检测(基于文件哈希)
- [ ] 批量删除接口
- [ ] 进度回调支持
## 文档
- 使用文档:.docs/2026-06-25-knowledge-base-init-api.md
|
2026-06-25 10:49:30 +08:00 |
|
zhuyongxin
|
f002571629
|
refactor(ai-ops): 增强 lookup_knowledge 工具描述并调整工具优先级
## 主要改动
1. 增强 lookup_knowledge 工具描述
- 参考 queryLogs 的详细描述格式
- 添加 IMPORTANT 关键词强调优先使用场景
- 详细列举 4 种查询场景及示例:
* 错误码定义(ERR_TIMEOUT)
* 接口文档(payment-gateway)
* 排障步骤(支付超时排查)
* 配置说明(HikariCP)
- 保留性能优势说明(L0 < 10ms, L1 200-500ms)
2. 调整工具数组顺序
- 将 lookupKnowledgeTool 提前到第 2 位(仅次于 dateTimeTools)
- Mock 模式顺序:dateTimeTools → lookupKnowledgeTool → queryMetricsTools → queryLogsTools
- 真实模式顺序:dateTimeTools → lookupKnowledgeTool → queryMetricsTools → internalDocsTools
- 弃用工具(internalDocsTools)放在最后
## 设计目标
解决 Executor 优先选择 queryLogsTools 的问题:
- 工具描述对等:lookup_knowledge 与 queryLogs 同等详细
- 位置优先:知识库查询排在日志查询之前
- 明确引导:IMPORTANT 关键词强调使用时机
## 预期效果
Executor 在遇到错误码、配置项、排障问题时,应优先调用 lookup_knowledge,
而不是直接查询日志。
|
2026-06-25 09:55:02 +08:00 |
|
zhuyongxin
|
553d1d1faf
|
refactor(ai-ops): 重构 Executor Prompt - 强化行为准则和证据驱动
## 主要改动
1. 重构为更清晰的三段式结构
- 角色定位:明确"诊断流程的执行者"
- 核心行为准则:严格按步执行、必须调用工具、证据综合分析
- 任务执行规范:每步产出要求、最终报告格式
2. 强化关键约束
- 永远不要凭记忆回答错误码含义、接口定义、排障步骤
- 结论必须基于至少两个独立证据源
- 提供证据链格式示例
3. 简化 lookup_knowledge 说明
- 修正参数名:query_text → query
- 简化返回字段说明(保留核心信息)
- 保留三级使用规则(必须/必须/建议)
## 设计理念
- 从"技术细节"转向"行为准则"
- 从"字段说明"转向"证据驱动"
- 提供具体的输出格式示例,减少 Agent 的不确定性
## 参考
基于 mvp/discuss/Executor_Prompt.md 微调
|
2026-06-24 18:53:42 +08:00 |
|
zhuyongxin
|
c88b287f83
|
refactor(ai-ops): 优化 lookup_knowledge 工具描述和 Executor Prompt
## 主要改动
1. 优化工具描述(中等版)
- 保留 L0/L1 两阶段检索机制说明
- 增加适用场景列举(错误码、接口文档、排障步骤等)
- 简化为核心信息,减少 token 消耗
2. Executor Prompt 新增详细使用说明
- 添加 lookup_knowledge 返回结果字段说明
- 提供 confidence 和 match_type 的使用建议
- 明确 found=false 的处理方式
- 结构化组织:工具选择 → 结果处理 → 执行反馈
## 设计思路
- 工具描述:简洁,快速理解核心用途
- Executor Prompt:详细,指导正确使用
- 分层设计:减少重复信息,降低 token 消耗
|
2026-06-24 18:48:04 +08:00 |
|
zhuyongxin
|
463d8b817b
|
fix: 恢复 queryInternalDocs 的原始工具描述
保留原始 @Tool description,仅在 Java 层面标记 @Deprecated。
这样可以保留完整的工具提示词用于后续对比分析。
|
2026-06-24 18:41:02 +08:00 |
|
zhuyongxin
|
363767d3e7
|
refactor(ai-ops): 标记 queryInternalDocs 为弃用,统一使用 lookup_knowledge
## 改动说明
1. 标记 InternalDocsTools 为 @Deprecated
- 添加弃用注解和说明文档
- 工具描述中明确提示使用 lookup_knowledge 替代
2. 简化 Executor Prompt
- 移除 queryInternalDocs 相关的工具选择逻辑
- 统一使用 lookup_knowledge 处理所有知识库查询
- 精确关键词、模糊概念、故障流程都使用同一个工具
## 理由
lookup_knowledge 已经支持:
- L0 精确匹配(< 10ms,高置信度)
- L1 语义检索(自动兜底)
功能完全覆盖 queryInternalDocs(纯 L1 检索),且性能更优。
保留 queryInternalDocs 会导致:
- 工具功能重叠,Agent 决策困难
- 维护两套相似的代码逻辑
## 迁移路径
- 当前:标记为弃用,但保持可用
- 验证:观察 lookup_knowledge 是否能完全替代
- 未来:确认无问题后,在下个版本中移除
|
2026-06-24 18:38:39 +08:00 |
|
zhuyongxin
|
c4d23c3bd8
|
feat(ai-ops): Prompt 配置化 & 集成 LookupKnowledgeTool
## 主要改动
1. Prompt 配置化
- 从硬编码改为独立 Markdown 文件管理
- 新增 AiOpsPromptProperties 配置类,使用 @PostConstruct 加载
- 创建 prompts/{planner,executor,supervisor}-prompt.md
2. 集成 LookupKnowledgeTool
- 在 AiOpsService 中注入 LookupKnowledgeTool
- 添加到工具数组,只给 Executor Agent 使用
- 符合 3-Agent 协同分析模式
3. Executor Prompt 增强
- 添加工具选择指南(精确关键词 vs 模糊概念)
- 明确降级策略(lookup_knowledge 未找到时降级到 queryInternalDocs)
## 优势
- 易于维护:Prompt 修改不需重新编译
- 格式友好:Markdown 原生支持代码块和表格
- 性能优化:精确关键词查询 < 10ms(L0 匹配)
## 文件变更
- 新增:AiOpsPromptProperties.java
- 新增:prompts/planner-prompt.md
- 新增:prompts/executor-prompt.md
- 新增:prompts/supervisor-prompt.md
- 修改:AiOpsService.java(-136 行硬编码,+5 行配置引用)
|
2026-06-24 18:29:24 +08:00 |
|
zhuyongxin
|
125e8281e7
|
fix: 特殊字符导致解析失败
|
2026-06-24 17:39:17 +08:00 |
|
zhuyongxin
|
36abfc4675
|
docs(mvp): 添加知识库检索架构和使用文档
新增文档:
- mvp/architecture/knowledge-retrieval-architecture.md
* 架构位置和数据流说明
* L0+L1 混合检索流程图
* 核心组件详细设计
* 与现有架构的集成方式
* 性能指标和可观测性
- mvp/architecture/knowledge-retrieval-usage.md
* 快速开始指南
* 文档格式要求和最佳实践
* 使用场景和示例
* 故障排查和性能优化
* 维护知识库的完整流程
更新文档:
- mvp/README.md - 添加知识库检索文档入口
完善 MVP 架构文档,为后续开发和维护提供完整参考
|
2026-06-24 16:26:15 +08:00 |
|
zhuyongxin
|
3956426c97
|
docs(knowledge): 添加测试知识库文档
新增 6 个知识库文档,用于测试 L0+L1 混合检索功能:
API 类:
- payment-errors.md - 支付网关错误码定义
领域知识类:
- spring-ai-tool-best-practices.md - Spring AI 工具定义最佳实践
基础设施类:
- redis-config.md - Redis 缓存配置指南
- mysql-connection-pool.md - MySQL 连接池配置
- flyway-best-practices.md - Flyway 数据库迁移最佳实践
故障排查类:
- fault-diagnosis-process.md - 故障诊断流程规范
所有文档均包含:
- 标准 frontmatter 元数据 (title, keywords, summary, category)
- 实用配置示例和代码片段
- 支持 L0 精确匹配的关键词
|
2026-06-24 16:19:10 +08:00 |
|
zhuyongxin
|
d6229f3385
|
feat(knowledge): 完成 L0+L1 混合检索集成
核心功能:
- 新增 FrontmatterParser 解析 YAML frontmatter
- 新增 KnowledgeIndexService L0 内存索引
- 新增 LookupKnowledgeTool 混合检索工具
- 增强 DocumentManagementService 文件保存和索引同步
技术实现:
- 数据库迁移 V004: api_document.metadata (TEXT)
- 依赖新增: snakeyaml 2.0
- 配置新增: knowledge.base-path
- 可观测性: requestId 追踪 + 性能日志
质量保证:
- 单元测试: 31/31 通过
- 测试覆盖: FrontmatterParser(11), KnowledgeIndexService(13), LookupKnowledgeTool(7)
- 启动验证: L0 索引正常加载
归档文档:
- OpenSpec: openspec/changes/lookup-knowledge-integration/
- devflow 档案: devflow/projects/2026-06-24-lookup-knowledge-integration/
- handoff: handoff/2026-06-24-lookup-knowledge-integration.md
|
2026-06-24 16:07:10 +08:00 |
|
zhuyongxin
|
c86045b33f
|
archive: Phase 1 基础设施搭建归档
归档信息:
- 变更名称:phase-1-infrastructure
- 工作流:spec-driven
- 归档位置:openspec/changes/archive/2026-06-23-phase-1-infrastructure/
完成情况:
- ✅ 所有产物完成(proposal, design, specs, tasks)
- ✅ 任务完成:33/35 (94%)
- ⚠️ 2 个任务跳过(混合检索、集成测试,有充分理由)
验收结果:
- ✅ 静态验证:编译通过
- ✅ 脚本验证:16/16 单元测试通过
- ✅ 端到端验证:上传→索引→检索→删除完整流程
Delta Specs:
- 跳过同步(用户选择)
- functional-specs.md 保留在归档目录中
devflow 档案:
- ✅ 已完整回填(brief, evidence, decisions, acceptance)
- ✅ devflow/index.md 状态更新为 archived
|
2026-06-23 19:20:05 +08:00 |
|
zhuyongxin
|
1793e045e1
|
docs(devflow): 更新 Phase 1 验收记录和索引
更新内容:
- acceptance.md: 完整的端到端验证结果
- 静态验证:编译通过,代码结构清晰
- 脚本验证:16/16 单元测试通过
- 端到端验证:上传→索引→检索→删除完整流程
- 验证结论:✅ 通过验收 (32/34 任务,94%)
- devflow/index.md: 更新状态为 archived
- 领域:基础设施/文档管理
- 关键词:增加 Milvus, 向量检索, 类别过滤
验收亮点:
- 所有单元测试通过(Milvus, MySQL, Redis)
- 端到端流程验证完整(curl 测试)
- 增强功能超预期(类别过滤系统)
- 跳过任务有充分理由
验收结论:Phase 1 基础设施搭建完成,可进入 Phase 2
|
2026-06-23 18:56:42 +08:00 |
|
zhuyongxin
|
df40a6e3f5
|
fix: 修复 logback 配置中的包名 (org.example → com.superbiz.agent)
|
2026-06-23 17:25:18 +08:00 |
|
zhuyongxin
|
ded74f8dac
|
docs(phase1): Phase 1 验证报告和最终归档
验证结果:
- ✅ Milvus 连接测试:Status Code 0,集群正常
- ✅ MySQL Repository 测试:7/7 通过
- ✅ Redis 会话管理测试:8/8 通过
- ✅ 编译验证:BUILD SUCCESS
- ✅ Git 状态:Working tree clean
任务完成情况:
- 核心任务:32/34 完成 (94%)
- 跳过任务:2 个(有充分理由)
- 混合检索:会降低准确率
- 集成测试:单元测试已覆盖
增强功能(超预期):
- ✅ 类别过滤检索系统
- 文件索引:自动从路径提取类别
- 用户上传:接口参数指定类别
- 检索过滤:Milvus expr 过滤
- ✅ 完整的类别管理流程
核心能力:
1. 数据持久化(MySQL + JPA + Flyway)
2. 会话管理(Redis)
3. 文档管理(上传、查询、删除)
4. 向量检索(Milvus 语义相似度)
5. 分类检索(按类别过滤)
6. 智能分块(基于标题和段落)
7. 异常处理(GlobalExceptionHandler)
8. 容器化部署(Docker Compose)
提交统计:12 个功能提交
文件统计:实体 3 个、Repository 3 个、Service 6+、Controller 2 个、DTO 7 个
验证结论:✅ Phase 1 可以归档,进入 Phase 2
|
2026-06-23 17:19:02 +08:00 |
|
zhuyongxin
|
24101a8d66
|
feat(phase1): 支持上传时指定文档类别
功能增强:
- DocumentController 新增 category 参数
POST /api/documents/upload?category=api
- DocumentUploadRequest 新增 category 字段
- 支持用户指定:api、domain、troubleshoot 等
- 默认值:upload(未指定时)
- VectorIndexService.indexDocumentChunks 接收 category
- 将用户指定的类别存入 Milvus metadata
- metadata.category = 用户指定值 或 "upload"
使用示例:
```bash
# 上传 API 文档
curl -X POST /api/documents/upload \
-F "file=@redis-api.md" \
-F "category=api"
# 上传领域知识文档
curl -X POST /api/documents/upload \
-F "file=@cache-theory.md" \
-F "category=domain"
# 检索时按类别过滤
searchSimilarDocuments("Redis接口", 5, "api")
```
完整流程:
1. 文件索引:自动从路径提取(aiops-docs/api/ → "api")
2. 用户上传:从接口参数获取(category=api)
3. 检索时:可按类别过滤(category 参数)
编译验证:BUILD SUCCESS
|
2026-06-23 16:43:47 +08:00 |
|
zhuyongxin
|
075cc36270
|
feat(phase1): 支持按类别过滤的文档检索
功能增强:
- VectorIndexService 自动提取文档类别
- 文件索引:从路径提取(如 aiops-docs/api/ → "api")
- 上传文档:默认类别 "upload"
- metadata.category 字段存储类别信息
- VectorSearchService 支持类别过滤
- searchSimilarDocuments(query, topK): 原方法,不过滤
- searchSimilarDocuments(query, topK, category): 新方法,按类别过滤
- 使用 Milvus expr 过滤:metadata["category"] == "xxx"
使用场景:
- 目录结构:
aiops-docs/
├── api/ → category="api"
├── domain/ → category="domain"
└── troubleshoot/ → category="troubleshoot"
- 检索示例:
// 只检索 API 文档
searchSimilarDocuments("Redis接口", 5, "api")
// 只检索领域知识
searchSimilarDocuments("缓存原理", 5, "domain")
// 全量检索
searchSimilarDocuments("问题诊断", 5, null)
编译验证:BUILD SUCCESS
|
2026-06-23 16:33:52 +08:00 |
|
zhuyongxin
|
4ef8d87961
|
feat(phase1): 实现文档分块向量化索引
Task 5.6: 向量化索引实现
- VectorIndexService 新增方法:
- indexDocumentChunks(docId, chunks): 索引文档分块到 Milvus
- deleteDocumentChunks(docId): 删除文档的所有向量
- buildDocumentMetadata(): 构建文档元数据(区分文件索引)
核心流程:
1. 上传时:文本提取 → 分块 → 向量化 → 存入 Milvus + MySQL
2. 检索时:问题向量化 → Milvus 语义检索 → 返回相似文档
3. 删除时:删除元数据 + 删除向量索引
实现细节:
- 复用 indexSingleFile 的向量化逻辑
- metadata.docId 标识文档来源(区分 upload: 和 file:)
- 删除表达式:metadata["docId"] == "xxx"
- 自动去重:上传前删除旧向量数据
DocumentManagementService 完整实现:
- uploadDocument: 完整向量化流程(移除 TODO)
- deleteDocument: 同步删除向量索引(移除 TODO)
编译验证:BUILD SUCCESS
Progress: 32/34 tasks completed (94%)
|
2026-06-23 16:08:50 +08:00 |
|
zhuyongxin
|
26aaf149d8
|
feat(phase1): 完成全局完善和基础设施文档
Task 6.1: 统一异常处理
- 创建 GlobalExceptionHandler:Spring 全局异常拦截器
- SessionNotFoundException: 404 会话未找到
- DocumentProcessException: 400 文档处理异常
- MaxUploadSizeExceededException: 400 文件大小超限
- IllegalArgumentException: 400 参数错误
- Exception: 500 系统异常兜底
- 统一响应格式:Result<T> + HTTP 状态码
Task 6.2: Docker Compose 配置
- 创建 docker-compose.yml:本地开发环境一键启动
- MySQL 8.0: 数据持久化,端口 3306
- Redis 7: 会话缓存,端口 6379
- Milvus Standalone: 向量索引,端口 19530
- etcd: 元数据存储
- MinIO: 对象存储
- 数据卷持久化:mysql-data, redis-data, milvus-data
- 健康检查:自动重启机制
Task 6.3: 更新 README.md
- 新增 Phase 1 专属章节:
- 架构概览(已完成功能清单)
- 本地开发环境(前置要求、快速开始)
- 数据库迁移(Flyway 脚本说明)
- API 文档(文档管理接口示例)
- 项目结构(分层架构说明)
- 待办事项(向量化索引、混合检索)
- 技术决策(包名重构、文本格式、分块策略)
编译验证:BUILD SUCCESS
Progress: 31/33 tasks completed (94%)
|
2026-06-23 15:50:47 +08:00 |
|
zhuyongxin
|
e76d4ce48f
|
feat(phase1): 完成文档查询和删除接口
Task 5.4: 文档查询接口
- DocumentManagementService 新增查询方法:
- queryDocumentById: 根据 docId 查询单个文档
- queryDocumentsByStatus: 根据状态查询(分页)
- queryDocumentsByFaultSource: 根据故障源查询
- convertToResponse: 实体转 DTO 工具方法
- DocumentController 新增 RESTful 接口:
- GET /api/documents/{docId}
- GET /api/documents/status/{status}?page=0&size=20
- GET /api/documents/faultSource/{faultSource}
Task 5.5: 文档删除接口
- DocumentManagementService 新增删除方法:
- deleteDocument: 删除文档元数据
- TODO: 向量索引删除待实现
- DocumentController 新增删除接口:
- DELETE /api/documents/{docId}
功能特性:
- 统一异常处理:DocumentProcessException
- 统一响应格式:Result<T>
- 分页支持:Page/PageRequest
- 事务支持:@Transactional
编译验证:BUILD SUCCESS
Progress: 28/33 tasks completed (85%)
|
2026-06-23 15:48:04 +08:00 |
|
zhuyongxin
|
f446290d0f
|
feat(phase1): 完成文档上传接口
Task 5.3: 文档上传接口
- 创建 DocumentManagementService:文档上传核心逻辑
- 文件格式验证(仅 .md/.txt)
- 文件 hash 计算与去重检查
- 文本提取与分块处理
- 文档元数据持久化(ApiDocument)
- 向量化索引标记为 TODO(待补充)
- 创建 DocumentController:RESTful 上传接口
- POST /api/documents/upload
- 支持参数:file, faultCategory, faultSource, apiName, version
- 返回:文档 docId
功能特性:
- MD5 hash 去重:防止重复上传
- 事务支持:元数据与索引状态一致性
- 异常处理:DocumentProcessException 统一封装
- 分块配置:使用 DocumentChunkConfig 默认配置
待补充:
- TODO: VectorIndexService.indexDocumentChunks() 实现
- 当前文档状态直接标记为 INDEXED
编译验证:BUILD SUCCESS
Progress: 26/33 tasks completed (79%)
|
2026-06-23 15:28:02 +08:00 |
|
zhuyongxin
|
5869fc775f
|
test: 修复测试并验证 Milvus 连接
- 修复 DocumentChunkServiceTest:getStartIndex/getEndIndex → getStartOffset/getEndOffset
- 新增 SimpleMilvusTest:验证 Milvus 集群连接状态
- Milvus 状态:✓ 正常运行(Status Code: 0)
测试结果:
- SimpleMilvusTest: 1/1 通过
- Milvus 集群可用,可以继续实施 Task 5.3-5.7
Host: in03-4a578da0f27ce9d.serverless.aws-eu-central-1.cloud.zilliz.com
Port: 443 (Zilliz Cloud Serverless)
|
2026-06-23 15:23:46 +08:00 |
|
zhuyongxin
|
ea77518880
|
feat(phase1): 完成文本提取和文档分块服务
Task 5.1: TextExtractor 服务
- 创建 TextExtractorService(仅支持 .md 和 .txt)
- 其他格式(.docx、.pdf)需通过外部转换服务先转为 Markdown
- 支持 UTF-8 编码的纯文本提取
- 提供文件格式验证方法
Task 5.2: 文档分块服务适配
- 修改 DocumentChunk DTO:添加 @Builder 支持
- 字段重命名:startIndex/endIndex → startOffset/endOffset
- 修复 DocumentChunkService 中的三处构造调用
- 使用 builder 模式替代构造函数
技术决策:
- 简化文本提取,只支持 Markdown 和纯文本
- 复杂格式转换由外部服务处理(分离关注点)
- 统一使用 Lombok @Builder 简化对象构建
编译验证:BUILD SUCCESS
Progress: 25/33 tasks completed (76%)
|
2026-06-23 15:15:10 +08:00 |
|
zhuyongxin
|
360e4febae
|
feat(phase1): 完成分层结构优化和 DTO 创建
Task 4.2: 分层结构优化
- 创建 exception 包
- SessionNotFoundException: 会话未找到异常
- DocumentProcessException: 文档处理异常
- 已有分层结构验证
- controller: 控制器层 ✅
- service: 业务逻辑层 ✅
- repository: 数据访问层 ✅
- domain: 领域模型层 (entity/model/enums) ✅
- config: 配置层 ✅
- tool: 工具类 ✅
Task 4.3: 创建 DTO 类
- DiagnosisRequest: 诊断请求 DTO (10 个字段)
- DiagnosisResponse: 诊断响应 DTO (12 个字段 + 内部类)
- DocumentUploadRequest: 文档上传请求 DTO (7 个字段)
- DocumentQueryResponse: 文档查询响应 DTO (11 个字段 + 内部类)
- Result<T>: 统一响应结果 DTO (泛型包装)
功能特性:
- 异常类支持自定义错误信息和原因链
- DTO 使用 Lombok 简化代码
- Result 提供静态工厂方法(success/error)
- DocumentUploadRequest 支持 MultipartFile
- Response DTO 支持嵌套数据结构
编译验证:BUILD SUCCESS
Progress: 23/33 tasks completed (70%)
|
2026-06-23 15:02:38 +08:00 |
|
zhuyongxin
|
c3a232540a
|
refactor(phase1): 完成包名重构 (org.example → com.superbiz.agent)
Task 4.1: 包名统一重构
- 重命名 41 个 Java 文件的包名
- 更新所有 import 语句
- 恢复枚举类(FaultCategory、DiagnosisStatus、SourceType)
- 更新测试类的 import
重构范围:
- domain/entity: 3 个实体类
- domain/model: 2 个数据类
- domain/enums: 3 个枚举类
- repository: 3 个接口
- service/session: 2 个类(接口 + 实现)
- config: 9 个配置类
- controller: 2 个控制器
- agent/tool: 4 个工具类
- client: 1 个客户端
- Main.java: 主类
验证结果:
- 编译成功,无错误
- 所有测试通过 (27/27)
- ApiDocumentRepositoryTest: 7/7 ✅
- CaseLibraryRepositoryTest: 6/6 ✅
- DiagnosisRecordRepositoryTest: 6/6 ✅
- RedisSessionManagerTest: 8/8 ✅
Progress: 21/33 tasks completed (64%)
|
2026-06-23 14:56:04 +08:00 |
|
zhuyongxin
|
8bd758dbaf
|
docs(devflow): 补充 Phase 1 项目记忆文档
创建 Phase 1 基础设施搭建的完整 devflow 文档:
- brief.md: 项目背景、目标、范围、技术选型、关键决策
- decisions.md: 6 个架构决策记录 (ADR)
- ADR-001: Flyway 数据库版本管理
- ADR-002: 枚举类型存储为 VARCHAR
- ADR-003: Redis JSON 序列化
- ADR-004: Spring Data JPA 命名约定
- ADR-005: 会话 TTL 可配置
- ADR-006: 包名暂时混用
- evidence.md: 测试证据、性能指标、编译验证、数据库结构
- 27 个测试全部通过
- 性能指标达标
- 提交记录追踪
- acceptance.md: 验收标准、测试结果、遗留问题
- 20/33 任务完成
- 部分验收通过
更新全局文档:
- devflow/index.md: 新增 phase1-infrastructure 项目索引
- devflow/glossary/CONTEXT.md: 新增 8 个术语和 4 条业务规则
Progress: 20/33 tasks completed (61%)
|
2026-06-23 14:44:43 +08:00 |
|
zhuyongxin
|
48132d297d
|
feat(phase1): 完成 Repository 测试和 Redis 会话管理
Task 2: 完成 Repository 层测试
- 实现 CaseLibraryRepositoryTest (6 个测试)
- 实现 ApiDocumentRepositoryTest (7 个测试)
- 所有 Repository 测试通过 (19/19)
Task 3: 完成 Redis 会话管理
- 创建 SessionContext 和 ToolCall 数据类
- 创建 SessionManager 接口
- 实现 RedisSessionManager (基于 Redis 的会话管理)
- 创建 SessionConfiguration (Redis 序列化配置)
- 实现 RedisSessionManagerTest (8 个测试全部通过)
测试结果:
- ApiDocumentRepositoryTest: 7/7 通过
- CaseLibraryRepositoryTest: 6/6 通过
- DiagnosisRecordRepositoryTest: 6/6 通过
- RedisSessionManagerTest: 8/8 通过
- 总计: 27/27 测试通过
功能特性:
- 会话创建、查询、更新、删除
- 会话过期时间管理
- 工具调用记录追踪
- 会话状态管理
- 基于 Redis 的分布式会话存储
Progress: 20/33 tasks completed (61%)
|
2026-06-23 14:38:17 +08:00 |
|
zhuyongxin
|
1de1e98ef8
|
feat(phase1): 完成 JPA 实体类和 Repository 层实现
- 创建 3 个 JPA 实体类:DiagnosisRecord、CaseLibrary、ApiDocument
- 创建 3 个 Repository 接口,实现基础 CRUD 和自定义查询方法
- 实现 DiagnosisRecordRepository 单元测试(6 个测试全部通过)
- 修复 Hibernate schema 验证问题(枚举类型使用 VARCHAR)
- 更新 application.yml,添加完整的数据库和 Redis 配置
- 更新 OpenSpec tasks.md,标记已完成任务(12/33)
测试结果:
- DiagnosisRecordRepositoryTest: 6/6 通过
- 编译成功,无错误
Progress: 12/33 tasks completed
|
2026-06-23 14:30:35 +08:00 |
|
zhuyongxin
|
60be51f4a5
|
docs: 重构文档结构,分离学习笔记和 MVP 架构设计
**变更概述:**
- 将 MVP 架构设计文档独立到项目根目录 `mvp/`
- 整理 `docs/` 为纯学习和分析文档目录
- 按类型分类:learning(学习)、analysis(分析)、reports(报告)、guides(指南)
**目录结构:**
```
mvp/ # MVP 架构设计(独立)
├── README.md # 数据库设计总览
├── architecture/ # 架构文档
│ ├── agent-architecture-mvp.md
│ ├── implementation-plan.md
│ └── ...
└── tables/ # 数据表设计
docs/ # 学习和分析文档
├── learning/ # 学习笔记(00-08 编号)
├── analysis/ # 分析笔记 + 重构计划
├── reports/ # 临时报告
└── guides/ # 指南文档
```
**详细变更:**
- docs/README.md → mvp/README.md(数据库设计入口)
- docs/architecture/ → mvp/architecture/(架构设计)
- docs/tables/ → mvp/tables/(数据表设计)
- docs/学习笔记-*.md → docs/learning/07-*.md, 08-*.md
- docs/项目学习路径.md → docs/learning/00-*.md
- docs/功能分析报告.md → docs/analysis/
- docs/修复报告-*.md → docs/reports/
- docs/日志配置*.md → docs/guides/ 或 docs/reports/
- docs/design/ → docs/analysis/(问题分析和重构计划)
|
2026-06-23 14:14:51 +08:00 |
|
zhuyongxin
|
caef477cec
|
Merge branch 'emdash/lemon-shrimps-bake-7q6xl' into refactor/rag-chunking-strategy
# Conflicts:
# AGENTS.md
# CLAUDE.md
# src/main/resources/application.yml
|
2026-06-23 11:06:34 +08:00 |
|
zhuyongxin
|
a3d806ed68
|
chore: 添加 .claude/settings.local.json 到 .gitignore
|
2026-06-23 11:00:37 +08:00 |
|
zhuyongxin
|
3f15778b28
|
docs: 添加 Phase 1 完整实施计划和 OpenSpec
- 添加项目级 CLAUDE.md 和 AGENTS.md 配置
- 添加完整实施计划(docs/architecture/implementation-detail.md)
- 创建 OpenSpec phase-1-infrastructure:
- proposal.md: 需求和方案
- design.md: 架构设计
- specs/functional-specs.md: 功能规格
- tasks.md: 21 个任务清单
- decisions.md: grill 阶段决策记录
- .commit: 标记为 Committed OpenSpec
OpenSpec 已通过 sm-flow 完整流程(clarify → context → propose → grill → specify → audit → commit)
|
2026-06-23 10:58:11 +08:00 |
|
zhuyongxin
|
5ddb7a6d93
|
feat(phase1): 完成基础设施搭建初步工作
- 添加 JPA/Flyway/Redis 依赖到 pom.xml
- 创建 3 个 Flyway 迁移脚本(diagnosis_record/case_library/api_document)
- 创建枚举类(FaultCategory/DiagnosisStatus/SourceType)
- 配置 MySQL + Redis 连接(application.yml)
状态:数据库表脚本就绪,等待数据库创建后验证
|
2026-06-23 10:53:24 +08:00 |
|
zhuyongxin
|
429413fe64
|
docs: 完成 MVP 架构设计文档
- 数据库设计:3张核心表 (diagnosis_record/case_library/api_document)
- Agent架构:4 Agent协作 (Supervisor/Planner/Executor/Verifier)
- 意图识别:L0正则+L1小模型Agent分层
- RAG两层加载:L1预加载通用知识 + L2按需加载具体文档
- Skill体系:/diagnose-by-orderid 标准化诊断流程
- Harness控制:5 Gates + 中断机制
- 会话管理:Redis临时存储 + 扩展方案
- 闭环机制:用户反馈 → BadCase → 优化
- 实施规划:3阶段13天
|
2026-06-22 18:47:00 +08:00 |
|
zhuyongxin
|
d4b5015beb
|
commit
|
2026-05-29 21:38:16 +08:00 |
|
zhuyongxin
|
80eada415d
|
commit
|
2026-04-30 11:19:46 +08:00 |
|
zhuyongxin
|
0671ad8bab
|
first commit
|
2026-04-30 11:16:12 +08:00 |
|