Python+Ollama零成本打造一个私有AI助手

 更新时间:2026年04月07日 08:53:10   作者:Halcyon.平安  
零 API 费用、零数据泄露风险、完全离线可用,本文将带大家从安装到实战,详细介绍一下如何使用Python结合Ollama模型30 分钟跑起一个本地 AI 助手,感兴趣的小伙伴可以了解下

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

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

二、Ollama 是什么?

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

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

三、环境准备

3.1 硬件要求

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

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

3.2 安装 Ollama

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

验证安装:

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

3.3 拉取模型

# 推荐: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 依赖

pip install ollama

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

4.1 最简对话

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

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

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 多轮对话(保持上下文)

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

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

5.3 主程序 assistant.py

# 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 运行效果

python assistant.py

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

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

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

六、进阶玩法

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

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

# 如果你已有使用 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 GBollama pull qwen3:8b
英文编程Llama 4 Scout~10 GBollama pull llama4:scout17b
逻辑推理 / 数学DeepSeek R2 8B~5 GBollama pull deepseek-r2:8b
低配机器Qwen3 1.7B~1 GBollama pull qwen3:1.7b
代码专用Qwen3-Coder 7B~4 GBollama 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开发AI助手的资料请关注脚本之家其它相关文章!

相关文章

  • python 环境安装及编辑器配置方法小结

    python 环境安装及编辑器配置方法小结

    这篇文章主要介绍了python 环境安装及编辑器配置方法小结的相关资料,需要的朋友可以参考下
    2021-06-06
  • Python 多进程原理及实现

    Python 多进程原理及实现

    这篇文章主要介绍了Python 多进程原理及实现,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-12-12
  • pip install python-Levenshtein失败的解决

    pip install python-Levenshtein失败的解决

    这篇文章主要介绍了pip install python-Levenshtein失败的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • pandas组内排序,并在每个分组内按序打上序号的操作

    pandas组内排序,并在每个分组内按序打上序号的操作

    这篇文章主要介绍了pandas组内排序,并在每个分组内按序打上序号的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 在Mac OS系统上安装Python的Pillow库的教程

    在Mac OS系统上安装Python的Pillow库的教程

    这篇文章主要介绍了在MacOS下安装Python的Pillow库的教程,Pillow库用来对图片进行各种处理操作,需要的朋友可以参考下
    2015-11-11
  • python编程实现归并排序

    python编程实现归并排序

    这篇文章主要为大家详细介绍了python编程实现归并排序的具体代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • py2exe 编译ico图标的代码

    py2exe 编译ico图标的代码

    py2exe 编译ico图标的代码,需要的朋友可以参考下
    2013-03-03
  • Django数据统计功能count()的使用

    Django数据统计功能count()的使用

    这篇文章主要介绍了Django数据统计功能count()的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • pytorch 实现冻结部分参数训练另一部分

    pytorch 实现冻结部分参数训练另一部分

    这篇文章主要介绍了pytorch 实现冻结部分参数训练另一部分,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Python 中 list 的各项操作技巧

    Python 中 list 的各项操作技巧

    最近在学习 python 语言。大致学习了 python 的基础语法。觉得 python 在数据处理中的地位和它的 list 操作密不可分,今天把相关基础操作记录到脚本之家平台,需要的的朋友参考下
    2017-04-04

最新评论