MoonRoute

AI model routing, governance, and resilience infrastructure for MoonBit

ai
llm
gateway
routing
reliability
Download zip
Version
0.1.3
License
Apache-2.0
Last updated
21 minutes ago
Downloads
7

Dependencies

#MoonRoute

MoonRoute 是一个面向 MoonBit 的 AI 模型调用治理与弹性路由基础设施,位于 LLM 客户端和上层 AI 应用之间。

项目重点处理多模型、多 Provider 场景下的:

  • 模型能力、成本、延迟和健康状态路由;
  • Token Bucket 限流、并发控制和预算治理;
  • 超时、重试、Circuit Breaker 和 Provider Fallback;
  • 非流式与流式响应统一处理;
  • OpenAI-compatible HTTP Gateway 与 SSE 输出;
  • Token、费用、延迟、错误和路由决策记录。

MoonRoute 是原创 MoonBit-native 项目,不重新实现具体模型推理、OpenAI/Anthropic/Gemini SDK、MCP、RAG 或向量数据库。项目首期使用内存状态和 Mock Provider,保证在没有真实模型 API Key 的环境中完成测试和 Demo。

#项目状态

当前项目已经完成第一轮 MoonBit-native 核心实现,并已将基础治理编排接入本地 Gateway。

已实现并通过测试的能力:

  1. Provider 统一请求模型、响应模型和适配器边界;
  2. 基于能力过滤、成本、延迟、健康状态和优先级的确定性路由器;
  3. Token Bucket、并发限制和单进程内存预算控制;
  4. 重试退避配置、自动重试、Circuit Breaker 和 Provider Fallback;
  5. 统一流式事件、Mock Provider 和 SSE 编码;
  6. /healthz/metrics/v1/chat/completions Gateway 核心处理;
  7. 请求审计记录中的 Provider、重试次数和 Fallback 状态;
  8. native async HTTP 服务 Demo。

当前仍保留在后续迭代的内容:真实 Provider 适配器、可中断的异步超时调度、持久化或分布式配额,以及完整外部指标系统。当前重试采用确定性策略执行,不在测试中睡眠;真实 HTTP 服务与 Mock Provider 已分别验证。首期 Gateway 明确支持 OpenAI-compatible Chat Completions 的 JSON 子集:model 和非空 messages 必填,每条消息的 rolecontent 必须是字符串,多条消息按顺序转换为 role: content 并用换行分隔;stream 缺省为 false,且必须是布尔值。

#当前实现与验证

项目使用 MoonBit 新模块格式和 moonbitlang/async@0.20.1。基础验证命令为:

moon fmt moon check moon test

当前验证结果:30 个测试用例全部通过,moon check --deny-warnmoon test 均通过。当前本地工具链为 moonc v0.10.11

当前源码按照申报书的功能层分布在 src/modelsrc/providersrc/routersrc/governancesrc/resiliencesrc/streamsrc/observesrc/gateway。由于当前 MoonBit 工具链使用新模块格式,实际配置文件名为 moon.modmoon.pkg

#安装与快速开始

安装 MoonBit 工具链后,在仓库根目录执行:

moon update moon check --deny-warn moon test

项目使用当前 MoonBit 模块格式,根目录为 moon.mod,各包使用 moon.pkg。旧版申报书中的 moon.mod.jsonmoon.pkg.json 仅是历史目录示例,不是本仓库的实际配置文件。

#Provider 接入

MoonRoute 的 Gateway 接收 Array[@provider.ProviderAdapter]。调用方通过 ProviderAdapter::new 提供模型能力描述、普通请求回调和流式请求回调;测试和示例可使用 MockProvider::adapter()。Gateway 不绑定具体厂商 SDK,真实 SDK 由调用方在适配器回调中接入。

#策略配置

路由器先按模型能力和健康状态过滤,再按成本、延迟、健康状态和优先级进行确定性评分。治理核心使用内存状态,配置 Token Bucket 容量与补充速率、并发上限和预算上限;弹性层配置重试次数、退避策略、 Circuit Breaker 阈值和备用 Provider。相同输入和配置会得到相同路由结果,便于测试和审计。

