adithyavedavyas1999/Sentinel

GitHub: adithyavedavyas1999/Sentinel

一个基于 LLM agent 的本地自愈型数据管道,专注于 pipeline 故障的自动诊断、修复建议与事件管理闭环。

Stars: 0 | Forks: 0

# Sentinel 🛡 [![ci](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/ec0809993e012403.svg)](https://github.com/adithyavedavyas1999/Sentinel/actions/workflows/ci.yml) ![python](https://img.shields.io/badge/python-3.11+-blue.svg) ![license](https://img.shields.io/badge/license-MIT-green.svg) 一个本地数据 pipeline,在发生故障时会尝试自我诊断。 Sentinel 会摄取 NYC TLC trip data 和 Open-Meteo 天气数据,通过 DuckDB 中的 bronze/silver/gold 数据仓库进行存储落地,并在上层运行 dbt 模型。当 asset 发生故障或数据质量检查触发警报时,LLM agent 会读取失败 asset 的日志、dbt manifest 以及最近的运行历史记录,然后要么执行小范围的自动修复(auto-remediation),要么提交一份带有建议修复方案的结构化事件(incident)。该 agent 不能在小型白名单(allowlist)之外更改数据仓库的状态。 这个项目的重点不在于数据本身。重点在于故障处理循环(failure-handling loop):输入结构化日志,输入数据血缘(lineage)和元数据,输出决策,并保留审计追踪(audit trail)。 ## 状态 路线图中的十二周计划已全部落地。端到端流程:混沌注入(chaos injection)→ asset 故障 → 事件记录至 sqlite → agent 通过 LLM 进行诊断 → 针对白名单进行可选的自动修复 → 事件 JSON 写入 MinIO → FastAPI + Streamlit 面板供人类审查和批准。 查看 [docs/roadmap.md](docs/roadmap.md) 了解每周交付的内容,查看 [docs/known-issues.md](docs/known-issues.md) 了解在真实代码库中我会修复的问题,查看 [docs/architecture.md](docs/architecture.md) 了解 ADR。 截图:仍待完成。等录制完演示视频后会更容易处理。 ## 包含内容 - Dagster(assets + sensors)用于编排 - 基于 DuckDB 的 dbt-core 用于数据转换(transforms) - MinIO 用于原始数据落地(landing),Postgres 用于 Dagster 元数据 - Prometheus + Grafana + Loki 用于监控指标和日志 - LiteLLM(默认为 Groq)用于诊断提示(prompt);可通过环境变量更换 provider - fastembed + Qdrant 用于相似事件检索 - LangGraph 用于 agent 状态机 — 仅用于编排,不包含 LangChain 的 provider 抽象(见 ADR-005) - FastAPI + Streamlit 用于事件面板 ## 快速开始 ``` make setup # uv venv + install cp .env.example .env make up # docker compose up make seed-data # pulls a TLC sample make demo # materializes the pipeline end-to-end ``` Dagster UI: Grafana: MinIO 控制台: Incident API: (Swagger) 事件面板 (Incident dashboard): 如果你不需要完整的 compose 技术栈,可以使用仅限本地的入口: ``` make api # uvicorn on :8000 make dashboard # streamlit on :8501 ``` ## 演示路径 1. `make demo` — 三个月的 bronze 层数据 + dbt build。 2. `sentinel chaos inject tlc_5xx` — 触发一个标志,使得下一次 TLC 物化(materialization)将抛出异常。 3. 在 Dagster 中重新运行该 partition。故障捕获传感器(failure capture sensor)会将事件存储在 sqlite 中。 4. 从 Dagster UI 启用 `diagnostic_agent_sensor`。在大约 30 秒内,agent 会完成诊断,提出 `retry-with-backoff` 建议,清除 chaos 标志,随后事件报告将出现在 `sentinel-incidents/incidents/.json` 中。 5. 打开 Streamlit 面板,点击“Apply”应用 retry-with-backoff(幂等操作 — 与 agent 执行的操作相同)。Pipeline 随即恢复运行。 详细版本请参见 [docs/demo-script.md](docs/demo-script.md)。 ## 文档 - [架构与 ADR](docs/architecture.md) - [路线图](docs/roadmap.md) - [数据模型](docs/data-model.md) - [混沌场景](docs/chaos-scenarios.md) - [演示脚本](docs/demo-script.md) - [已知问题](docs/known-issues.md) ## 仓库布局 - `sentinel/ingest/`: 纯 Python 编写的 TLC + Open-Meteo 抓取器,支持重试 - `sentinel/assets/`: Dagster bronze + interim silver assets - `sentinel/observability/`: Prometheus, Grafana, Loki(指标、日志) - `sentinel/agent/llm.py`: LiteLLM(默认为 Groq)封装诊断提示 - `sentinel/agent/context.py`: dbt manifest + 运行历史记录 + 最近的日志 + 来自 Qdrant 的相似事件,均为可选项 - `sentinel/agent/embeddings.py`: fastembed + Qdrant 用于相似事件检索 - `sentinel/agent/graph.py`: LangGraph 状态机 (classify → gather_context → diagnose → propose_action → format_incident) - `sentinel/agent/remediation/`: 三个白名单操作 (retry-with-backoff, partition-window-slip, coerce-to-string),每个都包含守卫(guard)/执行(execute)/回滚(rollback) - `sentinel/api/`: 基于事件存储 + 白名单的 FastAPI 服务 - `sentinel/ui/dashboard.py`: Streamlit 事件页面 - `sentinel/chaos/`: 九种故障场景,全部实现端到端打通 - `sentinel/quality/`: sqlite 中的事件存储,供 agent 消费 - `dbt/`: 基于 DuckDB 的 dbt-core ## 为什么会有这个项目 我想要一个项目,其核心在于处理故障路径(failure path),而不是正常路径(happy path)。大多数 pipeline 在一切正常(绿灯)时看起来都一样。它们在出现故障(红灯)时才会体现出差异。 ## 许可证 MIT。
标签:Dagster, dbt, DuckDB, Kubernetes, 数据管道, 数据质量, 版权保护, 自动化运维, 自定义请求头, 软件工程, 逆向工具