Files
sundynix-agentix/project_analysis.md
T
Blizzard 56eee90705 docs: 订正 project_analysis.md(经源码核实 + 跟进最新进度)
修 5 处事实硬伤(原分析靠文件名/印象、且写于近期改动之前):
- 桌面端 UI:shadcn/ui → 自建 UI 原语(src/ui)
- Word 渲染:UniOffice → 自建零依赖 OOXML(unioffice.go 注释明确不用商业库)
- CORS:「未见配置」→ 实有 cors() + CORS_ALLOW_ORIGIN
- 限流:「实现程度不明」→ 实有 Redis 滑动窗口按 IP 限流
- CI/CD:「无」→ 已加 ci.yml + release.yml
另:安全沙箱被误判为「桩」→ 实已可用(run_code 已接入自主 agent)。

补录近期新增功能:Token 流可回放+断点续传(Redis Stream)、
GitHub Releases 分发 + 桌面端自动检查更新。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 09:31:06 +08:00

15 KiB
Raw Blame History

sundynix-agentix 项目全面分析

一、项目定位

分层式 AI Agent 平台,采用 Monolith First → Microservices (Morph B) 演进策略。
目标是构建一个集 Agent 可视化编排、知识库 RAG、报告生成、用户记忆 于一体的企业级 AI 工作站。


二、技术栈总览

层级 模块 语言/框架 核心依赖
1. 客户端 sundynix-desktop Wails + React 19 + TypeScript @xyflow/react (React Flow), 自建 UI 原语(src/ui,非 shadcn), TailwindCSS 3, lucide-react, react-force-graph-2d, Vite 5
1b. 运维控制台 sundynix-admin React 19 + TS + Vite react-router-dom 7, TailwindCSS
2. 网关 sundynix-gateway Go · Gin GORM + PostgreSQL 16, Redis 7, NATS JetStream, 雪花 ID, bcrypt 鉴权
3. 消息总线 NATS Server Go NATS 2 (Alpine), JetStream 持久化
4. 调度器 sundynix-dispatcher Go · CloudWeGo Eino eino (图编排/ReAct Agent), nats.go, 熔断器, LLM 自动化评测
5a. MCP 工具 (I/O) sundynix-mcp-go Go Milvus SDK, Bleve, Neo4j Driver, 自建零依赖 OOXML(.docx,刻意不用商业授权的 UniOffice), Snowflake ID, GORM
5b. MCP 工具 (算法) sundynix-mcp-py Python ≥3.11 nats-py, python-docx, openpyxl, pypdf, docker (沙箱)
共享层 sundynix-shared Go nats.go, JetStream, 内嵌 NATS (devnats)
基础设施 Docker Compose - NATS, PostgreSQL 16, Redis 7, Milvus 2.4, Neo4j 5, MinIO

构建工具链

  • Go 工作区: go.work 管理 4 个后端模块(gateway/dispatcher/mcp-go/shared
  • 前端: Vite 5 + TypeScript 5 + PostCSS + TailwindCSS
  • 桌面端: Wails v2Go 后端 + WebView 前端,GOWORK=off 独立构建)
  • Makefile: 统一的 make 命令编排所有服务启动、测试、构建

三、已实现功能

3.1 Agent 可视化编排 (Studio)

  • React Flow 画布:拖拽式节点编排,支持 10+ 节点类型:
    • input / output / memory / retriever / tool / agent / aggregate / render / branch / map
  • DSL 导出:画布编排导出 JSON DSL,经网关发布到 NATS 任务队列
  • 图执行引擎:按拓扑序遍历节点、沿连线传播活性、branch 条件剪枝
  • 多 Agent 协作agent 节点产出通过黑板(board)接力传递给下游 agent
  • ReAct 自主 Agent:基于 CloudWeGo Eino 的 ReAct 循环,模型自主选工具(最多 8 步)
  • Eino Compose Graph (可选):环境变量 EINO_COMPOSE=1 可切换到 Eino 原生 compose.Graph 编排

