Amux

简介

一个用于在不同 LLM 提供商 API 之间进行转换的统一基础设施

什么是 Amux?

Amux 是一个双向 API 适配器,可以在不同的 LLM 提供商格式之间进行无缝转换。

核心优势:

  • 提供商灵活性 - 在 OpenAI、Anthropic、DeepSeek 等之间切换,无需更改代码
  • 双向转换 - 接受任意格式的请求,调用任意提供商,返回任意格式的响应
  • 类型安全 - 完整的 TypeScript 支持,包含全面的类型定义
  • 零依赖 - 核心包没有运行时依赖
  • 生产就绪 - 已在生产应用中使用

与其他只提供统一接口的解决方案不同,Amux 实现了真正的双向转换 - 您可以控制输入和输出格式。

快速示例

import { createBridge } from '@amux.ai/llm-bridge'
import { openaiAdapter } from '@amux.ai/adapter-openai'
import { anthropicAdapter } from '@amux.ai/adapter-anthropic'

// 创建一个桥接:OpenAI 格式输入 → Anthropic API 输出
const bridge = createBridge({
  inbound: openaiAdapter,
  outbound: anthropicAdapter,
  config: {
    apiKey: process.env.ANTHROPIC_API_KEY
  }
})

// 发送 OpenAI 格式的请求,获取 OpenAI 格式的响应
// 但实际上在底层调用的是 Claude API
const response = await bridge.chat({
  model: 'gpt-4',
  messages: [{ role: 'user', content: '你好!' }]
})

console.log(response.choices[0].message.content)

工作原理

Amux 使用**中间表示(IR)**模式在任意提供商格式之间进行转换:

您的应用(OpenAI 格式)

入站适配器 → 解析为 IR

中间表示(统一格式)

出站适配器 → 构建 Anthropic 格式

Claude API

响应通过 IR 流回

您的应用(OpenAI 格式)

IR 是一种统一格式,捕获所有 LLM 功能 - 消息、工具、流式传输、多模态内容和提供商特定扩展。

支持的提供商

提供商包名功能
OpenAI@amux.ai/adapter-openai聊天、流式、工具、视觉、JSON 模式
Anthropic@amux.ai/adapter-anthropic消息、流式、工具、视觉、推理
DeepSeek@amux.ai/adapter-deepseek聊天、流式、工具、推理
Moonshot@amux.ai/adapter-moonshot聊天、流式、工具、推理
智谱 (GLM)@amux.ai/adapter-zhipu聊天、流式、工具、网络搜索
Qwen@amux.ai/adapter-qwen聊天、流式、工具、视觉、推理
Gemini@amux.ai/adapter-google聊天、流式、工具、视觉
MiniMax@amux.ai/adapter-minimax聊天、流式、工具、推理

常见使用场景

多提供商支持 - 让用户选择他们喜欢的 LLM 提供商:

const providers = {
  openai: createBridge({ inbound: openaiAdapter, outbound: openaiAdapter }),
  anthropic: createBridge({ inbound: openaiAdapter, outbound: anthropicAdapter })
}

const response = await providers[userChoice].chat(request)

提供商迁移 - 无需代码更改即可切换提供商:

// 旧:使用 OpenAI
const bridge = createBridge({
  inbound: openaiAdapter,
  outbound: openaiAdapter
})

// 新:切换到 Anthropic(无需其他代码更改)
const bridge = createBridge({
  inbound: openaiAdapter,
  outbound: anthropicAdapter
})

成本优化 - 为简单请求路由到更便宜的提供商:

const isSimple = request.messages.length < 3
const outbound = isSimple ? deepseekAdapter : anthropicAdapter

const bridge = createBridge({ inbound: openaiAdapter, outbound })

下一步

On this page