3c65189f30cc7d6e5074a0fc16d9fb175cd77fd9
后端从占位回显变为真实生成:管理员经控制面登记/激活模型,Gateway 经 NATS 下发,Dispatcher 热更新 LLM Pool,Eino 图用 OpenAI 兼容流式真实推理。 - shared: contract.ModelConfig(provider/base_url/api_key/model) + 配置 subjects; bus.RequestModelConfig/ServeModelConfig/Publish/Subscribe ModelConfigUpdated - gateway: store.LLMModel→sundynix_model(AutoMigrate,唯一激活) + admin REST (GET/POST/active/delete/test models, api_key 脱敏) + main ServeModelConfig + 变更广播; 路由 /api/v1/admin/models* - dispatcher: llm.Pool OpenAI 兼容 SSE 流式客户端(ChatStream) + 热更新配置 + 未配置则降级桩; poolModel.Ready()?真实流式:注入记忆的桩; main 取配置+订阅 - 开发期接在线 API 不拉本地模型(见 llm-provider-strategy memory) - 验证: 4 模块 build✓ + e2e PASS; mock OpenAI 服务 live 跑通——登记/测试连接✓/ 激活→NATS 热更新→提交→真实 SSE 流出 mock 回复, mock 日志证明端点被调用且 注入画像(老王)进了模型上下文 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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) |
核心数据流
Gateway解析 DSL → Publishsundynix.tasks.*(NATS Queue)Dispatcher订阅任务 →Eino图编排 → 调用LLM Pool- 经 NATS request-reply 同步调用第 5 层
MCP Tools(sundynix.tools.go.*队列组负载均衡,工具不可用即降级) - 结果以零拷贝 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 工具调用 |
Description
Languages
Go
55.7%
TypeScript
35.4%
Python
4.4%
HTML
2.7%
Shell
0.7%
Other
1.1%