Files
sundynix-agentix/README.md
T

92 lines
4.7 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 收到。
### 完整环境(git clone 后零配置直跑)
**前置**Docker、Go ≥1.24、Node ≥20、Python ≥3.11。
跑**真实桌面端**还需:Wails CLI`go install github.com/wailsapp/wails/v2/cmd/wails@latest`);macOS 再装 Xcode 命令行工具(`xcode-select --install`webkit 编译用)。
> 各服务默认配置已对齐 docker-composeNATS:4222 / PG sundynix\@5432 / Redis:6379 /
> Milvus:19530 / Neo4j neo4j-sundynix\@7687),**clone 后无需改任何配置**即可连上。
```bash
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)
```
4) 打开运维控制台(`:5174`),在「模型 / 数据源」登记并激活:**对话模型(chat)** 与 **Embedding 模型**
(开发期填第三方在线 APIbase_url + api_key + modelOpenAI 兼容)。激活后经 NATS 热更新到各服务。
— 这是唯一需要自己填的配置(API key),其余零配置。
5) 启动客户端(任选其一):
```bash
make desktop # ★ 真实桌面端:Wails 原生窗口(热重载)——独立 App,非浏览器
# 或
make web # 浏览器预览版(Vite :5173,前端代码同上)
```
打包桌面端为可双击的原生应用:
```bash
make desktop-build # → sundynix-desktop/build/bin/sundynix_desktop.app
```
完成后即可:编排 Agent 图 → 运行(注入画像/历史,真实流式);知识库入库(docx/xlsx/pdf) →
三路混合检索(向量+全文+图谱)。桌面端是客户端,经 HTTP 连 Gateway:8080,需先起后端。
> 后端 4 模块用根 `go.work` 串联;`sundynix-shared` 经各 go.mod `replace` 指向本地。
> 桌面端是自包含模块,`make desktop`/`desktop-build` 用 `GOWORK=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 工具调用 |