zipgod24/AetherFlow
GitHub: zipgod24/AetherFlow
一个基于Go语言的事件驱动多Agent智能安全事件响应平台,通过RabbitMQ编排、混合RAG检索和对抗性验证实现从威胁分析到自动处置的完整流水线。
Stars: 1 | Forks: 1
# AetherFlow
**一个用于智能事件响应的事件驱动多 Agent 平台。**
RabbitMQ 编排 · 基于 pgvector 的 Agentic RAG · 感知 DNS 的服务发现 · OpenTelemetry 端到端 · BYO-LLM(默认 Ollama,通过 UI 支持 OpenAI / Anthropic / 任何 OpenAI 兼容的 endpoint)
[快速开始](#quickstart) · [架构](#architecture) · [演示工作流](#demo-the-suspicious-domain-incident) · [安全模型](#security-model) · [基准测试](docs/benchmarks.md) · [架构决策记录 (ADRs)](docs/adr)
## 为什么选择 AetherFlow
大多数“AI Agent”代码库都只是链式连接到 OpenAI 的单个 Python 笔记本。AetherFlow 则是作为生产级基础设施来构建的:
- **事件驱动,而非 RPC 意大利面条式架构。** Agent 之间从不直接相互调用。所有内容都通过具有持久队列、按阶段死信路由、幂等键和有限次重试的 RabbitMQ topic exchange 传输。你可以在流程中间杀死任何 Agent,整个 saga 会自动恢复。
- **Agentic RAG,而非朴素 RAG。** Retriever 会自行决定*是否*以及*如何*进行搜索。它将密集的 pgvector ANN 与稀疏的 `tsvector` BM25 风格评分(混合搜索)相结合,然后使用倒数秩融合进行重排。它还可以将实时 DNS 查询和威胁情报解析作为另一种工具来执行。
- **DNS 原生服务发现。** 服务通过 SRV 记录相互查找(开发环境使用本地 CoreDNS,生产环境使用 Kubernetes headless services)。没有硬编码的主机名,也不需要外挂 Consul。
- **具备对抗意识。** 专用的 Validator Agent 会在任何 Executor 动作运行之前,筛查每个 Reasoner 的输出是否包含 prompt 注入标记、越狱启发式特征、schema 偏移和引文幻觉。
- **可观测性第一。** 每一个事件、LLM 调用、数据库查询和 DNS 查询都是单个 OpenTelemetry 链路中的一个 span。Jaeger 已内置在 compose 文件中。
- **BYO-LLM。** Ollama 开箱即用支持本地运行。Web UI 中提供了一个密钥管理面板,任何审查人员都可以粘贴 OpenAI / Anthropic / 兼容 OpenAI 的 endpoint,并使用托管模型重新运行同一事件——无需重新构建,也无需编辑环境变量文件。
## 架构
```
flowchart LR
subgraph Edge
UI[Web UIvanilla JS + Tailwind] CLI[aetherctl CLI] end UI -- HTTP/SSE --> GW CLI -- HTTP --> GW GW[API Gateway
cmd/api-gateway] subgraph Bus[RabbitMQ — topic: aether.events] direction LR RK1((incident.created)) RK2((context.assembled)) RK3((analysis.completed)) RK4((analysis.validated)) RK5((action.executed)) DLX[(aether.dlx
dead-letter)] end GW -- publishes --> RK1 RK1 --> RET[Retriever Agent] RET -- pgvector + tsvector --> PG[(Postgres
+ pgvector)] RET -- SRV + TXT --> DNS{{CoreDNS / k8s DNS}} RET -- threat-intel --> DNS RET -- publishes --> RK2 RK2 --> REA[Reasoner Agent] REA -- chat completion --> LLM[(LLM Provider
Ollama / OpenAI / Anthropic)] REA -- publishes --> RK3 RK3 --> VAL[Validator Agent] VAL -- rejects --> DLX VAL -- publishes --> RK4 RK4 --> EXE[Executor Agent] EXE -- mock action APIs --> EXT[(Firewall / Pager
mock adapters)] EXE -- publishes --> RK5 GW -- SSE stream --> UI GW -.-> OTEL[(OpenTelemetry / Jaeger)] RET -.-> OTEL REA -.-> OTEL VAL -.-> OTEL EXE -.-> OTEL ``` ### Agent 循环的通俗解释 ``` sequenceDiagram autonumber participant U as User / SOC analyst participant GW as API Gateway participant R as Retriever participant Reason as Reasoner participant V as Validator participant E as Executor participant L as LLM U->>GW: POST /v1/incidents { description } GW->>R: incident.created (AMQP) R->>R: DNS A/AAAA/MX/TXT lookups R->>R: pgvector ANN + tsvector hybrid search R->>R: reciprocal rank fusion + dedupe R->>Reason: context.assembled Reason->>L: prompt with retrieved evidence + tool spec L-->>Reason: structured analysis (JSON) Reason->>V: analysis.completed V->>V: prompt-injection scan, schema check,
citation grounding check alt invalid V-->>GW: validation.rejected → DLX else valid V->>E: analysis.validated E->>E: idempotent action (block IP, page on-call) E->>GW: action.executed end GW-->>U: SSE stream of every transition ``` ### 为什么各个组件都非同小可 | 关注点 | AetherFlow 的做法 | 为什么重要 | | --- | --- | --- | | 可靠性 | 带有 `x-death` 跟踪的按阶段死信 exchange;有限次重试;幂等键去重表 | 允许你崩溃任何 Agent 并安全重放 | | 吞吐量 | 按 Agent 调优的 prefetch;消费者池;通过 QoS 实现背压 | 当 LLM 停滞时,单个 Reasoner 不应被淹没 | | 混合 RAG | pgvector (余弦) + Postgres `ts_rank_cd` → 倒数秩融合 → 可选的 cross-encoder 重排槽 | 单独的稠密检索在语义上表现很好,但对于精确标识符(CVE-2024-…, IP 文本)却很糟糕。混合搜索才是生产环境的答案 | | 服务发现 | 每个服务通过 DNS SRV 注册;客户端解析 `_amqp._tcp.aether.local` 等 | 将新的副本放入集群中,总线客户端无需配置即可自动识别 | | LLM 可移植性 | `llm.Provider` 接口;Ollama, OpenAI, Anthropic 以及通用的 OpenAI 兼容适配器;通过 header 实现按请求覆盖 | 审查人员可以在 UI 中切换提供商 | | 安全性 | Prompt 注入词典 + 正则栈,结构化输出 JSON schema 强制执行,支持 mTLS 的传输,仅在 env / Vault 中存储 secrets | Validator 是一个真正的 Agent,而不是摆设 | | 可观测性 | 每个二进制文件中都包含 OTel SDK;通过 AMQP headers 传播 trace;compose 中包含 Jaeger UI | 单个 trace 即可展示从点击到防火墙模拟的完整事件 | ## 快速开始 前置条件:Docker + Docker Compose,Go 1.22+,约 6 GB 可用空间用于 Ollama 镜像。无需 Python,也没有 Node 构建步骤。 ``` git clone https://github.com/zipgod24/aetherflow.git cd aetherflow cp .env.example .env # 启动 RabbitMQ、Postgres+pgvector、Ollama、Jaeger 以及所有 agent make up # 在第二个终端中,初始化 RAG corpus(MITRE ATT&CK + 示例 runbook) make seed # 打开 UI open http://localhost:8080 ``` 然后点击右上角的 **Run demo incident**,或者: ``` ./bin/aetherctl incident submit --file examples/incidents/suspicious-domain.json ./bin/aetherctl incident watch
标签:AI安全, AI风险缓解, Anthropic, API集成, Chat Copilot, CIS基准, DNS解析, EVTX分析, GET参数, Golang, Go语言, LLM代理, LLM评估, Ollama, OpenAI, OpenTelemetry, pgvector, RabbitMQ, RAG, Saga模式, SecOps, 事件编排, 事件驱动架构, 云安全架构, 内存规避, 分布式追踪, 可观测性, 增强检索生成, 多智能体平台, 大模型集成, 威胁情报, 子域名突变, 安全编程, 安全运营, 开发者工具, 开源项目, 扫描框架, 日志审计, 智能应急响应, 服务发现, 死信路由, 测试用例, 消息队列, 混合检索, 用户代理, 程序破解, 请求拦截, 重试机制