Architecture

aster 架构概览

aster 架构概览

设计原则: 模块化、可扩展、框架无关 最后更新: 2024年11月17日


整体架构

aster 采用四层架构设计,将后端核心、Server 层、HTTP 层和客户端 SDK 完全解耦:


核心设计原则

1. 框架无关 (Framework Agnostic)

pkg/ 核心 SDK:

  • ✅ 零 HTTP 框架依赖
  • ✅ 只依赖 Go 标准库和核心第三方库
  • ✅ 可被任何项目安全导入
  • ✅ 不强制用户使用特定框架

cmd/ HTTP 层:

  • 可以使用任何 HTTP 框架 (Gin, Echo, Chi, 标准库等)
  • 用户可以完全替换 HTTP 实现
  • 只是一个参考实现

2. 分层架构 (Layered Architecture)

依赖方向: Client → Server/HTTP → Core
职责分离: 展示层 → 服务层 → 接口层 → 业务层

四层职责:

  • Client 层: UI/UX、事件处理、状态管理
  • Server 层: 认证、授权、监控、限流(生产环境)
  • HTTP 层: 路由、序列化、协议转换(开发环境)
  • Core 层: Agent 逻辑、Middleware、存储抽象

3. 模块化设计 (Modular Design)

15 个功能域:

  • Agent、Memory、Workflow、Session
  • Tool、Skill、Eval、MCP
  • Router、Sandbox、Middleware、Telemetry
  • Provider、Template、Security

每个模块独立,可按需使用。

4. 事件驱动 (Event-Driven)

三通道设计:

  • Progress Channel: 数据流 (thinking, textchunk, tool*)
  • Control Channel: 审批流 (tool_approval, pause/resume)
  • Monitor Channel: 治理流 (token_usage, cost, compliance)

关键特性

核心 SDK (pkg/)

  • Agent 类型: Basic、Workflow (Parallel/Sequential/Loop)、SubAgent
  • Middleware 栈: 洋葱模型、优先级排序、8+ 内置中间件
  • Backend 抽象: State、Store、Filesystem、Composite
  • Session Store: Memory、PostgreSQL、MySQL 8.0+
  • 工具系统: 7+ 内置工具、长时运行支持
  • 性能优化: ~27M ops/s (Middleware)、~3.8M ops/s (Backend)

HTTP 服务 (cmd/aster)

  • 100+ API 端点: 完整的 REST API
  • 流式响应: SSE、WebSocket
  • 事件订阅: 三通道实时事件
  • 认证授权: API Key、OAuth 2.0
  • 可观测性: OpenTelemetry 集成

客户端 SDK (client-sdks)

  • 15 个资源模块: 按功能域组织
  • 事件驱动: 20+ 事件类型
  • 类型安全: 完整的 TypeScript 类型
  • BaseResource: 自动 Retry、错误处理、日志追踪
  • 框架集成: React、Vercel AI SDK、Vue (未来)

使用方式

作为 Go SDK 使用

import (
    "github.com/astercloud/aster/pkg/agent"
    "github.com/astercloud/aster/pkg/store"
    // 不会引入任何 HTTP 框架!
)

func main() {
    store, _ := store.NewJSONStore(".data")
    deps := &agent.Dependencies{Store: store}
    config := &types.AgentConfig{TemplateID: "assistant"}

    ag, _ := agent.Create(context.Background(), config, deps)
    result, _ := ag.Chat(context.Background(), "Hello!")
    println(result.Text)
}

作为 HTTP 服务使用

# 使用内置的 Gin 实现
./aster serve --addr :8080

# 或自己实现 HTTP 层(用任何框架)

作为客户端 SDK 使用

import { AgentsdkClient } from "@aster/client-js";

const client = new AgentsdkClient({
  baseURL: "http://localhost:8080",
  apiKey: "your-api-key",
});

// 使用任意资源
const response = await client.agents.chat({
  input: "Hello, world!",
});

// 流式响应
for await (const event of client.agents.stream({ input: "..." })) {
  console.log(event);
}

// 事件订阅
const sub = await client.agents.subscribe(["progress", "control"]);
for await (const event of sub) {
  console.log(event);
}

对比其他框架

特性asterLangChainCrewAI
语言Go + TypeScriptPythonPython
架构三层解耦单体单体
框架依赖零依赖 (核心)强依赖强依赖
性能极高 (Go)中等中等
事件驱动✅ 三通道
Middleware✅ 洋葱模型
类型安全✅ 完整
可扩展性✅ 极强⚠️

相关文档


版本: v2.0 最后更新: 2024年11月17日