PAYATHON 2026

LlamaIndex 调用 Ollama 时为何会加载错模型?

架构老王

结论

现有信息还不能确定 LlamaIndex 实际加载的是 phi3 还是 phi3:mini。代码传入的模型标签是 model="phi3:mini",但内存报错与终端运行成功的结果不一致。需要核对两次请求使用的模型标签、Ollama 服务地址和运行环境。错误中的 45.3 GiB 是 Ollama 返回的内存需求信息,不能据此判断模型标签被截断。

确认 Python 和终端是否连接到同一个 Ollama 服务

在运行终端命令的环境中执行:

ollama list
ollama show phi3:mini
ollama ps

确认列表中有 phi3:mini,并检查模型详情。ollama ps 可以查看当前已加载的模型。

接着检查 Python 进程连接的 Ollama 服务地址。LlamaIndex 的 Ollama 默认使用本地服务;如果环境变量或代码指定了其他地址,Python 和终端可能连接到不同的服务实例。

可以在代码中显式指定本机地址,再核对模型标签:

from llama_index.llms.ollama import Ollama

llm = Ollama(
    model="phi3:mini",
    base_url="http://localhost:11434",
    temperature=0.7,
    max_tokens=100,
)

response = llm.complete("Hello, how are you?")
print(response)

如果 Ollama 服务不在本机运行,请将 base_url 改为实际服务地址。终端命令和 Python 进程是否使用同一端点,需要单独确认。

对照错误中的模型名和请求结果

用户提供的 Python 代码将 phi3:mini 传给了 Ollama。如果服务端日志或其他可见的请求记录显示实际收到的是 phi3,请检查运行时执行的代码、初始化参数是否被后续设置覆盖,以及安装的 llama-index-llms-ollama 和 Ollama 客户端版本。现有材料没有提供这些版本信息或服务端记录,因此还无法确认标签不一致发生在哪个环节。

也可以在同一个 Python 环境中直接运行终端命令进行对照:

import subprocess

result = subprocess.run(
    ["ollama", "run", "phi3:mini", "Hello, how are you?"],
    capture_output=True,
    text=True,
)
print(result.stdout)
print(result.stderr)

这可以确认该 Python 环境能否找到并运行 ollama 命令。要判断它是否与 LlamaIndex API 请求走了相同路径,还需要核对服务地址和服务端实际收到的模型名。

如何理解两处内存数字

问题中的错误片段分别报告可用内存为 16.8 GiB 和 13.9 GiB,而终端运行成功。这些记录不足以证明 Python 请求加载的是哪个模型,也无法说明内存数字为何变化。先确认两种调用连接到同一个 Ollama 服务,并使用相同的模型标签。如果仍然报错,再根据该服务返回的完整日志排查实际加载的模型及其资源需求。

备注:内容仅供参考。