OluwaTossin/autonomous-incident-response-agent

GitHub: OluwaTossin/autonomous-incident-response-agent

一个基于 RAG 和 LangGraph 的 AI 驱动事件分诊引擎,通过检索运维知识并结合 LLM 结构化推理,自动完成告警分类、诊断建议和升级决策。

Stars: 0 | Forks: 0

# Autonomous DevOps 事件响应智能体 **这是什么:** 一个 **AI 驱动的事件分诊与诊断引擎** —— 基于运维手册/历史事件/日志的 RAG、与告警载荷的多源上下文融合、启发式护栏加上 LLM 结构化推理,以及一个动作/升级层。这种模式与大型团队的 **AIOps** 助手、**SRE 副驾驶** 以及内部可靠性工具相匹配。 当前的操作范围:摄取告警 (JSON)、检索知识、通过 HTTP 返回结构化的分诊 JSON、可选的 **Gradio** (`/ui`)、**n8n** Webhook (Slack + 模拟工单系统)、一个**离线评估工具** (`triage-eval`)、用于本地全栈的 **Docker Compose**,以及用于 **AWS** (dev/prod) 的 **Terraform** 布局。有关明确的功能细分和 **~10% 的路线图**(证据归因、冲突处理、时间线),请参见 [`docs/decisions/capabilities-and-roadmap.md`](docs/decisions/capabilities-and-roadmap.md)。 **作者:** Oluwatosin Jegede **状态:** 阶段 **1–9** 已针对 **本地 Docker Compose** (API + Gradio + n8n) 发布。**阶段 10** 发布了用于 **dev** 和 **prod** 的**模块化 Terraform** ([`infra/terraform/`](infra/terraform/))。**阶段 11+** 接下来:推送镜像,在 AWS 中接入 RAG 索引,CI/CD。 **计划:** 详细的阶段说明见下文;根目录 [`execution.md`](execution.md) 中有维护者清单(由 git 跟踪)。 密钥存在于 **`.env`** 中(从 [`.env.example`](.env.example) 复制)。**`load_dotenv` 仅读取 `.env`**。绝对不要将 `.env` 或真实密钥提交到 `.env.example` 中。 ### 快速开始(标准路径) 1. `uv sync --extra dev`(如果需要 `/ui` 的 Gradio,请添加 `--extra ui`)。 2. `uv run rag-build` — 在 `.rag_index/` 下构建 FAISS 索引(需要在 `.env` 中配置 `OPENAI_API_KEY`)。 3. `uv run serve-api` — API + 可选的 `/ui` → [`/docs`](http://127.0.0.1:8000/docs)。 4. **Docker 中的完整栈:** `docker compose up -d --build` — API 映射到主机 **:18080** + n8n 映射到 **:5678** ([阶段 9](#phase-9--docker-compose-full-stack))。*或者*在主机上运行 API,并使用 `docker compose -f docker-compose.n8n.yml up -d` 仅启动 n8n。 5. `uv run triage-eval` — 基于 [`data/eval/gold.jsonl`](data/eval/gold.jsonl) 的回归式评估(调用实时 LLM,约 27 个用例;可通过 `python3 scripts/generate_eval_gold.py` 重新生成)。 | 命令 | 作用 | |---------|------| | `uv run rag-build` / `rag-query` | 索引 + 临时检索 | | `uv run triage -f …` | 一次性分诊 CLI | | `uv run serve-api` | FastAPI + OpenAPI | | `uv run triage-eval` | 基准 JSONL → Markdown 报告 | ## 构建进度:阶段 1–10 | 阶段 | 状态 | 主要产物 | |-------|--------|---------------------| | **1** — 问题定义 | 完成 | [`docs/decisions/problem-definition.md`](docs/decisions/problem-definition.md) | | **2** — 知识与样本数据 | 完成 | [`data/runbooks/`](data/runbooks/), [`data/incidents/`](data/incidents/), [`data/logs/`](data/logs/), [`data/knowledge_base/`](data/knowledge_base/) | | **3** — 本地 RAG | 完成 | [`app/rag/`](app/rag/) · FAISS 索引位于 `.rag_index/` (gitignored) | | **4** — LangGraph 分诊智能体 | 完成 | [`app/agent/`](app/agent/), [`app/models/`](app/models/) | | **5** — HTTP API | 完成 | [`app/api/`](app/api/) · FastAPI + JSONL 审计日志 | | **6** — n8n 执行层 | 完成 | [`workflows/n8n/`](workflows/n8n/) · [`docker-compose.n8n.yml`](docker-compose.n8n.yml) · `POST /n8n/*` 辅助接口 | | **7** — 最小化 UI | 完成 | [`app/ui/`](app/ui/) · 位于 **`/ui`** 的 Gradio (`uv sync --extra ui`) | | **8** — 评估 | 完成 | [`app/eval/`](app/eval/) · [`data/eval/gold.jsonl`](data/eval/gold.jsonl) · `scripts/generate_eval_gold.py` · `uv run triage-eval` | | **9** — Docker Compose | 完成 | [`Dockerfile`](Dockerfile) · [`docker-compose.yml`](docker-compose.yml) · n8n + API 位于同一网络 | | **10** — AWS / Terraform | 完成 | [`infra/terraform/`](infra/terraform/) · modules + [`envs/dev`](infra/terraform/envs/dev/) & [`envs/prod`](infra/terraform/envs/prod/) | ### 阶段 1 — 问题定义 - **交付物:** 产品边界与输入/输出语义 —— 谁触发系统、最小事件载荷字段、所需的分诊输出(摘要、严重性、假设、操作、升级)。 - **文档:** [`docs/decisions/problem-definition.md`](docs/decisions/problem-definition.md)(同时参考了代码中的扩展 schema)。 ### 阶段 2 — 知识与样本数据 - **交付物:** 用于检索和演示的合成**运维语料库**(非生产数据)。 - **布局:** `data/runbooks/` 下的运维手册(RAG 语料库;带有 `RB-*` ID 的过程)。`data/incidents/` 下的事件(`incident-*.md` 叙述)。`data/logs/` 下的日志包(`*.log` 及 `sample-log.md` 中的约定)。`data/knowledge_base/` 中的补充运维上下文(升级、所有权、首次响应)。 - **参考:** [`data/README.md`](data/README.md) 了解 glob 匹配模式与数量。 ### 阶段 3 — 本地 RAG - **交付物:** 分块 → 嵌入 → FAISS 索引;带有分数、`doc_type` 和 `source` 路径的 top‑k 检索。 - **代码:** [`app/rag/`](app/rag/) (`config`、loader、chunking、embeddings、index、[`retrieve`](app/rag/retrieve.py))。 - **语料 Glob 模式(相对于代码库根目录):** `data/runbooks/**/*.md`, `data/incidents/incident-*.md`, `data/logs/*.log`, `data/knowledge_base/**/*.md`, `docs/decisions/**/*.md`。 - **命令:** `uv run rag-build` / `uv run python -m app.rag.cli build-index`;`uv run rag-query "…"` 或 `query` 子命令。 - **配置:** `OPENAI_API_KEY`(或 OpenRouter + base URL)、`EMBEDDING_MODEL`、`RAG_INDEX_DIR`(参见 `.env.example`)。 ### 阶段 4 — LangGraph 分诊智能体 - **交付物:** 事件 JSON → 规范化叙述 → **与 RAG 相同的检索查询** → LLM 结构化分诊 + 护栏。 - **图(节点):** `normalize_input` → `retrieval` → `analysis` → `enrich_triage` → `decision` → `output_formatter`。 - **模型:** [`app/models/incident.py`](app/models/incident.py) (载荷)、[`app/models/triage.py`](app/models/triage.py)) — `TriageOutput` 包含可选的 `service_name`、`evidence[]`、`conflicting_signals_summary`、`timeline`(以及核心字段)。 - **确定性层:** [`app/agent/signal_reasoning.py`](app/agent/signal_reasoning.py) 合并了来自检索命中的**程序化证据**、针对载荷的**多信号冲突**启发式算法,以及**程序化时间线**提取;并在 `enrich_triage` 中与 LLM 草稿合并。 - **自动化 API:** `run_triage(incident)` 和 `run_triage_with_audit(incident)` → `(result, {rag_context, retrieval_hits})`,定义在 [`app/agent/graph.py`](app/agent/graph.py)。 - **CLI:** `uv run triage -f examples/sample_incident_payload.json`(需要 `.env`、已构建的索引、支持对话的模型)。 - **产品框架:** [`docs/decisions/capabilities-and-roadmap.md`](docs/decisions/capabilities-and-roadmap.md)。 ### 阶段 5 — HTTP API (FastAPI) - **交付物:** 用于摄取验证和通过 HTTP 进行完整分诊的本地后端。 - **端点:** `GET /` (服务发现)、`GET /health`、`GET /version`、`POST /ingest-incident` (仅验证 + 规范化)、`POST /triage` (完整流程;响应包含分诊字段以及用于反馈和评估关联的 **`triage_id`** (UUID))。 - **运行:** `uv run serve-api` 或 `uvicorn app.api.main:app`(可选 `API_HOST`、`API_PORT`)。OpenAPI 文档:`/docs`。 - **审计日志:** 每次调用 `POST /triage` 都会向 `data/logs/triage_outputs.jsonl` (**gitignored**) 追加一行:**`triage_id`**、`timestamp`、`input`、`output`(包含相同的 **`triage_id`**)、**`retrieved_context`**、**`top_k_sources`**。环境变量:`TRIAGE_AUDIT_DISABLE`、`TRIAGE_AUDIT_JSONL`、`TRIAGE_AUDIT_MAX_RAG_CHARS`。如何验证:[`docs/decisions/triage-audit-validation.md`](docs/decisions/triage-audit-validation.md)。 - **反馈关联:** 在 **`POST /n8n/triage-feedback`** 中发送来自分诊响应的 **`triage_id`**;反馈 JSONL 行包含顶层 **`triage_id`**,以便与审计文件进行关联。 ### 阶段 6 — n8n 执行层 - **交付物:** 在 **Docker** 中运行 **n8n**;两个由 **Webhook** 驱动的**可导入工作流**;FastAPI **模拟 Jira** + **工作流事件日志**,用作自动化粘合层。 - **Docker:** [`docker-compose.n8n.yml`](docker-compose.n8n.yml) — `docker compose -f docker-compose.n8n.yml up -d` → 界面位于 **http://localhost:5678**。使用 `host.docker.internal` + `TRIAGE_API_BASE`(默认为 `http://host.docker.internal:8000`)从容器内访问 API。在代码库根目录下的 **`.env`** (gitignored) 中设置 **`SLACK_WEBHOOK_URL`**;Compose 会将其注入到 n8n 中——绝对不要提交真实的 URL。 - **工作流(在 n8n 中导入 JSON,然后激活):** - **`incident-triage-escalation`** — `POST …/webhook/triage-escalation` 携带**扁平化的分诊 JSON**;如果 `severity === CRITICAL`,则根据 **`confidence`** 路由(Slack + 日志 vs 仅 Slack vs 仅日志)并发送一个**富文本 Slack 附件**(服务、根因、操作、证据)。参见 [`workflows/n8n/README.md`](workflows/n8n/README.md)。 - **`incident-ticket-creation`** — `POST …/webhook/ticket-creation` 携带扁平化的分诊 JSON;如果 `escalate === true`,则 **`POST /n8n/mock-jira/issue`** 并返回一个模拟的 `MOCK-*` 键。 - **`incident-triage-feedback`** (可选) — `POST …/webhook/triage-feedback` → **`POST /n8n/triage-feedback`**;包含来自 **`POST /triage`** 的 **`triage_id`** 加上标签(`diagnosis_correct`、`actions_useful` 等)。 - **API 辅助:** [`app/api/n8n_routes.py`](app/api/n8n_routes.py) — `POST /n8n/mock-jira/issue、`POST /n8n/workflow-log`、`POST /n8n/triage-feedback`(只追加日志,位于 `data/logs/` 下,gitignored;参见 [`workflows/n8n/README.md`](workflows/n8n/README.md) 中的环境变量)。 - **指南:** [`workflows/n8n/README.md`](workflows/n8n/README.md)(curl 示例,管道链式调用 `POST /triage` → 工单 Webhook)。 ### 测试 - **命令:** 先 `uv sync --extra dev`,然后 `uv run pytest`(单元测试 + 集成测试;集成测试在需要时模拟了 LLM)。 - **布局:** `tests/unit/`(包含用于阶段 8 指标的 `test_eval_metrics.py`),`tests/integration/`。 ### 阶段 7 — 最小化 UI (Gradio) - **交付物:** 运行在与 API **同进程**中的浏览器控制台 —— 粘贴事件 JSON,运行分诊(与 `POST /triage` 相同的图 + 审计),复制 **`triage_id`**,向 `triage_feedback.jsonl` 提交**反馈**行。 - **安装:** `uv sync --extra ui`(添加 Gradio)。 - **运行:** `uv run serve-api` → 打开 **http://127.0.0.1:8000/ui/**(使用默认的主机/端口)。**`GET /`** 包含 **`gradio_ui_mounted`** — 如果为 `false`,请运行 **`uv sync --extra ui`** 或检查 **`ENABLE_GRADIO_UI=0`**。如果 **:8000** 被另一个应用(例如不同的 Docker 项目)占用,请使用此 API 的真实端口(Compose 默认为 **:18080** → **http://127.0.0.1:18080/ui/**)。使用 **`ENABLE_GRADIO_UI=0`** 禁用挂载(pytest 会自动设置此项)。 - **代码:** [`app/ui/gradio_app.py`](app/ui/gradio_app.py) · 显示辅助 [`app/ui/triage_display.py`](app/ui/triage_display.py) · 共享运行器 [`app/api/triage_execution.py`](app/api/triage_execution.py)。 - **用户体验:** 严重性徽章、颜色编码的置信度条、分段的摘要/根因/操作/时间线、分组显示的证据(日志 · 事件 · 指标 · 运维手册/知识)放在 `
` 中、可折叠的原始 JSON、指向 `/docs` 的链接、复制 **`triage_id`**、Gradio 弹出提示 (`Success` / `Warning`)、在每次新的分诊运行时重新启用的反馈按钮。 ### 阶段 8 — 评估 - **交付物:** 黄金基准 JSONL(**~27** 个用例;可通过 `python3 scripts/generate_eval_gold.py` 重新生成)、CLI 命令 **`uv run triage-eval`**、Markdown 报告(标准输出或 `--out`)。 - **指标:** 严重性 / 是否升级 / 操作数量与基准数据的对比;可选的摘要关键词、根因短语、检索子字符串 + 分数检查;每用例延迟(平均值、p95);证据-检索重叠启发式(基础信号,非完整的幻觉判断器)。在报告中,省略了那些 `expect` 字段的行将在相应检查中显示为 `None`。 - **路径:** [`data/eval/README.md`](data/eval/README.md) (格式)、[`data/eval/gold.jsonl`](data/eval/gold.jsonl)、[`app/eval/`](app/eval/) (运行器、指标、报告)。 - **运行:** 先决条件与分诊相同(`.env`、已构建的索引、LLM)。默认情况下,**`TRIAGE_AUDIT_DISABLE`** 在运行期间被设置,这样评估就不会淹没 `triage_outputs.jsonl`;可以使用 **`--keep-audit`** 来追加审计行。 - **报告:** `uv run triage-eval --out data/eval/reports/latest.md` — **`data/eval/reports/`** 的内容是 **gitignored** (本地运行);只保留了一个 **`.gitkeep`** 以确保该文件夹存在。 ### 阶段 9 — Docker Compose (全栈) - **交付物:** 一条命令即可在共享的 Docker 网络上启动 **FastAPI + Gradio** 和 **n8n**。 - **文件:** [`Dockerfile`](Dockerfile) (Python 3.12, `uv sync --frozen`, UI extra, **`curl` + 为 ALB/ECS 风格探针提供的显式 `HEALTHCHECK`**), [`docker-compose.yml`](docker-compose.yml), [`.dockerignore`](.dockerignore)。 - **先决条件:** 包含 `OPENAI_API_KEY` 的 `.env`;在主机上运行一次 **`uv run rag-build`**,这样 **`./.rag_index`** 就会存在(以**只读**方式挂载到 API 容器中)。可选的用于 n8n 的 `SLACK_WEBHOOK_URL`(与阶段 6 相同)。 - **持久化(重建后不会丢失):** **`./data:/app/data`** (语料库路径、`data/logs` 中的 JSONL、`data/eval/` 下写入的评估输出) 和 **`./.rag_index`** (FAISS) 是从主机绑定挂载的。 - **运行:** docker compose up -d --build - API: [http://127.0.0.1:18080/docs](http://127.0.0.1:18080/docs),UI: [http://127.0.0.1:18080/ui](http://127.0.0.1:18080/ui) — **默认主机端口 `18080`**,避免与本地 **`serve-api`** 使用的 **:8000** 发生冲突。 - 如果要将 API 发布到主机的 **:8000** 端口,请执行:`COMPOSE_API_PORT=8000 docker compose up -d --build`。 - n8n: [http://localhost:5678](http://localhost:5678) — 从 [`workflows/n8n/`](workflows/n8n/) 导入并激活工作流。**`TRIAGE_API_BASE`** 在 Compose 内部被设置为 **`http://api:8000`**(对于此完整栈,请勿覆盖为 `host.docker.internal`)。 - **端到端检查(阶段 10 之前的完成定义):** 启动 Compose 并**导入并激活 n8n 工作流 `incident-ticket-creation`** 后,在代码库根目录运行: ./scripts/e2e_stack_check.sh 默认的 `API_BASE` 是 **http://127.0.0.1:18080** (Compose 默认配置)。对于在 **:8000** 上运行的主机 API,请执行 `API_BASE=http://127.0.0.1:8000 ./scripts/e2e_stack_check.sh`。该脚本执行:**`GET /health`** → **`POST /triage`** (验证 `triage_id`、严重性、操作、非空的 **evidence**;可选参数 **`STRICT_RAG_EVIDENCE=1`** 要求证据中包含 `data/` 源) → **`POST …/webhook/ticket-creation`** (模拟 Jira 路径)。可使用 **`SKIP_TRIAGE=1`** 或 **`SKIP_N8N=1`** 来单独测试各个步骤。 - **仅 n8n** (API 运行在主机上):继续使用 [`docker-compose.n8n.yml`](docker-compose.n8n.yml) 并设置 `TRIAGE_API_BASE=http://host.docker.internal:8000`。 ### 云部署前手动验证 在部署到 AWS 之前,请仔细过一遍 **[`docs/validation/pre-cloud-validation.md`](docs/validation/pre-cloud-validation.md)**(分诊质量、n8n、故障模式、延迟)。使用 **`scripts/benchmark_triage_latency.sh`** 来比较主机与 Docker 环境下 `/triage` 的实际执行时间。 ### 阶段 10 — AWS 结合 Terraform - **交付物:** 针对每个环境执行 `terraform init` / `plan` / `apply`;VPC、子网、安全组、ECR、ALB、ECS on **Fargate**、IAM、CloudWatch 日志,以及用于存储 `OPENAI_API_KEY` 的可选 **SSM**。 - **指南:** [`infra/terraform/README.md`](infra/terraform/README.md)。 - **布局:** [`infra/terraform/modules/`](infra/terraform/modules/) · [`infra/terraform/envs/dev/`](infra/terraform/envs/dev/) · [`infra/terraform/envs/prod/`](infra/terraform/envs/prod/)。复制 `terraform.tfvars.example` → `terraform.tfvars` (gitignored)。 ### 后续 (阶段 11+) - **推送镜像到 ECR**,Fargate 上的 RAG 索引策略(EFS / 镜像内置 / 下载),ALB 前的 TLS,CI/CD,可观测性 (阶段 12)。 ## 代码库布局(高层概览) | 路径 | 用途 | |------|---------| | [`execution.md`](execution.md) | 构建顺序、阶段、里程碑 | | [`docs/decisions/`](docs/decisions/) | 架构决策记录 (ADRs) / 产品定义 | | [`docs/validation/pre-cloud-validation.md`](docs/validation/pre-cloud-validation.md) | 上云前的手动检查(分诊、n8n、韧性、延迟) | | [`docs/decisions/capabilities-and-roadmap.md`](docs/decisions/capabilities-and-roadmap.md) | 准确的产品分类 + 顶级系统路线图 | | [`docs/decisions/triage-audit-validation.md`](docs/decisions/triage-audit-validation.md) | JSONL 审计检查、数据泄漏、评估路线图 | | [`docs/architecture/`](docs/architecture/) | **[架构图](docs/architecture/README.md)** (`architectural-diagram.png` 位于代码库根目录) | | [`data/runbooks/`](data/runbooks/) | SRE 风格的过程运维手册 (`RB-*` IDs) | | [`data/incidents/`](data/incidents/) | 合成的复盘风格事件 (`INC-*`) | | [`data/logs/`](data/logs/) | 合成日志包 + [`sample-log.md`](data/logs/sample-log.md) | | [`data/knowledge_base/`](data/knowledge_base/) | 升级、所有权、层级、首次响应笔记 | | [`data/README.md`](data/README.md) | 数据布局与摄取 Glob 模式 | | `app/` | `app/rag/`、`app/agent/`、`app/api/` (FastAPI)、`app/models/`、`app/ui/` (Gradio)、`app/eval/` (阶段 8) | | [`data/eval/`](data/eval/) | 黄金基准 JSONL + 评估 README | | [`examples/sample_incident_payload.json`](examples/sample_incident_payload.json) | 用于 `triage` CLI 的示例 JSON | | [`scripts/e2e_stack_check.sh`](scripts/e2e_stack_check.sh) | Health + `/triage` + n8n Webhook 冒烟测试 | | [`scripts/benchmark_triage_latency.sh`](scripts/benchmark_triage_latency.sh) | 重复 `POST /triage` 计时 (平均 / p95) | | [`workflows/n8n/`](workflows/n8n/) | n8n 工作流 JSON + 阶段 6 运维手册 | | [`docker-compose.yml`](docker-compose.yml) | 阶段 9 — API + n8n | | [`docker-compose.n8n.yml`](docker-compose.n8n.yml) | 阶段 6 — 仅 n8n | | [`Dockerfile`](Dockerfile) | 阶段 9 — API 镜像 | | [`infra/terraform/`](infra/terraform/) | 阶段 10 — 模块化 Terraform,`envs/dev` & `envs/prod` | ## Python 环境 (**uv**,而非手动 venv + pip) 本代码库使用 **[uv](https://docs.astral.sh/uv/)** 来创建 `.venv`,从 [`pyproject.toml`](pyproject.toml) 解析依赖,并使用锁定版本运行命令 ([`uv.lock`](uv.lock))。 安装 uv(任选其一): ``` curl -LsSf https://astral.sh/uv/install.sh | sh # 或:brew install uv ``` 同步并安装项目(可编辑模式) + 开发工具: ``` cd autonomous-incident-response-agent uv sync --extra dev ``` 运行 RAG CLI(始终通过 `uv run` 以使用正确的环境): ``` uv run python -m app.rag.cli build-index uv run python -m app.rag.cli query "High CPU on payment-api in production" # 或 entry points: uv run rag-build uv run rag-query "High CPU on payment-api in production" ``` **阶段 4 — 分诊(需要 `.env` + 已构建的 RAG 索引 + 支持对话的 LLM):** ``` uv run python -m app.agent.cli -f examples/sample_incident_payload.json # 或:uv run triage -f examples/sample_incident_payload.json ``` **阶段 8 — 评估(相同环境;每条黄金基准行都会调用实时 LLM):** ``` uv run triage-eval # Markdown 报告输出到文件: uv run triage-eval --out data/eval/reports/latest.md ``` **阶段 5 — API(与分诊所需环境相同):** ``` uv run serve-api # 或:uv run uvicorn app.api.main:app --reload --host 127.0.0.1 --port 8000 ``` 可选:为 `serve-api` 配置 `API_HOST`、`API_PORT`。 ``` curl -s http://127.0.0.1:8000/health curl -s http://127.0.0.1:8000/version curl -s -X POST http://127.0.0.1:8000/ingest-incident -H "Content-Type: application/json" \ -d @examples/sample_incident_payload.json curl -s -X POST http://127.0.0.1:8000/triage -H "Content-Type: application/json" \ -d @examples/sample_incident_payload.json ``` OpenAPI: `http://127.0.0.1:8000/docs` **阶段 7 — Gradio UI(可选附加项,与阶段 5 共用服务器):** ``` uv sync --extra ui uv run serve-api # 浏览器:http://127.0.0.1:8000/ui ``` **阶段 9 — 全栈 (API + n8n 运行在 Docker 中):** ``` # 在执行以下操作后:uv run rag-build 以及包含 OPENAI_API_KEY 的 .env docker compose up -d --build # API:http://127.0.0.1:18080/docs(如果需要使用 :8000,可使用 COMPOSE_API_PORT=8000 进行覆盖) ``` **阶段 6 — 仅 n8n (API 在另一终端运行于主机上):** ``` docker compose -f docker-compose.n8n.yml up -d ``` 在 n8n 中导入并激活:[`incident-triage-escalation.json`](workflows/n8n/incident-triage-escalation.json)、[`incident-ticket-creation.json`](workflows/n8n/incident-ticket-creation.json),以及可选的 [`incident-triage-feedback.json`](workflows/n8n/incident-triage-feedback.json) — 然后按照 [`workflows/n8n/README.md`](workflows/n8n/README.md) 操作。 如果 `POST /triage` 返回 `{"detail":"Not Found"}`,说明有其他程序绑定了该端口或旧服务器仍在运行。使用 `curl -s http://127.0.0.1:8000/` 检查 — 你应该会看到 `service: autonomous-incident-response-agent` 和 `triage: POST /triage`。然后重启:`uv run serve-api`(或者在代码库根目录下运行 `uvicorn app.api.main:app`)。 如果需要,请在 `.env` 中设置 `LLM_MODEL`(默认 `gpt-4o-mini`)。除非你之后拆分了提供商,否则对话功能将使用与嵌入相同的 `OPENAI_API_KEY` / `OPENAI_API_BASE`。 在更改 `pyproject.toml` 后刷新锁定文件: ``` uv lock ``` [`requirements.txt`](requirements.txt) 是为非 uv 工作流提供的可选镜像;**优先使用 `uv sync`**。 ## 免责声明 运维手册、事件和日志都是**合成的**训练/评估材料。它们不是真实的生产数据。
标签:AIOps, AIOps助手, API服务, AV绕过, AWS, CISA项目, DLL 劫持, Docker, Docker Compose, DPI, EC2, ECS, FAISS, FastAPI, Gradio, IaC, ITSM, IT运维, Jira集成, LLM, n8n, NIDS, NLP, Python, RAG, Runbook, Slack集成, Socks5代理, SRE, SRE Copilot, Terraform, Unmanaged PE, uv, Webhook, 事故响应, 云计算, 人工智能, 偏差过滤, 力导向图, 向量数据库, 告警分析, 告警分诊, 大语言模型, 安全防御评估, 容器化, 工单系统, 开源框架, 持续部署, 持续集成, 故障诊断, 无后门, 智能运维, 漏洞利用检测, 用户模式Hook绕过, 知识检索, 系统可靠性工程, 结构化推理, 网络研究, 自动化运维, 规则引擎, 请求拦截, 运维机器人, 运维自动化, 逆向工具