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 服务,并使用相同的模型标签。如果仍然报错,再根据该服务返回的完整日志排查实际加载的模型及其资源需求。
备注:内容仅供参考。
