当前位置: 首页 > article >正文

从 0 手写一个巡检调度系统(五):接入大模型实现巡检问题解读与修复建议

摘要在既有「架构巡检 → 问题落库」链路中第一次引入大模型能力对单条 issue 做「解读 修复建议」要求输出可解析的结构化 JSON 并落库可追溯。本文记录选型、配置、HTTP 客户端、Prompt 约束与踩坑便于同类业务快速复用。工程ArchitectureGovernance· Spring Boot 4.x · Java 17 · MyBatis-Plus一、业务目标与整体思路输入数据库中的巡检问题InspectionIssue及关联任务InspectionJob上的事实字段。输出固定 schema 的 JSON摘要、影响、可能原因、分步行动、待人工确认问题、置信度。工程要求不绑死某一云厂商采用OpenAI 兼容的POST /v1/chat/completions默认对接硅基流动国内站支持演示模式不调外网支持可选 HTTP 代理接境外 API 时使用。数据流巡检 Issue Job组装 facts JSONSystem User PromptRestClient chat/completions解析 choices.message.content规范化 JSONinspection_ai_suggestion二、依赖与配置2.1 依赖使用spring-boot-starter-web即可使用 Spring 6 的RestClient。2.2 硅基流动对接要点参考硅基流动文档在 Kilo Code 中配置硅基流动。项说明Base URL须包含/v1例如https://api.siliconflow.cn/v1API Key控制台密钥中文站与国际站账号不互通模型模型广场完整名称如Qwen/Qwen2.5-7B-Instruct2.3application.yml核心片段inspection:ai:enabled:truedemo-mode:falsebase-url:https://api.siliconflow.cn/v1chat-path:/chat/completionsapi-key:${SILICONFLOW_API_KEY:${INSPECTION_AI_API_KEY:}}model:Qwen/Qwen2.5-7B-Instructtemperature:0.3connect-timeout-ms:20000read-timeout-ms:180000json-object-response-format:trueproxy-host:proxy-port:0json-object-response-format为true时在请求体中携带response_format: { type: json_object }。若网关返回 400可改为false并在 Prompt 中强调仅输出 JSON。代理国内直连.cn通常留空改接 OpenAI 等境外地址时配置proxy-host/proxy-port如127.0.0.1/7890。2.4 演示模式使用spring.profiles.activedemo加载application-demo.yml并将其中inspection.ai.demo-mode设为true服务将使用本地拼接的 JSON 模拟大模型结果实现见AiIssueAssistantService.buildDemoOutputJson无需外网与密钥。2.5 Profilesiliconflowapplication-siliconflow.yml可与主配置合并用于脚本或文档中统一写profilessiliconflow启动字段与主配置应对齐。三、HTTP 客户端RestClient 可选代理使用独立命名的RestClient.BuilderBeanaiRestClientBuilder避免与业务其他 HTTP 客户端混用。需要代理时使用java.net.http.HttpClientProxySelectorJdkClientHttpRequestFactoryHTTPS 经 HTTP 代理走 CONNECT。ConfigurationEnableConfigurationProperties(AiProperties.class)publicclassAiClientConfig{Bean(nameaiRestClientBuilder)publicRestClient.BuilderaiRestClientBuilder(AiPropertiesproperties){returnRestClient.builder().requestFactory(buildRequestFactory(properties)).baseUrl(trimTrailingSlash(properties.getBaseUrl()));}privatestaticClientHttpRequestFactorybuildRequestFactory(AiPropertiesp){DurationconnectDuration.ofMillis(p.getConnectTimeoutMs());DurationreadDuration.ofMillis(p.getReadTimeoutMs());Stringhostp.getProxyHost();if(host!null!host.isBlank()p.getProxyPort()0){StringproxyHostjava.util.Objects.requireNonNull(host).trim();HttpClienthttpClientHttpClient.newBuilder().connectTimeout(connect).proxy(ProxySelector.of(newInetSocketAddress(proxyHost,p.getProxyPort()))).build();JdkClientHttpRequestFactoryfactorynewJdkClientHttpRequestFactory(httpClient);factory.setReadTimeout(read);returnfactory;}SimpleClientHttpRequestFactorysimplenewSimpleClientHttpRequestFactory();simple.setConnectTimeout(connect);simple.setReadTimeout(read);returnsimple;}privatestaticStringtrimTrailingSlash(Stringurl){if(urlnull||url.isEmpty()){returnurl;}returnurl.endsWith(/)?url.substring(0,url.length()-1):url;}}调用封装OpenAiChatClient对配置的chat-path发起 POST设置Authorization: Bearer api-key与Content-Type: application/json。ComponentpublicclassOpenAiChatClient{publicStringchatCompletions(StringrequestBodyJson){StringpathnormalizePath(properties.getChatPath());returnrestClientBuilder.build().post().uri(path).header(Authorization,Bearer properties.getApiKey()).header(Content-Type,application/json).body(requestBodyJson).retrieve().body(String.class);}privatestaticStringnormalizePath(Stringp){if(pnull||p.isEmpty()){return/chat/completions;}returnp.startsWith(/)?p:/p;}}源码路径src/main/java/org/example/inspect/config/AiClientConfig.java、.../ai/OpenAiChatClient.java。四、业务核心Prompt、请求体、解析与落库4.1 System Prompt在AiIssueAssistantService中通过常量SYSTEM_PROMPT约定仅根据「事实 JSON」与用户补充作答禁止编造事实中不存在的字段输出单个 JSON 对象不要 Markdown 代码块字段summary、why_it_matters、likely_causes、recommended_actions含step/action/owner_hint、questions_for_humans、confidence使用简体中文。4.2 事实与用户载荷buildFacts将InspectionIssue与可选的InspectionJob转为 JSON。buildUserPayload拼接「事实 JSON」与「用户补充说明」。4.3 请求体OpenAI 兼容JSONObjectrequestnewJSONObject();request.put(model,aiProperties.getModel());request.put(temperature,aiProperties.getTemperature());// messages: system SYSTEM_PROMPT, user userContentrequest.put(messages,messages);if(aiProperties.isJsonObjectResponseFormat()){JSONObjectfmtnewJSONObject();fmt.put(type,json_object);request.put(response_format,fmt);}StringhttpResponsechatClient.chatCompletions(request.toJSONString());4.4 响应处理extractAssistantContent从choices[0].message.content读取助手正文。normalizeToJsonObjectString去除可能的 json 围栏后解析失败则写入带parse_error的兜底 JSON避免整条链路失败。4.5 落库与 REST API表/实体AiSuggestion如kind EXPLAIN_FIX保存outputJson、durationMs、哈希等。生成POST /inspection/issues/{issueId}/ai/suggest请求体可选userNote。查询最新GET /inspection/issues/{issueId}/ai/latest?kindEXPLAIN_FIX。控制器IssueAiController。五、输出示例字段含义成功时outputJson为字符串形式的 JSON解析后典型字段字段含义summary一句话结论why_it_matters为何重要数组likely_causes可能原因数组带不确定性表述recommended_actions分步行动与owner_hintquestions_for_humans需人工确认的问题confidencehigh/medium/low前端可对outputJson二次反序列化后绑定 UI。六、踩坑与经验连接超时直连境外域名在国内易超时接 OpenAI 需代理或改用国内可访问的 Base URL如硅基流动.cn。401 / invalid_api_key密钥必须与Base URL 所属平台一致勿将 A 平台密钥用于 B 平台域名。response_format部分兼容网关不支持json_object需关闭配置并加强 Prompt。可观测性记录durationMs、截断后的原始回复便于排障注意脱敏与长度。安全API Key 仅通过环境变量或密钥管理注入勿提交仓库。七、小结用OpenAI 兼容协议统一对接硅基流动及其他兼容网关用强约束 Prompt 可选response_format 解析兜底保证结构化落地用独立RestClientBean ConfigurationProperties保持配置清晰。适合作为「规则引擎 LLM 解读」第一期的工程模板。附录相关源码路径内容路径AI 配置属性src/main/java/org/example/inspect/config/AiProperties.javaRestClient 与代理src/main/java/org/example/inspect/config/AiClientConfig.javaChat Completions 调用src/main/java/org/example/inspect/ai/OpenAiChatClient.java业务与 Promptsrc/main/java/org/example/inspect/service/AiIssueAssistantService.javaREST APIsrc/main/java/org/example/inspect/controller/IssueAiController.java主配置src/main/resources/application.yml演示 / 硅基流动 Profileapplication-demo.yml、application-siliconflow.yml

