Guides

从 TensorZero 迁移

将 TensorZero 网关迁移到 BitRouter —— 抛开依赖 ClickHouse 的 LLMOps 栈,换成单一、面向 Agent 的二进制,本地或托管皆可。

从 TensorZero 迁移到 BitRouter

TensorZero 是一个开源的 LLMOps 平台 —— 一个 Rust 网关,捆绑了可观测性、评估、优化(微调、自动化提示工程)与实验能力,全部由 ClickHouse 数据仓库支撑,并以 GitOps 风格的 tensorzero.toml 驱动。BitRouter 有意只解决其中更窄的一块:一个面向 Agent 的代理,提供单一 OpenAI 兼容接口,既可作为本地二进制运行(BYOK,无需基础设施),也可通过托管端点支持 Agent 自主支付。

本指南面向那些主要把 TensorZero 当作网关使用(统一访问提供商、路由、重试、回退)、希望在不运维数据库的前提下使用更精简、Agent 优先接口的团队。如果你依赖 TensorZero 的优化与实验闭环,请先阅读下文的「BitRouter 有意不提供的能力」一节再做决定。

为什么要迁移?

TensorZeroBitRouter
运行时Rust 网关Rust(单一静态二进制)
生产依赖ClickHouse(可观测性存储)+ Docker/Compose
配置tensorzero.toml —— functions、variants、models、providers提供商密钥 + 路由预设;无需维护 schema
部署模式仅自托管本地二进制托管(api.bitrouter.ai)—— OpenAI 兼容端点相同
设计重心完整 LLMOps 闭环:网关 + 可观测性 + 评估 + 优化 + 实验Agent 优先代理:MCP / ACP / 技能、Agent 防火墙、Agent 支付
Agent 协议面无(网关面向提供商)MCP、ACP、Skills、CLI —— 即产品本身,而非附加
Agent 身份与支付x402 / MPP 自主支付(云模式)
许可证Apache 2.0Apache 2.0

两个值得强调的差异

1. 是代理,不是平台

TensorZero 围绕一个反馈闭环构建:路由推理、把每次调用及其指标存入 ClickHouse,再基于这段历史进行评估、微调与 A/B 测试。如果你真的在跑这套闭环,它很强大 —— 这也是 TensorZero 需要一个数据库、以及一份由 functions 与 variants 组成的类型化配置的原因。

BitRouter 有意止步于网关。没有 tensorzero.toml 要维护,没有 ClickHouse 要运维 —— 你设置提供商密钥,按 provider/model id 路由。OpenTelemetry 为每次请求提供 span 与指标(与 TensorZero 同样的 OTLP 导出),但它们发往你已经在运行的后端,而非由代理托管的数据仓库。

2. 面向 Agent,且云端与本地共用同一接口

TensorZero 的网关是面向提供商的 —— 它统一上游。BitRouter 补上面向 Agent的另一半:用于工具的 MCP 网关、用于 Agent 身份与调度的 ACP 网关、一个服务端工具循环,以及 Agent 支付 —— 让 Agent 无需你为其预置密钥即可按请求付费。

而且托管云与本地二进制暴露同一个 OpenAI 兼容端点 —— 开发时在本地启动,生产时指向 api.bitrouter.ai(或反过来),无需改动客户端代码。两种流程都见快速开始

迁移路径

从 OpenAI 兼容客户端迁移

如果你的应用已经在对接 TensorZero 的 OpenAI 兼容端点,迁移就是换一个 base URL,再把 tensorzero::… 模型前缀换成普通的 provider/model id:

import openai

client = openai.OpenAI(
    base_url="http://localhost:3000/openai/v1",
    api_key="not-used",
)

response = client.chat.completions.create(
    # TensorZero 模型 / function 引用
    model="tensorzero::model_name::openai::gpt-4o-mini",
    messages=[{"role": "user", "content": "Hello"}],
)
import openai

# 本地:`bitrouter`(通过环境变量 BYOK)—— 见 /docs/get-started/quickstart
# 云端:base_url="https://api.bitrouter.ai/v1", api_key=$BITROUTER_API_KEY
client = openai.OpenAI(
    base_url="http://127.0.0.1:4356/v1",
    api_key="not-used-in-local-byok",
)

response = client.chat.completions.create(
    model="openai/gpt-4o-mini",
    messages=[{"role": "user", "content": "Hello"}],
)

