Python + Ollama 本地跑大模型:零成本打造私有 AI 助手

零 API 费用、零数据泄露风险、完全离线可用。本文带你从安装到实战,30 分钟跑起一个本地 AI 助手。


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

对比维度 云端 API(ChatGPT / Claude) 本地模型(Ollama)
费用 按量付费,$20/月起 完全免费
数据隐私 数据上传到云端 数据留在本地
网络依赖 必须联网 离线可用
模型选择 固定 自由切换开源模型
硬件要求 需要一定配置

38% 27% 18% 12% 5% 选择本地大模型的理由(2026年开发者调查) 数据隐私与安全 零成本长期使用 离线可用 可自由定制微调 其他


二、Ollama 是什么?

Ollama 是一个开源的本地大模型运行框架,核心特点:

  • 一键拉取模型 :类似 docker pull 的体验
  • 自动适配硬件:根据你的显存/内存自动量化
  • 兼容 OpenAI API 格式:现有代码几乎不用改
  • 跨平台:Windows / macOS / Linux 都支持

用户提问
Python 代码
Ollama 本地服务
Qwen3 / Llama4 / DeepSeek


三、环境准备

3.1 硬件要求

模型规模 最低内存/显存 推荐配置
1.5B~3B(轻量) 4 GB 8 GB 内存即可
7B~8B(主流) 8 GB 16 GB 内存或 8 GB 显存
14B~32B(进阶) 16 GB 32 GB 内存或 16 GB 显存
70B+(旗舰) 48 GB 专业显卡 / 服务器

没有独立显卡也能跑!Ollama 支持 纯 CPU 推理,只是速度慢一些。

3.2 安装 Ollama

bash 复制代码
# macOS / Linux(一行搞定)
curl -fsSL https://ollama.com/install.sh | sh

# Windows:前往 https://ollama.com/download 下载安装包

验证安装:

bash 复制代码
ollama --version
# 输出:ollama version is 0.6.x

3.3 拉取模型

bash 复制代码
# 推荐:Qwen3 8B(中文能力最强的小模型之一)
ollama pull qwen3:8b

# 备选:Llama 4 Scout 17B(Meta 最新开源模型)
ollama pull llama4:scout17b

# 轻量选择:Qwen3 4B(4GB 内存就能跑)
ollama pull qwen3:4b

# 查看已下载的模型
ollama list

3.4 安装 Python 依赖

bash 复制代码
pip install ollama

四、快速上手:5 行代码跑起来

4.1 最简对话

python 复制代码
import ollama

# 发送一条消息,获取回复
response = ollama.chat(
    model="qwen3:8b",
    messages=[
        {"role": "user", "content": "用 Python 写一个快速排序算法"}
    ]
)

print(response["message"]["content"])

4.2 流式输出(打字机效果)

python 复制代码
import ollama

# stream=True 开启流式输出,体验更丝滑
stream = ollama.chat(
    model="qwen3:8b",
    messages=[
        {"role": "user", "content": "解释一下 Python 的装饰器"}
    ],
    stream=True
)

for chunk in stream:
    print(chunk["message"]["content"], end="", flush=True)

4.3 多轮对话(保持上下文)

python 复制代码
import ollama

# 维护对话历史
messages = []

def chat(user_input: str) -> str:
    messages.append({"role": "user", "content": user_input})

    response = ollama.chat(model="qwen3:8b", messages=messages)

    assistant_msg = response["message"]["content"]
    messages.append({"role": "assistant", "content": assistant_msg})

    return assistant_msg

# 多轮对话
print(chat("你好,我正在学 Python"))
print("---")
print(chat("刚才我说我在学什么来着?"))  # 它能记住上下文

五、实战项目:打造命令行 AI 助手

下面是一个功能完整的本地 AI 助手,支持多轮对话、Markdown 渲染、历史记录。

5.1 项目结构

复制代码
local-ai-assistant/
├── assistant.py      # 主程序
├── config.py         # 配置文件
└── chat_history.json # 对话历史(自动生成)

5.2 配置文件 config.py

python 复制代码
# config.py
MODEL_NAME = "qwen3:8b"          # 使用的模型
SYSTEM_PROMPT = """你是一个专业的 AI 编程助手。
你擅长 Python、数据分析、自动化办公。
回答要简洁实用,代码要可以直接运行。"""
MAX_HISTORY = 20                   # 最多保留的对话轮数