相关文章:

从 0 手写一个巡检调度系统(五):接入大模型实现巡检问题解读与修复建议

摘要:在既有「架构巡检 → 问题落库」链路中,第一次引入大模型能力:对单条 issue 做「解读 修复建议」,要求输出可解析的结构化 JSON 并落库可追溯。本文记录选型、配置、HTTP 客户端、Prompt 约束与踩坑,便于同类业务…...

【雷达信号优化】第八章 阵列校准与误差补偿

目录 第八章 阵列校准与误差补偿 8.1 阵列误差模型 8.1.1 幅相误差 8.1.1.1 互耦效应建模 8.1.1.1.1 互耦矩阵的逆矩阵简化 8.2 阵列自校准算法 8.2.1 信号子空间拟合算法 8.2.1.1 交替优化策略 8.2.1.1.1 信源方向与误差参数的迭代更新 8.2.2 辅助源校准 8.2.2.1 单…...

重庆银行:万亿新贵的高光与隐忧

对于重庆银行而言,2026年3月24日是一个值得载入史册的日子。就在这一天,该行正式发布了2025年年度报告,其资产规模突破以往周期,使其成功跻身“万亿级城商行俱乐部”。其中,该行的营收与净利润时隔五年再次实现了“双十…...

如何用“波特三大竞争战略”为你的新产品破局?

