feat: 初始化 sundynix-agentix 分层式 AI Agent 平台脚手架
5 层 + 1 条 NATS 零拷贝消息总线的 monorepo(Monolith First → Microservices Morph B)。 纵向主干(任务流 + Token 流回流)已真实跑通,横向各层能力为带注释的桩。 已贯通(real code): - sundynix-shared: 共享契约 + JetStream/core NATS 真实收发(bus) + 内嵌 NATS(devnats) + e2e 测试 - sundynix-gateway: Gin 接入 + DSL 解析组装 + NATS Publish + SSE 流式输出 - sundynix-dispatcher: NATS 消费 + Eino Orchestrator 流式回流 + 熔断器 + LLM Pool 占位流式 - 链路: HTTP POST → DSL → sundynix.tasks.* → Dispatcher → Token 经 sundynix.streams.<id> 回流 → SSE - 基础设施: docker-compose(nats/postgres/redis/neo4j/milvus) + Makefile(make demo/e2e) 待填(桩): - Eino 图编排 compose.NewGraph、LLM Pool 接 vLLM/Ollama - Gateway store 换真实 pgx/redis - sundynix-mcp-go: Bleve+Milvus+Neo4j 混合检索 / UniOffice / 外部 API - sundynix-mcp-py: gVisor 沙箱 / MinerU(PaddleOCR) / Docker 解释器 - sundynix-desktop: React Flow 画布 → DSL 导出 → SSE 展示
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
// Command server 启动 sundynix-mcp-go —— 第 5 层 Go I/O 型 MCP 工具微服务。
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
|
||||
"github.com/sundynix/sundynix-mcp-go/internal/mcp"
|
||||
"github.com/sundynix/sundynix-mcp-go/internal/search"
|
||||
)
|
||||
|
||||
func main() {
|
||||
engine := search.NewHybrid() // LLM Wiki 混合检索:Bleve + Milvus + Neo4j
|
||||
gw := mcp.NewGateway(engine)
|
||||
|
||||
log.Println("[mcp_go] serving MCP over sundynix.tools.go.*")
|
||||
if err := gw.Serve(); err != nil {
|
||||
log.Fatalf("[mcp_go] exit: %v", err)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
nats:
|
||||
url: "nats://localhost:4222"
|
||||
tool_subject: "sundynix.tools.go.*"
|
||||
|
||||
bleve:
|
||||
index_path: "./data/wiki.bleve"
|
||||
|
||||
milvus:
|
||||
addr: "localhost:19530"
|
||||
collection: "wiki"
|
||||
|
||||
neo4j:
|
||||
uri: "bolt://localhost:7687"
|
||||
user: "neo4j"
|
||||
password: "sundynix"
|
||||
@@ -0,0 +1,10 @@
|
||||
module github.com/sundynix/sundynix-mcp-go
|
||||
|
||||
go 1.23
|
||||
|
||||
require (
|
||||
github.com/blevesearch/bleve/v2 v2.4.2
|
||||
github.com/milvus-io/milvus-sdk-go/v2 v2.4.1
|
||||
github.com/neo4j/neo4j-go-driver/v5 v5.24.0
|
||||
github.com/nats-io/nats.go v1.37.0
|
||||
)
|
||||
@@ -0,0 +1,4 @@
|
||||
github.com/blevesearch/bleve/v2 v2.4.2/go.mod h1:ATNKj7Yl2oJv/lGuF4kx39bST2dveX6w0th2FFYLkc8=
|
||||
github.com/nats-io/nats.go v1.37.0/go.mod h1:Ubdu4Nh9exXdSz0RVWRFBbRfrbSxOYd26oF0wkWclB8=
|
||||
github.com/neo4j/neo4j-go-driver/v5 v5.24.0/go.mod h1:Vff8OwT7QpLm7L2yYr85XNWe9Rbqlbeb9asNXJTHO4k=
|
||||
github.com/qdrant/go-client v1.11.0/go.mod h1:j+OVRsJIZhOSRK2toPl8tTBOhwr4AxXCz9RACzv0JB4=
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
// Package external 封装对第三方外部 API 的统一调用(鉴权、重试、限流)。
|
||||
package external
|
||||
|
||||
import "context"
|
||||
|
||||
// Client 是外部 API 的统一出口。
|
||||
type Client struct{}
|
||||
|
||||
func NewClient() *Client { return &Client{} }
|
||||
|
||||
// Call 调用某个外部 API。
|
||||
func (c *Client) Call(ctx context.Context, name string, args map[string]any) (any, error) {
|
||||
// TODO: 路由到具体 provider,统一鉴权/重试/限流/审计
|
||||
return nil, nil
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
// Package mcp 实现 MCP 协议网关,把工具注册到 NATS 并响应调用。
|
||||
package mcp
|
||||
|
||||
import "github.com/sundynix/sundynix-mcp-go/internal/search"
|
||||
|
||||
// Gateway 暴露 MCP 协议端点(stdio / HTTP / NATS)。
|
||||
type Gateway struct {
|
||||
search *search.Hybrid
|
||||
}
|
||||
|
||||
func NewGateway(s *search.Hybrid) *Gateway { return &Gateway{search: s} }
|
||||
|
||||
// Serve 监听 sundynix.tools.go.* 并按 MCP 协议分发工具调用。
|
||||
func (g *Gateway) Serve() error {
|
||||
// TODO: 注册工具清单 (wiki_search / render_doc / call_external_api ...)
|
||||
// 订阅 NATS,按 MCP JSON-RPC 解析并路由
|
||||
select {}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
// Package office 基于 UniOffice 提供 Word/文档渲染能力。
|
||||
package office
|
||||
|
||||
import "context"
|
||||
|
||||
// Renderer 把结构化数据渲染为 docx/xlsx 等文档。
|
||||
type Renderer struct{}
|
||||
|
||||
func NewRenderer() *Renderer { return &Renderer{} }
|
||||
|
||||
// RenderDocx 生成 Word 文档并返回字节流。
|
||||
func (r *Renderer) RenderDocx(ctx context.Context, payload map[string]any) ([]byte, error) {
|
||||
// TODO: 使用 unioffice/document 构建并序列化
|
||||
return nil, nil
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
// Package search 实现 LLM Wiki 混合检索引擎。
|
||||
// Hybrid Search = Bleve(全文/BM25) + Milvus(向量) + Neo4j(知识图谱) 融合排序。
|
||||
package search
|
||||
|
||||
import "context"
|
||||
|
||||
// Hybrid 聚合三路检索后端并做 RRF/加权融合。
|
||||
type Hybrid struct {
|
||||
// bleve *bleve.Index // Go 全文检索
|
||||
// milvus client.Client // Vector DB (Milvus Go SDK)
|
||||
// neo4j neo4j.DriverWithContext // Knowledge Graph
|
||||
}
|
||||
|
||||
func NewHybrid() *Hybrid {
|
||||
// TODO: 打开 bleve 索引;连接 Milvus;连接 Neo4j
|
||||
return &Hybrid{}
|
||||
}
|
||||
|
||||
// Result 是融合后的检索结果。
|
||||
type Result struct {
|
||||
ID string
|
||||
Score float64
|
||||
Text string
|
||||
}
|
||||
|
||||
// Query 并行查询三路后端并融合排序。
|
||||
func (h *Hybrid) Query(ctx context.Context, q string, topK int) ([]Result, error) {
|
||||
// TODO: 并发 bleve.Search + milvus.Search + neo4j Cypher,做 RRF 融合
|
||||
return nil, nil
|
||||
}
|
||||
Reference in New Issue
Block a user