5.3 主程序 assistant.py

python 复制代码
# assistant.py
import json
import ollama
from datetime import datetime
from config import MODEL_NAME, SYSTEM_PROMPT, MAX_HISTORY


def load_history(filepath="chat_history.json"):
    """加载对话历史"""
    try:
        with open(filepath, "r", encoding="utf-8") as f:
            return json.load(f)
    except FileNotFoundError:
        return []


def save_history(messages, filepath="chat_history.json"):
    """保存对话历史"""
    with open(filepath, "w", encoding="utf-8") as f:
        json.dump(messages, f, ensure_ascii=False, indent=2)


def chat_stream(user_input: str, messages: list) -> str:
    """流式对话"""
    messages.append({"role": "user", "content": user_input})

    print(f"\n\033[92m🤖 AI:\033[0m ", end="", flush=True)
    full_response = ""

    stream = ollama.chat(model=MODEL_NAME, messages=messages, stream=True)

    for chunk in stream:
        content = chunk["message"]["content"]
        print(content, end="", flush=True)
        full_response += content

    print("\n")
    messages.append({"role": "assistant", "content": full_response})

    # 限制历史长度
    if len(messages) > MAX_HISTORY * 2 + 1:
        messages = [messages[0]] + messages[-(MAX_HISTORY * 2):]

    return full_response


def main():
    print("=" * 50)
    print(f"  本地 AI 助手  |  模型: {MODEL_NAME}")
    print("  输入 /clear 清空历史 | /quit 退出")
    print("=" * 50)

    # 初始化对话
    messages = load_history()
    if not messages:
        messages = [{"role": "system", "content": SYSTEM_PROMPT}]

    while True:
        user_input = input("\n\033[94m👤 你:\033[0m ").strip()

        if not user_input:
            continue

        if user_input == "/quit":
            save_history(messages)
            print("👋 再见!对话已保存。")
            break

        if user_input == "/clear":
            messages = [{"role": "system", "content": SYSTEM_PROMPT}]
            save_history(messages)
            print("🗑️  对话历史已清空。")
            continue

        chat_stream(user_input, messages)
        save_history(messages)


if __name__ == "__main__":
    main()

5.4 运行效果

bash 复制代码
python assistant.py
复制代码
==================================================
  本地 AI 助手  |  模型: qwen3:8b
  输入 /clear 清空历史 | /quit 退出
==================================================

👤 你: 帮我写一个 Python 脚本,监控某个文件夹的变化

🤖 AI: 好的,使用 `watchdog` 库可以轻松实现文件夹监控...
(此处输出完整代码)

六、进阶玩法

6.1 让 AI 调用本地函数(Function Calling)

python 复制代码
import ollama
import json

# 定义工具函数
def get_weather(city: str) -> str:
    """模拟获取天气(可替换为真实 API)"""
    weather_data = {"北京": "晴天 22°C", "上海": "多云 18°C", "深圳": "大雨 28°C"}
    return weather_data.get(city, "未查询到该城市天气")


def calculate(expression: str) -> str:
    """安全计算数学表达式"""
    try:
        allowed = set("0123456789+-*/.() ")
        if all(c in allowed for c in expression):
            return str(eval(expression))
        return "不安全的表达式"
    except Exception as e:
        return f"计算错误: {e}"


# 注册工具
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "获取指定城市的天气信息",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {"type": "string", "description": "城市名称"}
                },
                "required": ["city"]
            }
        }
    },
    {
        "type": "function",
        "function": {
            "name": "calculate",
            "description": "计算数学表达式",
            "parameters": {
                "type": "object",
                "properties": {
                    "expression": {"type": "string", "description": "数学表达式"}
                },
                "required": ["expression"]
            }
        }
    }
]

# 工具映射
tool_map = {
    "get_weather": get_weather,
    "calculate": calculate
}

# 对话
messages = [{"role": "user", "content": "北京天气怎么样?顺便帮我算一下 25*36+128"}]

response = ollama.chat(model="qwen3:8b", messages=messages, tools=tools)

# 处理工具调用
if response["message"].get("tool_calls"):
    for tool_call in response["message"]["tool_calls"]:
        func_name = tool_call["function"]["name"]
        func_args = tool_call["function"]["arguments"]

        print(f"🔧 调用工具: {func_name}({func_args})")

        result = tool_map[func_name](**func_args)
        print(f"   结果: {result}")