1. 成本领先战略 (Cost Leadership)核心理念: 成为整个行业中成本最低的生产商或服务提供商。注意,成本领先不等于价格战。它的本质是通过极致的运营效率、规模经济、供应链优化或技术创新,把产品的底层结构性成本降到最低。这意味着&#xf…...

南北阁Nanbeige 4.1-3B Git版本控制实战:从入门到团队协作

南北阁Nanbeige 4.1-3B Git版本控制实战:从入门到团队协作 本文面向刚接触版本控制的开发者,手把手教你用南北阁Nanbeige 4.1-3B掌握Git核心技能,从基础命令到团队协作全流程。 1. 为什么你需要Git版本控制? 刚开始写代码时&…...

群晖NAS人脸识别功能解锁指南:让旧设备焕发AI新活力

群晖NAS人脸识别功能解锁指南:让旧设备焕发AI新活力 【免费下载链接】Synology_Photos_Face_Patch Synology Photos Facial Recognition Patch 项目地址: https://gitcode.com/gh_mirrors/sy/Synology_Photos_Face_Patch 为何老款群晖NAS需要AI能力升级&…...

SenseVoice-Small模型在运维监控中的语音告警应用

SenseVoice-Small模型在运维监控中的语音告警应用 1. 运维人员每天都在和告警“搏斗” 你有没有经历过这样的场景:凌晨三点,手机突然震动,一条告警短信跳出来——“数据库连接池使用率98%”。你立刻爬起来打开电脑,连上跳板机&a…...

终极防撤回解决方案:RevokeMsgPatcher完全攻略

终极防撤回解决方案:RevokeMsgPatcher完全攻略 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: https://gitcode.com/GitHu…...

告别TeamViewer!用RustDesk自建服务器实现跨平台远程控制(Windows/Ubuntu客户端全配置)

告别商业远程控制软件:用RustDesk自建服务器全流程指南 远程控制软件已经成为现代工作场景中不可或缺的工具,无论是技术支持、远程办公还是跨设备协作,一个稳定高效的远程连接方案都能极大提升工作效率。然而,商业软件如TeamViewe…...

