dumbL4d/sentinel-sre-agent
GitHub: dumbL4d/sentinel-sre-agent
这是一个基于 Gemini 和 Phoenix 的自我改进型 AI SRE Agent,专注于 ML 模型生产事件的自动化调查与可观测性分析。
Stars: 0 | Forks: 1
# Sentinel SRE Agent
[](LICENSE)
[](pyproject.toml)
[](https://sentinel-sre-agent-t4k2mrvyaq-uc.a.run.app)
**用于 ML 模型可观测性和事件响应的自我改进型 SRE agent。**
为 [Google Cloud Rapid Agent Hackathon](https://rapid-agent.devpost.com/) — Arize 合作赛道而构建。
## 功能介绍
Sentinel 是一个 AI agent,它通过查询实时指标、trace 和漂移信号来调查 ML 生产事件,并随着时间的推移变得越来越聪明——它通过 Arize Phoenix MCP 查询自己过去的调查 trace,并根据以前有效的方法调整其推理过程。每次调查都会被追踪到 Phoenix Cloud,由 LLM judge 评分,这些评分会反馈到 agent 的自我改进循环中,以用于下一个事件。
## 60 秒内快速体验
```
curl -X POST https://sentinel-sre-agent-t4k2mrvyaq-uc.a.run.app/run \
-H "Content-Type: application/json" \
-d '{"mission": "URGENT: Error rate on fraud-detection-v1 just spiked to 15%. Investigate immediately and tell me what to do."}'
```
预期输出(已截断):
```
{
"content": "**Summary**\nFraud-detection-v1 is experiencing a critical error rate...\n\n**Evidence**\n...",
"session_id": "...",
"evaluation": {
"overall_score": 4.5,
"accuracy": 4.5,
"completeness": 4.0,
"actionability": 5.0,
...
}
}
```
## 自我改进循环的工作原理
```
sequenceDiagram
participant Incident
participant Agent
participant PhoenixMCP as Phoenix MCP
participant PhoenixCloud as Phoenix Cloud
participant Judge as LLM Judge
Incident->>Agent: New investigation
Agent->>PhoenixMCP: self_introspect()
PhoenixMCP->>PhoenixCloud: Query past traces + eval scores
PhoenixCloud-->>PhoenixMCP: Similar past cases, scores, annotations
PhoenixMCP-->>Agent: Historical context + insights
Agent->>Agent: Adapt strategy based on what worked before
Agent->>PhoenixCloud: Run investigation (traced via OpenInference)
Agent-->>Incident: Investigation report
Judge->>Judge: Score response (accuracy, completeness, actionability)
Judge->>PhoenixCloud: Store evaluation scores
Note over Agent,PhoenixCloud: Next incident → loop repeats with improved context
```
## 架构
```
flowchart TD
User["User
(CLI / Web UI)"] ADK["Vertex AI ADK Runner
google-adk Agent"] subgraph Tools["11 Sentinel Tools"] SI["self_introspect
→ Phoenix MCP"] QM["QueryMetrics"] QT["QueryTraces"] GA["GetAlerts"] AD["AnalyzeDrift"] CS["CorrelateSignals"] SR["SuggestRemediation"] CA["CreateAlert"] PT["QueryPhoenixTraces"] PS["QueryPhoenixSpans"] PSE["QueryPhoenixSessions"] end subgraph Phoenix["Arize Phoenix Cloud"] OTEL["OpenInference Tracing"] TRACES["Traces (spans)"] EVALS["Evaluations (LLM Judge)"] MCP["Phoenix MCP Server"] end Judge["LLM Judge (Gemini)
→ Evaluation scores"] User --> ADK ADK --> Tools SI --> MCP MCP --> SI ADK --> OTEL OTEL --> TRACES TRACES --> MCP Judge --> EVALS EVALS --> MCP ``` ## 评判标准 | 标准 | 我们构建的内容 | 查看位置 | |---|---|---| | **使用 Google Cloud Agent Builder** | Vertex AI ADK (`google-adk` 2.x) `Agent` + `Runner` + `FunctionTool` 封装了全部 11 个工具 | `src/sentinel/agent/adk_agent.py` | | **Arize Phoenix 集成** | OpenInference 将每次 LLM 调用 trace 到 Phoenix Cloud;agent 通过 MCP 查询 Phoenix 以实现自我改进 | `src/sentinel/tracing.py`, `src/sentinel/mcp/phoenix_client.py` | | **自我改进循环** | `self_introspect` 工具通过 Phoenix MCP 查询类似的过往案例和评估分数;agent 从历史模式中调整推理 | `src/sentinel/tools/self_introspect.py`, system prompt 在 `src/sentinel/agent/prompts.py` | | **多工具调查** | 11 个工具:指标、trace、告警、漂移分析、信号关联、告警创建、修复建议、Phoenix 内省 | `src/sentinel/tools/` 目录 | | **LLM-as-a-Judge 评估** | Gemini 对每次响应的准确性、完整性、可操作性进行评估(1-5 分制) | `src/sentinel/evaluation/llm_judge.py` | | **流式 Web UI** | 原生 JS 仪表板,支持 SSE 流式传输、健康徽章、phoenix/数据源指示器 | `src/sentinel/static/index.html`, `src/sentinel/server.py` | | **支持 Cloud Run 部署** | 包含 healthcheck 的 Dockerfile,GitHub Actions CI → Artifact Registry → Cloud Run | `Dockerfile`, `.github/workflows/deploy.yml` | ## 技术栈 | 组件 | 技术 | |---|---| | Agent 框架 | Vertex AI ADK (`google-adk` 2.x) | | LLM | Gemini 2.5 Flash Lite | | 可观测性 | Arize Phoenix Cloud(trace、span、评估) | | MCP 集成 | `@arizeai/phoenix-mcp` 通过 stdio | | Tracing | OpenInference + OpenTelemetry OTLP | | 评估 | Gemini LLM-as-a-Judge | | Web UI | 原生 JS,SSE(无需构建步骤) | | API 服务器 | FastAPI + Uvicorn | | 部署 | Cloud Run + GitHub Actions | ## 项目结构 ``` sentinel-sre-agent/ ├── src/sentinel/ │ ├── agent/ │ │ ├── adk_agent.py # Vertex AI ADK agent (primary) │ │ ├── core.py # Legacy google-genai agent (fallback) │ │ └── prompts.py # System prompt with self-improvement guidance │ ├── mcp/ │ │ ├── phoenix_client.py # Phoenix MCP client (real MCP protocol) │ │ └── arize_client.py # High-level Arize data access layer │ ├── tools/ │ │ ├── query.py # query_metrics (with Phoenix fallback), query_traces, get_alerts │ │ ├── analyze.py # analyze_drift, correlate_signals │ │ ├── actions.py # create_alert, suggest_remediation │ │ ├── self_introspect.py# Self-improvement loop (queries Phoenix MCP) │ │ └── phoenix_tools.py # Raw Phoenix trace/span/session queries │ ├── evaluation/ │ │ └── llm_judge.py # LLM-as-a-judge evaluation │ ├── static/ │ │ └── index.html # Streaming web UI │ ├── server.py # FastAPI server with SSE + health │ ├── tracing.py # OpenInference → Phoenix tracing │ ├── scenarios.py # Demo scenarios │ └── cli.py # CLI entry point ├── Dockerfile ├── pyproject.toml └── README.md ``` ## 在本地运行 **1. 克隆并安装:** ``` git clone https://github.com/dumbL4d/sentinel-sre-agent.git cd sentinel-sre-agent python -m venv .venv && source .venv/bin/activate pip install -e ".[dev]" ``` **2. 设置环境变量(全部必填):** ``` export GEMINI_API_KEY="your-key-from-aistudio.google.com" export PHOENIX_API_KEY="your-key-from-app.phoenix.arize.com" export PHOENIX_COLLECTOR_ENDPOINT="https://app.phoenix.arize.com" ``` **3. 运行服务器:** ``` sentinel-serve ``` **4. 打开 Web UI:** ``` http://localhost:8000/ui/ ``` **5. 或者使用 CLI:** ``` sentinel interactive --demo ``` ## 已知限制 - **QueryMetrics 合成后备方案**:当某个 Phoenix 项目没有匹配的模型 span(或返回的 span 少于 5 个)时,`QueryMetrics` 会静默回退到预设的合成数据。响应中的 `data_source` 字段指示数据是来自 Phoenix 还是合成生成器。 - **用于自我改进的基于文本的相似度**:自我改进循环使用 token 重叠(词袋模型)而非语义 embedding 来查找过往案例。未来的升级将使用 Phoenix 的原生 embedding 搜索,以检索更相关的历史上下文。 - **修复操作无需人工干预**:`create_alert` 和 `suggest_remediation` 会立即执行,无需人工批准。生产环境的部署应将修复操作限制在人工审核步骤之后。 ## 许可证 MIT
(CLI / Web UI)"] ADK["Vertex AI ADK Runner
google-adk Agent"] subgraph Tools["11 Sentinel Tools"] SI["self_introspect
→ Phoenix MCP"] QM["QueryMetrics"] QT["QueryTraces"] GA["GetAlerts"] AD["AnalyzeDrift"] CS["CorrelateSignals"] SR["SuggestRemediation"] CA["CreateAlert"] PT["QueryPhoenixTraces"] PS["QueryPhoenixSpans"] PSE["QueryPhoenixSessions"] end subgraph Phoenix["Arize Phoenix Cloud"] OTEL["OpenInference Tracing"] TRACES["Traces (spans)"] EVALS["Evaluations (LLM Judge)"] MCP["Phoenix MCP Server"] end Judge["LLM Judge (Gemini)
→ Evaluation scores"] User --> ADK ADK --> Tools SI --> MCP MCP --> SI ADK --> OTEL OTEL --> TRACES TRACES --> MCP Judge --> EVALS EVALS --> MCP ``` ## 评判标准 | 标准 | 我们构建的内容 | 查看位置 | |---|---|---| | **使用 Google Cloud Agent Builder** | Vertex AI ADK (`google-adk` 2.x) `Agent` + `Runner` + `FunctionTool` 封装了全部 11 个工具 | `src/sentinel/agent/adk_agent.py` | | **Arize Phoenix 集成** | OpenInference 将每次 LLM 调用 trace 到 Phoenix Cloud;agent 通过 MCP 查询 Phoenix 以实现自我改进 | `src/sentinel/tracing.py`, `src/sentinel/mcp/phoenix_client.py` | | **自我改进循环** | `self_introspect` 工具通过 Phoenix MCP 查询类似的过往案例和评估分数;agent 从历史模式中调整推理 | `src/sentinel/tools/self_introspect.py`, system prompt 在 `src/sentinel/agent/prompts.py` | | **多工具调查** | 11 个工具:指标、trace、告警、漂移分析、信号关联、告警创建、修复建议、Phoenix 内省 | `src/sentinel/tools/` 目录 | | **LLM-as-a-Judge 评估** | Gemini 对每次响应的准确性、完整性、可操作性进行评估(1-5 分制) | `src/sentinel/evaluation/llm_judge.py` | | **流式 Web UI** | 原生 JS 仪表板,支持 SSE 流式传输、健康徽章、phoenix/数据源指示器 | `src/sentinel/static/index.html`, `src/sentinel/server.py` | | **支持 Cloud Run 部署** | 包含 healthcheck 的 Dockerfile,GitHub Actions CI → Artifact Registry → Cloud Run | `Dockerfile`, `.github/workflows/deploy.yml` | ## 技术栈 | 组件 | 技术 | |---|---| | Agent 框架 | Vertex AI ADK (`google-adk` 2.x) | | LLM | Gemini 2.5 Flash Lite | | 可观测性 | Arize Phoenix Cloud(trace、span、评估) | | MCP 集成 | `@arizeai/phoenix-mcp` 通过 stdio | | Tracing | OpenInference + OpenTelemetry OTLP | | 评估 | Gemini LLM-as-a-Judge | | Web UI | 原生 JS,SSE(无需构建步骤) | | API 服务器 | FastAPI + Uvicorn | | 部署 | Cloud Run + GitHub Actions | ## 项目结构 ``` sentinel-sre-agent/ ├── src/sentinel/ │ ├── agent/ │ │ ├── adk_agent.py # Vertex AI ADK agent (primary) │ │ ├── core.py # Legacy google-genai agent (fallback) │ │ └── prompts.py # System prompt with self-improvement guidance │ ├── mcp/ │ │ ├── phoenix_client.py # Phoenix MCP client (real MCP protocol) │ │ └── arize_client.py # High-level Arize data access layer │ ├── tools/ │ │ ├── query.py # query_metrics (with Phoenix fallback), query_traces, get_alerts │ │ ├── analyze.py # analyze_drift, correlate_signals │ │ ├── actions.py # create_alert, suggest_remediation │ │ ├── self_introspect.py# Self-improvement loop (queries Phoenix MCP) │ │ └── phoenix_tools.py # Raw Phoenix trace/span/session queries │ ├── evaluation/ │ │ └── llm_judge.py # LLM-as-a-judge evaluation │ ├── static/ │ │ └── index.html # Streaming web UI │ ├── server.py # FastAPI server with SSE + health │ ├── tracing.py # OpenInference → Phoenix tracing │ ├── scenarios.py # Demo scenarios │ └── cli.py # CLI entry point ├── Dockerfile ├── pyproject.toml └── README.md ``` ## 在本地运行 **1. 克隆并安装:** ``` git clone https://github.com/dumbL4d/sentinel-sre-agent.git cd sentinel-sre-agent python -m venv .venv && source .venv/bin/activate pip install -e ".[dev]" ``` **2. 设置环境变量(全部必填):** ``` export GEMINI_API_KEY="your-key-from-aistudio.google.com" export PHOENIX_API_KEY="your-key-from-app.phoenix.arize.com" export PHOENIX_COLLECTOR_ENDPOINT="https://app.phoenix.arize.com" ``` **3. 运行服务器:** ``` sentinel-serve ``` **4. 打开 Web UI:** ``` http://localhost:8000/ui/ ``` **5. 或者使用 CLI:** ``` sentinel interactive --demo ``` ## 已知限制 - **QueryMetrics 合成后备方案**:当某个 Phoenix 项目没有匹配的模型 span(或返回的 span 少于 5 个)时,`QueryMetrics` 会静默回退到预设的合成数据。响应中的 `data_source` 字段指示数据是来自 Phoenix 还是合成生成器。 - **用于自我改进的基于文本的相似度**:自我改进循环使用 token 重叠(词袋模型)而非语义 embedding 来查找过往案例。未来的升级将使用 Phoenix 的原生 embedding 搜索,以检索更相关的历史上下文。 - **修复操作无需人工干预**:`create_alert` 和 `suggest_remediation` 会立即执行,无需人工批准。生产环境的部署应将修复操作限制在人工审核步骤之后。 ## 许可证 MIT
标签:API集成, Arize Phoenix, Gemini, MLOps, SRE运维, 可观测性, 大模型Agent, 用户代理, 逆向工具