Files
sundynix-agentix/analysis-6.27.md
T
2026-06-27 12:06:29 +08:00

321 lines
20 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# sundynix-agentix 项目分析报告(2026-06-27
> **分析时间**2026 年 6 月 27 日(dev 分支,commit 148+
>
> **一句话定位**:一个面向企业的 **AI Agent 编排平台**,支持可视化 DSL 构建 Agent 工作流、多模型热切换、RAG 知识库、长期记忆、自动评测闭环、人工审批(HITL)、桌面端原生应用 + Web 运维控制台,一键 Docker 部署。
---
## 一、整体架构(五层微服务)
```
┌─────────────────────────────────────────────────────────────────────┐
│ 第 1 层 · 客户端 │
│ ┌───────────────────────┐ ┌───────────────────────┐ │
│ │ sundynix-desktop │ │ sundynix-admin │ │
│ │ (Wails + React + TS) │ │ (Vite + React + TS) │ │
│ │ 桌面原生应用 │ │ Web 运维控制台 │ │
│ └──────────┬────────────┘ └──────────┬─────────────┘ │
│ │ HTTP/SSE │ HTTP │
│ ═══════════╪══════════════════════════╪═════════════════════════ │
│ 第 2 层 · API 网关 │
│ ┌──────────▼──────────────────────────▼─────────────┐ │
│ │ sundynix-gateway (Go · Gin) │ │
│ │ DSL 解析 / JWT 鉴权 / 护栏(Tier1) / SSE 流 / │ │
│ │ 状态机 / 评测落库 / 配置控制面 / MinIO │ │
│ │ Postgres + Redis + MinIO │ │
│ └──────────┬────────────────────────────────────────┘ │
│ │ NATS JetStream + core pub/sub │
│ ═══════════╪══════════════════════════════════════════════════ │
│ 第 3 层 · 调度与编排 │
│ ┌──────────▼──────────────────────────────────────┐ │
│ │ sundynix-dispatcher (Go · Eino) │ │
│ │ DSL 图引擎 / ReAct Agent / 流式推理 / 记忆对账 / │ │
│ │ 报告多步编排 / 自动评测+纠偏 / 熔断 / 预算护栏 │ │
│ └────────┬───────────────────────────┬──────────────┘ │
│ │ NATS request-reply │ │
│ ═════════╪═══════════════════════════╪═════════════════════ │
│ 第 4 层 · 共享契约与总线 │
│ ┌────────▼───────────────────────────▼────────────┐ │
│ │ sundynix-shared (Go) │ │
│ │ contract / bus(NATS) / otelx / secrets │ │
│ └──────────────────────────────────────────────────┘ │
│ ═══════════════════════════════════════════════════════════ │
│ 第 5 层 · MCP 工具微服务 │
│ ┌──────────────────────────────┐ ┌──────────────────────┐ │
│ │ sundynix-mcp-go (Go) │ │ sundynix-mcp-py (Py) │ │
│ │ RAG(Milvus+Bleve+Neo4j) / │ │ 文档解析(Word/PDF) / │ │
│ │ 记忆(PG) / 历史(Redis) / │ │ 代码沙箱(Docker) │ │
│ │ 报告渲染(docx) / 搜索 / │ │ 算法型 MCP 工具 │ │
│ │ 知识库管理 / 图谱 / 外部工具 │ │ │ │
│ └──────────────────────────────┘ └──────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
```
---
## 二、技术栈全景
### 后端(Go 1.25
| 领域 | 技术选型 | 用途 |
|------|---------|------|
| HTTP 框架 | Gin 1.12 | 网关 REST API + SSE |
| Agent 编排 | CloudWeGo Eino | ReAct Agent、compose.Graph、流式推理 |
| 消息总线 | NATS JetStream | 任务分发、Token 回流、工具调用、配置广播、审批 |
| 关系库 | PostgreSQL 16 + GORM | 用户、任务、评测、画像、知识库元数据 |
| 缓存/流 | Redis 7 + go-redis | Session、Token 日预算、Redis Stream 回放 |
| 向量库 | Milvus 2.4 | RAG 向量检索 |
| 全文索引 | Bleve v2 | RAG 全文路 + RRF 融合 |
| 图数据库 | Neo4j 5 | 知识图谱三元组(GraphRAG |
| 对象存储 | MinIO | 文件/文档/报告附件 |
| 链路追踪 | OpenTelemetry + Jaeger | 全链路 traceNATS 传播) |
| 指标监控 | Prometheus client_golang | HTTP/任务/模型指标 |
| 认证鉴权 | JWT (golang-jwt/v5) + bcrypt | 用户注册/登录/token |
| 密钥管理 | AES-256-GCM (自建 secrets 包) | API Key 落库/过线加密 |
| ID 生成 | 雪花算法 (bwmarrin/snowflake) | 全局唯一 ID |
| 桌面端 | Wails v2 | Go + WebView 原生桌面应用 |
### 前端
| 领域 | 技术选型 | 用途 |
|------|---------|------|
| 框架 | React 19 + TypeScript | 桌面端 & 管理端 |
| 构建 | Vite 5 | 前端构建 |
| 样式 | TailwindCSS 3 | UI 样式 |
| 路由 | react-router-dom 7 | SPA 路由 |
| 图编辑 | @xyflow/react 12 (React Flow) | DSL 可视化编排画布 |
| 图谱可视化 | react-force-graph-2d | 知识图谱力导向图 |
| 图标 | lucide-react | UI 图标 |
| 测试 | Vitest + Testing Library | 前端单测 |
### Pythonmcp-py
| 领域 | 技术选型 | 用途 |
|------|---------|------|
| 运行时 | Python 3.11+ | 算法型工具 |
| 消息总线 | nats-py | 接入 NATS 骨干网 |
| 文档解析 | python-docx / openpyxl / pypdf | Word/Excel/PDF 解析 |
| 代码沙箱 | docker SDK | Docker 隔离执行环境 |
### 基础设施
| 组件 | 镜像 | 用途 |
|------|------|------|
| NATS | nats:2-alpine | 消息骨干网 (JetStream 持久化) |
| PostgreSQL | postgres:16-alpine | 关系存储 |
| Redis | redis:7-alpine | 缓存 / Stream / 预算 |
| Milvus | milvusdb/milvus:v2.4.13 | 向量数据库 |
| etcd | quay.io/coreos/etcd:v3.5.14 | Milvus 元数据 |
| MinIO | minio/minio | 对象存储 |
| Neo4j | neo4j:5-community | 图数据库 |
| Jaeger | jaegertracing/all-in-one:1.60 | 链路追踪 UI |
---
## 三、已实现功能清单
### 🧠 核心 AI 能力
| 功能 | 实现程度 | 关键文件 |
|------|---------|---------|
| **DSL 图编排引擎** | ✅ 完整 | `dispatcher/internal/eino/graph.go` — 11 种节点 (input/memory/retriever/tool/agent/aggregate/render/branch/approval/map/output),拓扑排序执行 |
| **ReAct Agent(自主工具调用)** | ✅ 完整 | `dispatcher/internal/eino/react_agent.go` — Eino ReAct 循环,自动发现 MCP 工具目录,inject 参数绑定 |
| **流式推理** | ✅ 完整 | `orchestrator.go` — ChatStream / StreamText 双模,reasoning 思考过程入轨迹 |
| **多模型热切换** | ✅ 完整 | 控制面 NATS 广播 → Dispatcher/mcp-go 热更新,支持 OpenAI 兼容 / vLLM / Ollama |
| **报告多步编排** | ✅ 完整 | `report.go` — 规划大纲 → 并行(RAG+撰写) → 汇聚 → 渲染 Word/PDF/Markdown |
| **RAG 混合检索** | ✅ 完整 | `mcp-go/internal/rag/` — Milvus向量 + Bleve全文 + Neo4j图谱 → RRF融合 → 可选 Rerank |
| **知识图谱(GraphRAG** | ✅ 完整 | LLM 抽三元组 → Neo4j 存储 → 检索时图谱路参与 RRF 融合 |
| **长期记忆(Generative Agents 式)** | ✅ 完整 | `memory/store.go` — Recency×Importance 加权排序,Consolidate 对账,Top-N 截断 |
| **短期多轮历史** | ✅ 完整 | Redis 存会话历史,自动召回注入上下文 |
| **记忆对账(Mem0 式 Consolidate** | ✅ 完整 | `memory_extract.go` — 每 N 轮 LLM 对账 ADD/UPDATE/DELETE/NOOP |
| **多 Agent 协作** | ✅ 完整 | 黑板模式:agentOut 接力,前序 agent 产出注入下游 |
### 🛡️ 安全与治理(Harness
| 功能 | 实现程度 | 关键文件 |
|------|---------|---------|
| **输入护栏 Tier1** | ✅ 完整 | `gateway/internal/guardrail/` — 归一化(去零宽/同形字/base64)→高精度注入正则→敏感词黑名单 |
| **输入护栏 Tier2** | ✅ 完整 | `dispatcher/internal/harness/jailbreak.go` — LLM 越狱分类器,灰区裁决 |
| **输出脱敏** | ✅ 完整 | `harness/output.go` — 跨分片 StreamRedactor (密钥/JWT/PII 手机号/邮箱/身份证),防碎片泄漏 |
| **自动化评测** | ✅ 完整 | `harness/eval.go` — 规则检查 + LLM-as-judge + RAG 忠实度评测(幻觉检测) |
| **低分自动纠偏** | ✅ 完整 | `orchestrator.go#refine` — 评语驱动重生成,取更优者(恒温器闭环) |
| **熔断器** | ✅ 完整 | `harness/circuitbreaker.go` — 连续失败触发熔断,快速拒绝新任务 |
| **Token 预算** | ✅ 完整 | 单任务硬上限(TASK_TOKEN_BUDGET) + 单用户日预算(USER_DAILY_TOKEN_BUDGET) |
| **JWT 鉴权** | ✅ 完整 | `gateway/internal/auth/` — 注册/登录/中间件 |
| **密钥加密** | ✅ 完整 | `shared/secrets/` — AES-256-GCM 落库/过线,生产环境强制设密钥 |
### 🔍 可观测性
| 功能 | 实现程度 | 关键文件 |
|------|---------|---------|
| **全链路 Trace** | ✅ 完整 | OTel → JaegerNATS 消息头传播 trace_id |
| **执行可视化轨迹** | ✅ 完整 | ExecEvent 回流 — 节点点亮/工具入参产出/耗时/分阶段 |
| **Redis 回放** | ✅ 完整 | Token 流 + 执行轨迹 Redis Stream 录制 → SSE 断点续传 |
| **运行历史复盘** | ✅ 完整 | PG 持久化(output+trace),过 Redis TTL 仍可读库复盘 |
| **服务健康灯** | ✅ 完整 | 聚合 6 依赖(gateway/nats/db/redis/milvus/neo4j)实时状态 |
| **Prometheus 指标** | ✅ 基础 | `/metrics` 端点可用 |
### 📱 客户端
| 功能 | 实现程度 | 说明 |
|------|---------|------|
| **桌面原生应用** | ✅ 完整 | Wails v2 — Go 后端 + React/TS 前端 |
| **可视化 DSL 画布** | ✅ 完整 | React Flow 拖拽编排 Agent 图 |
| **实时仪表盘** | ✅ 完整 | 任务/评测/知识库/Token/服务状态聚合展示 |
| **运行·观测页** | ✅ 完整 | 三栏布局:历史列表 / 轨迹面板 / Markdown 输出 |
| **知识库管理** | ✅ 完整 | 入库进度实时回流、图谱可视化 |
| **偏好记忆面板** | ✅ 完整 | 查看/编辑/删除个人偏好 |
| **人工审批(HITL** | ✅ 完整 | 审批节点暂停 → UI 弹批准/拒绝 → 决定回传 |
| **运维控制台** | ✅ 完整 | 模型配置(chat/embedding) / 服务状态 / 计费 |
| **Markdown 渲染** | ✅ 完整 | 表格/代码围栏/图表/流式渲染 |
### 🚀 部署与运维
| 功能 | 实现程度 | 说明 |
|------|---------|------|
| **Docker 容器化** | ✅ 完整 | 5 个服务各自 Dockerfile |
| **一键 Docker Compose 部署** | ✅ 完整 | `docker-compose.prod.yml` — 应用+基建一把拉起,安全配置 |
| **优雅停机** | ✅ 完整 | SIGTERM → drain 排空在途任务/工具 → 超时兜底 |
| **HA 多副本安全** | ✅ 完整 | 事件订阅队列组(QueueGateway),杜绝重复落库/计费 |
| **Go Workspace** | ✅ 完整 | `go.work` 管理 4 个 Go 模块 |
| **Makefile** | ✅ 完整 | 一键启停、测试、构建 |
---
## 四、代码规模
| 指标 | 数据 |
|------|------|
| **Go 源码** | ~15,600 行 |
| **Go 测试** | ~3,400 行 |
| **TypeScript/TSX** | ~6,300 行 |
| **Python** | ~640 行 |
| **总代码** | **~26,000 行** |
| **Git 提交** | 148 次 |
| **Go 模块** | 4 个 (shared/gateway/dispatcher/mcp-go) |
| **微服务** | 6 个 (gateway/dispatcher/mcp-go/mcp-py/admin/desktop) |
| **基础设施组件** | 7 个 (NATS/PG/Redis/Milvus/etcd/MinIO/Neo4j) |
| **Docker 服务** | 12 个 (5 应用 + 7 基建) |
---
## 五、项目成熟度评级
### ⭐ 综合评定:**准生产级(Pre-Production / Late-Beta**
对标业界分级:
| 维度 | 评分 (1-5) | 说明 |
|------|:---:|------|
| **架构设计** | ⭐⭐⭐⭐⭐ | 五层解耦、NATS 骨干网、契约驱动、降级容错、热更新 —— 架构非常成熟 |
| **功能完整度** | ⭐⭐⭐⭐☆ | AI Agent 编排的核心闭环完整,HITL/评测/纠偏/护栏/记忆均已落地 |
| **代码质量** | ⭐⭐⭐⭐☆ | 注释详实(中文),错误处理层次分明,降级模式完备,接口抽象合理 |
| **测试覆盖** | ⭐⭐⭐☆☆ | 关键路径有 e2e/集成/单测(3400行),但覆盖率还有提升空间 |
| **可观测性** | ⭐⭐⭐⭐⭐ | 全链路 trace + 执行轨迹 + Redis 回放 + 健康灯 + 评测落库 —— 业界标杆级 |
| **安全治理** | ⭐⭐⭐⭐☆ | 多层护栏 + 密钥加密 + JWT + 输出脱敏 + 预算控制 —— 极其完善 |
| **部署运维** | ⭐⭐⭐⭐☆ | 一键 compose + 优雅停机 + HA + Makefile,缺 k8s/Helm 和 CI/CD |
| **文档** | ⭐⭐⭐⭐☆ | 多份分析/架构/部署/进度文档,缺 API 文档(Swagger)和用户手册 |
---
## 六、优势亮点 🌟
### 1. 架构设计精良
- **五层解耦**Gateway/Dispatcher/MCP 职责清晰,NATS 骨干网松耦合
- **全面降级**:每个依赖不可用都有 graceful degradationMilvus 挂→不检索、Redis 挂→不缓存、Neo4j 挂→不图谱,从不阻断主流程)
- **热更新**:模型配置经 NATS 广播实时生效,无需重启
- **契约驱动**`sundynix-shared/contract` 统一定义所有跨服务数据结构与通信约定
### 2. AI 编排能力深度
- **DSL 图引擎** 支持 11 种节点类型,拓扑排序 + branch 条件剪枝 + map 并行 fan-out
- **ReAct Agent** 与 MCP 工具目录自发现联动:新增工具只需在 MCP 注册,无需改编排代码
- **Mem0 式记忆对账**:不是简单 kv 覆盖,而是 LLM 对账 ADD/UPDATE/DELETE + Importance 打分 + Recency 衰减
- **自动评测闭环**:规则检查 → LLM-as-judge → 忠实度(幻觉检测) → 低分自动纠偏 → 评测结果落库
### 3. 安全治理(Harness)体系完整
- **输入护栏**:Tier1(归一化反绕过 + 正则 + 黑名单) → Tier2(LLM 越狱裁决),两级过滤成本最优
- **输出护栏**:跨分片流式脱敏(StreamRedactor),解决了流式场景密钥碎片泄漏的工程难题
- **成本护栏**:单任务 token 硬上限 + 单用户日预算 + 熔断器,三重保护防成本失控
### 4. 可观测性一流
- **全链路 Trace**Gateway → NATS → Dispatcher → MCPtrace_id 跨消息总线传播
- **执行轨迹(ExecEvent)**:每个节点、每次工具调用都有结构化事件,前端可实时点亮/回放
- **Redis Stream 录制**Token 流 + 轨迹事件录进 Redis → SSE 断点续传,根治"连晚/重连丢数据"
### 5. 工程实践规范
- 注释全中文,设计意图/降级策略/约束原因写得极其清楚
- 错误处理一致:降级 vs 上抛 vs 快速拒绝各有明确策略
- 接口抽象(`TokenSink`/`ToolCaller`/`StatusSink`/`LLM`)便于测试注入
- 雪花 ID + GORM 软删 + BaseModel 统一规约
---
## 七、不足与改进方向 ⚠️
### 1. 测试覆盖需扩展
- **现状**:关键路径有测试(e2e/集成/单测 3400 行),但占源码比 ~22%
- **缺失**:前端组件测试、Gateway handler 单测、MCP 工具完整覆盖
- **建议**:引入覆盖率工具(go tool cover),目标核心包 ≥ 70%
### 2. API 文档缺失
- **现状**:无 Swagger/OpenAPI 文档,API 契约只能看代码
- **建议**:集成 swag(Gin 生态),自动生成 API 文档
### 3. CI/CD 流水线未建
- **现状**`.github/` 目录存在但未见完整 CI 配置
- **建议**GitHub Actions — lint → test → build → push image → deploy staging
### 4. 前端状态管理偏原始
- **现状**:桌面端直接 fetch + useState,无全局状态管理
- **建议**:引入 zustand 或 jotai,统一 WebSocket/SSE 状态
### 5. 知识库功能缺分片与多租户隔离
- **现状**:知识库按 `owner/kb` 名称隔离,但 Milvus Collection 粒度较粗
- **建议**:生产环境引入 Partition Key 或多 Collection 策略
### 6. Python 微服务较薄
- **现状**mcp-py 约 640 行,文档解析和代码沙箱为桩/初步实现
- **建议**:完善 MinerU OCR 接入、MCP 协议标准化
### 7. 缺乏 k8s/Helm 部署方案
- **现状**:仅 Docker Compose 编排
- **建议**:为生产环境提供 Helm Chart,支持 HPA、PDB、健康检查
### 8. 缺少限流与 Rate Limiting
- **现状**:成本护栏有 token 预算,但 HTTP 层无速率限制
- **建议**:Gin 中间件加速率限制(令牌桶/滑动窗口),配合 Redis
### 9. 日志结构化不完整
- **现状**:混用 `log.Printf``slog`
- **建议**:统一 slog + JSON 输出,便于 ELK/Loki 采集
### 10. 前端无 i18n
- **现状**UI 文案硬编码中文
- **建议**:如需国际化,引入 i18next
---
## 八、与同类产品对标
| 对标产品 | sundynix-agentix 对比 |
|---------|---------------------|
| **Dify** | 架构更工程化(微服务 vs 单体),护栏/评测/纠偏闭环更完整,但 UI 完成度不如 Dify |
| **Coze** | 类似的 Agent 编排理念,sundynix 是完全开源自建可控,支持私有化部署 |
| **LangGraph** | sundynix 的 DSL 图引擎类似 LangGraph 的状态机,但额外内置 HITL/熔断/预算/评测 |
| **Mem0** | sundynix 的记忆系统借鉴 Mem0 的 consolidate 模式,且与编排引擎深度集成 |
---
## 九、总结
经过 3 天的密集改造,项目已经从一个基础的 Agent 框架跃升到**准生产级的 AI Agent 编排平台**。核心突破集中在三个方面:
1. **Harness 治理栈完整落地**:输入护栏(两级) → 输出脱敏(跨分片) → 自动评测 → 低分纠偏 → 熔断 → 预算控制,形成完整的「恒温器」闭环
2. **可观测性达到业界标杆**:全链路 Trace + 执行轨迹 + Redis 回放 + 历史复盘 + 健康灯,任何一次运行都可以"时光倒流"复盘
3. **部署与 HA 就绪**Docker Compose 一键部署 12 个服务、优雅停机、多副本安全、密钥加密
项目最大的技术亮点是**将 AI 治理(安全/质量/成本)作为一等公民嵌入架构**,而非事后附加——这在开源 Agent 框架中相当稀缺。
> **一句话评价**:架构成熟度已达准生产级,补齐测试覆盖、API 文档和 CI/CD 后即可上线。