Python+Ollama 本地部署大模型保姆级教程|从零搭建私有化 AI

张开发
2026/4/27 23:11:25 15 分钟阅读

分享文章

Python+Ollama 本地部署大模型保姆级教程|从零搭建私有化 AI
专栏简介当前 AI 技术飞速发展云端大模型存在数据泄露、调用收费、网络依赖、访问限制等诸多痛点越来越多开发者、职场人员、技术爱好者开始转向本地私有化大模型部署。Ollama 作为目前最轻量化、部署最简单、生态最全的开源大模型运行工具支持 Windows、Linux、Mac 全平台一行命令即可下载、运行、管理百款开源大模型结合 Python 语言可以快速实现对话机器人、文档问答、代码生成、私有化知识库、离线 AI 工具等场景开发。一、技术栈整体介绍1.1 Ollama 核心介绍Ollama 是一款开源免费的本地大模型运行管理工具无需手动配置 CUDA、Pytorch、环境依赖自动适配 CPU 与 NVIDIA 显卡内置完善的 HTTP 接口天然支持 Python、Java、JS 等多语言调用。核心特点开源免费、离线运行、数据本地存储、零部署成本、模型一键管理支持模型通义千问 Qwen、ChatGLM、DeepSeek、Llama3、Mistral、代码专用模型等默认接口地址http://localhost:11434全程本地访问无需外网1.2 Python 技术依赖本次实战所使用核心库全部通过 pip 一键安装requests调用 Ollama 原生 HTTP 接口实现模型请求fastapiuvicorn快速搭建本地 AI 接口服务对外提供调用能力pymupdfPDF 文档文本解析python-docxWord 文档内容读取python-dotenv环境变量统一管理1.3 硬件与系统最低要求操作系统Windows10 及以上、CentOS7、Ubuntu、MacOS运行内存最低 4G运行 4B 量化模型推荐 8G 及以上7B 模型流畅运行硬盘空间单模型 4GB~8GB预留 20GB 以上空间显卡可选N 卡支持 CUDA 可加速推理无显卡纯 CPU 也可运行二、全套环境安装部署2.1 Ollama 客户端安装2.1.1 Windows 系统安装访问 Ollama 官方官网https://ollama.com/点击首页【Download for Windows】下载安装包双击安装程序默认路径安装全程下一步无需额外配置安装完成后自动后台启动桌面无图标进程常驻后台2.1.2 Linux 系统一键安装bash运行# 通用Linux一键安装脚本 curl -fsSL https://ollama.com/install.sh | sh2.1.3 验证 Ollama 安装是否成功打开 CMD、PowerShell 或终端输入如下命令bash运行# 查看Ollama版本 ollama --version输出版本号即代表安装成功服务正常启动。2.2 Python 环境与依赖库安装建议使用 Python3.8 ~ Python3.11 稳定版本打开 CMD 执行批量安装命令bash运行# 一次性安装所有实战所需依赖 pip install requests fastapi uvicorn pymupdf python-docx python-dotenv -i https://pypi.tuna.tsinghua.edu.cn/simple使用清华镜像源解决 pip 下载慢、超时、安装失败问题。2.3 常用模型拉取命令必看Ollama 核心命令一键下载并启动对应大模型推荐中文优化模型bash运行# 通义千问 7B 中文全能模型首选 ollama run qwen:7b # 通义千问 4B 轻量化模型4G低配电脑专用 ollama run qwen:4b # 智谱GLM4 国产中文大模型 ollama run glm4:6b # DeepSeek 深度求索代码问答模型 ollama run deepseek:6b首次执行自动下载模型下载完成自动进入命令行交互式对话输入/bye退出对话。2.4 Ollama 模型管理常用命令bash运行# 查看本地已下载所有模型 ollama list # 停止后台运行模型释放内存 ollama stop 模型名 # 彻底删除无用模型清理硬盘空间 ollama rm 模型名 # 重新拉取更新模型 ollama pull 模型名 # 查看当前正在运行的模型进程 ollama ps三、Python 基础调用 Ollama 实战入门3.1 同步单轮对话完整注释代码最基础调用方式一次性返回全部回答适合简单问答、工具开发代码可直接复制运行python运行# -*- coding: utf-8 -*- Ollama Python 本地大模型 单轮同步对话 功能调用本地部署大模型离线问答数据不上云 适配Windows10 全配置电脑 # 导入网络请求库 import requests # 导入json格式化库 import json # 全局配置项 # Ollama本地默认接口地址固定不变 OLLAMA_URL http://localhost:11434/api/generate # 选择本地已下载的模型名称 MODEL_NAME qwen:7b # def ollama_chat(prompt: str) - str: 调用本地Ollama大模型对话函数 :param prompt: 用户输入的问题/提示词 :return: 模型返回的回答内容 # 构造请求参数遵循Ollama官方API规范 request_data { model: MODEL_NAME, # 指定运行的大模型 prompt: prompt, # 用户提问内容 stream: False, # 关闭流式输出一次性返回结果 temperature: 0.7, # 随机性 0严谨~1创意 num_ctx: 4096 # 上下文窗口大小 } try: # 发送POST请求调用本地AI接口 response requests.post( urlOLLAMA_URL, datajson.dumps(request_data), headers{Content-Type: application/json}, timeout60 ) # 解析接口返回的json数据 res_json response.json() # 提取核心回答字段并返回 return res_json.get(response, 模型无返回内容) except Exception as e: # 全局异常捕获避免程序崩溃 return f调用异常{str(e)} # 程序入口 if __name__ __main__: print( * 50) print( PythonOllama 本地私有化大模型) print(输入【退出】结束程序) print( * 50) # 循环对话 while True: user_text input(用户) # 退出判断 if user_text in [退出, exit, quit]: print(对话结束程序退出) break # 调用模型获取回答 ai_reply ollama_chat(user_text) print(AI, ai_reply) print(- * 50)3.2 流式输出对话逐字打字效果模拟 ChatGPT 网页端打字输出提升交互体验适合 GUI 界面、网页集成开发python运行# -*- coding: utf-8 -*- Ollama 流式输出实战 实现逐字实时输出回答降低等待感 import requests import json # 全局配置 OLLAMA_URL http://localhost:11434/api/generate MODEL_NAME qwen:7b def ollama_stream_chat(prompt: str): 流式对话函数逐段输出内容 data { model: MODEL_NAME, prompt: prompt, stream: True, # 开启流式传输 temperature: 0.6 } # 长连接持续接收数据 with requests.post(OLLAMA_URL, jsondata, streamTrue, timeout120) as res: print(AI, end, flushTrue) # 逐行解析流式数据包 for line in res.iter_lines(decode_unicodeTrue): if line: item json.loads(line) # 逐字打印 print(item.get(response, ), end, flushTrue) print(\n) if __name__ __main__: print(流式对话已启动输入退出结束) while True: msg input(用户) if msg 退出: break ollama_stream_chat(msg)四、高阶实战多轮上下文记忆对话普通单轮对话无法记忆历史内容本章节实现上下文持久化模型可以记住前文对话实现连续聊天python运行# -*- coding: utf-8 -*- Ollama 多轮带记忆对话 支持上下文关联连续对话、连贯问答 import requests import json OLLAMA_URL http://localhost:11434/api/generate MODEL_NAME qwen:7b class OllamaMemoryChat: 带历史记忆的AI对话类 封装上下文存储、自动拼接、会话管理 def __init__(self): # 初始化历史对话列表 self.history [] # 最大保存轮数防止上下文溢出 self.max_history 6 def chat(self, prompt: str) - str: # 拼接历史对话当前提问 context for record in self.history: context record # 整合完整提示词 full_prompt context f用户{prompt}\nAI payload { model: MODEL_NAME, prompt: full_prompt, stream: False, temperature: 0.7 } # 接口请求 resp requests.post(OLLAMA_URL, jsonpayload, timeout60) result resp.json() answer result.get(response, ) # 写入历史记录 self.history.append(f用户{prompt}\n) self.history.append(fAI{answer}\n) # 限制历史长度自动截断 if len(self.history) self.max_history * 2: self.history self.history[-self.max_history * 2:] return answer # 运行程序 if __name__ __main__: bot OllamaMemoryChat() print(带记忆本地AI已启动) while True: text input(你) if text 退出: break res bot.chat(text) print(AI, res)五、企业级实战本地 PDF/Word 文档私有化问答完全离线读取本地文档基于文档内容精准回答禁止 AI 编造内容适合企业机密文件、内部资料、学习笔记私有化检索python运行# -*- coding: utf-8 -*- Ollama 私有化文档问答系统 支持PDF、Word文档解析本地AI问答 数据全程本地无上传、无泄露 import requests import json import fitz from docx import Document from pathlib import Path # 全局配置 OLLAMA_URL http://localhost:11434/api/generate MODEL_NAME qwen:7b # 1. 读取PDF文件 def read_pdf(file_path: str) - str: text_content with fitz.open(file_path) as pdf_doc: for page in pdf_doc: text_content page.get_text() return text_content # 2. 读取Word文件 def read_docx(file_path: str) - str: doc Document(file_path) all_text [p.text for p in doc.paragraphs] return \n.join(all_text) # 3. 自动识别文件格式 def load_document(file_path: str) - str: suffix Path(file_path).suffix.lower() if suffix .pdf: return read_pdf(file_path) elif suffix .docx: return read_docx(file_path) else: return 不支持该文件格式仅支持PDF、Word # 4. 文档问答核心函数 def doc_question_answer(doc_text: str, question: str) - str: # 强约束提示词杜绝AI幻觉 prompt f 你是严格的文档问答助手必须遵守以下规则 1. 仅允许根据提供的文档内容回答问题 2. 文档未提及的内容统一回答暂无相关内容 3. 禁止编造、猜测、拓展额外信息 4. 回答简洁、准确、贴合原文 文档内容 {doc_text[:6000]} 用户问题 {question} data { model: MODEL_NAME, prompt: prompt, stream: False, temperature: 0.1 } res requests.post(OLLAMA_URL, jsondata) return res.json()[response] # 主程序 if __name__ __main__: # 替换为你的本地文档路径 file_path rtest.pdf print(正在解析文档...) doc_data load_document(file_path) print(文档加载完成开始提问) while True: q input(请输入问题) if q 退出: break ans doc_question_answer(doc_data, q) print(回答, ans)六、生产级开发FastAPI 搭建 AI 接口服务将本地大模型封装为标准 API 接口支持前端、小程序、第三方系统、自动化工具调用可直接部署落地python运行# -*- coding: utf-8 -*- FastAPI Ollama 本地AI接口服务 提供统一对话接口支持第三方调用 from fastapi import FastAPI import requests import json # 初始化FastAPI应用 app FastAPI( title本地私有化大模型接口服务, version1.0.0, description基于Ollama搭建的离线AI服务 ) # 全局参数 OLLAMA_URL http://localhost:11434/api/generate MODEL_NAME qwen:7b # 通用对话接口 app.post(/api/chat) def api_chat(prompt: str): 大模型对话接口 :param prompt: 用户提问 :return: AI回答结果 data { model: MODEL_NAME, prompt: prompt, stream: False } result requests.post(OLLAMA_URL, jsondata) response_text result.json()[response] return { code: 200, msg: 请求成功, data: response_text } # 程序启动入口 if __name__ __main__: import uvicorn # 启动服务本机局域网均可访问 uvicorn.run(app, host0.0.0.0, port8000)启动后访问http://127.0.0.1:8000/docs可在线调试接口。七、低配电脑性能优化方案4G/8G 内存专用7.1 模型选择优化4G 内存优先使用qwen:4b、gemma:2b轻量化量化模型8G 内存使用qwen:7b、glm4:6b 平衡效果与性能禁止低配电脑运行 13B 及以上大参数模型7.2 请求参数优化配置python运行payload { num_ctx: 2048, # 缩小上下文降低内存占用 num_predict: 512, # 限制最大输出字数 low_vram: True, # 低显存模式强制开启 temperature: 0.3 # 降低计算复杂度提升速度 }7.3 系统资源优化运行大模型前关闭浏览器、视频软件、游戏、杀毒软件定期执行ollama stop --all释放闲置模型内存禁用 Ollama 开机自启需要使用时手动开启八、高频问题与报错解决方案8.1 连接拒绝 10061 无法连接报错目标计算机积极拒绝无法连接 11434 端口原因Ollama 服务未启动、进程崩溃解决CMD 执行ollama serve重启核心服务8.2 模型下载超时、速度慢解决配置国内镜像、切换 4B 小模型、更换网络环境8.3 中文乱码、回答英文、答非所问解决使用 qwen/glm4 中文模型代码头部添加# -*- coding: utf-8 -*-8.4 内存爆满、电脑卡顿、闪退解决更换轻量化模型、截断上下文、限制输出长度8.5 局域网设备无法访问接口解决系统新增环境变量OLLAMA_HOST0.0.0.0重启 Ollama8.6 文档问答 AI 胡乱编造解决增加强约束提示词限制文档外内容禁止回答九、全文总结与拓展方向本文完整覆盖Ollama 安装→模型管理→Python 基础调用→流式对话→多轮记忆→文档问答→API 服务→性能优化→报错排查全流程所有代码均经过实测可直接运行全程本地化离线运行彻底解决云端大模型收费、隐私泄露、网络限制问题。拓展学习方向结合 LangChainFAISS 搭建本地 RAG 知识库基于 Streamlit 制作可视化 AI 网页端模型自定义微调、专属私有化模型定制集成自动化办公实现 AI 批量处理 Excel/Word 码字不易收藏保存后续本地部署大模型直接套用本文代码开箱即用所有项目均可二次修改用于副业开发、办公提效、私有化系统搭建。

更多文章