在 LiteLLM、LangChain 与 Vercel AI SDK 中使用 MiniMax

MiniMax-M2.7、MiniMax-M2.7-highspeed 与 MiniMax-M3 通过 https://yiduochan.com/v1 上的 OpenAI 兼容接口提供,因此 LiteLLM、LangChain 与 Vercel AI SDK 只要使用各自标准的 OpenAI 提供方、改一下 Base URL 就能接入。本页给出每个框架的准确配置、当前的 token 单价,以及最常见报错的解决办法。

YiduoChan 上的 MiniMax 文本模型通过位于 https://yiduochan.com/v1 的标准 OpenAI 兼容接口提供。LiteLLM、LangChain 与 Vercel AI SDK 都自带支持自定义 Base URL 的 OpenAI 提供方,所以都不需要 MiniMax 专用插件:把 OpenAI 提供方指向 YiduoChan,传入控制台里的 API Key,模型名填 MiniMax 的模型 ID 即可。本页先给出每个框架的准确配置,再介绍流式输出、工具调用、成本控制和最常遇到的报错。

开始之前

把 Key 放在环境变量里,不要写进源码。下面的示例都读取 YIDUOCHAN_API_KEY。

用 curl 验证 Key

动手配置任何框架之前,先用一个直接请求确认 Key 和 Base URL。只要这个请求成功,之后的失败就是框架配置问题,而不是账号问题。

curl https://yiduochan.com/v1/chat/completions \
  -H "Authorization: Bearer $YIDUOCHAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "MiniMax-M2.7", "messages": [{"role": "user", "content": "ping"}]}'

选择哪种集成

三者向同一个接口发送相同的 JSON。选哪个取决于你现有的技术栈,与模型能力无关。

模型与价格

所有价格均为美元 / 每百万 tokens,按 MiniMax 刊例价水平。各模型介绍见 MiniMax 模型总览,权威价格以定价页为准。

模型 ID输入输出缓存读取说明
MiniMax-M2.7$0.30$1.20$0.06大多数场景的默认选择。缓存写入 $0.375。
MiniMax-M2.7-highspeed$0.60$2.40$0.06质量与 M2.7 相同,延迟更低。缓存写入 $0.375。
MiniMax-M3(提示不超过 512K tokens)$0.30$1.20$0.061,048,576 tokens(1M)上下文窗口。
MiniMax-M3(提示在 512K 到 1M tokens 之间)$0.60$2.40$0.12提示超过 512K tokens 后适用更高一档。

各模型页面:MiniMax-M2.7 与 MiniMax-M3。失败的请求从不计费。

LiteLLM

LiteLLM 通过 openai/ 提供方前缀与任何 OpenAI 兼容服务端通信。前缀决定使用 OpenAI 请求格式,api_base 决定请求发往哪里。斜杠后面的全部内容会作为 model 字段原样转发给 YiduoChan,所以这里要严格按上面列出的写法填 MiniMax 模型 ID。

Python SDK

import os
from litellm import completion

response = completion(
    model="openai/MiniMax-M2.7",
    api_base="https://yiduochan.com/v1",
    api_key=os.environ["YIDUOCHAN_API_KEY"],
    messages=[
        {"role": "system", "content": "You are a concise assistant."},
        {"role": "user", "content": "Explain idempotency keys in two sentences."},
    ],
    temperature=0.2,
)
print(response.choices[0].message.content)
print(response.usage)

# Streaming: identical call with stream=True
for chunk in completion(
    model="openai/MiniMax-M3",
    api_base="https://yiduochan.com/v1",
    api_key=os.environ["YIDUOCHAN_API_KEY"],
    messages=[{"role": "user", "content": "List three uses of a message queue."}],
    stream=True,
):
    delta = chunk.choices[0].delta.content
    if delta:
        print(delta, end="", flush=True)

不要图省事把 OPENAI_API_KEY 设成你的 YiduoChan Key。显式传入 api_key 和 api_base,可以让 MiniMax 这条调用路径与同一进程中已有的 OpenAI 凭据互不干扰。

LiteLLM 代理(config.yaml)

多个服务共用一个网关时,运行 LiteLLM 代理,并在 model_list 中声明每个 MiniMax 模型。model_name 是应用调用时使用的别名;litellm_params.model 保留 openai/ 前缀。os.environ/ 语法会在启动时从代理的环境变量中读取 Key。

model_list:
  - model_name: minimax-m2.7
    litellm_params:
      model: openai/MiniMax-M2.7
      api_base: https://yiduochan.com/v1
      api_key: os.environ/YIDUOCHAN_API_KEY

  - model_name: minimax-m2.7-highspeed
    litellm_params:
      model: openai/MiniMax-M2.7-highspeed
      api_base: https://yiduochan.com/v1
      api_key: os.environ/YIDUOCHAN_API_KEY

  - model_name: minimax-m3
    litellm_params:
      model: openai/MiniMax-M3
      api_base: https://yiduochan.com/v1
      api_key: os.environ/YIDUOCHAN_API_KEY

