在 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 即可。本页先给出每个框架的准确配置,再介绍流式输出、工具调用、成本控制和最常遇到的报错。
开始之前
- 注册账号并充值预付额度。以美元按量付费,无订阅;最低充值 $5,额度有效期 12 个月。
- 在控制台生成 API Key。下面每个框架都会以
Authorization: Bearer <API key>的形式发送它,你不需要手动拼这个请求头。 - Base URL 使用
https://yiduochan.com/v1。对话请求发往/v1/chat/completions,/v1/models列出你的 Key 可以调用的模型。 - 模型 ID 原样传递,区分大小写:
MiniMax-M2.7、MiniMax-M2.7-highspeed和MiniMax-M3。
把 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"}]}'
选择哪种集成
- LiteLLM:适合希望在多个提供方之间使用同一种调用方式,或需要在多个应用前面放一个自带 Key 与预算管理的代理的场景。
- LangChain:适合已经在用 Python 构建 chain、Agent 或检索管线,并希望直接换用
ChatOpenAI的场景。 - Vercel AI SDK:适合需要把响应流式推送到浏览器的 TypeScript 与 Next.js 应用。
三者向同一个接口发送相同的 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.06 | 1,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;其余写法相同。
流式输出与工具调用说明
- 流式输出使用标准的 OpenAI SSE(server-sent events)格式。调用
stream()、streamText或传入stream=True时,各框架会替你设置stream: true。 - 工具定义放在 OpenAI 的
tools数组中发送,工具调用在tool_calls中返回。由于框架发出的 JSON 与发给 OpenAI 的完全相同,不需要针对 MiniMax 做任何映射。 - 上线前用你自己的工具 schema 做一次简短的端到端测试。不同模型遵循参数格式的严格程度不同,写一个五行的冒烟测试,比在生产环境排查问题便宜得多。
- 非流式响应的 token 用量在
usage对象中返回。流式场景下,如果你要按请求记录花费,请通过框架的流式选项,要求在最后一个数据块中返回用量。 - 提示缓存体现在计费上,而不是请求里:命中提示缓存的 tokens 按表中的缓存读取价计费,框架代码无需改动。
成本建议
- 默认使用
MiniMax-M2.7。只在对延迟敏感的特定路由上切换到MiniMax-M2.7-highspeed,因为在输出质量相同的情况下,它的输入和输出价格都是 M2.7 的两倍。 - 让重复使用的系统提示和 few-shot 示例在各次调用之间保持逐字节一致,这是命中缓存的前提。缓存读取按每百万 tokens $0.06 计费,而输入价为 $0.30。
- 使用
MiniMax-M3时注意 512K 这条界线。提示超过 512K tokens,整个请求都会按输入 $0.60、输出 $2.40 那一档计费,所以尽量精简检索上下文。 - 在面向用户的路由上设置
max_tokens(LangChain、LiteLLM)或maxOutputTokens(AI SDK)。输出价格约为输入的四倍,不设上限的生成会占据账单的大头。 - 如果运行了 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 个月,失败的请求从不计费。可在注册页创建账号。