diff --git a/pom.xml b/pom.xml
index 6ee1dda..41eadfd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -144,6 +144,45 @@
org.springframework.ai
spring-ai-starter-mcp-client-webflux
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+ com.mysql
+ mysql-connector-j
+ runtime
+
+
+
+
+ org.flywaydb
+ flyway-core
+
+
+ org.flywaydb
+ flyway-mysql
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ com.h2database
+ h2
+ test
+
diff --git a/src/main/java/com/superbiz/agent/domain/enums/DiagnosisStatus.java b/src/main/java/com/superbiz/agent/domain/enums/DiagnosisStatus.java
new file mode 100644
index 0000000..adcaf11
--- /dev/null
+++ b/src/main/java/com/superbiz/agent/domain/enums/DiagnosisStatus.java
@@ -0,0 +1,21 @@
+package com.superbiz.agent.domain.enums;
+
+/**
+ * 诊断状态枚举
+ */
+public enum DiagnosisStatus {
+ PENDING("待处理"),
+ RUNNING("诊断中"),
+ SUCCESS("成功"),
+ FAILED("失败");
+
+ private final String description;
+
+ DiagnosisStatus(String description) {
+ this.description = description;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+}
diff --git a/src/main/java/com/superbiz/agent/domain/enums/FaultCategory.java b/src/main/java/com/superbiz/agent/domain/enums/FaultCategory.java
new file mode 100644
index 0000000..8bde91f
--- /dev/null
+++ b/src/main/java/com/superbiz/agent/domain/enums/FaultCategory.java
@@ -0,0 +1,25 @@
+package com.superbiz.agent.domain.enums;
+
+/**
+ * 故障类别枚举
+ */
+public enum FaultCategory {
+ EXTERNAL_API("外部接口调用失败"),
+ INTERNAL_ERROR("系统内部错误"),
+ DATABASE("数据库问题"),
+ CACHE("缓存问题"),
+ NETWORK("网络问题"),
+ THREAD("线程问题"),
+ MEMORY("内存问题"),
+ CONFIG("配置问题");
+
+ private final String description;
+
+ FaultCategory(String description) {
+ this.description = description;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+}
diff --git a/src/main/java/com/superbiz/agent/domain/enums/SourceType.java b/src/main/java/com/superbiz/agent/domain/enums/SourceType.java
new file mode 100644
index 0000000..eb7de75
--- /dev/null
+++ b/src/main/java/com/superbiz/agent/domain/enums/SourceType.java
@@ -0,0 +1,19 @@
+package com.superbiz.agent.domain.enums;
+
+/**
+ * 案例来源类型枚举
+ */
+public enum SourceType {
+ AUTO("自动生成"),
+ MANUAL("人工录入");
+
+ private final String description;
+
+ SourceType(String description) {
+ this.description = description;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 1076922..89b4894 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -6,6 +6,69 @@ server:
enabled: true
force: true
+# 数据库配置
+spring:
+ datasource:
+ url: jdbc:mysql://119.29.78.52:33306/superbiz_agent?useUnicode=true&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
+ username: root
+ password: '!Fucker123..'
+ driver-class-name: com.mysql.cj.jdbc.Driver
+
+ jpa:
+ hibernate:
+ ddl-auto: validate
+ show-sql: true
+ properties:
+ hibernate:
+ format_sql: true
+ dialect: org.hibernate.dialect.MySQL8Dialect
+
+ flyway:
+ enabled: true
+ baseline-on-migrate: true
+ locations: classpath:db/migration
+
+ data:
+ redis:
+ host: 119.29.78.52
+ port: 6379
+ password: ''
+ database: 0
+ timeout: 3000ms
+ lettuce:
+ pool:
+ max-active: 8
+ max-idle: 8
+ min-idle: 0
+
+ # Spring AI Alibaba DashScope 配置
+ ai:
+ dashscope:
+ api-key: ${DASHSCOPE_API_KEY:your-api-key-here}
+ chat:
+ options:
+ timeout: 180000
+ retry:
+ max-attempts: 3
+ backoff:
+ initial-interval: 2000
+ multiplier: 2
+ max-interval: 10000
+
+ # Spring AI MCP 客户端配置
+ mcp:
+ client:
+ enabled: true
+ name: tencent-mcp-server
+ version: 1.0.0
+ request-timeout: 60s
+ type: ASYNC
+ sse:
+ connections:
+ tencent-cls:
+ url: https://mcp-api.tencent-cloud.com
+ sse-endpoint: /sse/92XXXXXXXXb4
+
file:
upload:
path: ./uploads
@@ -19,36 +82,6 @@ milvus:
database: default
timeout: 10000
-# Spring AI Alibaba DashScope 配置
-spring:
- ai:
- dashscope:
- api-key: ${DASHSCOPE_API_KEY:your-api-key-here} # 从环境变量读取或使用默认值
- chat:
- options:
- timeout: 180000 # 超时时间180秒(3分钟)
- retry:
- max-attempts: 3 # 最大重试次数
- backoff:
- initial-interval: 2000 # 初始重试间隔2秒
- multiplier: 2 # 重试间隔倍数
- max-interval: 10000 # 最大重试间隔10秒
-
- # Spring AI MCP 客户端配置
- # 如果使用mock数据,请注释这部分内容
- mcp:
- client:
- enabled: true
- name: tencent-mcp-server
- version: 1.0.0
- request-timeout: 60s
- type: ASYNC
- sse:
- connections:
- tencent-cls:
- url: https://mcp-api.tencent-cloud.com
- sse-endpoint: /sse/92XXXXXXXXb4 # 完整的SSE端点路径
-
# 阿里云 DashScope Embedding API 配置
dashscope:
api:
diff --git a/src/main/resources/db/migration/V001__create_diagnosis_record.sql b/src/main/resources/db/migration/V001__create_diagnosis_record.sql
new file mode 100644
index 0000000..20c1769
--- /dev/null
+++ b/src/main/resources/db/migration/V001__create_diagnosis_record.sql
@@ -0,0 +1,56 @@
+-- V001: 创建诊断记录表
+-- 核心业务表,存储每次诊断任务的完整记录
+-- 设计理念:兼容多种故障类型(外部接口、内部错误、数据库、缓存等)
+
+CREATE TABLE diagnosis_record (
+ -- 主键
+ id BIGINT PRIMARY KEY AUTO_INCREMENT,
+ diagnosis_id VARCHAR(64) UNIQUE NOT NULL COMMENT '诊断唯一ID(UUID)',
+
+ -- 关联信息
+ session_id VARCHAR(64) COMMENT '会话ID(关联Redis)',
+ business_id VARCHAR(128) COMMENT '业务标识(订单号/请求ID/线程ID/任务ID...)',
+ trace_id VARCHAR(64) COMMENT '链路追踪ID',
+
+ -- 故障分类(泛化设计)
+ fault_category VARCHAR(32) COMMENT '故障类别(EXTERNAL_API/INTERNAL_ERROR/DATABASE/CACHE/NETWORK/THREAD/MEMORY/CONFIG)',
+ fault_source VARCHAR(128) COMMENT '故障源(省份/服务名/类名/数据库实例...)',
+ fault_target VARCHAR(256) COMMENT '故障目标(接口URL/方法名/SQL语句/缓存键...)',
+
+ -- 错误信息(通用)
+ error_code VARCHAR(64) COMMENT '错误码(业务错误码/HTTP状态码/异常类名)',
+ error_message TEXT COMMENT '错误消息',
+ stack_trace TEXT COMMENT '堆栈信息(内部错误时记录)',
+
+ -- 诊断结果
+ problem_type VARCHAR(32) COMMENT '问题类型(参数/网络/权限/逻辑/空指针/死锁...)',
+ root_cause TEXT COMMENT '根因分析',
+ solution TEXT COMMENT '修复方案',
+ report_markdown TEXT COMMENT '完整诊断报告(Markdown格式)',
+
+ -- 评估指标
+ status VARCHAR(16) DEFAULT 'PENDING' COMMENT '诊断状态(PENDING/RUNNING/SUCCESS/FAILED)',
+ confidence INT COMMENT '诊断置信度(0-100)',
+ duration INT COMMENT '诊断耗时(毫秒)',
+
+ -- 用户反馈
+ feedback VARCHAR(16) COMMENT '用户反馈(useful/not_useful/null)',
+
+ -- 调试字段
+ tool_calls JSON COMMENT '工具调用记录',
+
+ -- 元数据
+ created_by VARCHAR(64) COMMENT '创建人',
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+
+ -- 索引
+ INDEX idx_business_id (business_id),
+ INDEX idx_trace_id (trace_id),
+ INDEX idx_session_id (session_id),
+ INDEX idx_fault_category (fault_category),
+ INDEX idx_fault_source_target (fault_source, fault_target(100)),
+ INDEX idx_error_code (error_code),
+ INDEX idx_created_at (created_at),
+ INDEX idx_status (status)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='诊断记录表(v2.0 泛化版)';
diff --git a/src/main/resources/db/migration/V002__create_case_library.sql b/src/main/resources/db/migration/V002__create_case_library.sql
new file mode 100644
index 0000000..49876ad
--- /dev/null
+++ b/src/main/resources/db/migration/V002__create_case_library.sql
@@ -0,0 +1,41 @@
+-- V002: 创建案例库表
+-- 知识沉淀表,存储高质量诊断案例,支持相似案例推荐
+-- 设计理念:质量过滤,只存储成功诊断 + 用户反馈有用的案例
+
+CREATE TABLE case_library (
+ -- 主键
+ id BIGINT PRIMARY KEY AUTO_INCREMENT,
+ case_id VARCHAR(64) UNIQUE NOT NULL COMMENT '案例唯一ID(UUID)',
+
+ -- 来源关联
+ diagnosis_id VARCHAR(64) COMMENT '关联诊断记录(可选,人工录入时为空)',
+ source_type VARCHAR(16) DEFAULT 'AUTO' COMMENT '来源类型(AUTO:自动生成/MANUAL:人工录入)',
+
+ -- 案例分类
+ fault_category VARCHAR(32) COMMENT '故障类别(EXTERNAL_API/INTERNAL_ERROR/DATABASE...)',
+ fault_source VARCHAR(128) COMMENT '故障源(省份/服务名/类名...)',
+ fault_target VARCHAR(256) COMMENT '故障目标(接口URL/方法名/SQL...)',
+ error_code VARCHAR(64) COMMENT '错误码',
+
+ -- 案例内容
+ title VARCHAR(256) NOT NULL COMMENT '案例标题(简短描述)',
+ root_cause TEXT NOT NULL COMMENT '根因分析',
+ solution TEXT NOT NULL COMMENT '解决方案',
+
+ -- 简单统计
+ reference_count INT DEFAULT 0 COMMENT '引用次数(被推荐的次数)',
+
+ -- 元数据
+ created_by VARCHAR(64) COMMENT '创建人',
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+
+ -- 索引
+ INDEX idx_fault_category (fault_category),
+ INDEX idx_error_code (error_code),
+ INDEX idx_fault_source (fault_source),
+ INDEX idx_fault_target (fault_target(100)),
+ INDEX idx_diagnosis_id (diagnosis_id),
+ INDEX idx_reference_count (reference_count),
+ INDEX idx_created_at (created_at)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='案例库表(MVP版)';
diff --git a/src/main/resources/db/migration/V003__create_api_document.sql b/src/main/resources/db/migration/V003__create_api_document.sql
new file mode 100644
index 0000000..cbb5aa5
--- /dev/null
+++ b/src/main/resources/db/migration/V003__create_api_document.sql
@@ -0,0 +1,38 @@
+-- V003: 创建文档元数据表
+-- 文档管理表,管理接口文档的元信息
+-- 设计理念:MySQL 负责元数据管理,Milvus 负责内容检索,通过 doc_id 关联
+
+CREATE TABLE api_document (
+ -- 主键
+ id BIGINT PRIMARY KEY AUTO_INCREMENT,
+ doc_id VARCHAR(64) UNIQUE NOT NULL COMMENT '文档唯一ID(UUID),关联Milvus',
+
+ -- 文档分类
+ fault_category VARCHAR(32) DEFAULT 'EXTERNAL_API' COMMENT '文档类别',
+ fault_source VARCHAR(128) COMMENT '文档归属(省份/服务名)',
+ api_name VARCHAR(128) COMMENT '接口名称',
+ version VARCHAR(32) DEFAULT 'v1.0' COMMENT '文档版本',
+
+ -- 文件信息
+ file_name VARCHAR(256) NOT NULL COMMENT '原始文件名',
+ file_path VARCHAR(512) COMMENT '文件存储路径',
+ file_hash VARCHAR(64) COMMENT '文件MD5 hash(用于去重)',
+ file_size BIGINT COMMENT '文件大小(字节)',
+
+ -- 索引状态
+ status VARCHAR(16) DEFAULT 'PENDING' COMMENT '索引状态(PENDING/PROCESSING/INDEXED/FAILED)',
+ chunk_count INT DEFAULT 0 COMMENT '分块数量',
+ error_message TEXT COMMENT '失败原因',
+
+ -- 时间字段
+ indexed_at DATETIME COMMENT '索引完成时间',
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+
+ -- 索引
+ UNIQUE INDEX uk_file_hash (file_hash),
+ INDEX idx_doc_id (doc_id),
+ INDEX idx_fault_source (fault_source),
+ INDEX idx_status (status),
+ INDEX idx_created_at (created_at)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文档元数据表(MVP版)';