
简介这份资源面向运维自动化方向的IT从业者与有一定编程基础的技术人员围绕「大模型插件工作流」的AI Agent思路讲解如何用Deepseek与Dify搭建告警分析智能体解决日常告警总结耗时、故障响应慢的问题。内容涵盖Dify安装、模型供应商接入、时间获取与告警查询工作流创建、Agent配置以及自然语言转SQL、告警报告结构化输出等关键环节并给出只读账号访问数据库、大模型输入长度受限时的分批处理等安全与排错建议。资源包为1个docx文档约816KB以图文步骤与提示词示例呈现完整实现路径。目前已有405人学习。读者可据此掌握从告警概览、关键发现到建议措施的自动化报告生成方法并参考提示词模板与工作流设计结合自身环境快速落地告警分析智能体。1. 告警风暴里为什么我选择用 Deepseek Dify 搭一个分析智能体凌晨两点钉钉群里刷出 47 条告警CPU 飙高、磁盘 IO 等待、某个 Java 服务 GC 次数异常、还有三条来自同一台机器的重复触发。值班同事一边翻聊天记录一边骂最后发现根因只是某台 Redis 从库同步延迟连带把上游三个服务的健康检查拖挂了。这种场景做运维的都懂——告警不是不够是太多、太碎、太重复真正有用的信息被淹没在噪音里。告警分析智能体要解决的就是这件事把原始告警做聚合、去重、关联再交给大模型生成一段人能直接读的总结和初步判断。Deepseek 负责语义理解和总结生成Dify 负责把「接收告警 → 预处理 → 调模型 → 输出结论」这条链路编排成一个可维护的工作流。适合谁适合已经有 Prometheus、Zabbix 或云监控在跑但被告警疲劳折磨、又不想上重型 AIOps 平台的运维和 SRE 团队。整套东西可以本地部署数据不出内网这是我看重它的核心原因。2. 拆解告警分析智能体的技术选型Deepseek 和 Dify 各扛什么活2.1 为什么是 Deepseek 而不是通用大模型告警文本有很强的领域特征node_filesystem_avail_bytes、up{jobredis-exporter}、P99 latency 2s这类内容通用模型能读但总结时容易丢字段、把指标名翻译错。Deepseek 在中文技术语料上表现稳定而且 API 价格在同类里属于能长期跑的量级——告警分析是高频调用场景一天几千条告警成本必须算得过来。选型时我对比过三条路一是纯规则引擎用正则和阈值做聚合快但不会总结遇到没见过的告警组合就抓瞎二是直接调通用大模型 API总结质量可以但成本高且数据要出内网三是本地部署 Deepseek 或走其 API配合 Dify 做编排。第三条路在可控性和效果之间平衡最好。Deepseek 在这个方案里承担两件事第一把一批结构化告警JSON 数组转成一段自然语言总结说清「发生了什么、影响范围、可能原因」第二对告警做初步分类比如判断是「资源类」「网络类」还是「应用异常类」方便后续路由到不同处理人。2.2 Dify 在链路里的角色编排层而非模型层Dify 是智能体平台核心价值是把 LLM 调用、条件分支、知识库检索、外部 API 调用串成可视化工作流。在这个方案里Dify 不训练模型它做的是接收 Webhook 推来的告警数据用代码节点做预处理去重、字段提取、时间窗口聚合调用 Deepseek 节点生成总结用条件节点判断严重级别决定是否触发通知把结果写回数据库或推送到 IMDify 的工作流是可视化的改一个判断条件不用动代码这对运维团队很关键——半夜出问题值班的人能直接在界面上调逻辑不用等开发发版。2.3 整体架构从告警源到总结输出的数据流数据流是这样的Prometheus Alertmanager 或 Zabbix 通过 Webhook 把告警 JSON 推到 Dify 的 API 端点Dify 工作流先做一轮预处理把同一时间窗口内相同alertname和instance的告警合并然后拼成 Prompt 调 Deepseek模型返回总结后Dify 根据severity字段走不同分支——critical 直接推钉钉并 值班人warning 只入库不打扰。这里有个关键设计预处理必须在调模型之前做。我见过有人把 200 条原始告警直接塞给模型结果 token 爆了、总结还漏了一半。正确做法是先在代码节点里聚合把 200 条压成 5 到 10 条「告警组」再交给模型。3. 用 Docker 把 Dify 跑起来安装、配置与 Deepseek 接入3.1 Dify 本地部署的最小步骤Dify 社区版用 Docker Compose 部署是最省事的。先确认机器有 Docker 和 Docker Compose然后拉代码、改配置、起服务。# 克隆 Dify 仓库用官方社区版 git clone https://github.com/langgenius/dify.git cd dify/docker # 复制环境变量模板 cp .env.example .env # 编辑 .env至少改这几项 # EXPOSE_NGINX_PORT80 # 如果 80 被占用改成别的 # CONSOLE_API_URL 和 APP_WEB_URL 填服务器 IP 或域名 vim .env # 启动所有服务 docker compose up -d # 查看容器状态确认没有反复重启的 docker compose ps启动后访问http://你的服务器IP第一次会让你设置管理员账号。如果页面打不开先看docker compose logs nginx和docker compose logs api八成是端口冲突或数据库没起来。参数说明.env里EXPOSE_NGINX_PORT控制对外端口默认 80DB_PASSWORD和REDIS_PASSWORD建议改掉默认值CONSOLE_API_URL如果填错登录后会一直跳转失败。CentOS 7 上装的话注意 Docker 版本别太老内核 3.10 跑新版 Docker 偶发网络问题能升内核就升。3.2 在 Dify 里配置 Deepseek 模型供应商Dify 启动后进「设置 → 模型供应商」找到 Deepseek填 API Key。如果你走的是 Deepseek 官方 APIBase URL 保持默认如果是本地部署的 Deepseek比如用 vLLM 或 Ollama 起的Base URL 填你本地的地址模型名填对应的名称。供应商Deepseek API Keysk-xxxxxxxx从 Deepseek 平台获取 Base URLhttps://api.deepseek.com官方或 http://本地IP:端口/v1自部署 模型deepseek-chat配置完点「测试」能返回结果就说明通了。这里常见的翻车点是 Base URL 结尾多了或少了/v1不同部署方式要求不一样测试报 404 就先查这个。3.3 建一个最小可用的告警分析工作流在 Dify 里新建「工作流」按下面结构连节点开始节点定义一个alert_json文本变量接收 Webhook 推来的告警。代码节点Python 代码做聚合去重。LLM 节点选 DeepseekPrompt 里引用代码节点的输出。条件分支根据severity走不同路径。结束节点输出总结文本。代码节点的 Python 示例import json from collections import defaultdict def main(alert_json: str) - dict: # 解析原始告警 alerts json.loads(alert_json) # 按 alertname instance 聚合 groups defaultdict(list) for a in alerts: key f{a.get(labels, {}).get(alertname, unknown)} groups[key].append(a) # 生成聚合后的摘要列表 summary [] for name, items in groups.items(): instances list({i.get(labels, {}).get(instance, ) for i in items}) summary.append({ alertname: name, count: len(items), instances: instances[:5], # 最多列5个实例 severity: items[0].get(labels, {}).get(severity, warning) }) return {grouped_alerts: json.dumps(summary, ensure_asciiFalse)}逻辑说明这段代码把原始告警按alertname分组统计每组数量和涉及的实例。参数上instances[:5]是防止实例太多把 Prompt 撑爆实际用的时候可以按需调整。返回的grouped_alerts是 JSON 字符串直接喂给 LLM 节点。LLM 节点的 Prompt 可以这样写你是一名资深运维工程师。以下是一批聚合后的告警数据 {{grouped_alerts}} 请用中文输出 1. 一句话总结当前系统状态 2. 按严重程度列出主要问题 3. 给出最可能的根因方向 4. 建议的排查顺序 要求简洁不超过 300 字。这样一条最小链路就跑通了。测试时可以在开始节点手动填一段告警 JSON点运行看输出。4. 告警预处理与 Prompt 设计让总结不胡说4.1 告警去重和聚合的四个关键字段聚合做得好不好直接决定总结质量。我一般盯这四个字段字段作用常见取值alertname告警类型聚合主键CPUHigh、DiskFullinstance告警来源实例10.0.1.5:9100severity严重级别决定路由critical、warning、infostartsAt告警开始时间做时间窗口ISO8601 时间戳聚合策略同一alertname在 5 分钟窗口内、涉及多个instance的合并成一条「批量告警」。比如 20 台机器同时报磁盘满不该生成 20 条总结而是一条「20 台机器磁盘使用率超过 90%集中在 /data 分区」。4.2 Prompt 模板把告警 JSON 转成人话的三个约束Prompt 设计有三个硬约束少一个总结就会飘第一限定输出结构。不限定的话模型会自由发挥有时写一大段有时漏掉根因。用编号列表强制结构。第二给角色和边界。开头写「你是一名资深运维工程师」结尾加「如果信息不足以判断根因直接说信息不足不要猜测」。这句很重要能挡掉大量幻觉。第三控制长度。告警总结是给人快速看的超过 300 字就没人读了。在 Prompt 里写死字数上限。一个实际在用的模板角色你是 SRE负责分析监控告警。 输入{{grouped_alerts}} 任务 1. 用一句话概括当前异常不超过 40 字 2. 列出受影响的服务和实例数量 3. 给出 2-3 个最可能的根因按可能性排序 4. 给出排查建议按优先级排序 约束总字数不超过 300信息不足时明确说明禁止编造。4.3 用 Dify 条件分支做告警分级路由不是所有告警都值得半夜叫人。在 Dify 工作流里加一个条件节点按severity分流critical推送到钉钉/企微 值班人同时入库warning只入库每天早上生成一份汇总info直接丢弃或只记日志条件节点的表达式可以写{{grouped_alerts}}里解析出的 severity 字段。Dify 支持用代码节点先提取 severity再在条件节点里判断。这样路由逻辑清晰改阈值也不用动 Prompt。5. 避坑与排查告警智能体落地时最容易翻车的五件事5.1 告警重复推送导致模型被同一问题刷屏现象模型总结里反复出现同一条告警输出变得冗长且重复。原因Alertmanager 的repeat_interval没调或者 Webhook 重试机制导致同一条告警推了多次。解决在 Dify 代码节点里加一层基于fingerprint字段的去重维护一个最近 10 分钟的已处理指纹集合。Alertmanager 侧把repeat_interval设成至少 4 小时。5.2 Deepseek API 调用超时导致工作流卡死现象Dify 工作流执行到 LLM 节点就停住最后报 timeout。原因告警量大时 Prompt 太长或者 Deepseek API 侧限流。解决在代码节点严格控制聚合后的条数最多 10 组Dify 的 LLM 节点设置超时时间比如 30 秒和重试次数2 次如果经常超时考虑本地部署 Deepseek 走内网调用。5.3 模型把指标名翻译错导致误导排查现象总结里把node_filesystem_avail_bytes说成「节点文件系统可用字节数」但实际告警是使用率过高方向反了。原因模型对 Prometheus 指标语义理解不精确。解决在 Prompt 里附上关键指标的说明或者用 Dify 知识库挂一份指标字典让模型检索后再总结。更稳的做法是在代码节点里就把指标名转成中文描述再交给模型。5.4 Dify 升级后工作流节点丢失或报错现象docker compose pull更新镜像后原有工作流打不开或节点报红。原因Dify 社区版跨版本升级时数据库迁移没跑完或者环境变量新增了必填项。解决升级前先备份数据库docker compose exec db pg_dump升级后看docker compose logs api有没有迁移报错。跨大版本升级建议先在测试环境跑一遍。Windows 上装 Dify 的话Docker Desktop 的 WSL2 后端偶尔会有文件挂载问题工作流保存失败先查这个。5.5 告警数据里有敏感信息被写进模型日志现象Dify 的日志里能看到完整的告警内容包含内网 IP、主机名甚至业务字段。原因默认配置下 Dify 会记录工作流输入输出。解决在.env里关掉不必要的日志级别或者在生产环境用代码节点先脱敏——把 IP 替换成占位符、去掉业务敏感字段再传给 LLM。数据安全这事宁可多写几行脱敏代码。6. 让总结更准的一个技巧用历史告警做 Few-shot 注入模型总结飘不飘很大程度上取决于你有没有给它「好答案长什么样」的参照。我后来加了一个改进在 Dify 里挂一个知识库存过去三个月处理过的告警案例每条包含「原始告警 人工确认的根因 处理动作」。LLM 节点调模型前先用知识库检索节点找出最相似的 2 到 3 条历史案例拼进 Prompt 里当 Few-shot 示例。具体做法是在工作流里加一个「知识库检索」节点输入用聚合后的alertname列表检索 Top 3。然后在 LLM 节点的 Prompt 里加一段以下是历史上类似告警的处理记录供参考 {{knowledge_context}} 请结合上述历史经验分析当前告警。这个改动让总结的根因命中率明显提升尤其是那些「看起来像 A 问题实际是 B 问题」的场景。知识库的维护也简单每次人工处理完告警把结论补一条进去就行不用重新训练模型。验证方法找一批已经处理过的历史告警关掉知识库跑一遍总结再打开知识库跑一遍对比根因判断的准确率。我自己的测试里加了历史案例后根因方向正确的比例从六成出头提到了八成左右。这个数字因场景而异但趋势是稳的。最后说个习惯我每次调完 Prompt 或聚合逻辑都会拿同一条真实告警跑三遍看输出稳不稳定。大模型有随机性一次输出好看不代表次次好看。稳定比惊艳重要这是踩过坑之后最深的体会。希望帮到你。本文还有配套的精品资源点击获取