简介
一个用于在不同 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 })