内容
<div align="center">
# 调试自主代理 DAA
**您的应用程序在凌晨3点崩溃。DAA 调查根本原因并打开拉取请求 — 在您睡觉时。**
[](https://www.python.org/)
[](./LICENSE)
[](https://fastapi.tiangolo.com/)
[](https://python.langchain.com/)
[](./Dockerfile)
</div>
<div align="center">
<img src="./docs/daa_hero.jpg" alt="DAA Hero Banner" width="800"/>
</div>
<p align="center">
<video src="https://github.com/user-attachments/assets/38b77b21-f70a-4501-8308-bf88e03706fb" controls muted width="320" style="max-width: 100%;"></video>
</p>
---
## 工作原理
```
凌晨3点,您的应用程序发生错误
↓
DAA SDK 捕获错误 → 发送到 DAA (一行代码)
↓
SHA-256 deduplication — 相同错误再次发生?静默抑制。
新模式?代理唤醒。
↓
AI 代理在4个维度进行调查:
• Git 提交记录 → 最近发生了什么变化?
• 应用程序日志 → 堆栈跟踪是什么?
• 跟踪信息 → 哪个请求触发了它?
• 源代码 → AST 导航到确切的行
↓
打开一个拉取请求,包含:
• 代码修复
• 根本原因解释
• 事后总结
↓
您醒来,审查 PR 并合并。
```
---
## ⚡ 快速开始 — 无服务器模式(1 命令)
运行 DAA 的最简单方法是作为无状态的 webhook 接收器,通过独立的 Docker 镜像。无需数据库或队列。
它接收警报,与 LLM 对话,推送分支并打开 PR。
**要求:** Docker,免费的 [Gemini API 密钥](https://aistudio.google.com/app/apikey) 和 GitHub 个人访问令牌。
```bash
docker run -p 8000:8080 \
-e LLM_PROVIDER=google \
-e GEMINI_API_KEY="your_api_key_here" \
-e LLM_MODEL="gemini-2.5-flash" \
-e DAA_DB_PROVIDER=none \
-e DAA_GIT_TOKEN="github_pat_..." \
-e GIT_HOST="https://github.com" \
-e GIT_ORG="your-github-username" \
rutvej1/daa-standalone:latest
```
然后触发测试事件(模拟 Prometheus/Sentry 的 webhook):
```bash
curl -X POST http://localhost:8000/ingest/prometheus \
-d '{"status": "firing", "alerts": [{"labels": {"alertname": "TestCrash"}}]}'
# → DAA 立即唤醒,克隆仓库,查询 LLM 并打开 PR
```
*想要完整的持久化堆栈(Postgres + RabbitMQ + UI)?请参阅 [DEPLOYMENT.md](./DEPLOYMENT.md)。*
---
## 🔌 两种集成方式
DAA 很灵活。您可以将其插入现有的警报堆栈中,也可以直接检测代码。
### 1. 现有日志聚合器和 Webhooks(推荐用于无服务器)
您不需要使用我们的 SDK 或更改应用程序代码。您只需将现有的警报工具(Sentry、Datadog、Prometheus、CloudWatch)指向 DAA 的 webhook 端点。
- **身份验证:** 运行 DAA 时设置 `DAA_AUTH_ENABLED=false`,并在您自己的 API Gateway、AWS IAM 或 Cloudflare Tunnel 后面进行安全保护。
- **重复数据删除:** 依赖现有的聚合器对错误进行分组,并让 DAA 处理自动修复。
### 2. DAA SDK(推荐用于全栈)
如果您没有集中式日志记录,请使用 DAA SDK。
- 需要使用 `DAA_AUTH_ENABLED=true` 部署 DAA(通常通过 Docker Compose)。
- 您注册您的应用程序,获取 `DAA_TOKEN`,SDK 安全地将异常推送到 DAA。
```python
# pip install daa-sdk
from daa_sdk import DAAClient
daa = DAAClient() # 从环境变量中读取 DAA_TOKEN
daa.report_exception(exception, app_name="my-service")
```
---
## DAA 的不同之处
| | 传统警报 | DAA |
|--|--|--|
| **何时触发** | 每次错误发生时 | 每个独特错误模式一次 |
| **告诉您什么** | "发生错误" | 根本原因 + 代码修复 |
| **您需要做什么** | 手动调查 | 审查 PR |
| **凌晨3点页面** | 每次 | 仅针对真正的新问题 |
---
## 功能
| | |
|--|--|
| 🔁 **零警报疲劳** | SHA-256 指纹重复数据删除 + 滑动窗口冷却 |
| 🧠 **4维调查** | Git 历史记录 · 日志 · 跟踪 · AST 代码导航 |
| 🔒 **代理安全** | 硬 8 工具调用预算上限 — 无失控 LLM 成本 |
| 🔀 **任意 LLM** | Gemini · GPT-4o · Claude · Vertex · Ollama(隔离) |
| 👤 **人工介入** | 在 PR 落地前批准 AI 修复 |
| 🔧 **任意 Git 仓库** | GitHub · GitLab · Gitea · Bitbucket |
| 🌐 **MCP 兼容** | 将 DAA 用作 Claude Desktop 或 Cursor 中的工具 |
---
## 部署
| 模式 | 最适合 | 操作方法 |
|------|----------|-----|
| **单个 Docker 容器** | 试用,小团队 | `docker run -p 8000:8080 --env-file .env daa:latest` |
| **Docker Compose** | 自托管,持久化 | `daa redeploy` |
| **无服务器** | Cloud Run / Fargate,零运维 | `DAA_DB_PROVIDER=none DAA_GIT_MODE=api` |
完整指南:[DEPLOYMENT.md](./DEPLOYMENT.md)
---
## 架构
```
DAA/
├── app/
│ ├── backend-api/ ← FastAPI:摄取,重复数据删除,事件跟踪
│ ├── python-agent/ ← LangChain ReAct SRE 代理(大脑)
│ ├── admin-panel/ ← React 仪表板
│ └── daa-sdk/ ← Python SDK(Node/Go/Java/Ruby/.NET 社区)
├── daa ← CLI 工具(daa init / register / test / logs)
└── docs/ ← 文档
```
---
## CLI
```bash
daa init # 有指导的设置:LLM 密钥,git 令牌,部署模式
daa register # 注册应用程序并获取其 DAA_TOKEN
daa policy # 设置升级阈值(例如 60 秒内 3 个错误)
daa test # 触发合成错误并观察管道
daa logs # 查看最近的事件
daa status # 健康检查所有容器
daa redeploy # 重建并重启所有内容
daa config set-model # 在不重启的情况下切换 LLM 提供商/模型
```
---
## 安全
设计为自托管和私有的。有关完整的强化指南,请参阅 [SECURITY.md](./SECURITY.md)。
- 凭证仅通过环境变量 — 绝不作为文件挂载到容器中
- CORS 限制为显式允许列表 (`CORS_ALLOW_ORIGINS`)
- Webhook 端点验证 `DAA_API_KEY` + HMAC-SHA256(Sentry)
- LLM 代理工具调用预算硬上限(无无限制循环)
- 报告漏洞:[GitHub Security Advisories](https://github.com/rutvej/DAA/security/advisories/new)
---
## 贡献
[CONTRIBUTING.md](./CONTRIBUTING.md) · [SECURITY.md](./SECURITY.md) · [LICENSE](./LICENSE)
欢迎 PR。对于较大的更改,请先打开问题以统一方法。
---
<div align="center">
**为工程师而建,他们厌倦了因同一错误而在凌晨3点被提醒两次。**
⭐ 如果它对您有帮助,请给这个仓库点赞 · [报告错误](https://github.com/rutvej/DAA/issues) · [请求功能](https://github.com/rutvej/DAA/issues)
</div>