教程中心本地部署
部署

本地部署开源大模型:Ollama 私有化推理 + 离线 Agent 实战

2026.07.10· 7 个步骤 · 30 分钟阅读· 🦙 Ollama

把大模型交给云端 API,最大的代价是数据必须离开你的机器。对合同、病历、源代码、财务报表这类敏感内容,很多团队根本不敢上传。本地部署(On-Premise LLM)让模型跑在你自己的电脑或服务器上——数据不出机、断网也能用、调用不计费。本教程用 Ollama(目前最易上手的本地推理引擎)带你从零搭一个可离线运行的私有 Agent。

🖥️ 本教程适合:注重数据隐私的个人开发者、需要处理敏感文档的企业、想在笔记本上跑 Agent 的爱好者、以及想摆脱 API 账单限制的重度用户。不需要深度学习背景,会基础的命令行即可。

一、为什么要在本地跑大模型?

在动手前,先想清楚本地部署到底解决什么问题。它不是"更牛的玩法",而是"更可控的选择":

维度云端 API本地部署(Ollama)
数据隐私数据上传第三方数据全程在本机
网络依赖必须联网可完全离线
成本按 Token 持续付费一次性硬件投入,调用免费
延迟受网络影响局域网内极低延迟
可控性模型/版本由厂商决定自选模型、量化、并发全自定义

实话实说:本地部署的劣势也很明显——需要显卡算力,小模型(7B/14B)的能力远不如云端旗舰(如 Claude、GPT 系列),复杂推理任务本地小模型容易翻车。所以最实用的架构往往是混合式:敏感数据走本地,高难度任务走云端。本教程先把你本地这一半补齐。

Step 1:安装 Ollama 并拉取模型

1 安装与首次运行

Ollama 支持 macOS / Linux / Windows(WSL2)。官方一键安装后,它会作为一个本地服务常驻(默认监听 11434 端口)。

# macOS / Linux 一行安装
curl -fsSL https://ollama.com/install.sh | sh

# 启动服务(安装后通常会自动启动,可手动确认)
ollama serve

# 拉取一个通用中文友好的模型(Qwen2.5 7B 是性价比之选)
ollama pull qwen2.5:7b

# 想跑更强的代码模型,可再拉一个
ollama pull qwen2.5-coder:7b

# 验证:直接对话
ollama run qwen2.5:7b "用一句话解释什么是向量数据库"
💡 模型选型建议:8-16GB 显存的笔记本优先选 7B/14B 量化版(如 qwen2.5:7bllama3.1:8b);24GB+ 可上 14B/32B;想跑 70B 级别至少需要 48GB 显存(或用多卡/CPU 卸载,但速度很慢)。本教程以 7B/14B 为主,兼顾大多数人。

Step 2:用 API 调用本地模型

2 REST 接口与 Python 调用

Ollama 启动后自带 OpenAI 风格兼容接口。你之前写给云端 API 的代码,几乎不用改就能指向本地。

# 方式一:curl 直接调
curl http://localhost:11434/api/generate -d '{
  "model": "qwen2.5:7b",
  "prompt": "把下面这段中文润色成正式邮件:周一开会",
  "stream": false
}'

# 方式二:Python(无需额外依赖,用标准库即可)
import urllib.request, json

def local_chat(prompt, model="qwen2.5:7b"):
    payload = json.dumps({
        "model": model,
        "prompt": prompt,
        "stream": False
    }).encode("utf-8")
    req = urllib.request.Request(
        "http://localhost:11434/api/generate",
        data=payload,
        headers={"Content-Type": "application/json"}
    )
    with urllib.request.urlopen(req) as r:
        return json.loads(r.read().decode("utf-8"))["response"]

print(local_chat("用 Python 写一个快速排序"))
🔑 关键认知:本地模型本质是"换了个 endpoint"。把代码里的 api.openai.com 换成 localhost:11434,把 api_key 去掉(或随便填),大量现成 Agent 框架(LangChain、OpenAI SDK、Cline、Continue)都能直接接管本地模型。这也是"私有 Agent"能快速落地的根本原因。

Step 3:挂载私有知识库(本地 RAG)

3 让模型"读懂你的文档"

纯本地模型容易"一本正经胡说"。给它接上你的私有文档(合同、手册、代码库),用 RAG(检索增强生成)补足事实。下面用 Ollama 的 embedding 接口 + 轻量向量库 Chroma 实现最小可用版。

# 先装向量库
pip install chromadb

import chromadb, urllib.request, json

