From 6321886b694e176f96691d936dc587f418a5ae10 Mon Sep 17 00:00:00 2001 From: attacker Date: Thu, 18 Jun 2026 02:13:23 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20update=20dev-log=20-=20AIOps=E6=99=BA?= =?UTF-8?q?=E8=83=BD=E5=8A=A9=E6=89=8B=E6=8E=A5=E5=85=A5=E7=9C=9F=E5=AE=9E?= =?UTF-8?q?LLM=E5=90=8E=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/dev-log.md | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/docs/dev-log.md b/docs/dev-log.md index 9db5819..b92dbf7 100644 --- a/docs/dev-log.md +++ b/docs/dev-log.md @@ -1575,3 +1575,50 @@ cd ~/devops/aiops - DomainManager.tsx(492)/CloudAccountManager.tsx(471)/CloudBilling.tsx(467)/AgentMonitor.tsx(463)/ServerManager.tsx(462) 均为真实业务 CRUD 组件,可按 Dialog/Form 提取模式拆分(参考 AlertManager 拆分先例) - TraceManager.tsx(620)/GrafanaDashboard.tsx(616) 属优雅降级组件(无后端),拆分价值低于真实业务组件 - 后端 handler 全部 <400 行(最大 ldap_users.go 397),无需拆分 + + +## 2026-06-18 自动推进(cron)— AIOps 智能助手接入真实 LLM 后端 + +- **任务**: 将 AIOps 智能助手(AIOpsAssistant)从"占位死功能"升级为真实可用的 LLM 对话助手 — 新增后端 LLM 配置持久化 + OpenAI 兼容对话代理,前端全量重写接入真实后端 +- **背景**: 此前 cron 多次做组件拆分(重构),本次转向真实功能改进。AIOpsAssistant.tsx 是产品三大核心线之一(AI 智能运维)的主入口,但 llmProviders 为空数组、配置从不持久化(仅本地 state)、发消息只弹 toast.info('AI 功能需配置 LLM 接口') —— 完全不可用。本次构建完整 LLM 集成层,使助手在用户配置自己的 LLM 端点后真正可用 +- **实现(后端 4 步)**: + - backend/internal/models/llm.go — 新建: LLMConfig 模型(单行配置,类似 LDAPConfig)+ SaveLLMConfigRequest/ChatMessage/ChatRequest/ChatResponse struct。字段: provider/model/api_key/endpoint/temperature/max_tokens/system_prompt/enabled + - backend/internal/api/handlers/llm.go — 新建(~280行): LLMHandler + 4 个 handler + - GetLLMConfig — 读取配置,API Key 脱敏(仅保留后 4 位);未配置返回 configured:false 空表单 + - SaveLLMConfig — upsert 单行;脱敏值回传检测(api_key 含 **** 则保留原值,避免覆盖);返回脱敏后配置 + - Chat — OpenAI 兼容对话代理: 组装 system prompt(内置 AIOps 运维助手角色)-> POST {endpoint}/chat/completions -> 解析 choices[0].message.content;120s 超时;优雅错误处理(连接失败->502消息、HTTP非200->解析上游 error.message、未启用->400消息) + - TestLLMConnection — 发送 ping 消息验证连通性 + - resolveEndpoint — 按提供商补全默认 endpoint(deepseek/qwen/moonshot/ollama/openai) + - backend/internal/api/routes/routes.go — 注册路由 authorized.Group('/aiops'): GET/PUT /llm-config + POST /llm-config/test + POST /chat + - backend/pkg/database/database.go — AutoMigrate 添加 LLMConfig +- **实现(前端 2 步)**: + - frontend/src/services/api.ts — 用真实 aiApi(getConfig/saveConfig/testConnection/chat)替代 mock aiAssistantApi;导出 LLMConfigData/ChatResult 类型 + - frontend/src/components/aiops/AIOpsAssistant.tsx — 全量重写(418->~530行): + - LLM_PROVIDERS 真实列表: OpenAI/DeepSeek/通义千问(DashScope)/Moonshot/Ollama/自定义,各含默认 endpoint + 模型列表 + - 配置弹窗从后端加载(useEffect loadConfig);提供商切换自动填充默认 endpoint + 模型 + - 启用开关(Switch) + 测试连接按钮(Wifi 图标 + spinner)+ 保存反馈 toast + - 系统提示词输入框(留空用内置 AIOps 角色)+ Temperature/Max Tokens + - 真实对话: handleSend 发送最近 10 条上下文 -> aiApi.chat -> 显示回复;思考中 spinner;错误显示为红色气泡(isError)+ toast + - 状态徽章: Header 显示「未配置」(amber) 或「模型名」(emerald);聊天区显示「在线」/「离线」 + - 新对话按钮清空消息;快捷操作填充输入框 +- **结果**: + - 后端 go build 通过 + - 前端 npx tsc --noEmit 零错误;npm run build 通过(3.27s) + - ./run.sh restart 后 /health 正常 + 前端 200 + - API 验证(curl): + - GET /aiops/llm-config(空)-> {configured:false, ...} + - PUT /aiops/llm-config(sk-test1234...)-> 保存成功,返回脱敏 ******...cdef + - PUT 回传脱敏 key + 改 model -> 原始 key 保留(DB 验证 sk-test1...cdef 未变) + - POST /aiops/chat(未启用)-> {code:400, message:'LLM 服务未配置...'} + - 浏览器验证 /ai-assistant(AIOps智能-智能助手 菜单): + - 未配置态: Header「未配置」徽章 + 聊天区「离线」+ 空状态含「前往配置」按钮 + - 配置弹窗: 6 个提供商下拉 + 模型下拉 + API Key/Endpoint/系统提示词/Temperature(0.7)/MaxTokens,全部从后端正确加载 + - 保存流程: 启用开关 ON + 填 Key + 保存 -> 弹窗关闭 + Header 徽章变「gpt-4o」+ 聊天区「在线」 + - 对话流程: 发送消息 -> spinner「思考中」-> 后端代理到 OpenAI(本机无外网,30s i/o timeout)-> 红色错误气泡「LLM 服务连接失败...」优雅降级(无崩溃) + - console 零 JS 错误 + - git push 成功 (commit b8cab7e) +- **下一步建议**: + - AIOpsAssistant 现已可用,待用户配置可达的 LLM 端点(本地 Ollama 最易验证)即可真实对话 + - 可扩展: 1) Chat 流式输出(SSE/streaming)提升长回答体验 2) 快捷操作接入真实数据(分析今日告警 -> 拉取 alertApi 注入 prompt)3) 对话历史持久化(存 DB,刷新不丢失) + - 前端剩余接近上限的组件: TopologyView.tsx(576)、ExcelServerImport.tsx(549)、DomainManager.tsx(492)、K8sClusterDetail.tsx(489) —— 仍为拆分候选 + - TraceManager.tsx(620)/GrafanaDashboard.tsx(616) 属优雅降级组件(无后端)