Python + Ollama 本地跑大模型:零成本搭建你的私有 AI 助手

Written by

in

文章目录
  • 对比维度 云端 API(ChatGPT / Claude) 本地模型(Ollama) 费用 按量付费,$20/月起 完全免费 数据隐私 数据上传到云端 数据留在本地 网络依赖 必须联网 离线可用 模型选择 固定 自由切换开源模型 硬件要求 无 需要一定配置
  • Ollama 是一个开源的本地大模型运行框架,核心特点: 一键拉取模型:类似 docker pull 的体验 自动适配硬件:根据你的显存/内存自动量化 兼容 OpenAI API 格式:现有代码几乎不用改 跨平台:Windows / macOS / Linux 都支持
  • 下面是一个功能完整的本地 AI 助手,支持多轮对话、Markdown 渲染、历史记录。
  • 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 助手吧。 到此这篇关于Python + Ollama 本地跑大模型:零成本搭建你的私有 AI 助手的文章就介绍到这了,更多相关Python Ollama 搭建大模型内容请搜索风君子博客以前的文章或继续浏览下面的相关文章,希望大家以后多多支持风君子博客!
  • 目录
    • 一、为什么要在本地跑大模型?
    • 二、Ollama 是什么?
    • 三、环境准备
      • 3.1 硬件要求
      • 3.2 安装 Ollama
      • 3.3 拉取模型
      • 3.4 安装 Python 依赖
    • 四、快速上手:5 行代码跑起来
      • 4.1 最简对话
      • 4.2 流式输出(打字机效果)
      • 4.3 多轮对话(保持上下文)
    • 五、实战项目:打造命令行 AI 助手
      • 5.1 项目结构
      • 5.2 配置文件 config.py
      • 5.3 主程序 assistant.py
      • 5.4 运行效果
    • 六、进阶玩法
      • 6.1 让 AI 调用本地函数(Function Calling)
      • 6.2 兼容 OpenAI SDK
    • 七、模型选择指南
      • 模型推荐表
    • 八、常见问题
      • 总结

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

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

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

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

        模型规模 最低内存/显存 推荐配置
        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 推理,只是速度慢一些。

        # macOS / Linux(一行搞定)
        curl -fsSL https://ollama.com/install.sh | sh
        # Windows:前往 https://ollama.com/download 下载安装包

        验证安装:

        ollama --version
        # 输出:ollama version is 0.6.x

        # 推荐:Qwen3 8B(中文能力最强的小模型之一)
        ollama pull qwen3:8b
        # 备选:Llama 4 Scout 17B(Meta 最新开源模型)
        ollama pull llama4:scout17b
        # 轻量选择:Qwen3 4B(4GB 内存就能跑)
        ollama pull qwen3:4b
        # 查看已下载的模型
        ollama list

        pip install ollama

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

        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)

        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 助手,支持多轮对话、Markdown 渲染、历史记录。

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

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

        # 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"n33[92m🤖 AI:33[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("n33[94m👤 你:33[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()

        python assistant.py
        

        ==================================================
          本地 AI 助手  |  模型: qwen3:8b
          输入 /clear 清空历史 | /quit 退出
        ==================================================

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

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

        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}")

        # 如果你已有使用 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 等)都可以无缝切换到本地模型!

        使用场景 推荐模型 大小 命令
        中文对话 / 写作 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 助手吧。

        到此这篇关于Python + Ollama 本地跑大模型:零成本搭建你的私有 AI 助手的文章就介绍到这了,更多相关Python Ollama 搭建大模型内容请搜索风君子博客以前的文章或继续浏览下面的相关文章,希望大家以后多多支持风君子博客!

        站内搜索