Ollama 是一款轻量级、开源的本地大模型部署工具,专为简化大模型本地运行流程设计,无需关注复杂的底层环境配置,一键即可实现开源大模型的下载、部署和调用。
# 验证Ollama是否安装成功,输出版本信息即表示成功
ollama --version
| 本地硬件配置 | 推荐运行模型参数量 | 代表模型 |
|---|---|---|
| 集显/核显(8G内存以上) | 1.5B 以内 | DeepSeek-R1:1.5b、Qwen:1.8b |
| 4G 独立显卡 | 8B 以内 | Qwen3:4b、DeepSeek-V3:7b |
| 8G 独立显卡 | 14B 以内 | Qwen:14b、LLaMA3:8b |
| 16G+ 独立显卡 | 32B 以内 | Qwen3:32b、DeepSeek-R1:32b |
Ollama 所有操作均通过命令行终端完成,核心命令仅需掌握5个,即可实现模型的全生命周期管理,操作前需确保 Ollama 服务已启动(安装后默认后台启动)。
# 1. 运行模型(不存在则自动下载,推荐指定参数量) ollama run 模型名称:参数量 # 示例:ollama run deepseek-r1:1.5b、ollama run qwen3:4b ollama run qwen3 # 不指定参数量,默认运行官方推荐版本 # 2. 单独下载模型(不运行,仅缓存到本地) ollama pull 模型名称:参数量 # 示例:ollama pull phi4:mini # 3. 查看本地已下载的所有模型 ollama list # 4. 删除本地无用模型(释放磁盘空间) ollama rm 模型名称:参数量 # 示例:ollama rm deepseek-r1:1.5b # 5. 查看Ollama所有命令帮助(忘记命令时使用) ollama --help
运行ollama run 模型名称后,终端进入交互模式,直接输入问题即可和本地模型对话,核心退出命令:
# 交互模式下,退出模型对话(返回终端正常界面) /exit # 核心退出命令,必记 /clear # 清空对话历史 /help # 查看交互模式下的帮助
Ollama 启动后,会在本地开启11434端口,提供 RESTful API 接口,可通过curl命令直接调用,无需额外配置。
# curl 调用本地Ollama模型(以deepseek-r1:1.5b为例) curl -X POST http://127.0.0.1:11434/api/chat -d '{ "model": "deepseek-r1:1.5b", # 本地已下载的模型名称 "messages": [{"role": "user", "content": "你是谁?能做什么?"}], "stream": false # 是否流式输出,false为一次性返回结果 }'
127.0.0.1:11434,若端口被占用,需修改Ollama配置文件重新指定端口(一般无需修改)。
Ollama 完美兼容 OpenAI 接口规范,原有调用阿里云百炼/OpenAI的代码,仅需修改base_url和model两个参数,即可直接迁移到本地 Ollama,无需修改核心逻辑。
# 安装OpenAI库(和云端调用共用一个库,无需额外安装)
pip install openai>=1.0.0
from openai import OpenAI # 初始化Ollama客户端(核心修改:base_url指向本地Ollama端口) client = OpenAI( api_key="ollama", # 本地调用无需真实API_KEY,任意字符串即可 base_url="http://127.0.0.1:11434/v1" # Ollama固定OpenAI兼容接口地址 ) # 调用本地模型(model为本地已下载的模型名称,如deepseek-r1:1.5b/qwen3:4b) response = client.chat.completions.create( model="deepseek-r1:1.5b", # 必须和本地ollama list显示的模型名称一致 messages=[ {"role": "system", "content": "你是一个专业的AI助手,回答简洁明了"}, {"role": "user", "content": "什么是Ollama?"} ], temperature=0.7, # 随机性,0-1之间,值越小回答越严谨 stream=False # 非流式输出,一次性返回结果 ) # 提取模型回答结果 answer = response.choices[0].message.content print("模型回答:", answer)
流式调用是实际开发中常用方式,逐字返回结果,避免长时间等待,核心仅需将stream=True,并通过循环遍历结果。
from openai import OpenAI client = OpenAI( api_key="ollama", base_url="http://127.0.0.1:11434/v1" ) # 流式调用本地模型 response = client.chat.completions.create( model="qwen3:4b", messages=[ {"role": "system", "content": "你是一个Python编程老师,用简单的语言讲解知识点"}, {"role": "user", "content": "讲解一下Python中的for循环"} ], temperature=0.6, stream=True # 开启流式输出 ) # 循环遍历流式结果,逐字打印 print("模型流式回答:", end="", flush=True) for chunk in response: if chunk.choices[0].delta.content: print(chunk.choices[0].delta.content, end="", flush=True)
通过维护messages列表,保存历史对话记录,实现本地模型的多轮上下文对话,和云端大模型逻辑完全一致。
from openai import OpenAI client = OpenAI(api_key="ollama", base_url="http://127.0.0.1:11434/v1") # 维护对话上下文,初始可设置system角色 messages = [{"role": "system", "content": "你是一个数学老师,只回答数学问题"}] # 多轮对话模拟 questions = ["1+1等于几?", "那2+3呢?", "刚才的两个答案相加是多少?"] for q in questions: messages.append({"role": "user", "content": q}) # 调用模型 response = client.chat.completions.create(model="qwen3:4b", messages=messages, stream=False) answer = response.choices[0].message.content print(f"问题:{q}\n回答:{answer}\n") # 将模型回答加入上下文,供下一轮使用 messages.append({"role": "assistant", "content": answer})
ollama pull命令,Ollama 支持断点续传。base_url为http://127.0.0.1:11434/v1(末尾带v1)。ollama提示“不是内部命令”run/pull/list/rm四个命令,一键实现模型管理;base_url和model,云端代码可无缝迁移;