98 lines
3.5 KiB
Markdown
98 lines
3.5 KiB
Markdown
# 面试版系统架构
|
|
|
|
## 1. 系统分层
|
|
|
|
```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
|
|
```
|
|
|
|
## 2. Chat 链路
|
|
|
|
```mermaid
|
|
flowchart TD
|
|
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["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"]
|
|
```
|
|
|
|
讲解重点:
|
|
|
|
- Planner 拆解问题和排查方向。
|
|
- Executor 必须通过工具收集证据。
|
|
- Verifier 只基于 `tool_trace_summary` 校验答案,不做新检索。
|
|
- Trace API 能回放模型步骤和工具证据。
|
|
|
|
## 3. AIOps 链路
|
|
|
|
```mermaid
|
|
flowchart TD
|
|
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 / 日志 / 知识库"]
|
|
Executor --> Tools
|
|
Tools --> Report["告警分析报告"]
|
|
Report --> Eval["AiOpsRuleEvaluationService"]
|
|
Eval --> SelfEval["self_evaluation.aiops_rule_evaluation"]
|
|
```
|
|
|
|
讲解重点:
|
|
|
|
- AIOps 有明确产品边界:有 payload 时必须聚焦该告警。
|
|
- payload 字段会生成 recommended `lookup_knowledge` query。
|
|
- 当前 AIOps 先用规则评估做质量门,后续再扩展 LLM Verifier。
|
|
|
|
## 4. Trace 数据模型
|
|
|
|
| 表 | 作用 |
|
|
|---|---|
|
|
| `diagnosis_session` | 一次诊断的主记录:问题、状态、答案、自评估、反馈 |
|
|
| `agent_step` | Agent 模型调用记录:输入、输出、耗时、token、是否有工具调用 |
|
|
| `tool_invocation` | 工具调用事实:工具名、入参、输出预览、检索层、相关性、成功状态 |
|
|
|
|
## 5. 为什么 Trace 是核心
|
|
|
|
故障诊断系统的风险不只是“答案错”,还包括“答案看起来对但无法解释”。这个项目把执行链路拆成 session、step、tool 三层,让面试官可以看到:
|
|
|
|
- 模型为什么这么答。
|
|
- 调了哪些工具。
|
|
- 工具返回了什么证据。
|
|
- Verifier 如何判断答案可信度。
|
|
- 用户反馈如何回写到同一个 session。
|
|
|
|
这就是它区别于普通 Chatbot 的地方。
|
|
|