docs: update dev-log - AIOps智能助手接入真实LLM后端

This commit is contained in:
attacker committed 2026-06-18 02:13:23 +08:00
1 parent b8cab7ed0f
commit 6321886b69
1 file changed
+47
+47
View File
@@ -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) 属优雅降级组件(无后端)