用 litellm --config config.yaml 启动,把客户端指向 http://localhost:4000/v1,模型名填别名。代理会在你的 YiduoChan 预付余额之上,再叠加它自己的虚拟 Key、花费日志和按别名设置的预算,适合多个团队共用一个账号的场景。

LangChain:ChatOpenAI 配合 base_url

LangChain 的 ChatOpenAI 类(langchain-openai 包)直接接受 base_url 和 api_key。把 model 设为 MiniMax 模型 ID,LangChain 的其余功能(invoke、stream、chain、bind_tools、结构化输出辅助方法)无需改动即可使用。

import os
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    base_url="https://yiduochan.com/v1",
    api_key=os.environ["YIDUOCHAN_API_KEY"],
    model="MiniMax-M2.7",
    temperature=0.2,
    max_tokens=1024,
)

# Single response
result = llm.invoke("Write a one-line commit message for a null-check fix.")
print(result.content)
print(result.response_metadata.get("token_usage"))

# Token-by-token streaming
for chunk in llm.stream("Summarize the CAP theorem."):
    print(chunk.content, end="", flush=True)

旧教程里用的是 openai_api_base 和 openai_api_key;两者作为别名仍然可用,但当前的参数名是 base_url 和 api_key。

LangChain 中的工具调用

工具通过 bind_tools 绑定。LangChain 会把 Python 函数签名和 docstring 转换成 OpenAI 的 tools schema,放在请求体中发送。

from langchain_core.tools import tool

@tool
def get_order_status(order_id: str) -> str:
    """Look up the shipping status of an order by its ID."""
    return f"Order {order_id} shipped"

llm_with_tools = llm.bind_tools([get_order_status])
msg = llm_with_tools.invoke("Where is order A-1042?")

for call in msg.tool_calls:
    print(call["name"], call["args"])

处理长文档的管线只需换成 model="MiniMax-M3",其余代码不变;1M 上下文窗口能省掉针对大文件检索时的大部分分块步骤。

Vercel AI SDK

Vercel AI SDK 使用 @ai-sdk/openai 提供方。createOpenAI 接收 baseURL 和 apiKey,返回一个提供方实例;请调用它的 .chat() 方法,让请求走 /v1/chat/completions。安装命令:npm i ai @ai-sdk/openai。

import { createOpenAI } from "@ai-sdk/openai";
import { generateText, streamText } from "ai";

const yiduochan = createOpenAI({
  baseURL: "https://yiduochan.com/v1",
  apiKey: process.env.YIDUOCHAN_API_KEY,
});

// One-shot completion
const { text, usage } = await generateText({
  model: yiduochan.chat("MiniMax-M2.7"),
  prompt: "Explain optimistic locking in three sentences.",
});
console.log(text, usage);

// Streaming, e.g. inside a Next.js route handler
const result = streamText({
  model: yiduochan.chat("MiniMax-M3"),
  system: "You are a precise technical writer.",
  prompt: "Describe the tradeoffs of server-sent events.",
});
for await (const delta of result.textStream) {
  process.stdout.write(delta);
}
// In a route handler: return result.toTextStreamResponse();

在 AI SDK 5 中,直接以 yiduochan("MiniMax-M2.7") 的形式调用提供方,请求会发往 OpenAI Responses API,而不是 Chat Completions。请使用 yiduochan.chat(...),让请求发到 YiduoChan 提供的接口。

用 generateText 调用工具

import { generateText, tool } from "ai";
import { z } from "zod";

const { text, toolResults } = await generateText({
  model: yiduochan.chat("MiniMax-M2.7"),
  tools: {
    getOrderStatus: tool({
      description: "Look up the shipping status of an order",
      inputSchema: z.object({ orderId: z.string() }),
      execute: async ({ orderId }) => ({ orderId, status: "shipped" }),
    }),
  },
  prompt: "Where is order A-1042?",
});
console.log(toolResults, text);

AI SDK 4 中 schema 字段名为 parameters,而不是 inputSchema;其余写法相同。

流式输出与工具调用说明

成本建议

  1. 默认使用 MiniMax-M2.7。只在对延迟敏感的特定路由上切换到 MiniMax-M2.7-highspeed,因为在输出质量相同的情况下,它的输入和输出价格都是 M2.7 的两倍。
  2. 让重复使用的系统提示和 few-shot 示例在各次调用之间保持逐字节一致,这是命中缓存的前提。缓存读取按每百万 tokens $0.06 计费,而输入价为 $0.30。
  3. 使用 MiniMax-M3 时注意 512K 这条界线。提示超过 512K tokens,整个请求都会按输入 $0.60、输出 $2.40 那一档计费,所以尽量精简检索上下文。
  4. 在面向用户的路由上设置 max_tokens(LangChain、LiteLLM)或 maxOutputTokens(AI SDK)。输出价格约为输入的四倍,不设上限的生成会占据账单的大头。
  5. 如果运行了 LiteLLM 代理,就在代理里为每个 Key 设置预算。再加上预付额度,你就有了两道互相独立的支出上限。