chroma = chromadb.Client()
col = chroma.create_collection("kb")

def embed(text):
    payload = json.dumps({"model": "nomic-embed-text", "input": text}).encode()
    req = urllib.request.Request("http://localhost:11434/api/embeddings",
        data=payload, headers={"Content-Type": "application/json"})
    return json.loads(urllib.request.urlopen(req).read())["embedding"]

# 1) 入库:把你自己的文档切成片段后写入
docs = ["公司年假政策:入职满1年享5天...", "报销流程:先填单后审批..."]
for i, d in enumerate(docs):
    col.add(ids=[str(i)], documents=[d], embeddings=[embed(d)])

# 2) 检索 + 生成
q = "年假怎么算?"
hits = col.query(query_embeddings=[embed(q)], n_results=2)["documents"][0]
ctx = "\n".join(hits)
print(local_chat(f"根据以下资料回答问题:\n{ctx}\n\n问题:{q}"))
💡 实操要点:embedding 模型用 Ollama 的 nomic-embed-text(先 ollama pull nomic-embed-text)。RAG 效果 80% 取决于"切片质量"——按语义而不是按固定字数切,检索命中率会高很多。企业把这一步做好,本地 Agent 的准确率能从"听个乐"提升到可用水平。

Step 4:把本地模型接成 Agent(工具调用)

4 最小可运行的 Agent 循环

模型本身只会"说话",Agent 的价值在于"能调用工具"。下面用 Ollama 的 tool-calling 能力写一个最小循环:模型决定调哪个函数,代码执行后把结果喂回去。

tools = [{
    "type": "function",
    "function": {
        "name": "get_weather",
        "description": "查询某城市天气",
        "parameters": {"type": "object",
            "properties": {"city": {"type": "string"}},
            "required": ["city"]}
    }
}]

def get_weather(city):
    return f"{city} 今天 26°C,多云"

# 最小 Agent 循环
messages = [{"role": "user", "content": "北京天气怎么样?"}]
while True:
    resp = call_ollama_with_tools(messages, tools)  # 封装 /api/chat + tools
    if resp.get("tool_calls"):
        for call in resp["tool_calls"]:
            fn = call["function"]
            result = get_weather(fn["arguments"]["city"])
            messages.append({"role": "tool", "content": result})
    else:
        print(resp["content"]); break
🚀 进阶玩法:当你有了"本地模型 + 工具 + 私有知识库",就已经是一个完整的离线 Agent 了。把工具换成"读文件/查数据库/发 HTTP 请求",它就能替你处理本机任务——而且全程不经过任何外部服务器。这正是金融、医疗、法务这类强合规场景最想要的形态。

Step 5:性能与显存优化

5 让 7B 模型跑得又稳又快

本地部署最常见的坑是"显存爆了"或"卡得像 PPT"。几个立刻见效的优化:

# 1) 用量化版省显存(q4_K_M 是 7B 的甜点)
ollama pull qwen2.5:7b-q4_K_M

# 2) 限制并发上下文,避免多轮对话撑爆内存
ollama run qwen2.5:7b-q4_K_M --num_ctx 4096

# 3) 没有独显?用 CPU 卸载(慢但能跑)
# 在 Modelfile 里设置,或运行时加环境变量
OLLAMA_NUM_PARALLEL=1 OLLAMA_MAX_LOADED_MODELS=1 ollama serve
📊 经验参考:7B q4 量化约占用 4-5GB 显存,14B q4 约 9-10GB,32B q4 约 20GB。如果你只有 8GB 显存的笔记本,7B 是舒适区,14B 会频繁抢占内存导致卡顿。宁可模型小一点、把 RAG 和工具做好,整体体感比硬上大模型更好。

六、离线 Agent 的边界与注意事项

本地部署不是银弹,踩坑前先建立正确预期:

能力边界:7B/14B 本地模型在"写代码、总结、翻译、简单推理"上完全够用,但在"多步复杂规划、长链逻辑推理、精确数学"上明显弱于云端旗舰。把高难度任务留给云端,本地只做隐私敏感型任务,是最务实的分工。

  • 版本固定是双刃剑:本地模型不会"半夜偷偷升级变笨",但也不会自动变强,需要你主动拉新版本。
  • 安全仍需重视:本地 Agent 调用文件/网络工具时,权限隔离、输入净化同样不能省(参见本中心《AI Agent 安全加固实战》)。
  • 备份模型文件:拉取的模型在 ~/.ollama/models,重装系统前记得备份,重新下载很耗时。