值班人工智能助理(PoC)
从以下位置提取数据的随叫随到助手的轻量级概念验证:
- Grafana MCP:返回服务的健康快照(用JSON模拟)。
- FastAPI MCP(随叫随到):从一个简单的夹具中列出/acks事件。
- 聊天界面:浏览器UI,显示Dify LLM/聊天模式如何调用MCP回答值班问题。
目的是演示接线;准备就绪后,将模拟的数据源与真实的端点交换。
在本地运行
- 安装Python 3.11+并创建一个venv(推荐)。
- 随着
pip:pip install -r requirements.txt\
随着 uv: uv venv .venv && source .venv/bin/activate && uv pip install -r requirements.txt
uvicorn app.main:app --reload- 打开http://127.0.0.1:8000并询问诸如“检查订单的延迟”或“付款的任何事件”之类的问题。
或者使用辅助脚本:
- 单个进程(默认为
all在端口8000上):./start.sh [all|web|grafana|oncall|k8s] - 多进程(默认情况下为单独的端口8000/8011/8012/8013):
./start.sh multi
分别运行组件(模拟不同的服务器):
- 仅限Grafana MCP:
APP_MODE=grafana HOST=127.0.0.1 PORT=8011 ./start.sh - 仅限随叫随到的MCP:
APP_MODE=oncall HOST=127.0.0.1 PORT=8012 ./start.sh - 仅限K8s MCP:
APP_MODE=k8s HOST=127.0.0.1 PORT=8013 ./start.sh - 仅限网络聊天:
APP_MODE=web HOST=127.0.0.1 PORT=8000 GRAFANA_MCP_URL=http://127.0.0.1:8011/api/mcp/grafana ONCALL_MCP_URL=http://127.0.0.1:8012/api/mcp/oncall K8S_MCP_URL=http://127.0.0.1:8013/api/mcp/k8s ./start.sh - 同时启动所有四个:
PROFILE=multi ./start.sh(默认情况下使用端口8000/8011/8012/8013;用\*\_HOST/PORT变量覆盖)
聊天端点的LLM(OpenAI兼容)配置:
OPENAI_API_KEY(必填)OPENAI_MODEL(可选,默认gpt-4o-mini)OPENAI_BASE_URL(可选;指向自托管的OpenAI兼容端点时使用)- 当web与MCP分开运行时,将工具指向远程服务器:
- GRAFANA_MCP_URL (例如。, http://127.0.0.1:8011/api/mcp/grafana) - ONCALL_MCP_URL (例如。, http://127.0.0.1:8012/api/mcp/oncall) - K8S_MCP_URL (例如。, http://127.0.0.1:8013/api/mcp/k8s) - MCP_HTTP_TIMEOUT (可选,默认8秒)
网络聊天端点:
/api/web/chat(基于规则)/api/web/chat-llm(LLM与MCP的工具调用)
您可以将MCP端点注册为工具:
- Grafana MCP:
GET /api/mcp/grafana/services,GET /api/mcp/grafana/{service} - 随叫随到的MCP:
GET /api/mcp/oncall/incidents?service=...,POST /api/mcp/oncall/incidents/ack - K8s MCP:
GET /api/mcp/k8s/overview,GET /api/mcp/k8s/pods?namespace=...,POST /api/mcp/k8s/pods/restart
传统前端路径仍然有效: /api/services, /api/grafana/{service}, /api/incidents, /api/incidents/ack.
过程模式(设置 APP_MODE):
all(默认)提供一切;web服务聊天+传统;grafana,oncall,k8s仅暴露这些MCP。
里面是什么
app/main.py:FastAPI应用程序在下面公开网络聊天/api/web/*(基于规则/chatLLM/chat-llm)Grafana MCP/api/mcp/grafana/*,随叫随到的MCP/api/mcp/oncall/*,K8s MCP下/api/mcp/k8s/*,加上前端使用的遗留端点(/api/services,/api/grafana/{service},/api/incidents,/api/incidents/ack).服务于前端。app/mcp/grafana.py:Grafana MCP立面阅读data/metrics.json.app/mcp/oncall.py:随叫随到的MCP外观读/写data/incidents.json(acks持续存在)。app/mcp/k8s.py:K8s MCP立面读/写data/k8s.json(吊舱重启持续)。app/orchestrator.py:调用两个MCP并组成响应的最小“代理”。static/:HTML/CSS/JS聊天界面。data/:指标、事件和k8s集群状态的夹具数据。
与Dify一起使用(LLM聊天模式)
此PoC展示了您可以在Dify工作流中注册为工具的HTTP端点:
- 工具1(Grafana MCP):
GET /api/grafana/{service}→ 返回延迟/错误/CPU/RPS+Grafana面板链接。 - 工具2(随叫随到MCP):
GET /api/incidents?service=orders-service→ 活跃事件;POST /api/incidents/ack承认。 - 工具3(编排器):
POST /api/chat→ 单个呼叫助手已经链接了两个MCP。
建议的Dify设置:
- 在您的Dify应用程序中,为上述端点添加HTTP工具,并简要说明(“从Grafana MCP获取健康状况”、“列出活动事件”、“确认事件”)。
- 在聊天流中,允许模型调用这些工具;使用来自的服务名称为系统提示符添加种子
/api/services并提醒它选择最接近的匹配项(例如,“订单”→ “订单服务”)。 - 用真实数据替换JSON夹具(更新
data/metrics.json和data/incidents.json,或将MCP外观指向真实API)。
自定义PoC
- 在中添加更多服务或指标
data/metrics.json. - 预加载更多事件或调整严重程度
data/incidents.json. - 扩展
app/orchestrator.py包括更多的信号(日志、发布信息、SLO)或以不同的方式调用工具。
