这篇教程带你用 LiteLLM 和 Ollama,把同一段材料分别交给两个本地模型,保存回答、耗时和用量,再人工比较事实是否正确。完成后,你会得到一个 CSV 结果文件,可用 Excel 打开。示例以 Windows PowerShell 为例;本地模型占用的磁盘、内存和运行速度取决于具体模型和电脑配置。
一、准备工作
你需要 Python、已安装并运行的 Ollama,以及两个已经下载的文本模型。先打开 PowerShell,检查环境:
python --version
ollama --version
ollama list
如果 Python 命令不可用,请先安装 Python 并重新打开终端;如果 Ollama 命令不可用,参考 Ollama 安装页面。ollama list 会显示本机模型名称;下文必须填写实际存在的两个名称。没有模型时,可到 Ollama 模型库查看大小、要求和下载方式。不要把示例名称当成已经安装。
二、创建练习目录并安装依赖
mkdir model-compare
cd model-compare
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install litellm以上直接调用虚拟环境中的 Python,无须修改 PowerShell 执行策略。安装后用下面的命令确认 LiteLLM 可被导入:
.\.venv\Scripts\python.exe -c "import litellm; print('LiteLLM 已安装')"
三、保存对比脚本
在当前目录新建 compare.py,复制以下完整代码。把 MODELS 里的两个名称替换成 ollama list 显示的名称;例如列表显示 qwen3:4b,就填写 ollama_chat/qwen3:4b。LiteLLM 的 Ollama 文档推荐使用 ollama_chat 前缀。
import csv
import time
from litellm import completion
# 替换成 ollama list 输出的两个真实名称
MODELS = ["ollama_chat/模型一", "ollama_chat/模型二"]
SAMPLES = [
{"id": "01", "text": "软件 A 支持 Windows 和 macOS。安装后打开设置,选择中文并点击保存。"},
{"id": "02", "text": "软件 B 的免费版可创建三个项目。付费版支持更多项目,具体价格未在此说明。"},
]
PROMPT = "仅根据材料回答:一句概述、两个事实、材料未说明的信息。不要猜测。\n材料:"
def run(completion_fn=completion):
rows = []
for sample in SAMPLES:
for model in MODELS:
started = time.perf_counter()
row = {"sample_id": sample["id"], "model": model, "status": "ok",
"seconds": "", "input_tokens": "", "output_tokens": "", "answer": "", "error": ""}
try:
result = completion_fn(model=model, api_base="http://localhost:11434",
messages=[{"role": "user", "content": PROMPT + sample["text"]}], timeout=120)
row["answer"] = result.choices[0].message.content or ""
usage = result.usage
if usage:
row["input_tokens"] = usage.prompt_tokens
row["output_tokens"] = usage.completion_tokens
except Exception as exc:
row["status"] = "error"
row["error"] = type(exc).__name__ + ": " + str(exc)
row["seconds"] = round(time.perf_counter() - started, 2)
rows.append(row)
print(sample["id"], model, row["status"], row["seconds"], "秒")
with open("results.csv", "w", encoding="utf-8-sig", newline="") as f:
writer = csv.DictWriter(f, fieldnames=rows[0].keys())
writer.writeheader()
writer.writerows(rows)
print("已保存 results.csv,共", len(rows), "条记录")
if __name__ == "__main__":
run()
四、执行并查看结果
保持 Ollama 服务运行,在脚本所在目录执行:
.\.venv\Scripts\python.exe compare.py程序会依次执行四次调用:两段材料各交给两个模型。终端会显示样例编号、模型名、状态和耗时;运行结束后,用 Excel 或表格软件打开同目录的 results.csv。该文件使用 UTF-8 带签名编码,方便 Windows 表格软件识别中文。再次运行会覆盖同名文件,需要保留记录时先重命名。
首次加载模型可能较慢,同一个模型后续运行可能受缓存影响。想比较稳定耗时,可先预热,再对两者用相同方式各运行多次,并保留全部结果;这四次调用只是打通流程。
五、逐条核对内容
示例 01 的依据是:支持 Windows 和 macOS;打开设置选择中文并保存。材料没有说明价格或其他系统。示例 02 的依据是:免费版可创建三个项目;付费版支持更多项目;具体价格未说明。如果回答填出了一个具体价格,记为事实错误。
在表格旁增加“事实正确”“遗漏”“虚构”“格式合格”列,按样例逐一填写。先看正确性,再比较耗时;用量字段为空时记为未返回,不要填 0。示例记录总耗时,不测首字延迟;本地运行不代表没有硬件和电力成本。
六、常见错误
连接失败怎么办?
确认 Ollama 正在运行,检查本机 http://localhost:11434 是否可访问;如果你的服务地址不同,修改代码中的 api_base。查看 CSV 的 error 列,再检查防火墙及服务地址。
提示模型不存在?
重新运行 ollama list,将完整名称填在 ollama_chat/ 后面。模型未下载时,先按模型库说明下载。
运行超时或内存不足?
选择适合本机资源的较小模型,关闭其他占用资源的软件。timeout 是等待上限,不保证模型在限定时间内完成;不要无限重试。
能直接换成云端模型吗?
可以参考 提供商文档配置模型标识、服务地址及认证变量。云端调用可能产生费用,也会将材料发送到所选服务;本例的 localhost 地址与模型名前缀不能原样套用。
项目来源
参考 LiteLLM 项目、Ollama 接入文档及 项目许可。本文的对比样例和代码由本站编写;不同模型的输出和运行时间需要在自己的环境中核对。