3.2 知识库 RAG

  • 三路混合检索
    • 向量路: Embedding → Milvus 向量搜索
    • 全文路: Bleve 倒排索引
    • 图谱路: Neo4j 知识图谱(LLM 自动抽取实体三元组)
  • RRF 融合 + 可选 Rerank:三路结果经 Reciprocal Rank Fusion 融合,可接 Rerank 模型精排
  • 入库流水线:文档解析 → 语义切块(递归+句界+重叠+rune 安全)→ 分批向量化 → 写 Milvus/Bleve → LLM 抽三元组 → 写 Neo4j
  • 实时入库监控IngestEvent 逐阶段回流进度给 UI(切块/向量化/写库/抽实体)
  • 文档格式支持.docx (python-docx) / .xlsx (openpyxl) / .pdf (pypdf)
  • 知识图谱可视化react-force-graph-2d 渲染三元组图谱

3.3 报告生成

  • 多步编排:规划大纲 → 各章节并行(有界并发=4)→ RAG 检索 + LLM 撰写 → 汇聚渲染
  • Word 渲染:自建零依赖 OOXML 渲染 .docx 文档(不引第三方 Office 库),一键下载
  • 流式进度:规划/撰写进度实时流回客户端
  • 报告源持久化title + sections 持久存储,支持导出 Word/PDF/Markdown

