链载Ai

标题: Aiops探索:基于 Dify Ansible MCP Server 的智能运维实践 [打印本页]

作者: 链载Ai    时间: 昨天 22:36
标题: Aiops探索:基于 Dify Ansible MCP Server 的智能运维实践

研究Aiops有一段时间了,目前手里有不少可落地的方案了,接下来会把这些方案全部整理到我的大模型课程里。同时,欢迎大家把你遇到的场景在评论区留言。我会在能力范围内给你提供思路和建议。

今天的案例是基于dify和Ansible的MCP来做一个运维智能体。


一、核心思路和架构

1. 角色分工

1)Dify

2)Ansible

3)MCP

工具封装: 我们将 Ansible 的常用模块(如 command, playbook)封装成 MCP 标准的“工具”。

2. 工作流程

1)用户通过 Dify 提供的聊天界面,用自然语言发出指令,例如:“重启 db01 服务器的 MySQL 服务”。

2)LLM 分析指令,识别出关键信息:动作(restart)、目标主机(db01)、服务名(mysql)。
3)LLM 查看其可用的 MCP 工具列表和功能说明,确定使用使用run_ad_hoc工具执行指令“systemctl restart mysql”。
4)LLM 通过 MCP 协议调用run_ad_hoc工具,并传入参数{'host': 'db01', 'module': 'command', 'args':'systemctl restart mysql'}
5)MCP Ansible服务器接收到调用请求,解析参数。
6)服务器内部使用ansible-runner库,动态生成并执行一个临时的 Ansible Ad-Hoc命令:ansible db01 -mcommand-a "systemctl restart mysql"
7)Ansible 在db01服务器上执行命令,并将执行结果(成功/失败、详细信息)返回给 MCP 服务器。
8)MCP 服务器将 Ansible 的输出格式化为结构化数据,通过 MCP 协议返回给 Dify 中的 LLM。
9)LLM 接收到执行结果,将其组织成自然语言,例如:“已成功在 db01 服务器上重启 MySQL 服务。”,并最终呈现给用户。

3. 架构图


二、MCP部署与配置

步骤 1: 准备Ansible环境

这里假设已经有了一个可用的Ansible控制节点,并且其它机器已经可以通过Ansible管理。

步骤 2: 部署 Ansible MCP Server

这里需要直接部署到Ansible控制机上。

1、克隆代码

gitclonehttps://github.com/aminglinux/ansible-mcp.gitcdansible-mcp

2、安装依赖库

pip3install-rrequirements.txt

3、启动服务

uvicornmain:app--reload--host0.0.0.0--port8080

步骤 3: 在 Dify 中配置 MCP 工具

在 Dify 的界面中,进入工具 → MCP,点击 “添加MCP服务”。

在配置中填写:

1)服务端点URL:http://<host>:8080/sse(这里host地址就是你部署Ansible MCP服务的IP地址)

2)名称、服务器标识:ansible_mcp

3)认证这里比较特殊,由于我们并没有设置认证,你可以随便写点啥都行,如果不填写没法点授权按钮。

点击“添加并授权”

可以看到,目前包含8个工具。


三、构建智能体

ingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">1. 在Dify创建Agent应用

ingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">2. 设置提示词

你是一个Linux运维专家,擅长Ansbile的各种操作,尤其是擅长撰写Ansible的playbook
你有诸多ansbile相关的工具,其中工具的功能如下:1.list_inventory : 列出inventory2. list_hosts: 列出所有主机3.validate_playbook : 验证playbook是否有错误4. ping_hosts : 检查主机是否存活5.run_ad_hoc : 临时运行ansible任务6.generate_playbook: 生成playbook文件7. run_playbook: 运行指定的playbook
另外请遵循以下规则:1.默认你会调用./inventory.ini文件,如果有指定可以使用指定inventory文件,没有就用默认的。2.用户需求如果比较复杂,请拆解任务,并使用合适的工具来落地需求,比如用户给一个主机名,你需要去查inventory,然后再去调用别的工具3.当用户需要生成playbook时,请你自动生成一个playbook文本,然后赋值给data参数,并传递给generate_playbook工具4. 当用户执行playbook时,要先检查用户给的playbook文件名是否在playbooks/目录里存在,如果存在直接调用,如果不存在则需要自动生成5. 在执行playbook之前,请先确认该playbook是否有问题

ingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">3. 添加工具


四、示例说明

ingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;visibility: visible;">1. 列出所有主机

图片

ingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">2. 查看某主机的磁盘使用情况

图片

ingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">3. 查看系统负载

图片
4. 给指定机器安装nginx
图片
这个任务先后调用了6次工具,它会自动创建playbook文件,检查playbook文件是否有问题,再去执行该playbook。整体上还是非常智能的。







欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5