【RAG扫盲系列·4】从零开始构建你的RAG项目第三弹:Ollama 本地化部署大模型 - 指南
在上一篇文章中,我们介绍了如何通过 API 调用 来使用大模型(例如通义千问的兼容 OpenAI API 模式)。这种方式轻量、灵活,但也存在一些限制:需要稳定的网络、API Key 管理,以及调用成本。
在本篇文章里,我们转向本地化部署。我将以 Ollama 部署 DeepSeek 为例,展示如何在本地运行大模型,并结合 RAG 构建一个完整的问答系统。
一、为什么要本地化部署
- 隐私保护:所有数据都留在本地,不会上传到云端。
- 成本可控:避免 API 调用费用,尤其适合长对话或批量任务。
- 灵活性:可以自由切换模型(DeepSeek、Qwen、LLaMA 等),甚至加载量化版本以适配不同硬件。
- 离线可用:即使没有网络,也能运行模型。
二、环境准备
1. 安装Ollama
从官网上选择适合自己电脑的版本(macOS/Linux/Windows),点击下载:Ollama 官网下载链接。然后点击安装包进行安装。
2. 拉取模型
以 DeepSeek为例,在 CMD 下拉取模型:
ollama pull deepseek-r1:1.5b
从官网模型链接可以看到不同的模型,可以选择自己喜欢的模型复制名称下载,但要注意模型大小。模型越大、训练程度越高、回答越精准,但下载时间越长、占据的内存越大。推荐使用最轻量的最小的模型下载避免电脑带不动,这里推荐 deepseek-r1:1.5b。
3. 测试运行
- 展示你所下载的所有ollama模型,在 CMD 输入以下代码:
ollama list
正常会输出一个清单,显示你所有下载的模型。
- 接着在本地调用模型,在 CMD 输入以下代码:
ollama run deepseek-r1:7b #改成想运行的模型
回车后会出现几个转来转去的点。可以尝试输入一句话,如“用一句话介绍温度是什么”,模型就会在本地直接回答。示例输出结果:
温度是指物质中分子热运动的平均程度,反映物质内部能量的状态。
(4) 若想删除某个模型(慎重,重新下载还需要重新等待)
在 CMD 输入以下代码:
ollama rm deepseek-r1:7b #改成想删除的模型
三、使用 Python 调用 Ollama 进行本地测试
1. 环境准备
- 激活我们之前创立的 RAG 环境:
conda activate D:\my_rag_env #改成自己的环境名称
- 安装ollama
pip install ollama
2. 调用模型
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage
llm = ChatOpenAI(
model="deepseek-r1:1.5b", # 改成你本地下载的模型名
api_key="ollama", # 占位符即可
base_url="http://localhost:11434/v1" # Ollama 的 OpenAI 兼容端点
)
resp = llm.invoke([HumanMessage(content="用一句话介绍温度是什么")])
print(resp.content)
输出示例:
温度描述的是物体内部部分热运动的平均程度。
四、构建本地 RAG 问答系统
在 RAG 场景中,我们需要 向量库 + 检索器 + 本地模型。通过 Ollama 调用本地模型与之前的通过 API 请求调用模型的代码非常相似,我们只需要将上一篇的代码中的第三步 初始化 Chat 模型 这一块改掉就可以,其他的都不用动。
- 改动前(DashScope):
# 3. 配置 API Key,初始化 Chat 模型
os.environ["DASHSCOPE_API_KEY"] = 'sk-xx' # 替换为你的API Key
chat = ChatOpenAI(
model="qwen-plus", # 按照需要更换模型名称
api_key=os.environ["DASHSCOPE_API_KEY"],
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
temperature=0
)
- 改动后(Ollama 本地):
# 3. 初始化 Chat 模型(Ollama 本地)
chat = ChatOpenAI(
model="deepseek-r1:1.5b", # 改成自己下载的模型
api_key="ollama", # 占位符即可
base_url="http://localhost:11434/v1", # Ollama 的 OpenAI 兼容端点
temperature=0
)
依旧向模型提问:*用一句话介绍温度是什么?*得到的示例回答如下:
温度是一个介于0到1之间的数值,并且在不同领域中被广泛应用。
发现模型已经阅读了我们提供的Prompt教材,对温度的定义有了新的看法。
5. API 调用 vs Ollama 的区别
| 维度 | API 调用(DashScope/OpenAI) | 本地化部署(Ollama) |
|---|---|---|
| 部署难度 | 无需本地算力,直接调用 | 需下载模型,占用磁盘和显存 |
| 成本 | 按调用计费 | 免费(仅算力/电费) |
| 隐私 | 数据上传到云端 | 数据留在本地 |
| 性能 | 云端 GPU,速度快 | 取决于本地硬件 |
| 灵活性 | 受限于平台支持的模型 | 可自由切换/量化模型 |

浙公网安备 33010602011771号