#Gateway API

  • GET /healthz:返回健康状态;
  • GET /metrics:返回基础请求、成功、失败和费用统计;
  • POST /v1/chat/completions:接收 modelmessages 和可选 stream,非流式返回 JSON,流式返回 SSE;
  • 非法 JSON、字段类型错误、空消息、未知模型返回结构化 HTTP 400;限流或预算拒绝返回 HTTP 429。

启动 native Gateway Demo:

moon run examples/gateway_demo

健康检查:

Invoke-WebRequest http://127.0.0.1:3000/healthz

流式 Chat Completions:

Invoke-WebRequest -Method Post ` -ContentType 'application/json' ` -Body '{"model":"demo", "stream": true, "messages": [{"role":"user","content":"hello"}]}' ` http://127.0.0.1:3000/v1/chat/completions

Demo 使用本地 Mock Provider,不需要真实模型 API Key。Gateway 核心已在纯函数式请求处理测试和真实本地 HTTP 进程中分别验证。

#发布到 Mooncakes

发布前需要先执行 moon login 完成 Mooncakes 账号认证,然后在项目根目录执行:

moon publish

模块版本遵循语义化版本号;当前版本为 0.1.3。发布包通过 .moonignore 排除构建目录、依赖缓存和生成接口文件。发布前使用 moon package 检查包内容,再执行 moon publish

#为什么需要 MoonRoute

已有 LLM 客户端主要负责发送模型请求和解析模型响应。进入多 Provider 场景后,应用还需要自行处理:

请求能力判断 -> Provider 选择 -> 预算与限流检查 -> 请求执行 -> 超时、重试、熔断或 Fallback -> 流式响应转发 -> Token、费用、延迟和错误记录

如果这些逻辑直接散落在每个 AI 应用中,路由规则、失败处理、预算统计和观测方式会不一致。MoonRoute 将这些 AI 专属治理能力集中为 MoonBit 库和可运行的 HTTP Gateway。

#架构

OpenAI-compatible Client / MoonBit API | HTTP Gateway | 请求解析与治理策略 | 能力过滤与路由评分 | 弹性执行与流式处理 | Provider Adapter / Mock Provider | 调用记录、用量和指标统计

核心边界如下:

  • Gateway 负责 HTTP 请求、响应编码和 SSE 输出;
  • 治理核心负责限流、预算、并发和策略判断;
  • 路由器负责 Provider 能力过滤与评分;
  • 弹性执行器负责重试、熔断和 Fallback;当前超时调度仍属于后续迭代;
  • Provider 适配器负责连接具体的底层客户端;
  • 观测层负责记录每次请求的路由与执行结果。

#研究基础

#1. FrugalGPT:模型级联与成本—效果权衡

FrugalGPT: How to Use Large Language Models While Reducing Cost and Improving Performance 研究了通过模型级联、提示适配和模型近似降低 LLM 调用成本的方法。论文中的核心启发是:不同请求不需要固定使用同一个最强模型,可以根据请求特征在多个模型之间进行选择。

MoonRoute 不实现 FrugalGPT 的训练流程,也不复制其模型级联实验,而是将“根据请求和运行状态选择模型”的思想转化为运行时基础设施能力,首期使用可解释的能力过滤、成本、延迟、健康状态和优先级评分。

#2. RouteLLM:基于偏好数据的模型路由

RouteLLM: Learning to Route LLMs with Preference Data 研究使用偏好数据训练路由器,在模型效果和调用成本之间进行选择。其官方实现 lm-sys/RouteLLM 主要使用 Python。

MoonRoute 的首期范围不包含路由模型训练、偏好数据收集或模型质量评估。MoonRoute 采用确定性运行时策略,便于在 MoonBit 中测试、解释和复现;后续可以为路由器增加外部质量评分或学习型策略适配接口。

#3. The Tail at Scale:尾延迟治理

The Tail at Scale 讨论了分布式交互服务中的尾延迟问题,说明平均延迟不能代表用户实际遇到的最慢请求。MoonRoute 将这一思路用于 Provider 延迟统计、延迟权重路由、超时和熔断设计。

MoonRoute 首期不实现论文中的复杂分布式推测执行,而是记录 Provider 的延迟指标,并通过超时、健康状态和 Fallback 控制异常延迟对应用的影响。

#4. Token Bucket:限流标准

Token Bucket 的标准化描述可以参考 RFC 2697: A Single Rate Three Color Marker。MoonRoute 使用 Token Bucket 作为请求数和 Token 消耗治理的基础算法,并在测试中覆盖补充速率、桶容量、突发请求和额度不足等边界。

#5. Circuit Breaker 与指数退避

MoonRoute 的 Circuit Breaker、超时、重试和指数退避属于分布式服务常用的可靠性模式。项目将它们实现为可测试的状态机和策略组合,不把具体云平台或某家 Provider 的失败行为写死在核心模块中。

#现有语言实现对比

AI Gateway 和模型路由已经有多个语言生态中的实现。MoonRoute 的目标不是否认这些项目,而是明确 MoonBit 实现的范围和差异。

按语言归纳,直接相关的实现主要集中在 Python、TypeScript/JavaScript、Go 和 Rust:

  • Python:LiteLLM 提供统一 LLM 调用和 Gateway Proxy,RouteLLM 提供基于偏好数据的路由模型;
  • TypeScript / JavaScript:Portkey AI Gateway 提供多 Provider Gateway,支持路由、Fallback、重试、预算、限流和流式输出;
  • Go:Envoy AI Gateway 面向 Envoy/Kubernetes 体系,Bifrost 提供多 Provider OpenAI-compatible Gateway;
  • Rust:Shepherd Model Gateway 面向高性能模型路由,AISIX AI Gateway 提供静态二进制、路由、故障转移、预算、限流和观测;
  • MoonBit:Mooncakes 中已有 llm_interop,提供多供应商协议抽象、流式调用、工具调用和协议转换,但不承担 MoonRoute 规划的完整请求治理职责。

本次检索未在 Mooncakes 或上述主要开源项目范围内定位到与 MoonRoute 目标完全相同的 Java、Kotlin 或 C# MoonBit 生态实现。Java、Kotlin 和 .NET 生态中存在模型客户端、AI 应用框架和云平台 SDK,但它们与“MoonBit-native 的模型路由、预算、限流、弹性和 Gateway 治理核心”不是同一层级。

项目主要语言已有能力MoonRoute 的差异
LiteLLMPython多模型统一调用、Proxy、成本统计、预算、限流、重试、Fallback 和负载均衡MoonRoute 不实现 100+ Provider SDK,聚焦 MoonBit-native 治理核心、Mock Provider 和可复现策略测试
RouteLLMPython基于偏好数据训练 LLM Router,并提供服务和评估框架MoonRoute 首期采用确定性运行时评分,不包含训练和偏好数据管线
Portkey AI GatewayTypeScript / JavaScript多模型 Gateway、路由、Fallback、重试、Circuit Breaker、预算、限流和 SSE 等MoonRoute 不做企业级控制台和大规模 Provider 集成,重点是 MoonBit 库接口和核心治理状态机
Envoy AI GatewayGo + EnvoyKubernetes/Envoy 体系中的 AI 流量入口、路由、策略、限流和观测MoonRoute 不依赖 Kubernetes、Envoy 或 CRD,首期以单进程 MoonBit 库和本地 Gateway 为目标
BifrostGo多 Provider OpenAI-compatible Gateway、请求排队、Provider 生命周期管理和 AI 流量统一入口MoonRoute 不以高吞吐网关性能为首要目标,重点是可解释的治理策略、可测试状态机和 MoonBit API
Shepherd Model GatewayRust高性能模型 Gateway、缓存感知路由、gRPC、负载均衡、限流、熔断和多租户能力MoonRoute 不追求 GPU 集群调度和高性能生产部署,重点是 MoonBit 生态中的轻量治理抽象
AISIX AI GatewayRustOpenAI-compatible Gateway、路由与故障转移、预算、限流、Guardrails、缓存和观测MoonRoute 不复制完整生产网关功能,首期聚焦治理核心、Mock Provider、单进程内存状态和验证型 Demo
llm_interopMoonBit多供应商协议抽象、流式调用、工具调用和协议转换MoonRoute 在其上层补充路由、预算、限流、重试、熔断、Fallback 和 Gateway 治理能力

#MoonRoute 的实现边界

MoonRoute 与现有实现的关系可以表示为:

底层 Provider SDK / llm_interop | MoonRoute Governance Core | Gateway / AI Application

首期不做以下内容:

  • 训练 LLM Router;
  • 重新实现 Provider SDK;
  • 复制 LiteLLM、Portkey 或 Envoy 的完整 Gateway;
  • 实现 Kubernetes 控制器;
  • 实现分布式 Redis 配额;
  • 实现完整管理控制台;
  • 实现模型推理、Agent、MCP、RAG 或向量数据库。

MoonRoute 的主要工程价值在于:将 AI 请求治理中的路由评分、限流、预算、弹性状态机、流式事件和审计记录组织成 MoonBit-native 的可复用模块,并通过 Mock Provider 建立不依赖外部模型服务的测试闭环。

#Demo

当前已提供以下 Demo:

#成本权重路由

注册两个能力相同但成本不同的 Provider,按照成本权重选择 Provider,并输出 cheap

#延迟权重路由

使用不同延迟元数据的 Provider,按照延迟权重选择 fast Provider。

#熔断与 Fallback

Gateway 使用失败注入模拟主 Provider 连续超时,先执行重试,再打开 Circuit Breaker,并选择备用 Provider;重复请求会跳过已打开的主 Provider。

#HTTP Gateway 流式响应

启动本地 Gateway,接收 OpenAI-compatible Chat Completions 请求,通过 SSE 返回文本增量和完成事件。

#测试计划

测试将覆盖:

  • 路由能力过滤和评分;
  • 成本、延迟、健康状态和优先级权重;
  • 相同配置下的确定性选择;
  • Token Bucket 补充和突发边界;
  • 并发额度耗尽;
  • Token 配额和预算超限;
  • 重试次数和指数退避;
  • Circuit Breaker 关闭、打开和半开状态;
  • Fallback 链路;
  • 流式事件正常结束和中途失败;
  • Provider 未返回实际 Token 用量;
  • HTTP 非法请求和 Gateway 健康检查;
  • Mock Provider 故障注入。

目标是不少于 200 个有效测试用例,重点覆盖路由算法、治理算法、弹性状态机、流式事件和 Gateway 行为。

#开发计划

  • v1.0:Provider 抽象、请求模型、Mock Provider 和路由器;
  • v1.1:Token Bucket、并发控制、Token 配额和预算;
  • v1.2:超时、重试、指数退避、Circuit Breaker 和 Fallback;
  • v1.3:统一流式事件和 SSE Gateway;
  • v1.4:调用记录、指标统计、故障注入和完整回归测试;
  • v2.0:持久化配额、动态配置、更多 Provider 适配和分布式治理。

#许可证

项目许可证为 Apache License 2.0,仓库根目录已包含完整的 LICENSE 文件。

#参考资料

  1. Chen, Lingjiao; Zaharia, Matei; Zou, James. FrugalGPT: How to Use Large Language Models While Reducing Cost and Improving Performance. 2023.
  2. Ong, Isaac et al. RouteLLM: Learning to Route LLMs with Preference Data. ICLR 2025.
  3. Dean, Jeffrey; Barroso, Luiz André. The Tail at Scale. Communications of the ACM, 2013.
  4. Heinanen, Juha; Guerin, Ron. RFC 2697: A Single Rate Three Color Marker. 1999.
  5. LiteLLM.
  6. Portkey AI Gateway.
  7. Envoy AI Gateway.
  8. Bifrost.
  9. Shepherd Model Gateway.
  10. AISIX AI Gateway.
  11. MoonBit llm_interop.