docs: reorganize MVP interview documentation

This commit is contained in:
aruo
2026-07-05 15:29:28 +08:00
parent b22f2d22c8
commit 88e0a6c944
51 changed files with 4352 additions and 1318 deletions
+70 -120
View File
@@ -1,147 +1,97 @@
# Architecture
# 面试版系统架构
## 系统分层
## 1. 系统分层
```text
API Layer
-> ChatController / DiagnosisTraceController
Agent Orchestration
-> ChatService / AiOpsService
Tools
-> lookupKnowledgeTool / queryLogs / queryMetrics / queryPrometheusAlerts
Persistence
-> diagnosis_session / agent_step / tool_invocation
Trace
-> GET /api/diagnosis/{sessionId}/trace
```mermaid
flowchart TB
API["API 层\nChatController / DiagnosisTraceController / SearchController"] --> Service["应用服务层\nChatService / AiOpsService / DiagnosisTraceService"]
Service --> Agent["Agent 编排层\nPlanner / Executor / Verifier / Supervisor"]
Agent --> Tools["工具层\nlookup_knowledge / query_logs / query_metrics / Prometheus"]
Tools --> RAG["RAG 检索\nL0 hint + VectorSearchService"]
RAG --> VectorStore["Spring AI VectorStore"]
RAG --> SDK["Milvus SDK fallback"]
Agent --> Trace["Trace 持久化"]
Tools --> Trace
Trace --> Session["diagnosis_session"]
Trace --> Step["agent_step"]
Trace --> Invocation["tool_invocation"]
Session --> TraceAPI["GET /api/diagnosis/{sessionId}/trace"]
Step --> TraceAPI
Invocation --> TraceAPI
```
## Chat 链路
## 2. Chat 链路
```mermaid
flowchart TD
User[User Question] --> ChatAPI[POST /api/chat]
ChatAPI --> Strategy[ChatService.executeChatWithStrategy]
Strategy --> Complexity{QuestionComplexity}
Complexity -->|simple| Single[ReactAgent]
Complexity -->|complex| Planner[Planner Agent]
Planner --> Executor[Executor Agent]
Executor --> Tools[Evidence Tools]
User["用户问题"] --> ChatAPI["POST /api/chat"]
ChatAPI --> Strategy["ChatService.executeChatWithStrategy"]
Strategy --> Complexity{"复杂问题?"}
Complexity -->|否| Single["单 ReactAgent 快速回答"]
Complexity -->|是| Planner["chat_planner"]
Planner --> Executor["chat_executor"]
Executor --> Tools["证据工具"]
Tools --> Executor
Executor --> Verifier[Verifier Agent]
Verifier --> Answer[Final Answer]
Answer --> Session[diagnosis_session]
Planner --> Steps[agent_step]
Executor --> Steps
Verifier --> Steps
Tools --> Invocations[tool_invocation]
Session --> Trace[GET /api/diagnosis/{sessionId}/trace]
Steps --> Trace
Invocations --> Trace
Executor --> Verifier["chat_verifier"]
Verifier --> Decision{"PASS / LOW_CONFID / REJECT"}
Decision --> Answer["最终答复"]
Planner --> Step["agent_step"]
Executor --> Step
Verifier --> Step
Tools --> Invocation["tool_invocation"]
Answer --> Session["diagnosis_session"]
```
关键代码:
讲解重点:
- `ChatController.chat(...)`
- `ChatService.executeChatWithStrategy(...)`
- `ChatService.executeChatComplex(...)`
- `AgentLoggingHook`
- `ToolInvocationRecorder`
- `DiagnosisTraceService.getTrace(...)`
- Planner 拆解问题和排查方向。
- Executor 必须通过工具收集证据。
- Verifier 只基于 `tool_trace_summary` 校验答案,不做新检索。
- Trace API 能回放模型步骤和工具证据。
## AIOps 链路
## 3. AIOps 链路
```mermaid
flowchart TD
Alert[Alert Payload or Empty Request] --> AiOpsAPI[POST /api/ai_ops]
AiOpsAPI --> SessionEvent[SSE session event]
AiOpsAPI --> AiOpsService[AiOpsService.executeAiOpsAnalysis]
AiOpsService --> PromptMode{Payload?}
PromptMode -->|yes| Targeted[PAYLOAD_TARGETED]
PromptMode -->|no| Discovery[AUTO_DISCOVERY]
Targeted --> Supervisor[ai_ops_supervisor]
Alert["告警 payload 或空请求"] --> API["POST /api/ai_ops"]
API --> AiOps["AiOpsService"]
AiOps --> Mode{"是否有 payload?"}
Mode -->|有| Targeted["PAYLOAD_TARGETED\n聚焦输入告警"]
Mode -->|无| Discovery["AUTO_DISCOVERY\n先发现活跃告警"]
Targeted --> Supervisor["ai_ops_supervisor"]
Discovery --> Supervisor
Supervisor --> Planner[planner_agent]
Supervisor --> Executor[executor_agent]
Planner --> Tools[Prometheus / Logs / Knowledge]
Supervisor --> Planner["planner_agent"]
Supervisor --> Executor["executor_agent"]
Planner --> Tools["Prometheus / 日志 / 知识库"]
Executor --> Tools
Tools --> Report[Alert Report]
Report --> Persist[diagnosis_session.answer]
Planner --> Steps[agent_step]
Executor --> Steps
Tools --> Invocations[tool_invocation]
Persist --> Trace[GET /api/diagnosis/{sessionId}/trace]
Steps --> Trace
Invocations --> Trace
Tools --> Report["告警分析报告"]
Report --> Eval["AiOpsRuleEvaluationService"]
Eval --> SelfEval["self_evaluation.aiops_rule_evaluation"]
```
关键代码:
讲解重点:
- `ChatController.aiOps(...)`
- `AIOpsRequest`
- `AiOpsService.resolveSessionId(...)`
- `AiOpsService.buildTaskPrompt(...)`
- `AiOpsService.hasAlertPayload(...)`
- `AiOpsService.persistFinalReport(...)`
- AIOps 有明确产品边界:有 payload 时必须聚焦该告警。
- payload 字段会生成 recommended `lookup_knowledge` query。
- 当前 AIOps 先用规则评估做质量门,后续再扩展 LLM Verifier。
## Trace 数据模型
## 4. Trace 数据模型
### `diagnosis_session`
| 表 | 作用 |
|---|---|
| `diagnosis_session` | 一次诊断的主记录:问题、状态、答案、自评估、反馈 |
| `agent_step` | Agent 模型调用记录:输入、输出、耗时、token、是否有工具调用 |
| `tool_invocation` | 工具调用事实:工具名、入参、输出预览、检索层、相关性、成功状态 |
记录一次诊断会话的主信息:
## 5. 为什么 Trace 是核心
- `session_id`
- `query`
- `status`
- `agent_flow`
- `total_duration_ms`
- `total_token_count`
- `step_count`
- `tool_call_count`
- `answer`
- `self_evaluation`
- `feedback`
故障诊断系统的风险不只是“答案错”,还包括“答案看起来对但无法解释”。这个项目把执行链路拆成 session、step、tool 三层,让面试官可以看到:
### `agent_step`
- 模型为什么这么答。
- 调了哪些工具。
- 工具返回了什么证据。
- Verifier 如何判断答案可信度。
- 用户反馈如何回写到同一个 session。
记录 Agent 模型调用过程:
这就是它区别于普通 Chatbot 的地方。
- `session_id`
- `step_index`
- `agent_name`
- `model_input`
- `model_output`
- `thought`
- `has_tool_call`
- `duration_ms`
- `token_count`
### `tool_invocation`
记录真实工具调用:
- `session_id`
- `tool_name`
- `input_params`
- `output_preview`
- `output_length`
- `retrieval_layer`
- `relevance_level`
- `duration_ms`
- `success`
- `error_message`
## 为什么 trace 是核心
Agent 系统的风险不只是“答案错”,还包括“答案看起来对但无法解释”。这个项目把执行链路拆成 session、step、tool 三层,让面试官可以看到:
- 模型为什么这么答
- 调了哪些工具
- 工具返回了什么证据
- Verifier 如何判断答案可信度
- 用户反馈如何回写到同一个 session
这就是项目区别于普通 Chatbot 的地方。