Blizzard 5c50c87a88 docs: 重写架构文档——工程级完整版(5 张 Mermaid 图 + 功能状态总表)
原文停在 2026-07-02 已严重失真:能力矩阵还写「多租户/RBAC 未动、真实计费
未做、NATS 集群未做」,而这三项均已完成并 live 验证。它又被 5 份设计文档
引用为配套文档,不能放着不管。

重写为 15 章 913 行,以代码为单一事实源:
- 分层架构图 + 3 张关键链路时序图(任务提交/语音全双工/本地执行三道闸)
  + 三机部署拓扑图,全部 Mermaid(已用 mermaid-cli 逐张渲染验证)
- 5 个服务逐个拆:internal 包职责 + 技术栈依赖表含版本
- NATS 契约总表:1 任务流 + 3 回流 + 4 组工具 RPC + 5 条持久回写流 + KV
- 编排引擎:12 种节点 kind、ReAct、11 个平台工具、harness 五件套
- 29 张表全清单 + 9 个中间件 + 迁移机制
- 13 域功能实现状态总表(/🟡/)
- 安全治理/可观测/客户端三产品面/CI-CD/技术栈速查/已知缺口

顺带记账:§9.14 点名 4 处文档与代码不符(PROGRESS.md 停更、DEPTH_ROADMAP
汇总表自相矛盾、Tier3 说 NATS 集群没做但已落地、PAYMENT_DESIGN 说不做订阅
但已实现),明确以代码为准,避免后来人被误导。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 11:46:02 +08:00
2026-06-27 12:06:29 +08:00
2026-06-27 12:06:29 +08:00
2026-06-23 17:19:18 +08:00

sundynix-agentix

分层式 AI Agent 平台 — Monolith First → Microservices (Morph B)。 架构总览见 architecture.md / architecture.png

仓库结构(Monorepo

目录 语言 / 技术栈 职责
sundynix-desktop/ 1 · Client Wails + React 19 + TS + shadcn/ui 桌面端、React Flow Agent 编排、导出 JSON DSL、LLM Wiki 面板
sundynix-gateway/ 2 · Gateway Go · Gin 统一接入、DSL 解析组装、计费、Guardrail、PgSQL + Redis
deploy/nats/ 3 · Message Bus NATS (Go) 零拷贝骨干网:Queue + Stream
sundynix-dispatcher/ 4 · Dispatcher Go · Eino 图编排、LLM Pool 调度、自动化评测、熔断降级
sundynix-mcp-go/ 5a · MCP Tools (I/O) Go MCP 网关、Wiki 混合检索(Bleve/Milvus/Neo4j)、UniOffice、外部 API
sundynix-mcp-py/ 5b · MCP Tools (算法) Python MCP 网关、安全沙箱(gVisor/KataVM)、MinerU(PaddleOCR)、Docker 解释器
sundynix-shared/ 共享契约 Go Task 数据契约、NATS subject 约定、JetStream 收发逻辑(bus)、内嵌 NATS(devnats)

核心数据流

  1. Gateway 解析 DSL → Publish sundynix.tasks.* (NATS Queue)
  2. Dispatcher 订阅任务 → Eino 图编排 → 调用 LLM Pool
  3. 经 NATS request-reply 同步调用第 5 层 MCP Toolssundynix.tools.go.* 队列组负载均衡,工具不可用即降级)
  4. 结果以零拷贝 Token Stream 经 sundynix.streams.task_id 回流 → SSE/WS 推给 Client

快速开始

生产 / 独立部署 — 一条命令拉起整套(应用 + 基建)

cp .env.example .env          # 按提示填密钥(openssl rand -base64 32
docker compose -f docker-compose.prod.yml up -d --build
# 控制台 http://<IP>:80  网关 http://<IP>:8080  链路 UI http://<IP>:16686

