diff --git a/docs/dev-log.md b/docs/dev-log.md index 2475604..30c7ffd 100644 --- a/docs/dev-log.md +++ b/docs/dev-log.md @@ -1661,3 +1661,46 @@ cd ~/devops/aiops - 快捷操作接入真实数据("分析今日告警" -> 拉取 alertApi 注入 prompt 上下文) - 多会话支持(当前是单用户单历史,可扩展为多个命名会话切换) - 前端组件拆分候选仍未变: TopologyView.tsx(576)、ExcelServerImport.tsx(549)、DomainManager.tsx(492) + + +## 2026-06-18 04:10 自动推进(cron)— AIOps 智能助手快捷操作接入真实平台数据 + +- **任务**: 将 AIOps 智能助手的 4 个快捷操作从"仅填入固定文本"升级为"自动拉取真实平台数据 + 注入 LLM 上下文 + 自动发送"——让助手从通用聊天机器人变为真正能感知平台状态的 AIOps 助手 +- **背景**: 上次 cron 完成了对话历史持久化,dev-log 下一步建议第 2 项明确列出"快捷操作接入真实数据(分析今日告警 -> 拉取 alertApi 注入 prompt 上下文)"。此前快捷操作只做 `setInput(action.prompt)`,用户拿到的是空泛模板(如"分析当前系统的性能瓶颈"),LLM 无任何平台数据可分析,回答只能是泛泛而谈。本次为每个快捷操作绑定真实数据加载器 +- **实现(纯前端,单文件改动)**: + - `frontend/src/components/aiops/AIOpsAssistant.tsx`(+106/-14 行,529→612 行): + - 新增 3 个上下文加载器(纯 async 函数): + - `loadAlertsContext()` — 调 `alertApi.getAlerts({page_size:20})`,格式化为紧凑告警列表(severity/status/rule_name/target/value/started_at),统计 firing 数量,截断前 15 条 + - `loadMetricsContext()` — 调 `agentApi.getLatest()`,格式化主机实时指标(hostname/CPU%/内存%/核数/上报时间),自动识别高负载主机(CPU或内存≥80%)并高亮汇总 + - `loadReportContext()` — `Promise.all` 并发拉取 dashboard stats + recent-alerts + recent-releases,生成平台概览(服务器/K8s/告警/流水线/成本)+ 最近告警 + 最近发布 + - 新增 `QuickAction` 接口(contextLoader 可选,支持未来无数据加载的纯文本操作),quickActions 数组加类型注解 + - 4 个快捷操作绑定 contextLoader + 优化 prompt 文案("以下"/"基于以下数据"引导 LLM 引用注入数据): + - 分析今日告警 → loadAlertsContext + - 性能瓶颈分析 → loadMetricsContext + - 生成运维报告 → loadReportContext + - 资源优化建议 → loadMetricsContext + - 重构: 提取 `sendMessage(text)` 核心函数(原 handleSend 内联逻辑),handleSend 改为薄包装(读 input → sendMessage) + - 新增 `handleQuickAction(action)`: 已配置且 enabled 时 → 显示 spinner → 拉取数据(失败注入错误说明而非中断)→ 拼接 `prompt + 【平台实时数据】 + context` → 自动 sendMessage;未配置或无 loader 时 → 回退到 setInput(保持原行为) + - 新增 `contextLoading` state(记录哪个快捷操作正在拉数据),按钮在拉取中显示 Loader2 spinner + 全局禁用其他快捷操作 + - UI: 已配置状态下快捷操作按钮右侧显示淡绿色"实时"小徽章(提示此按钮会拉取实时数据,区别于纯文本填充) +- **字段映射验证(curl + sqlite3 对照真实 API)**: + - `/alerts` → `{list:[{rule_name,severity,status,target,value,started_at}]}` ✓ + - `/agent/latest` → `[{hostname,cpu_usage,cpu_cores,mem_total,mem_used,mem_usage,report_time}]`(直接数组,非 {list,total})✓ + - `/dashboard/stats` → `{server_stats,k8s_stats,alert_stats,pipeline_stats,cost_stats}` ✓ + - `/dashboard/recent-alerts` + `/recent-releases` → 直接数组 ✓ +- **结果**: + - 后端无需改动(复用现有 API);前端 npx tsc --noEmit 零错误;npm run build 通过(3.21s) + - ./run.sh restart 后 /health 正常 + 前端 200 + - 浏览器验证(/ai-assistant): + - 未配置态: 点"分析今日告警" → 输入框填入 prompt(回退行为正常);无"实时"徽章 + - 配置态(临时启用 ollama dummy): Header 显示"qwen2.5:7b"徽章;4 个快捷操作显示"实时"徽章 + - 点"分析今日告警" → spinner → 用户消息出现: prompt + "【平台实时数据】\n共 20 条告警(firing 6 条),前 15 条:\n1. [info|resolved] CPU 使用率严重告警 → 目标:server-033 值:72.86..."(真实告警数据成功注入) + - 自动发送 → LLM 调用 localhost:11434 失败(无 ollama) → 红色错误气泡"LLM 服务连接失败...connection refused"(优雅降级,无崩溃) + - console 零 JS 错误 + - 测试后清理: 清空 chat_histories + 将 LLM config enabled 重置为 false(系统恢复干净状态) + - git push 成功 (commit 32cd3b8) +- **下一步建议**: + - Chat 流式输出(SSE/streaming)—— 长报告/长分析当前需等完整响应才显示,流式可显著提升体验(需后端 streaming 代理 + 前端 EventSource/fetch-stream 消费) + - 快捷操作可扩展更多数据源: 容量预测(接入 agent history 时序数据)、K8s 集群健康(k8sApi)、云账单分析(billingApi) + - 用户消息气泡中【平台实时数据】块较长,可考虑折叠展示(默认收起,点击展开)提升可读性 + - 前端组件拆分候选仍未变: TopologyView.tsx(576)、ExcelServerImport.tsx(549)、DomainManager.tsx(492)