4.4 KiB
Design Tradeoffs
1. 为什么要做 trace,而不是只返回答案
普通 Chatbot 只关注最终回答,但故障诊断更需要可审计性。一次诊断至少要回答三件事:
- 结论是什么
- 证据来自哪里
- 哪些步骤由哪个 Agent 完成
因此项目把一次会话拆成:
diagnosis_session:会话级摘要、最终答案、质量评估、反馈。agent_step:Agent 模型输入输出、耗时、token 和工具调用标记。tool_invocation:真实工具调用参数、输出预览、成功状态和检索元数据。
这个设计牺牲了一些实现复杂度,但换来了可回放、可调试、可演示。
2. 为什么 Chat 有 Verifier,AIOps 暂时没有
Chat 入口的问题更开放,用户可能要求复杂推理或跨领域结论,所以 Verifier 是必要的质量门。当前 Chat 链路通过 Planner -> Executor -> Verifier 固定流程,把 groundedness 和 facts checked 写入 self_evaluation。
AIOps 当前阶段先不加 Verifier,原因是:
- AIOps 刚完成从“自动跑告警”到“可追踪告警入口”的改造。
- 先要确认告警 payload、工具证据、最终报告和 trace 能闭环。
- AIOps Verifier 的规则不同于 Chat Verifier,需要检查告警 scope、证据覆盖和处置建议,不宜直接复用。
后续可以做 lightweight AIOps Verifier,检查报告是否聚焦 payload、是否引用工具证据、是否误展开无关告警。
3. 为什么 AIOps payload scope 先用 prompt 控制
运行验证发现:传入 HighCPUUsage/payment-service 后,Agent 仍可能把 mock Prometheus 返回的所有 active alerts 都展开分析。这个问题的本质是任务边界不清晰。
当前选择 prompt-level scope control:
- 有 payload:
PAYLOAD_TARGETED,最终报告围绕传入告警。 - 无 payload:
AUTO_DISCOVERY,先调用queryPrometheusAlerts自动发现告警。
没有先做 Java 侧过滤,是因为:
- 过滤工具结果会降低 Agent 发现关联风险的能力。
- 目前需要的是报告主线聚焦,而不是完全屏蔽上下文。
- Prompt 改动小,风险低,能保留 Agent 灵活性。
已验证结果:主报告有 HighCPUUsage/payment-service 的完整根因分析,HighMemoryUsage 和 SlowResponse 只作为相关风险出现。
4. 为什么用 tool_invocation 统计真实工具调用次数
早期可以通过 agent_step.hasToolCall 粗略判断是否调用工具,但它统计的是“哪些模型步骤包含工具调用”,不是“真实调用了几次工具”。
现在 tool_call_count 来自:
ToolInvocationRepository.countBySessionId(sessionId)
这样更符合 trace 语义:
- 一个 step 可能调用多个工具。
- 工具可能来自不同来源:知识库、日志、指标、Prometheus。
- 面试时可以把
tool_call_count和 trace 中返回的工具明细对上。
5. 为什么保留 mock Prometheus 和 mock CLS
面试 Demo 最怕不稳定。真实 Prometheus、日志平台和线上故障都有不可控因素,所以 MVP profile 保留 mock 工具:
prometheus.mock-enabled=truecls.mock-enabled=true
这样可以稳定复现:
HighCPUUsage/payment-serviceHighMemoryUsage/order-serviceSlowResponse/user-service- system-metrics、application-logs、database-slow-query 等日志证据
这不是逃避真实集成,而是把“Agent 编排和证据追踪”作为面试演示的主目标。
6. 为什么把面试材料单独放 interview/
mvp/ 是持续迭代现场,包含过程文档、验收记录和 runbook。面试材料的目标不同,它应该是可讲、可演示、可评估的展示层。
因此:
mvp/保留真实演进材料。devflow/保留决策沉淀。interview/只组织面试叙事和演示脚本。
这样后续继续做 AIOps Verifier、UI、更多工具集成时,不会污染面试讲稿。
7. 可以主动承认的限制
- AIOps 还没有 Verifier。
- Prompt-level scope control 不能做到强约束,只能通过 trace 和测试观察遵循情况。
- 当前 mock 数据适合 demo,不代表生产接入已经完成。
- Hikari 连接池已经加了短生命周期和 keepalive,但真实生产还需要按数据库 wait_timeout 和连接数预算调优。
主动讲清这些限制,反而能体现工程判断:先把可追踪闭环打通,再逐步增强质量门和生产可靠性。