post cover

技术热点落地:Ollama 本地大模型部署与 RAG 实战(2026-04-09)


适用场景与目标

适用场景:

  • 需要在本地/私有环境运行大模型(如隐私合规、数据不出网)
  • 想低成本构建 RAG(检索增强生成)知识库系统
  • 开发 AI Agent 时需要稳定可控的模型调用层
  • 对接 Dify、LangChain 等应用框架做上层开发

目标: 用 Ollama 在本地启动一个可用的大模型(推荐 Qwen3 或 Llama3),通过简单步骤跑通 RAG 流程,形成”模型+知识库”的最小闭环。


最小可行方案(MVP)步骤

第一步:安装 Ollama

macOS / Linux:

curl -fsSL https://ollama.com/install.sh | sh

Windows: 直接下载安装包:https://ollama.com/download

安装后验证:

ollama --version

第二步:拉取模型

推荐清单(按硬件门槛从低到高):

模型最低显存/内存推荐场景
qwen3:1.7b4GB轻量测试、快速原型
llama3:8b6GB通用对话、RAG
qwen3:8b6GB中文场景首选
mistral:22b16GB高质量问答
ollama pull qwen3:8b

第三步:启动模型服务(REST API 模式)

ollama serve

默认监听 http://localhost:11434,会自动暴露 REST API:

curl http://localhost:11434/api/generate -d '{
  "model": "qwen3:8b",
  "prompt": "用一句话解释 RAG 是什么",
  "stream": false
}'

第四步:对接 Python 应用(推荐 ChatDB 或 LangChain)

pip install langchain-ollama langchain-community chromadb
from langchain_ollama import ChatOllama
from langchain_community.vectorstores import Chroma
from langchain_ollama import OllamaEmbeddings

# 初始化模型
llm = ChatOllama(model="qwen3:8b", base_url="http://localhost:11434")

# 初始化Embedding(用于RAG)
embeddings = OllamaEmbeddings(
    model="nomic-embed-text",  # 专用Embedding模型
    base_url="http://localhost:11434"
)

# 拉取Embedding模型
# ollama pull nomic-embed-text

# 构建向量数据库
vectorstore = Chroma(persist_directory="./chroma_db", embedding_function=embeddings)

第五步:构建 RAG 问答链

from langchain_core.documents import Document
from langchain import hub
from langchain_core.runnables import RunnablePassthrough

# 添加文档(示例)
docs = [
    Document(page_content="Ollama 是一款本地大模型运行框架,支持 Docker 一键部署。"),
    Document(page_content="RAG 即检索增强生成,通过向量检索补充模型知识。"),
]
vectorstore.add_documents(docs)

# 检索器
retriever = vectorstore.as_retriever(search_kwargs={"k": 2})

# RAG 提示词(可从 hub 拉取或自定义)
prompt = hub.pull("rlm/rag-prompt")

# 问答链
rag_chain = (
    {"context": retriever | (lambda docs: "\n".join(d.content for docs in docs)), "question": RunnablePassthrough()}
    | prompt
    | llm
)

result = rag_chain.invoke("Ollama 和 RAG 是什么关系?")
print(result.content)

关键实现细节

多模型同时运行

Ollama 支持同时运行多个模型实例,通过不同端口或进程隔离:

# 终端1:运行模型A
ollama run qwen3:8b

# 终端2:运行模型B(后台)
OLLAMA_HOST=0.0.0.0:11435 ollama serve &

GPU 加速配置(NVIDIA)

确保安装了 NVIDIA 驱动和 CUDA 后,Ollama 会自动使用 GPU:

# 查看是否启用GPU
ollama show qwen3:8b

# 设置GPU内存比例(防止爆显存)
export OLLAMA_GPU_OVERHEAD=0.2

自定义模型(Modelfile)

如果想微调模型行为,可创建 Modelfile:

FROM qwen3:8b
PARAMETER temperature 0.7
PARAMETER top_p 0.9
SYSTEM """
你是一个技术博客写作助手,用简洁、有条理的语言回答问题。
"""
ollama create my-blog-assistant -f Modelfile
ollama run my-blog-assistant

