【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,速度快取决于本地硬件
灵活性受限于平台支持的模型可自由切换/量化模型
posted @ 2025-11-28 15:31  yangykaifa  阅读(0)  评论(0)    收藏  举报