Blizzard cbd130ecae feat: 第一张真实 Eino 图 + 偏好记忆(让模型知道是我)
dispatcher 不再手搓 pool.Stream,改用编译好的 Eino 图驱动;接入用户常驻画像,
推理前召回并注入 system prompt,实现个性化(架构'心脏'首次真跳)。

Eino 图(dispatcher/internal/eino): START→recall→prompt→model→END + 全局 State
- recall(Lambda): 取 Meta[user_id] → 调 MCP memory_get → ProcessState 写画像
- prompt(ChatTemplate): {profile} 注入 system,{query} 作 user
- model: poolModel 适配 LLM Pool 为 model.BaseChatModel(Generate+Stream, schema.Pipe)
- 写回: 流排空后异步 memorize(流式节点走 OnEndWithStreamOutput 非 OnEndFn)

记忆存储(mcp-go owns): GORM Profile→sundynix_user_profile(复合主键, AutoMigrate,
遵守前缀约定), 新工具 memory_get/memory_upsert, 连不上降级
Gateway: SubmitTask 注入 Meta[user_id](X-User-ID 头), PUT /api/v1/memory→memory_upsert
shared: contract.MetaUserID; llm.Pool 拆出 StreamText

验证: 4 模块 build✓ + 3 e2e PASS; live 跑通——PUT 偏好落 sundynix_user_profile,
带 X-User-ID 提交→Eino recall 召回→注入→SSE 流出含画像的个性化回答, writeback 触发

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 14:06: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

快速开始

无 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 收到。

完整环境(Docker

make infra      # 启动 NATS / Postgres / Redis / Milvus / Neo4j (docker-compose)
make devnats    # 或:无 Docker 时单独起内嵌 JetStream NATS
make gateway    # 运行 Gateway
make dispatcher # 运行 Dispatcher
make mcp-go     # 运行 Go MCP 工具服务
make mcp-py     # 运行 Python MCP 工具服务
make desktop    # 开发模式运行桌面端 (wails dev)

Go 多模块用 go.work 工作区串联;sundynix-shared 通过各服务 go.mod 的 replace 指向本地。

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 1.2 MiB
Languages
Go 55.7%
TypeScript 35.4%
Python 4.4%
HTML 2.7%
Shell 0.7%
Other 1.1%