代码变更分析助手

一个智能上下文引擎,通过关联生产警报与代码部署和功能标志,快速识别导致问题的变更。

  • by TankEngine1234
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 TankEngine1234/mcp-devops-server

使用说明

MCP挑战:“红色代码”DevOps助手

当生产失败时,随叫随到的工程师会惊慌失措。唯一重要的问题是 “发生了什么变化?”

“红色代码”助手是一个模型上下文协议(MCP)服务器,用于在几秒钟内回答该问题。它充当一个“智能上下文引擎”,通过将生产警报与导致警报的确切代码部署和功能标志相关联,找到“大海捞针”。


演示:之前与之后

查看项目价值的最简单方法是运行交互式Streamlit展示。它展示了由我们的MCP服务器驱动的“愚蠢”AI(之前)与“智能”AI(之后)。

如何运行演示:

  1. 终端1(后端): 启动MCP服务器。
    # (Activate your venv first: source venv/bin/activate)
    uvicorn main:app --reload
    
  2. 2号航站楼(前端): 运行Streamlit展示。
    # (Activate your venv first: source venv/bin/activate)
    streamlit run showcase.py
    

“智能上下文”核心

这个项目是评判标准的一个完美例子: 情境智能, 巧妙整合,以及 效率(信号与噪声).

问题(“愚蠢”的人工智能)

没有我们的服务器,人工智能在停机时是无用的。

  • 查询: “为什么‘身份验证服务’失败了?”
  • AI回应: “很抱歉,我无法访问您的实时系统状态或部署日志。”

解决方案(“智能”AI)

我们的MCP服务器拦截查询并执行其“智能上下文”检索:

  1. (推断上下文): 服务器的 关联引擎 推断用户需要 原因 的失败。
  2. (合并来源): 它从以下位置获取警报时间 数据狗,然后搜索 GitHub 和 暗启动 对于警报前15分钟内发生的任何事件。
  3. (巧妙整合): “魔法”是 相关性服务器找到警报与引发警报的特定部署之间的直接链接。
  4. (高信号上下文): 它组装了一个 高信号、低噪声 上下文包,过滤掉数千条不相关的日志,只提供关键信息。

然后,服务器将这个“上下文包”注入到提示符中,释放人工智能的真正潜力:

发送给AI的最终提示: AI回应: “'auth-service'的中断始于下午2:10。这与'jane.doe'的部署和功能标志切换直接相关。我建议调查该提交或回滚标志。”


技术栈

  • 语言: python
  • 后端: 快速API (适用于高速异步MCP服务器)
  • 前端: 溪流 (用于互动展示)
  • 服务器: Uvicorn
  • 数据验证: 派丹蒂克
  • HTTP客户端: httpx
  • 数据源(API): GitHub (直播), 数据狗 (模拟), 暗启动 (模拟)

如何运行它(完整设置)

  1. 克隆存储库:

    git clone [https://github.com/TankEngine1234/mcp-devops-server.git](https://github.com/TankEngine1234/mcp-devops-server.git)
    cd mcp-devops-server
    
  2. 创建虚拟环境:

    python3 -m venv venv
    source venv/bin/activate
    
  3. 安装依赖项:

    pip3 install -r requirements.txt
    
  4. 设置API密钥(可选): 该项目开箱即用 USE_MOCK=True 在 .env 文件。运行演示不需要密钥。

    如果你想添加自己的密钥,请复制 .env.example 到 .env 并设置 USE_MOCK=False.

  5. 运行后端和前端:

    • 终端1(后端): uvicorn main:app --reload
    • 2号航站楼(前端): streamlit run showcase.py

测试API端点(手动)

如果你想绕过UI并测试 curl 直接端点:

curl -X POST "[http://127.0.0.1:8000/analyze](http://127.0.0.1:8000/analyze)" \
-H "Content-Type: application/json" \
-d '{"query": "Why is 'auth-service' failing?"}'```