应用全部容器化(gateway / dispatcher / mcp-go / mcp-py / admin-nginx),经服务名互连, 基建端口不对外;模型 API key 部署后在控制台配(加密存库)。详见 DEPLOY.md、 备份恢复见 scripts/backup.sh

无 Docker — 一键验证任务流(推荐先跑这个)

make demo   # 内嵌NATS + Gateway + Dispatcher + MCP-Go,提交 DSL 任务,看任务流+工具调用+Token流闭环
make e2e    # 仅跑共享 bus 的端到端测试(go test,内嵌 NATS):任务流 / 工具调用 / Token 流

make demo 实测输出:

Gateway:    POST /api/v1/tasks → task_xxx → published (seq=1)
Dispatcher: [eino] task_xxx received → streaming tokens...
SSE 客户端: event:token data:已  event:token data:编 ... event:done   ← 流式闭环打通

完整链路:HTTP POST → DSL 解析 → NATS 任务队列 → Dispatcher 消费 → LLM 流式推理 → Token 经 sundynix.streams.<id> 回流 → Gateway SSE → 客户端逐 token 收到。

完整环境(git clone 后零配置直跑)

前置Docker、Go ≥1.24、Node ≥20、Python ≥3.11。 跑真实桌面端还需:Wails v3 CLIgo install github.com/wailsapp/wails/v3/cmd/wails3@v3.0.0-alpha2.117,版本须与 sundynix-desktop/go.mod 一致);macOS 再装 Xcode 命令行工具(xcode-select --installwebkit 编译用)。

各服务默认配置已对齐 docker-composeNATS:4222 / PG sundynix@5432 / Redis:6379 / Milvus:19530 / Neo4j neo4j-sundynix@7687),clone 后无需改任何配置即可连上。

make infra        # 1) 启动 NATS / Postgres / Redis / Milvus / Neo4j (docker-compose)
make gateway      # 2) 各开一个终端运行后端
make dispatcher
make mcp-go
make mcp-py       #    首次自动建 venv + 装解析依赖
make admin        # 3) 运维控制台 (Vite :5174)
make webface      # 3b) 薄 Web 面:租户自助注册/组织/团队/账单 (Vite :5175)
  1. 打开运维控制台(:5174),在「模型 / 数据源」登记并激活:对话模型(chat)Embedding 模型 (开发期填第三方在线 APIbase_url + api_key + modelOpenAI 兼容)。激活后经 NATS 热更新到各服务。 — 这是唯一需要自己填的配置(API key),其余零配置。

  2. 启动客户端(任选其一):

make desktop        # ★ 真实桌面端:Wails 原生窗口(热重载)——独立 App,非浏览器
# 或
make web            # 浏览器预览版(Vite :5173,前端代码同上)

打包桌面端为可双击的原生应用:

make desktop-build  # → sundynix-desktop/build/bin/sundynix_desktop.app

完成后即可:编排 Agent 图 → 运行(注入画像/历史,真实流式);知识库入库(docx/xlsx/pdf) → 三路混合检索(向量+全文+图谱);报告生成(「报告」页输入主题 → 规划大纲 → 各章并行检索+撰写 → 渲染真实 Word(.docx) → 一键下载)。桌面端是客户端,经 HTTP 连 Gateway:8080,需先起后端。

后端 4 模块用根 go.work 串联;sundynix-shared 经各 go.mod replace 指向本地。 桌面端是自包含模块,make desktop/desktop-buildGOWORK=off 独立构建(不入 go.work)。

NATS Subject 约定

Subject 类型 说明
sundynix.tasks.* Queue 分布式任务队列
sundynix.streams.<task_id> Stream 零拷贝 Token 字节管道
sundynix.tools.go.* Queue Go MCP 工具调用
sundynix.tools.py.* Queue Python MCP 工具调用
S
Description
No description provided
Readme 32 MiB
Languages
Go 56.7%
TypeScript 39.1%
Python 1.4%
HTML 0.7%
NSIS 0.6%
Other 1.5%