3.4 用户记忆系统

  • 常驻画像 (Always-on Memory)
    • Postgres 存储 key-value 偏好,GORM 软删 + 雪花 ID
    • Generative Agents 打分Score = 0.4·Recency + 0.6·Importance
    • 指数衰减 Recency(每天衰减 0.98+ LLM 评分 Importance (1-10)
    • 读取时 Top-30 截断控 context + 自然遗忘
  • 短期多轮历史:经 MCP history_get/history_append 工具存取
  • 记忆对账 (Consolidate):每 3 轮攒批一次,LLM 将近期对话与已有画像对账归纳

3.5 执行可视化 (运行·观测)

  • ExecEvent 轨迹:每个节点的生命周期事件(start/end/error/info+ 耗时
  • 双流并行Token 流 (sundynix.streams.<id>) + 执行事件流 (sundynix.exec.<id>) 分离
  • 实时节点点亮:前端 SSE 订阅轨迹,逐节点展示执行状态
  • Token 流可回放 + 断点续传:网关把 Token 流落 Redis StreamSSE 带 Last-Event-ID,连晚/刷新/网络抖动重连均不丢 token(Redis 降级时回退 live NATS

3.6 安全与工程化护栏

  • 熔断降级 (CircuitBreaker):连续失败触发熔断,快速拒绝新任务 + 友好提示
  • 输出护栏 (RedactSecrets):流式脱敏疑似密钥/令牌
  • LLM 自动化评测 (Evaluator):规则 + LLM-as-judge 异步打分
  • Python 安全沙箱gVisor / KataVM 静态代码守卫 + Docker 隔离解释器
  • 任务生命周期状态机submitted → running → done / failed / timeout

3.7 鉴权与管理

  • JWT 鉴权:登录/注册 + bcrypt 密码 + Token 校验
  • 运维控制台 (admin):模型/数据源登记激活、服务健康监控、用户计费
  • NATS 热更新:模型配置变更经 NATS 广播到各消费方(dispatcher/mcp-go

3.8 桌面端

  • Wails 原生应用macOS/Windows/Linux 跨平台桌面端
  • Go/TS 强绑定:前端调用 Go 后端(本地文件 I/O 等)
  • 命令面板:⌘K / Ctrl+K 全局命令面板(键盘优先工作站)
  • GitHub Releases 分发 + 自动检查更新:打 vX.Y.Z 标签经 release workflow 自动构建 mac/win 安装包发布到 Releases;桌面端启动查 releases/latest,有新版弹横幅引导下载

四、核心数据流

客户端 → POST /api/v1/tasks → Gateway (DSL 解析/鉴权/计费)
  → NATS JetStream (sundynix.tasks.<id>)
    → Dispatcher (Eino 图编排, 记忆/历史召回)
      → NATS request-reply → MCP Tools (Go I/O + Python 算法)
    → Token Stream (sundynix.streams.<id>) 零拷贝回流
  → Gateway SSE → 客户端逐 token 渲染

五、优势与亮点

架构设计

优势 说明
分层解耦清晰 5 层 + NATS 消息总线,各层职责边界分明,适合团队分工和独立演进
NATS 零拷贝骨干网 Queue(任务分发) + Stream(Token 回流) + Request-Reply(工具调用/配置) 三模式精准匹配场景,低延迟高吞吐
优雅降级设计 各依赖(Milvus/Neo4j/Rerank/Memory/Python MCP)不可用时自动降级,核心链路不阻断
Monolith First 策略 先单体验证核心价值,预埋微服务拆分点(MCP 工具已经独立为 Go/Python 两个微服务)
Eino 生态 基于 CloudWeGo Eino 的 ReAct Agent + Compose Graph,复用字节生态的模型抽象和工具适配

功能实现

优势 说明
三路混合 RAG 向量 + 全文 + 知识图谱 RRF 融合 → 召回质量显著优于纯向量检索
Generative Agents 记忆 Recency + Importance 双维打分 + 自然遗忘,远超简单的"全量注入"记忆方案
可视化 Agent 编排 React Flow 画布低代码拖拽,支持 branch/map/aggregate 等复杂流控,降低使用门槛
执行可视化 Token 流与执行轨迹分流,运行时逐节点点亮,工具调用入参/产出透明可观测
动态工具发现 ReAct agent 通过 list_tools 自描述发现可用工具,新增工具只需在 MCP 注册,无需改 dispatcher
报告并行生成 大纲规划 → 多章有界并发撰写 → 真实 Word 渲染,端到端闭环

工程化

优势 说明
Monorepo 统一管理 go.work + Makefile 一键启动,make demo 零 Docker 即可验证全链路
内嵌 NATS (devnats) 开发/测试无需外部 NATS,降低环境搭建成本
完善的 E2E 测试 任务流/工具调用/Token 流 三场景端到端覆盖
雪花 ID 规约 全局统一的字符串雪花 ID 主键 + GORM 软删,数据规约一致
零配置启动 docker-compose 对齐默认配置,clone 后只需填 API key
NATS 配置热更新 模型配置变更无需重启服务,broadcast + subscribe 实时生效

六、不足与改进建议 ⚠️

6.1 架构层面

问题 现状 建议
缺少 API 网关/服务网格 Gateway 承担了鉴权/限流/DSL 解析/SSE 推送/管理等过多职责 考虑分离 BFF (面向前端) 与核心 Gateway,或引入 Kong/Traefik 负责横切关注点
配置管理未集中 各服务 config/ 独立管理,NATS 热更新仅覆盖模型配置 引入统一配置中心(Consul/etcd 或 NATS KV),覆盖全部运行时配置
缺少链路追踪 日志为主要观测手段(log.Printf),无结构化 trace 接入 OpenTelemetry (tracing + metrics)NATS 消息头透传 trace ID
无服务注册发现 服务端点硬编码于配置 基于 NATS 已有能力做简单服务注册,或引入 Consul/etcd
单点瓶颈风险 NATS 单节点(docker-compose)、Milvus standalone 生产环境需 NATS 集群 + Milvus 分布式模式

6.2 代码质量

问题 现状 建议
Dispatcher graph.go 过大 单文件 492 行,混合了图执行、各节点实现、条件求值 拆分为 node_agent.go / node_retriever.go / node_branch.go 等,每类节点独立文件
日志标准化不足 使用标准 log.Printf,无结构化字段和级别控制 引入 slogGo 1.21 标准库)或 zap,统一 JSON 格式 + 日志级别
错误处理不够严谨 多处 _ = msg.Respond(data) / _ = m.Respond(data) 忽略错误 关键路径的响应失败应记录日志
魔法字符串 节点 Kind ("agent", "retriever") 为裸字符串 定义 const 枚举或使用 iota,消除散落的字符串匹配
部分 Python 代码为桩 MinerU (PaddleOCR)、MCP 协议真实实现标注为 TODO 核心功能保持占位可接受,但应有明确的迭代计划和 issue 跟踪

6.3 前端

问题 现状 建议
状态管理原始 useState + props drilling,无全局状态管理 随功能增长,考虑引入 Zustand 或 Jotai 管理全局状态(当前/会话/运行态)
路由为自研视图切换 view state + 条件渲染,无 URL 路由 引入 React Router,支持 URL 直达、浏览器前进后退
类型安全不完整 部分 API 响应缺 TypeScript 类型定义 考虑 API 契约生成(OpenAPI → TypeScript types),前后端类型一致
KbView.tsx 过大 单文件 31944 字节 拆分为子组件(搜索面板 / 文档列表 / 图谱面板 / 入库面板)
无单元测试 前端零测试覆盖 引入 Vitest + React Testing Library,优先覆盖核心交互

6.4 安全

问题 现状 建议
API Key 明文传输/存储 ModelConfig 中 api_key 明文存 PG、经 NATS 广播 API Key 加密存储(AES-256),NATS 传输走 TLS
CORS 收紧 已有显式 cors() + CORS_ALLOW_ORIGIN(缺省 * 仅供开发) 生产环境把 CORS_ALLOW_ORIGIN 设为具体源
Rate Limiting 已实现:Redis 滑动窗口、按客户端 IP 每分钟限流(middleware.RateLimit + store.Allow 可对登录/任务提交等关键 API 单独配更严阈值
依赖安全审计 无 dependabot / 漏洞扫描 启用 GitHub Dependabot + go vet / govulncheck CI

6.5 运维与部署

问题 现状 建议
CI/CD(部分完成) 已加 ci.ymlgo build+vet+test / 前端 tsc / mcp-py 守卫)+ release.ymltag 触发构建发布到 GitHub Releases 后续补:自动部署、govulncheck/Dependabot 安全扫描
无 Kubernetes 部署 仅 docker-compose(开发环境) 补充 Helm Chart 或 Kustomize,面向生产集群
健康检查不统一 dispatcher 走 NATS ping,其它走 HTTP 统一为 Kubernetes 标准的 liveness/readiness probe
无数据备份策略 PG/Milvus/Neo4j 数据卷无备份配置 配置 pg_dump 定时备份 + 对象存储归档

七、技术选型评价

选型 评分 评语
Go + NATS 高性能、低延迟、零拷贝,完美适配 AI 推理 Token 流场景
Eino (CloudWeGo) 字节生态,ReAct/Compose Graph 成熟;但社区生态不如 LangChain/LlamaIndex
Wails Go+WebView 跨平台桌面端,避免 Electron 臃肿;但 WebView 兼容性不如 Electron
Milvus + Bleve + Neo4j 三路 RAG 架构领先;但三套存储的运维复杂度高
React Flow 低代码编排标配,生态成熟,@xyflow/react v12 性能好
Python MCP 层 算法型工具用 Python 合理;代码沙箱已可用,但 MinerU 多模态解析仍为桩

八、代码量统计(估算)

模块 Go 代码 TS/TSX 代码 Python 代码 说明
sundynix-shared ~1,500 行 - - 契约 + NATS 总线
sundynix-gateway ~6,000 行 - - 鉴权/DSL/存储/路由/SSE
sundynix-dispatcher ~8,000 行 - - Eino 编排/ReAct/报告/评测/熔断
sundynix-mcp-go ~5,000 行 - - RAG 三路/记忆/Office/MCP
sundynix-mcp-py - - ~1,500 行 沙箱/解析/解释器/MCP
sundynix-desktop ~300 行(Go) ~8,000 行 - Wails 绑定 + React 全套
sundynix-admin - ~3,000 行 - 运维控制台
合计 ~21,000 行 ~11,000 行 ~1,500 行 ~33,500 行

九、总体评价

sundynix-agentix 是一个架构设计水准较高、功能相当完整的 AI Agent 平台原型。

核心竞争力在于:

  1. NATS 零拷贝骨干网 — 贯穿全栈的消息总线设计,比 HTTP 微服务更适合 AI 场景
  2. 三路混合 RAG — 向量+全文+图谱的 RRF 融合,业界领先
  3. 可视化编排 + ReAct — 低代码画布 + 自主 Agent 双模式,兼顾不同用户群
  4. Generative Agents 记忆 — 带打分的自然遗忘记忆系统,超越大部分同类项目

主要风险在于:

  1. 基础设施复杂度高(6 个存储组件),运维压力大
  2. 前端缺少测试和路由,随功能增长技术债务会快速累积
  3. Python MCP 层较薄:MinerU/PaddleOCR 多模态解析仍为桩(代码执行沙箱已实现可用,run_code 已接入自主 agent
  4. 链路追踪、集中配置、k8s 部署、API Key 加密等生产级工程化设施待补(CI/CD 已具备)

项目成熟度:处于 高完成度 MVP 阶段,核心数据流和关键功能闭环已通,具备向生产环境演进的基础。