选择适合任务的大语言模型(LLM),如果不把同一个提示词交给多个模型跑一遍,很难做好。每个提供商都有自己的账户、API 密钥,往往还有自己的 SDK,因此要把 Claude、DeepSeek 和一个开放权重模型放在一起比较,需要大量配置工作。
本教程将通过一个兼容 OpenAI 的端点连接五个不同的模型,并运行一段简短的 Python 脚本,把同一个提示词发送给每个模型,从而比较它们的回答、响应时间和 token 用量。
以下内容均在 Linux 机器上测试。安装命令使用 Debian 和 Ubuntu 的 apt。在 Fedora 和 RHEL 上,请改用 dnf。
一个端点,多个模型
本指南使用 AI/ML API,这是一个 API 聚合服务,通过位于 https://api.aimlapi.com/v1 的一个兼容 OpenAI 的端点,提供来自 OpenAI、Anthropic、DeepSeek、xAI、Z.ai 等开发者的模型。
由于它使用 OpenAI 协议,你可以安装标准的 OpenAI Python SDK,把 base_url 指向这个端点,然后只改一个字符串就能切换模型。
本教程使用的 5 个模型:
价格来自 AI/ML API 模型页面,截至 2026 年 9 月 24 日。
⚠️ 为 API 聚合服务付费前需要了解的事
API 聚合服务是通过单一接口测试多个模型的便捷方式,但在生产环境使用或投入大笔资金之前,请保持谨慎。
从最小额度的充值开始,并在你对该服务有信心之前关闭自动充值。用你实际的工作负载测试延迟和可靠性,并仔细核对 token 用量与账单。
重要: 截至 2026 年 9 月,AI/ML API 的文档明确说明充值不可退款,最低充值金额为 $20。其条款与条件明确说明所有购买均为最终交易且不可退款。
我们强烈建议你在充值前查看其 条款与条件、账户与账单 以及 套餐 页面。
下面开始在 Linux 上通过 AI/ML API 比较多个 LLM。
前提条件
你需要 Python 3.9 或更新版本、pip 以及一个 API 密钥。在 Debian 或 Ubuntu 上,运行以下命令安装:
sudo apt install python3 python3-venv python3-pip
在 AI/ML API 仪表盘的 API 密钥页面 创建一个密钥。
计费方式为按量付费,仪表盘上有一个网页版 Playground,你可以在编写脚本之前先试用某个模型。
步骤 1:搭建隔离环境
在虚拟环境中安装 SDK,不要安装到系统全局:
mkdir llm-compare && cd llm-compare
python3 -m venv .venv
source .venv/bin/activate
pip install openai
然后把密钥导出为环境变量,避免硬编码在脚本里:
export AIMLAPI_KEY="your_api_key_here"
为了让密钥不出现在 shell 历史记录中,请用文本编辑器把这一行加入 ~/.bashrc,而不要在提示符下直接输入。
步骤 2:用 Curl 检查端点
在编写任何 Python 脚本之前,先确认端点有响应。它接受发往 /v1/chat/completions 的标准 POST 请求,并携带 Bearer token:
curl https://api.aimlapi.com/v1/chat/completions \
-H "Authorization: Bearer $AIMLAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek/deepseek-v4-flash",
"messages": [{"role": "user", "content": "Reply with the single word: ok"}]
}'
响应是常见的 OpenAI JSON,回答在 choices[0].message.content 中,token 计数在 usage 中。如果这个请求能成功,下面的脚本也能成功。
步骤 3:用于比较多个 LLM 的 Python 脚本
这个脚本把同一个提示词发送给列表中的每个模型,测量每个请求的耗时,并依次打印回答。将其保存为 compare_llms.py:
#!/usr/bin/env python3
"""compare_llms.py - send one prompt to several LLMs through a single
OpenAI-compatible endpoint (AI/ML API) and compare answers, latency and tokens."""
import os
import sys
import time
from openai import OpenAI
BASE_URL = os.environ.get("OPENAI_BASE_URL", "https://api.aimlapi.com/v1")
API_KEY = os.environ.get("AIMLAPI_KEY") or os.environ.get("OPENAI_API_KEY")
# Edit this list, or override it with the MODELS env var (comma-separated).
MODELS = os.environ.get(
"MODELS",
"anthropic/claude-sonnet-5,"
"deepseek/deepseek-v4-pro,"
"deepseek/deepseek-v4-flash,"
"x-ai/grok-build-0-1,"
"zhipu/glm-5-2",
).split(",")
def main() -> int:
if not API_KEY:
sys.exit("Set AIMLAPI_KEY first (create a key at https://aimlapi.com/app/keys).")
prompt = " ".join(sys.argv[1:]) or "Explain what a Linux inode is, in two sentences."
client = OpenAI(base_url=BASE_URL, api_key=API_KEY)
print(f"Prompt: {prompt}\n" + "=" * 60)
for raw in MODELS:
model = raw.strip()
if not model:
continue
start = time.perf_counter()
try:
resp = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}],
)
except Exception as exc: # network, auth, unknown model, etc.
print(f"\n### {model}\n ERROR: {exc}")
continue
elapsed = time.perf_counter() - start
answer = (resp.choices[0].message.content or "").strip()
usage = resp.usage
tokens = f"{usage.prompt_tokens} in / {usage.completion_tokens} out" if usage else "n/a"
print(f"\n### {model} ({elapsed:.2f}s, {tokens})\n{answer}")
return 0
if __name__ == "__main__":
raise SystemExit(main())
关于设计的一些说明:
- 模型列表来自 MODELS 环境变量,默认回退到上面的 5 个模型。你可以编辑文件,或在不改动代码的情况下运行
MODELS="deepseek/deepseek-v4-flash,zhipu/glm-5-2" python3 compare_llms.py。 - 每个请求都包在 try/except 中。错误的模型 ID 或网络错误会为该模型打印一条错误信息,脚本继续处理下一个。
- 脚本会从 usage 字段打印输入和输出 token 数,这样你可以把它们乘以上表中的价格,比较同一回答在不同模型上的成本。
- 它不设置 temperature。DeepSeek V4 Pro 和 Claude Sonnet 5 有思考模式,某些推理配置会忽略或拒绝采样参数。如果你希望非推理模型给出更稳定的回答,可以在 create() 调用中加入
temperature=0.3。
步骤 4:查询并比较多个 LLM
把你的提示词作为参数传入,或者不带参数运行脚本以使用默认提示词:
python3 compare_llms.py "Explain what a Linux inode is, in two sentences."
输出会依次列出各个模型,每个都标注响应时间和 token 数。以下是我们于 2026 年 9 月 24 日运行时的输出:
Prompt: Explain what a Linux inode is, in two sentences.
============================================================
### anthropic/claude-sonnet-5 (8.44s, 24 in / 126 out)
An inode (index node) is a data structure on a filesystem that stores metadata about a file or directory—such as its size, permissions, ownership, timestamps, and pointers to the actual data blocks on disk—but notably does not store the file's name. Each file is linked to a unique inode via directory entries, allowing multiple filenames (hard links) to reference the same underlying data through a shared inode.
### deepseek/deepseek-v4-pro (4.65s, 95 in / 149 out)
A Linux inode is a filesystem data structure that stores metadata about a file or directory, such as permissions, ownership, timestamps, and pointers to its data blocks. It does not store the file’s name or its actual content; instead, each inode is identified by a unique inode number within its filesystem.
### deepseek/deepseek-v4-flash (2.51s, 42 in / 279 out)
An inode is a filesystem data structure that stores a file’s metadata—such as its type, permissions, ownership, timestamps, size, and pointers to data blocks—but not its name or actual data content. Every file has an inode number unique within its filesystem, and directory entries map human-readable filenames to those inode numbers, which is why hard links can share one inode.
### x-ai/grok-build-0-1 (3.92s, 197 in / 323 out)
In Linux, an inode is a data structure that stores metadata about a file or directory, such as its permissions, ownership, timestamps, size, and pointers to the data blocks on disk. It does not contain the file's name or its actual content; the filename is stored in the directory entry, which references the inode number.
### zhipu/glm-5-2 (15.70s, 24 in / 709 out)
A Linux inode is a data structure that stores metadata about a file or directory, such as its permissions, owner, size, and physical location on the disk. It acts as the bridge between a file's human-readable name and its actual data blocks, notably excluding the file name itself, which is instead stored in the directory structure.
你的时间和 token 数每次运行都会不同,但有几件事很突出。所有 5 个模型都给出了正确的两句话回答。DeepSeek V4 Flash 最快,为 2.51 秒,GLM 5.2 最慢,为 15.70 秒。
token 计数是更有用的部分。每个模型的提示词都相同,但输入计数从 24 到 197 个 token 不等,因为每个模型使用自己的分词器,而且有些提供商会向请求中加入自己的指令。输出计数的差异更大。GLM 5.2 为一个约 60 词的回答计费 709 个输出 token,很可能因为它是推理模型,思考所消耗的 token 也按输出计费。
以下是使用上表价格时,这一个请求在每个模型上的成本:
DeepSeek V4 Flash 在这些模型中输入价格最低。不过在这个提示词上,它的成本是 DeepSeek V4 Pro 的两倍,因为它产生了更多输出 token,而且输出价格更高。仅凭价格表不足以比较模型,所以要运行你自己的提示词并检查实际的 token 计数。
用你自己的工作任务替换默认提示词。例如,让模型解释一个 bug、审查一个 shell 脚本或生成一个配置文件。
步骤 5:比较什么,以及如何选择模型
通常有三件事决定使用哪个模型。
- 延迟。 脚本会为每个请求打印延迟。多运行几次,因为对某个模型的第一次调用往往比后续调用慢。
- 成本。 每个模型都有自己的每百万 token 价格,对于长回答,输出价格最重要。如果你每天发送数千个请求,就选择仍能足够好地完成任务的便宜模型。在这个量级下,节省会迅速累积。
- 质量。 只有你能判断,而并排查看回答会让判断更容易。
以下是各个模型的不同之处。
- Claude Sonnet 5 是 Anthropic 面向编码和智能体工作流的模型,发布于 30 年 6 月 2026 日。Anthropic 表示它以更低的价格接近其顶级 Opus 模型。在我们的运行中,它给出了最详细的回答,输出 token 最少,但它的每 token 价格是这份列表中最高的。
- DeepSeek V4 Pro 是这里最大的模型,拥有 1.6T 参数。自 2026 年 8 月起,你可以把它的推理强度设为 low、high 或 max,因此一个模型既能覆盖快速回答,也能处理更难的任务。它也是我们运行中成本最低的请求。
- DeepSeek V4 Flash 为速度而构建。它每次请求只激活其 284B 参数中的 13B,是我们测试中最快的模型,为 2.51 秒。它适合快速回答比深度更重要的高吞吐任务。
- Grok Build 0.1 是这份列表中唯一专门为编码智能体训练的模型,支持 MCP 工具。xAI 于 29 年 5 月 2026 日发布它,并表示其运行速度超过每秒 100 个 token。xAI 尚未公布它的基准测试分数。
- GLM 5.2 是这里唯一的开放权重模型,由 Z.ai 于 16 年 6 月 2026 日以 MIT 许可证发布。你可以通过 API 调用它,也可以在自己的服务器上运行它,前提是你的代码不能离开自己的基础设施。Z.ai 报告其在 Terminal-Bench 2.1 上的得分为 81.0。在我们的运行中,它是最慢的模型,使用的输出 token 也最多。
要把其他模型加入比较,请在 AI/ML API 模型目录 中查找它们的确切 ID,不要猜测。名称和版本会变化,错误的 ID 会让脚本为该行打印错误。
步骤 6:把它变成 shell 辅助函数
脚本能正常工作后,把它包装成一个 shell 函数,这样你就能从任何目录调用它。把以下内容加入你的 ~/.bashrc:
askall() {
( cd ~/llm-compare && source .venv/bin/activate && python3 compare_llms.py "$@" )
}
用以下命令重新加载该文件:
source ~/.bashrc
现在 "review this regex: ^\d{3}-\d{4}$" 可以从终端的任何位置把问题发送给全部 5 个模型。
常见问题(FAQ)
问:我需要为每个 AI 提供商分别开设账户吗?
答:不需要。脚本把每个请求都发送到一个兼容 OpenAI 的端点,因此一个 AI/ML API 密钥就覆盖本教程中的全部 5 个模型。你不需要 Anthropic、DeepSeek、xAI 或 Z.ai 的账户,而且只需安装一个 Python 包:openai。
问:为什么某个模型在输出中返回 ERROR?
答:最常见的原因是模型 ID 错误或过时。请在 AI/ML API 目录中该模型的页面上核对确切 ID,并更新 MODELS 列表。其他原因包括 API 密钥无效(HTTP 401)、余额为空,或触发速率限制(HTTP 429),后者通常在短暂等待后恢复。
问:如何计算一个请求的成本?
答:把输入 token 数乘以该模型的输入价格,把输出 token 数乘以输出价格,然后各自除以 1,000,000。例如,在我们的运行中,DeepSeek V4 Flash 使用了 42 个输入和 279 个输出 token,成本为(42 × $0.39 + 279 × $1.56) / 1,000,000,约为 $0.00045。
问:我可以把这个脚本用于其他兼容 OpenAI 的 API 吗?
答:可以。脚本从 OPENAI_BASE_URL 环境变量读取端点。例如,把它设为 http://localhost:11434/v1 即可查询 Ollama 中的本地模型,并把它们的名称放入 MODELS。Ollama 会忽略 API 密钥,但脚本要求提供一个,所以把 AIMLAPI_KEY 设为任意值即可。
问:我可以改为在本地运行这些模型吗?
答:只能运行其中一部分。GLM 5.2 以 MIT 许可证发布开放权重,但在 753B 参数下,它需要多 GPU 服务器。Claude Sonnet 5 和 Grok Build 0.1 没有公开权重,因此只能通过 API 使用。对于单机上的本地实验,Ollama 中较小的开放模型是更实际的选择。
问:什么是 API 聚合服务?
答:它是一种服务,为你提供来自不同提供商的许多模型的一个端点和一个计费账户。这样便于在不管理多个账户的情况下测试和比较 LLM。代价是你在定价、可用性和计费准确性上依赖一个中间商。
问:使用 AI/ML API 安全吗?
答:AI/ML API 是一个可用的 API 聚合服务,但开发者应在生产环境依赖它之前,根据自己的需求进行评估。从小额开始,用你实际的工作负载测试该服务。
问:最低可以充值多少?
答:AI/ML API 当前文档列出 $20 为最低充值金额。请查看 订阅套餐 页面了解当前定价和选项。
问:如果我没有用完额度,可以退款吗?
答:根据 AI/ML API 的条款与条件,购买为最终交易且不可退款。其帮助中心也说明充值不可退款。在充值前请查看 条款与条件。
问:我应该开启自动充值吗?
答:最初保持自动充值关闭更安全。先验证服务、计费准确性和你的实际用量。你可以在 管理你的订阅 中查看相关设置。
问:如何验证我的计费是否正确?
答:运行少量受控的 API 请求,记录模型和 token 用量,把预期成本与账户扣款金额进行比较。不要在没有自行测试的情况下假定显示的成本是正确的。
问:我应该直接在生产环境中使用 AI/ML API 吗?
答:在你针对自己的具体工作负载测试其可靠性、延迟、错误率和计费行为之前,不要把它作为唯一的生产依赖。对于关键应用,考虑保留一个备用提供商。
问:在充值大笔金额之前应该检查什么?
答:检查当前的定价、退款政策、自动充值设置、模型可用性、速率限制、API 可靠性和计费行为。政策和定价可能变化,因此在投入大笔资金前请核实当前文档。
问:在哪里可以阅读官方条款?
答:参见 AI/ML API 的 条款与条件、管理你的订阅 和 订阅套餐。
结论
借助一个兼容 OpenAI 的端点、一个虚拟环境和一段简短的 Python 脚本,你可以在 Linux 终端上用自己的提示词测试 Claude Sonnet 5、DeepSeek V4 Pro 和 Flash、Grok Build 0.1 以及 GLM 5.2。
向比较中再加入一个模型只需在 MODELS 列表中添加一行:不需要新的 SDK、账户或密钥。在你每天做的任务上运行它,比较时间、token 和回答,并根据这些结果选择模型。