TensorZero 的 function(一个命名的提示模板 + schema,含一个或多个 variant)没有单一对应物 —— 路由那一半映射到 BitRouter,模板/变体那一半留在你的应用里,或迁移到预设。见下方的「功能映射」一节。

从网关 + ClickHouse 栈迁移

基础设施迁移把 Compose 栈(网关容器加 ClickHouse)替换成一个二进制、零数据库:

# docker-compose.yml 运行网关 + 一个 ClickHouse 仓库
export OPENAI_API_KEY=sk-...
export TENSORZERO_CLICKHOUSE_URL=http://chuser:chpass@clickhouse:8123/tensorzero
docker compose up   # 网关在 :3000,ClickHouse 在 :8123
# 配置从 ./config/tensorzero.toml 挂载
# 安装(curl、npm、brew 或 cargo —— 见快速开始)
curl -fsSL https://bitrouter.ai/install.sh | sh

# 设置提供商密钥;BitRouter 启动时自动检测
export OPENAI_API_KEY=sk-...
export ANTHROPIC_API_KEY=sk-ant-...

# 交互式向导(云或本地);默认本地在 :4356 提供服务
bitrouter

若想完全跳过本地代理,把客户端指向 https://api.bitrouter.ai/v1 并带上 BitRouter API 密钥即可 —— 无二进制、无 ClickHouse、无基础设施。

功能映射

TensorZero 概念BitRouter 对应文档
tensorzero.toml 中的 [models.*] + [models.*.providers.*]提供商密钥(自动检测)+ 模型注册表BYOK模型
[functions.*](命名提示 + schema)留在应用侧,或一个路由预设预设
[functions.*.variants.*](按变体指定模型)路由预设变体 / 模型 id预设
routing / retries / fallbacks模型回退规则模型回退
跨提供商 load_balancing提供商选择提供商选择
OpenAI 兼容 /openai/v1 端点OpenAI 兼容 /v1 端点API 参考
原生 POST /inference 端点OpenAI、Anthropic 与 Google 兼容协议API 参考
ClickHouse 可观测性 + UI发往你自己后端的 OTLP trace 与指标,或 Cloud 上的托管 ActivityOpenTelemetry云端追踪
OpenTelemetry(OTLP)导出OpenTelemetry(OTLP)导出OpenTelemetry
内置结构化输出(JSON functions)跨所有提供商的结构化输出结构化输出
——(无对应)MCP / ACP / Skills Agent 网关工具Agents
——(无对应)Agent 自主支付(x402 / MPP)支付

BitRouter 有意不提供的能力

为了坦诚地设定预期:BitRouter 是一个网关,而非 LLMOps 平台。它提供 TensorZero 的优化与实验闭环 —— 没有内置的监督微调、RLHF、自动化提示工程、动态上下文学习、推理级或工作流级评估,也没有自适应 A/B 测试,更没有 ClickHouse 支撑、用于把历史推理在不同提示下重放的 UI。

如果你的工作流依赖那套封闭反馈闭环 —— 采集推理与反馈、评估、优化、实验 —— 那么 TensorZero 更合适,这些工作负载应继续留在它上面。当你从 TensorZero 真正需要的是网关、而缺的那一半是 Agent 基础设施(工具/Agent 网关、Agent 防火墙、按请求自主付费)时,迁移到 BitRouter 才是对的选择。

迁移清单

迁移前

  • 列出你真正经 TensorZero 路由的提供商与模型(其余略过)
  • 区分网关用途与平台用途 —— 你用的是评估 / 优化 / 实验,还是仅仅路由?
  • 记下 [functions.*] 的模板与 schema 在哪里;规划是保留在应用侧还是迁到预设
  • 决定云端还是本地(或两者并用 —— 它们共用端点)

迁移中

  • 安装 BitRouter CLI(快速开始
  • 导出提供商密钥,或粘贴进云端控制台(sealed-box 加密)
  • 将客户端 base_url 改为 http://127.0.0.1:4356/v1(本地)或 https://api.bitrouter.ai/v1(云端)
  • tensorzero::… 模型字符串替换为 provider/model id
  • 把 OTLP 导出重新指向你的后端(OpenTelemetry
  • 用一个示例请求验证
  • 若不再需要平台闭环,下线网关容器与 ClickHouse

下一步

获取帮助

How is this guide?

On this page