突破设备边界:开源串流解决方案Sunshine革新跨设备游戏共享体验

突破设备边界:开源串流解决方案Sunshine革新跨设备游戏共享体验 【免费下载链接】Sunshine Sunshine: Sunshine是一个自托管的游戏流媒体服务器,支持通过Moonlight在各种设备上进行低延迟的游戏串流。 项目地址: https://gitcode.com/GitHub_Trending/…...

3步解锁B站Hi-Res音频:使用BilibiliDown开源工具轻松获取无损音乐

3步解锁B站Hi-Res音频:使用BilibiliDown开源工具轻松获取无损音乐 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/g…...

3分钟上手!Balena Etcher:安全烧录系统镜像的终极解决方案

3分钟上手!Balena Etcher:安全烧录系统镜像的终极解决方案 【免费下载链接】etcher Flash OS images to SD cards & USB drives, safely and easily. 项目地址: https://gitcode.com/GitHub_Trending/et/etcher 你是否曾因烧录系统镜像而丢失…...

暗黑破坏神2终极单机优化:PlugY生存工具包完整指南

暗黑破坏神2终极单机优化:PlugY生存工具包完整指南 【免费下载链接】PlugY PlugY, The Survival Kit - Plug-in for Diablo II Lord of Destruction 项目地址: https://gitcode.com/gh_mirrors/pl/PlugY 厌倦了暗黑破坏神2单机模式的储物空间限制&#xff1f…...

龙虾为啥越养越贵,越用越蠢?极客老王揭秘Agent落地真相

进入2026年3月,科技圈的舆论风向标发生了一次剧烈偏移。曾经被誉为开启“AI代驾”时代的超级智能体OpenClaw(俗称“龙虾”),在经历了一年的野蛮生长后,正陷入一场空前的信任危机。根据最新的行业调研数据显示&#xff…...

ARM64架构下利用docker-compose实现tendis单机版高效离线部署指南

1. 为什么选择ARM64架构部署Tendis? 最近几年ARM架构处理器越来越流行,从树莓派到苹果M系列芯片,再到各种云服务器的ARM实例,性能提升明显的同时功耗还更低。我去年接手的一个项目就要求全部跑在ARM64服务器上,当时部署…...

3步实现Mac微信防撤回:零配置本地化解决方案

3步实现Mac微信防撤回:零配置本地化解决方案 【免费下载链接】WeChatIntercept 微信防撤回插件,一键安装,仅MAC可用,支持v3.7.0微信 项目地址: https://gitcode.com/gh_mirrors/we/WeChatIntercept 告别消息遗憾&#xff1…...

APK Studio安全最佳实践:合规使用逆向工程工具

APK Studio安全最佳实践:合规使用逆向工程工具 【免费下载链接】apkstudio Open-source, cross platform Qt based IDE for reverse-engineering Android application packages. 项目地址: https://gitcode.com/gh_mirrors/ap/apkstudio 在移动应用开发与安全…...

Android崩溃分析进阶:结合addr2line与IDA Pro精准定位SO文件崩溃点

1. 从崩溃日志到问题定位:为什么SO文件这么难缠? 每次看到Android应用崩溃日志里出现"signal 11 (SIGSEGV)"这种字样,我就知道今晚又要加班了。特别是当崩溃发生在SO文件中时,那种无力感就像在漆黑的房间里找一根掉落的…...

开源串流新选择:用Sunshine打造跨设备游戏共享系统

开源串流新选择:用Sunshine打造跨设备游戏共享系统 【免费下载链接】Sunshine Sunshine: Sunshine是一个自托管的游戏流媒体服务器,支持通过Moonlight在各种设备上进行低延迟的游戏串流。 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine …...

Ollama GUI架构解析:现代本地LLM交互界面的技术实现与隐私优先设计

Ollama GUI架构解析:现代本地LLM交互界面的技术实现与隐私优先设计 【免费下载链接】ollama-gui 项目地址: https://gitcode.com/gh_mirrors/ol/ollama-gui 在人工智能技术快速发展的今天,本地化部署的大语言模型(LLM)成为…...