API 批量调用

生产环境推荐用 Python SDK 做连接池管理:

import requests

def generate(prompt, model="qwen3:8b"):
    resp = requests.post(
        "http://localhost:11434/api/generate",
        json={"model": model, "prompt": prompt, "stream": False},
        timeout=120
    )
    return resp.json()["response"]

常见坑与规避清单

坑1:模型下载极慢

原因: 默认从境外服务器拉取,跨国带宽受限。 解决:

# 使用国内镜像(推荐)
export OLLAMA_BASE_URL=https://ollama.msoarp.com
# 或使用 ModelScope 导出:
# modelscope download --model LLM-Workshop/Qwen3-8B-GGUF

坑2:Embedding 模型未单独拉取

原因: 用默认模型做 Embedding 效果差,且与对话模型混用拖慢速度。 解决:

ollama pull nomic-embed-text  # 必须单独拉取

RAG 场景必须用专用 Embedding 模型,不可用对话模型代替。

坑3:OOM(显存/内存爆掉)

原因: 模型过大 + 未设置 GPU 内存上限 + 同时跑多个模型。 解决:

# 查看模型大小
ollama list

# 限制并发请求数(nginx 或代码层)
# 或用 llama.cpp 量化版本(Q4_K_M 量化,体积缩小60%)
ollama pull qwen3:8b-instruct-q4_K_M

坑4:API 响应极慢(>30s 超时)

原因: 模型未加载完全、并发请求堆积、CPU 模式运行。 解决:

# 预热:保持一个模型常驻内存
ollama run qwen3:8b "你好"  # 初始化

# 查看当前运行状态
curl http://localhost:11434/api/tags

坑5:ChromaDB 持久化路径权限问题

原因: Docker 环境或非 root 用户写入目录失败。 解决:

Chroma(persist_directory="/tmp/chroma_db", embedding_function=embeddings)  # 用 /tmp 测试
# 生产环境:确保目标目录可写 chmod 755 /your/path

坑6:Dify 对接 Ollama 失败

原因: Dify 对 Ollama 版本有要求,且 base_url 格式敏感。 解决: Dify 要求的 Ollama API URL 格式为 http://host.docker.internal:11434(Docker 环境下)。


成本/性能/维护权衡

成本对比

方案硬件成本API 成本适用规模
Ollama 本地一次性 GPU 投入(¥3000-30000)0<100 QPS
OpenAI API0$0.002-0.06/1K token中等规模
云端 GPU 实例¥0.5-3/小时0弹性需求

性能数据参考(Qwen3:8B,RTX 4070 Ti)

  • 首 token 延迟: ~200-400ms(GPU)vs ~3-5s(CPU)
  • 吞吐量: ~30-50 token/s(GPU)
  • Embedding 速度: ~100 docs/s(nomic-embed-text)

维护成本

  • 更新模型: 重新 ollama pull 即可(增量下载)
  • 数据迁移: ChromaDB 持久化目录整体迁移
  • 版本兼容: 关注 Ollama GitHub Releases,生产环境锁定版本

一周内可执行行动清单

  • Day 1: 安装 Ollama + 拉取 qwen3:8b,跑通 curl 调用
  • Day 2: 拉取 nomic-embed-text,搭建 ChromaDB + RAG 问答链
  • Day 3: 接入自己的业务文档(PDF/TXT),测试检索质量
  • Day 4: 用 Modelfile 自定义模型行为(如系统提示词)
  • Day 5: 编写 Python 封装类,支持批量调用和错误重试
  • Day 6: 部署到正式环境(Docker 或 systemd 服务化)
  • Day 7: 压测 QPS,配置 nginx 限流,写运维文档

一句话总结: Ollama 是 2026 年本地 AI 落地的最优起点,核心价值是将”模型部署”从专业运维变成一条命令,用它快速验证 RAG 和 Agent 方案,一周内就能出可演示的 MVP。