Python + Ollama 本地跑大模型:零成本打造私有 AI 助手(附完整源码) # Python Ollama 本地跑大模型零成本打造私有 AI 助手 本文带你从零开始在本地跑起大模型零 API 费用、零数据泄露风险、完全离线可用。30 分钟上手支持 Windows / macOS / Linux 全平台。**前置要求**一台有 8GB 内存的电脑GPU 不是必须---## 一、为什么选择 Ollama市面上的大模型 API 服务如 OpenAI、Claude虽然强大但存在三个根本问题- **费用问题**调用量大了账单肉疼- **隐私问题**代码、业务数据不能随便上传第三方- **网络问题**国内访问不稳定响应延迟高**Ollama** 的出现完美解决了以上三个痛点| 对比项 | OpenAI API | 本地 Ollama ||--------|-----------|-------------|| 费用 | 按 token 收费 | 完全免费 || 数据隐私 | 上传到第三方 | 完全本地 || 网络依赖 | 需要 VPN | 完全离线 || 启动速度 | 依赖网络延迟 | 本地推理极速响应 || 可定制性 | 无法改模型 | 可自由换模型、做微调 |---## 二、环境准备### 2.1 安装 Ollama**macOS / Linux**bashcurl -fsSL https://ollama.com/install.sh | sh**Windows**直接去 https://ollama.com/download 下载安装包双击安装即可。### 2.2 验证安装bashollama --version# 输出类似ollama version 0.5.4### 2.3 拉取第一个模型Ollama 模型库Model Library托管在 https://ollama.com/library常用模型推荐| 模型 | 参数量 | 最低内存 | 适用场景 ||------|--------|---------|---------|| llama3.2 | 3B | 6GB | 轻量对话、快速测试 || qwen2.5 | 7B | 8GB | 中文对话、编程辅助 || deepseek-r1 | 7B | 8GB | 深度推理、复杂任务 || codellama | 7B | 8GB | 代码生成、代码解释 |**以 qwen2.5 为例推荐中文支持好**bashollama pull qwen2.5:7b 首次拉取会下载模型文件7B 模型约 4.5GB请确保网络畅通。拉取完成后验证模型可以正常运行bashollama run qwen2.5:7b 你好请介绍一下自己如果看到模型回复恭喜你环境准备成功 ---## 三、Python 调用 Ollama基础用法### 3.1 安装依赖bashpip install ollama requests### 3.2 最简调用示例Ollama 提供 REST API无需任何 API Key直接 HTTP 调用pythonimport requestsdef chat(prompt: str, model: str qwen2.5:7b) - str:向本地模型发送对话请求url http://localhost:11434/api/generatepayload {model: model,prompt: prompt,stream: False, # True 则返回流式响应}response requests.post(url, jsonpayload)response.raise_for_status()return response.json()[response]if __name__ __main__:result chat(用 Python 写一个快速排序)print(result)### 3.3 使用 ollama Python SDK推荐官方 SDK 封装更完善支持流式输出、会话历史等功能bashpip install ollamapythonimport ollama# 单次对话response ollama.chat(modelqwen2.5:7b,messages[{role: user, content: 解释一下什么是装饰器模式}])print(response[message][content])---## 四、进阶实战构建本地 AI 助手下面实现一个具备**记忆能力**的本地 AI 助手支持多轮对话、自定义系统提示词。### 4.1 完整代码pythonimport ollamafrom dataclasses import dataclass, fieldfrom datetime import datetimefrom typing import OptionalMODEL_NAME qwen2.5:7bSYSTEM_PROMPT (你是一个专业、友好的 Python 编程助手。擅长代码编写、Bug 排查、性能优化和架构设计。回答要简洁、有条理适当给出代码示例。)dataclassclass Message:对话消息结构role: str # user | assistant | systemcontent: strtimestamp: str field(default_factorylambda: datetime.now().strftime(%H:%M))class LocalAIAssistant:本地 AI 助手支持多轮对话和记忆def __init__(self, model: str MODEL_NAME, system_prompt: str SYSTEM_PROMPT):self.model modelself.messages: list[dict] [{role: system, content: system_prompt}]def ask(self, user_input: str, print_response: bool True) - str:发送问题并获取回复支持连续对话自动保留上下文# 添加用户消息self.messages.append({role: user, content: user_input})# 调用模型response ollama.chat(modelself.model, messagesself.messages)reply response[message][content]# 保存助手回复到历史self.messages.append({role: assistant, content: reply})if print_response:print(f\n AI 助手\n{reply}\n)return replydef reset(self):重置对话历史保留系统提示词system_msg self.messages[0]self.messages [system_msg]print(✅ 对话历史已重置)def show_history(self):展示当前对话历史print(\n 对话历史)print(- * 50)for msg in self.messages[1:]: # 跳过 system promptrole_icon if msg[role] user else print(f{role_icon} {msg[role]}{msg[content][:80]}...)print(- * 50)def main():交互式主循环assistant LocalAIAssistant()print( * 50)print( 本地 AI 助手按 q 退出r 重置h 查看历史)print(f 当前模型{MODEL_NAME})print( * 50)while True:try:user_input input(\n 你).strip()if user_input.lower() q:print( 再见)breakelif user_input.lower() r:assistant.reset()elif user_input.lower() h:assistant.show_history()elif user_input:assistant.ask(user_input)else:print(⚠️ 请输入内容)except KeyboardInterrupt:print(\n\n 已退出)breakexcept Exception as e:print(f❌ 出错了{e})if __name__ __main__:main()### 4.2 运行效果 本地 AI 助手按 q 退出r 重置h 查看历史 当前模型qwen2.5:7b 你帮我写一个斐波那契数列的函数 AI 助手def fibonacci(n: int) - list[int]:返回斐波那契数列的前 n 项if n 0:return []elif n 1:return [0]fib [0, 1]for i in range(2, n):fib.append(fib[i-1] fib[i-2])return fib# 示例print(fibonacci(10)) # [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]---## 五、生产级优化流式输出 代码解释器### 5.1 流式输出打字机效果pythonimport ollamadef stream_chat(prompt: str, model: str MODEL_NAME):流式输出带打字机效果stream ollama.chat(modelmodel,messages[{role: user, content: prompt}],streamTrue,)full_response for chunk in stream:token chunk[message][content]full_response tokenprint(token, end, flushTrue)print() # 换行return full_response# 使用stream_chat(解释一下 Python 的 GIL 是什么)### 5.2 带工具调用的 AI 助手代码执行器让 AI 能够**执行代码**并返回结果这是进阶 AI 助手的关键能力pythonimport ollamaimport subprocessimport jsonimport reTOOLS [{type: function,function: {name: run_python,description: 执行 Python 代码并返回输出结果,parameters: {type: object,properties: {code: {type: string,description: 要执行的 Python 代码}},required: [code]}}}]def run_python(code: str) - str:安全执行 Python 代码简单沙箱try:result subprocess.run([python3, -c, code],capture_outputTrue,textTrue,timeout10,)output result.stdout if result.stdout else result.stderrreturn output.strip() if output else (无输出)except subprocess.TimeoutExpired:return (执行超时限制10秒)except Exception as e:return f(执行错误: {e})def tool_calling_chat(user_input: str) - str:带工具调用的对话AI 可以决定何时调用 run_python 工具messages [{role: system, content: 你是编程助手可以执行 Python 代码。},{role: user, content: user_input}]response ollama.chat(modelMODEL_NAME,messagesmessages,toolsTOOLS,)# 检查是否需要调用工具if response.get(message, {}).get(tool_calls):for tool_call in response[message][tool_calls]:func_name tool_call[function][name]args tool_call[function][arguments]if func_name run_python:code json.loads(args)[code]result run_python(code)print(f\n [执行代码]\n{code}\n\n [输出]\n{result})# 将工具结果反馈给模型messages.append(response[message])messages.append({role: tool,content: result,name: func_name})# 获取最终回复final ollama.chat(modelMODEL_NAME, messagesmessages)return final[message][content]else:return response[message][content]# 示例if __name__ __main__:result tool_calling_chat(计算 1-100 所有素数的和)print(f\n {result})---## 六、常见问题### Q1模型下载太慢怎么办bash# 方法1使用代理export HTTPS_PROXYhttp://127.0.0.1:7890ollama pull qwen2.5:7b# 方法2使用国内镜像如果有# 参考 Ollama 官方社区### Q2内存不够跑不起来- 降低量化等级ollama pull qwen2.5:7b 默认是 q4_K_M 量化- 换成更小的模型llama3.2:3b仅需 4GB 内存- 关闭其他占用内存的程序### Q3macOS 没有 GPU 加速Ollama 在 macOS 上会自动利用 Apple Silicon 的 Neural Engine无需额外配置。Intel Mac 会用 CPU 推理速度较慢。### Q4如何自定义模型参数pythonresponse ollama.chat(modelqwen2.5:7b,messages[{role: user, content: 写一首诗}],options{temperature: 0.8, # 创造性越高越随机top_p: 0.9, # 采样策略num_predict: 512, # 最大 token 数})---## 七、总结本文完整介绍了如何用 **Python Ollama** 在本地部署大模型核心要点1. **安装简单**一条命令搞定无需配置环境2. **零成本**所有推理在本地完成不花一分钱3. **隐私安全**数据永远不会离开你的电脑4. **可扩展**支持流式输出、工具调用、多轮对话等进阶能力本地大模型不代表能力弱。以 qwen2.5:7b 为例在中文编程辅助、日常问答、代码解释等场景下与云端模型的体验差距已经非常小。**完整源码已上传 GitHub**https://github.com/your-username/local-ai-assistant---**相关好文推荐**- [Python LangChain 入门实战0基础搭建可复用AI智能体](https://blog.csdn.net/user340/article/details/158892836)- [AI Agent 框架选型指南OpenClaw、LangChain、AutoGPT、CrewAI 深度对比](https://blog.csdn.net/sinat_41617212/article/details/159172831)--- 如果本文对你有帮助欢迎 **点赞 收藏**有问题欢迎在评论区留言