Files
SuperBizAgent-java/mvp/architecture/data-model.md
T

189 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 数据模型总览
**更新日期**:2026-07-10
**状态**:当前可运行架构
## 1. 定位
本文从架构角度说明当前 MVP 的核心数据模型。详细字段以 Flyway migration、实体类和 `mvp/tables/` 为准。
核心数据分三组:
- 会话与诊断 Trace:`chat_session`、`diagnosis_run`、`agent_step`、`tool_invocation`
- 知识库:`api_document`、`knowledge_domain`、Milvus/Zilliz metadata
- 反馈沉淀:`case_library`
`diagnosis_session` 仍保留为历史兼容和回滚表,不再是新执行写入的主模型。
## 2. 总体关系
```mermaid
erDiagram
chat_session ||--o{ diagnosis_run : owns
diagnosis_run ||--o{ agent_step : has
diagnosis_run ||--o{ tool_invocation : has
diagnosis_run ||--o| case_library : creates_when_useful
api_document ||--o{ milvus_chunk : indexed_as
knowledge_domain ||--o{ api_document : groups
chat_session {
bigint id
varchar session_id
varchar status
int message_pair_count
datetime last_active_at
datetime expires_at
}
diagnosis_run {
bigint id
varchar run_id
varchar session_id
text query
varchar status
varchar agent_flow
longtext answer
json self_evaluation
varchar feedback
}
agent_step {
bigint id
varchar session_id
varchar run_id
int step_index
varchar agent_name
text model_input
text model_output
boolean has_tool_call
}
tool_invocation {
bigint id
varchar session_id
varchar run_id
bigint step_id
varchar tool_name
json input_params
text output_preview
json retrieval_details
}
case_library {
bigint id
varchar case_id
varchar diagnosis_id
varchar source_type
varchar fault_category
text root_cause
text solution
}
```
说明:Milvus/Zilliz collection 不是 MySQL 表,图中的 `milvus_chunk` 是逻辑模型。
## 3. 会话与运行模型
### chat_session
`chat_session` 是会话目录表,保存 `sessionId` 的元数据:
| 字段 | 说明 |
|---|---|
| `session_id` | 外部会话 ID,用于多轮上下文和 run 列表 |
| `status` | 会话目录状态 |
| `message_pair_count` | Redis 对话轮次数快照 |
| `last_active_at` | 最近活跃时间 |
| `expires_at` | 可为空的目录 TTL 元数据 |
它不保存完整对话历史,正文消息仍由 Redis `SessionContext.messageHistory` 管理。
### diagnosis_run
`diagnosis_run` 是一次可回放诊断执行的主记录:
| 字段 | 说明 |
|---|---|
| `run_id` | 运行 ID,格式为 `run-` + UUID |
| `session_id` | 所属 `chat_session.session_id` |
| `query` | 本次 Chat 问题或 AIOps 告警摘要 |
| `status` | 本次执行状态 |
| `agent_flow` | `CHAT` / `AI_OPS` |
| `answer` | 本次运行最终答复或告警报告 |
| `self_evaluation` | 本次运行的 rule/verifier/aiops 自评估容器 |
| `feedback` | 本次运行的用户反馈 |
同一个 `sessionId` 可以有多个 `runId`。Trace、反馈、评测和案例沉淀都应优先使用 `runId`,避免多轮同 session 下的数据混合。
## 4. Trace 明细模型
### agent_step
`agent_step` 记录模型调用步骤。新写入同时保留 `session_id` 和 `run_id`,其中 `run_id` 是回放边界。Trace 页面和评测应先按 `run_id` 隔离取数,展示顺序以 Trace API 返回顺序为准。
### tool_invocation
`tool_invocation` 记录显式工具调用事实。`retrieval_details.evidence_refs` 是 Chat 证据链路的关键字段:
```json
{
"evidence_status": "supported",
"evidence_refs": [
{
"raw_path": "$.logs[0]",
"text": "2026-07-08 23:05:28 ERROR order-service HikariPool-1 - Connection is not available..."
}
]
}
```
`$.no_evidence` 只表示“本次工具查询未检索到匹配证据”,不能被解释为“问题不存在”或“根因已排除”。
## 5. 反馈沉淀模型
`useful` 反馈会触发 `CaseLibraryService.createFromRun`。
当前自动映射:
| 字段 | 来源 |
|---|---|
| `case_id` | UUID |
| `diagnosis_id` | 新数据为 `diagnosis_run.run_id`;历史数据可能为 `diagnosis_session.session_id` |
| `source_type` | `AUTO` |
| `fault_category` | 当前默认 `GENERAL` |
| `title` | run query 前 100 字符 |
| `root_cause` | run answer |
| `solution` | run answer |
| `created_by` | `system` |
## 6. self_evaluation 结构
`diagnosis_run.self_evaluation` 是运行级 JSON 容器:
```json
{
"rule_evaluation": {},
"verifier_evaluation": {},
"aiops_rule_evaluation": {}
}
```
Chat 通常写入 `rule_evaluation` 和 `verifier_evaluation`;AIOps 写入 `aiops_rule_evaluation`。
## 7. 当前边界和后续
当前边界:
- `chat_session` 只存会话元数据,不存完整正文历史。
- `diagnosis_run` 存一次运行的长期审计状态。
- `agent_step.run_id` 和 `tool_invocation.run_id` 是 Trace、Verifier、Eval 的运行边界。
- 当前实现主要使用逻辑关联,不依赖数据库外键。
- `case_library.diagnosis_id` 是过渡字段,新值按 `run_id` 解释,旧值可能按 `session_id` 解释。
- `diagnosis_session` 只作为历史兼容和回滚表保留。
后续可增强:
1. 强化 `tool_invocation.step_id` 关联。
2. 将 Gatekeeper 规则配置化时的规则元数据保存为可审计版本。
3. 将 `case_library` 的 rootCause/solution 从完整 answer 中结构化抽取。