三大痛点终结!猫抓插件:颠覆式网页资源提取与管理解决方案

三大痛点终结!猫抓插件:颠覆式网页资源提取与管理解决方案 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾遇到这样的困境:在视频网站看到精彩教程想保存离…...

Pi0 Web演示服务监控:Prometheus+Grafana指标采集与告警配置

Pi0 Web演示服务监控:PrometheusGrafana指标采集与告警配置 1. 项目概述与监控需求 Pi0作为一个先进的视觉-语言-动作流机器人控制模型,其Web演示服务的稳定运行对于用户体验和开发测试至关重要。在生产环境中,我们需要实时掌握服务的运行状…...

贾子公理体系全场景应用白皮书——从底层逻辑根服务器到数字政府、金融、AI等十大领域落地

GG3M贾子公理体系:一套底层公理贯通十大全场景应用落地副标题: 贾子公理体系全场景应用白皮书——从底层逻辑根服务器到数字政府、金融、AI等十大领域落地摘要: 贾子公理体系是GG3M项目的底层逻辑根服务器,以自洽可演绎的公理系统…...

Java函数冷启动优化不是“选配”,而是SLA硬指标!一线大厂SRE团队正在紧急落地的6项Kubernetes调度增强策略

第一章:Java函数冷启动的本质与SLA倒逼机制Java函数冷启动并非单纯“首次加载慢”的表象,而是JVM生命周期、类加载机制、字节码验证、即时编译(JIT)预热及运行时元数据初始化等多层系统行为在无预热上下文下的集中爆发。当Serverl…...

连续使用 OpenClaw 50 天后,我总结了 3 个核心工作流和 5 个血泪教训

🔥 连续使用 OpenClaw 50 天后,我总结了 3 个核心工作流和 5 个血泪教训AI 不会取代你,但会用 AI 的人会取代你——这句话说烂了,但 50 天后我才真正明白它的意思。01 上周五下午 5 点,同事都在加班,我先走…...

拉丝机在紧固件生产中的作用与工艺流程_6月FES上海紧固件展

2026第十六届上海紧固件专业展将于6月24日至26日在国家会展中心(上海)举行。本届展会由上海上搜展览与华人螺丝网联合打造,并获得行业权威机构支持,整体展出规模约70,000平方米,预计汇聚1,400余家参展企业和25,000名专…...

猫抓插件:5分钟掌握浏览器视频下载终极指南

猫抓插件:5分钟掌握浏览器视频下载终极指南 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾经遇到过想要保存网页视频却找不到下载按钮的烦恼?或者想收藏在线音乐却只…...

GTE-Pro行业落地:制造业设备维修手册语义检索替代传统目录树导航

GTE-Pro行业落地:制造业设备维修手册语义检索替代传统目录树导航 1. 引言:当维修师傅找不到说明书时 想象一下这个场景:工厂里一台关键设备突然报警停机,维修师傅小王满头大汗地站在机器旁。他记得这台设备的维修手册有上千页&a…...

YOLOv12涨点改进 | CVPR 2025 | 全网独家首发、Neck特征融合改进篇 | YOLOv12引入ADWM自适应双重加权融合模块,有效优化特征的加权与融合,减少冗余并增强目标特征

一、本文介绍 🔥本文给大家介绍使用ADWM模块改进YOLOv12目标检测网络模型,能够有效优化特征的加权与融合,减少冗余并增强目标特征的表现,提升目标检测的准确性和鲁棒性,特别是在多尺度、小目标和复杂背景下。通过ADWM的引入,YOLOv12的性能将得到显著改善,适应性和准确…...

Windsurf Cascade报错别慌!手把手教你清理Windows/Mac缓存,亲测有效

Windsurf Cascade报错急救指南:双平台缓存清理与实战避坑 刚写完的代码突然被Cascade error打断?别急着砸键盘。作为每天与Windsurf相伴12小时的深度用户,我经历过数十次这类报错——从最初的暴躁摔鼠标到现在的30秒快速修复,这套…...