Files
sundynix-agentix/README.md
T
Blizzard adc521f94d feat: 打通 Dispatcher→MCP 工具调用链路 (core NATS request-reply)
第 4 层 Dispatcher 经 NATS request-reply + 队列组同步调用第 5 层 MCP 工具,
工具不可用/超时即降级,不阻断主流程。

- shared/contract: ToolCall/ToolResult + sundynix.tools.go.* subject 约定 + ToolSubjectGo/Py
- shared/bus: CallTool(发起) / ServeTool(队列组订阅+应答)
- mcp-go: 接共享 bus,gateway 通配订阅按工具名分发(wiki_search/echo),main 优雅退出
- dispatcher: ToolCaller 接口 + Orchestrator.retrieveContext(调 wiki_search,超时3s降级)
- e2e: TestToolCallRoundTrip(PASS);demo.sh 加 mcp-go(就绪门避免启动竞态),live 跑通

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 11:31:58 +08:00

65 lines
3.3 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
分层式 AI Agent 平台 — **Monolith First → Microservices (Morph B)**
架构总览见 [architecture.md](architecture.md) / [architecture.png](architecture.png)。
## 仓库结构(Monorepo
| 目录 | 层 | 语言 / 技术栈 | 职责 |
|---|---|---|---|
| [`sundynix-desktop/`](sundynix-desktop) | 1 · Client | Wails + React 19 + TS + shadcn/ui | 桌面端、React Flow Agent 编排、导出 JSON DSL、LLM Wiki 面板 |
| [`sundynix-gateway/`](sundynix-gateway) | 2 · Gateway | Go · Gin | 统一接入、DSL 解析组装、计费、Guardrail、PgSQL + Redis |
| [`deploy/nats/`](deploy/nats) | 3 · Message Bus | NATS (Go) | 零拷贝骨干网:Queue + Stream |
| [`sundynix-dispatcher/`](sundynix-dispatcher) | 4 · Dispatcher | Go · Eino | 图编排、LLM Pool 调度、自动化评测、熔断降级 |
| [`sundynix-mcp-go/`](sundynix-mcp-go) | 5a · MCP Tools (I/O) | Go | MCP 网关、Wiki 混合检索(Bleve/Milvus/Neo4j)、UniOffice、外部 API |
| [`sundynix-mcp-py/`](sundynix-mcp-py) | 5b · MCP Tools (算法) | Python | MCP 网关、安全沙箱(gVisor/KataVM)、MinerU(PaddleOCR)、Docker 解释器 |
| [`sundynix-shared/`](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 Tools``sundynix.tools.go.*` 队列组负载均衡,工具不可用即降级)
4. 结果以零拷贝 Token Stream 经 `sundynix.streams.task_id` 回流 → SSE/WS 推给 `Client`
## 快速开始
### 无 Docker — 一键验证任务流(推荐先跑这个)
```bash
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
```bash
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 工具调用 |