Astra Gate

架构总览

组件构成与协议转换设计

组件

┌────────────┐   ┌─────────────────────────────────────┐
│ astra CLI  │──▶│  astra-server (.NET, self-contained) │
├────────────┤   │  ┌─────────┐  ┌────────┐  ┌───────┐ │
│ 桌面端     │──▶│  │ Gateway │─▶│ Privacy│─▶│ Billing│ │
│ (Electron) │   │  └─────────┘  └────────┘  └───────┘ │
├────────────┤   │  ┌──────────────────────────────┐    │
│ Web 控制台 │──▶│  │ Admin API + 静态资源 (web/dist)│    │
└────────────┘   │  └──────────────────────────────┘    │
                 └──────────────┬──────────────────────┘
                                ▼
                    上游:Anthropic / OpenAI / DeepSeek / …
  • astra-server — 单文件自包含的 .NET 宿主,网关管道、Admin API 与控制台静态资源都在这一个进程里;
  • CLI / 桌面端 — 两种管理入口,读写同一份 ~/.astra;
  • Web 控制台 — Vite + React 构建产物,由服务端直接托管(浏览器打开即用)。

协议转换:hub-and-spoke

Astra 支持四种线协议:OpenAI Chat、OpenAI Responses、Anthropic Messages、Gemini。转换不是两两互译,而是全部先解码到统一中间表示(IR),再从 IR 编码为目标协议:

OpenAI Chat ─┐                                ┌─ OpenAI Chat
OpenAI Responses ─┤→ IR → 编码 ─┤ OpenAI Responses
Anthropic ─┤     (统一中间表示)            ├─ Anthropic
Gemini ─┘                                    └─ Gemini

新增一种协议只需实现一个 codec,不必为 N×N 的组合写转换器。跨协议无法无损表达的字段在 IR 中有明确文档标注(如部分服务商特有的缓存写入计费粒度)。

数据流

  1. 客户端请求进入网关端点,按路径识别协议并解码为 IR;
  2. 解析有效模型(请求模型名 → 系统模型 → 提供商模型映射);
  3. 隐私护栏按规则处理(警告 / 拦截 / 脱敏 + 响应还原);
  4. 选择上游提供商与接口(协议一致直连,不一致按「上游协议优先级」转换);
  5. 发送上游,记录 usage;
  6. 按三级价格体系逐项计费,写入请求日志与统计。

技术栈

部分技术
服务端.NET 10 / ASP.NET Core,SQLite (WAL) + Dapper
网关自研协议编解码 + SSE 流式管道
控制台Vite + React + Tailwind,双语(zh / en)
CLINode ≥ 18,按平台分发预编译服务端二进制
桌面端Electron 壳

On this page