6.2 兼容 OpenAI SDK

python 复制代码
# 如果你已有使用 OpenAI SDK 的代码,只需改一行
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:11434/v1",  # 指向 Ollama
    api_key="ollama"                        # 随意填,不影响
)

response = client.chat.completions.create(
    model="qwen3:8b",
    messages=[
        {"role": "user", "content": "Hello, who are you?"}
    ]
)

print(response.choices[0].message.content)

这意味着:所有基于 OpenAI API 的应用(LangChain、Dify、Cursor 等)都可以无缝切换到本地模型!


七、模型选择指南

32% 25% 20% 13% 10% 2026年 Ollama 最受欢迎模型占比 Qwen3 8B(中文最强) Llama 4 Scout(综合最佳) DeepSeek R2(推理之王) Gemma 4 27B(性价比高) Mistral Small(轻量首选)

模型推荐表

使用场景 推荐模型 大小 命令
中文对话 / 写作 Qwen3 8B ~5 GB ollama pull qwen3:8b
英文编程 Llama 4 Scout ~10 GB ollama pull llama4:scout17b
逻辑推理 / 数学 DeepSeek R2 8B ~5 GB ollama pull deepseek-r2:8b
低配机器 Qwen3 1.7B ~1 GB ollama pull qwen3:1.7b
代码专用 Qwen3-Coder 7B ~4 GB ollama pull qwen3-coder:7b

八、常见问题

Q:没有显卡能跑吗?

A:能。Ollama 支持 CPU 推理,8B 模型在 16GB 内存的机器上完全可以跑,速度约 5-10 token/s。

Q:中文效果好还是英文效果好?

A:推荐 Qwen3 系列,它的中文能力是目前开源模型里最强的,远超同级别的 Llama。

Q:和 ChatGPT 比差多少?

A:8B 级别的模型大约相当于 GPT-3.5 的水平,日常问答够用,复杂推理和长文本还有差距。如果硬件允许,跑 32B 或 70B 的模型会更接近 GPT-4 级别。

Q:商用免费吗?

A:大部分模型(Qwen、Llama、Gemma)允许商用,但建议查看各模型的具体 License。


总结

复制代码
Ollama 本地 AI 的核心优势:
├── 零成本 ------ 不花一分钱 API 费用
├── 零风险 ------ 数据永远不会离开你的电脑
├── 零门槛 ------ pip install + ollama pull,5 分钟上手
└── 零妥协 ------ 兼容 OpenAI API,现有生态无缝切换

现在就打开终端,花 5 分钟跑起你的第一个本地 AI 助手吧。


相关推荐
lee_curry几秒前
AI Agent 工程师完整学习路线(面向生产级项目与面试)
人工智能·学习·ai·面试·agent
菜鸡66666 分钟前
绕过cf验证,部署 FlareSolverr 服务使用request处理
python·cloudflare
大模型真好玩6 分钟前
DeepSeek Harness 入门很简单(二)——DeepSeek Harness通用设置及Agent预设详解
人工智能·agent·deepseek
坐吃山猪7 分钟前
【多线程】CompletableFuture使用
java·开发语言·多线程
前端世界9 分钟前
基于 Linux 的本地 AI 智能问答平台搭建实践 —— Ollama + FastAPI + Nginx 实现本地大模型 Web 服务
linux·运维·人工智能
小小小小钰儿11 分钟前
1.2-AI核心理论与术语
人工智能·计算机·网络安全·信息安全·程序员·编程
桃西西呀14 分钟前
"循环深度"让小模型免费变大?GPT-6 Astra 背后的潜空间推理原理,8 个误读我替你拆了
人工智能·gpt·llm
数智工坊17 分钟前
NTIRE2024×4图像超分竞赛综述|Mamba崛起、数据缩放、频域增强成为新趋势
网络·人工智能·深度学习·cnn·机器人
CHPCWWHSU22 分钟前
DeepSeek-Harness-Qt将浏览器端Agent装入桌面应用
开发语言·qt
Raas10028 分钟前
AI网关和大模型网关区别?MAI Gateway(魔芋企业级AI网关)如何实现AI流量统一治理
大数据·人工智能·gateway·ai网关·mai gateway·企业级产品