常见报错排查

401 Unauthorized

Key 缺失、不完整,或属于另一个账号。确认发起请求的进程中环境变量确实有值(serverless 函数和 Docker 容器里经常漏掉这一点),并确认没有误读到别处的 OPENAI_API_KEY。

/v1/responses 或 /v1/embeddings 返回 404

这个 Base URL 下的 OpenAI 兼容接口有 /v1/chat/completions、/v1/audio/speech 和 /v1/models。/v1/responses、/v1/embeddings 这类路径不在其中。在 AI SDK 中使用 .chat();在 LiteLLM 中用带 openai/ 前缀的 completion(),不要用 Responses API 的辅助函数;在 LangChain 中不要把 OpenAIEmbeddings 指向这个 Base URL。

模型不存在(Model not found)

对照 /v1/models 检查 ID。全小写的 minimax-m2.7、MiniMax-M2 或 MiniMax-M2.7-fast 都会被拒绝;准确的字符串是 MiniMax-M2.7、MiniMax-M2.7-highspeed 和 MiniMax-M3。如果使用了 LiteLLM 别名,确认别名映射到其中之一。

Base URL 后面多了路径

使用 https://yiduochan.com/v1,不要用 https://yiduochan.com 或 https://yiduochan.com/v1/chat/completions。框架会自己拼上 /chat/completions,所以多了或少了 /v1 都会返回 404。

余额不足

额度是预付的。在控制台充值即可:预设档位有 $5、$10、$20、$50、$100、$200 和 $500,也可以自定义金额。因任何原因失败的请求(包括余额不足)都不计费。

Anthropic 格式的客户端

如果工具使用的是 Anthropic Messages API 而不是 OpenAI 的 API,请设置 ANTHROPIC_BASE_URL=https://yiduochan.com 和 ANTHROPIC_AUTH_TOKEN=<API key>,模型用 ANTHROPIC_MODEL=MiniMax-M2.7 或 MiniMax-M3。Claude Code 指南介绍了这种接入方式,包括 count_tokens 不可用这一点。

相关接口

同一个 Key 和 Base URL 还可以在 /v1/audio/speech 调用语音合成(TTS),模型为 speech-2.8-hd 和 speech-2.8-turbo,按 MiniMax 公布的价格以输入字符数计费;见 MiniMax Speech 2.8。视频模型 MiniMax-H3 即将推出,目前暂不可用。集成相关的问题请发邮件至 support@yiduochan.com。

常见问题

LiteLLM 能通过 YiduoChan 使用 MiniMax 吗?

可以。使用 openai/ 前缀,例如 model="openai/MiniMax-M2.7",配合 api_base="https://yiduochan.com/v1" 和你的 YiduoChan API Key;不需要 LiteLLM 的 MiniMax 专用提供方,同样的设置也适用于代理的 config.yaml。

如何用 LangChain 的 ChatOpenAI 调用 MiniMax?

用 langchain-openai 包创建 ChatOpenAI(base_url="https://yiduochan.com/v1", api_key=<your key>, model="MiniMax-M2.7")。之后 invoke、stream 和 bind_tools 无需改动即可使用;需要 1M tokens 的提示时,可以切换到 MiniMax-M3。

Vercel AI SDK 用哪个提供方接入 MiniMax?

标准的 @ai-sdk/openai 提供方:调用 createOpenAI({ baseURL: "https://yiduochan.com/v1", apiKey }),并把 provider.chat("MiniMax-M2.7") 作为 model 传入,这样请求会发往 /v1/chat/completions,而不是 Responses API。

通过这些框架调用 MiniMax,流式输出和工具调用能用吗?

请求使用 OpenAI Chat Completions 格式,所以 stream 和 tools 字段的发送方式与发给 OpenAI 时完全相同,工具调用在 tool_calls 中返回。在生产环境依赖它们之前,先用你自己的工具 schema 做一次简短测试。

通过 YiduoChan 使用 MiniMax 的价格是多少?

MiniMax-M2.7 每百万输入 tokens $0.30、每百万输出 tokens $1.20;MiniMax-M3 在提示不超过 512K tokens 时价格相同,512K 到 1M 之间为输入 $0.60 / 输出 $2.40。完整价格表见定价页。

在 YiduoChan 上使用 MiniMax 有免费额度或试用吗?

有少量试用:新账号注册即送 $0.10 试用额度,够发几次测试请求;正式使用需预付美元充值,最低 $5,按量付费、无订阅,额度有效期 12 个月,失败的请求从不计费。可在注册页创建账号。

免费注册获取 API Key 查看完整模型定价