1. 引言

随着大语言模型的快速发展,越来越多的开发者希望在本地运行 AI 模型,以保护数据隐私、降低调用成本并实现离线开发。Ollama 正是这样一个轻量级工具,它让本地部署大模型变得像使用 Docker 一样简单。本文将带你从零开始,在本地搭建一个 AI 开发助手,并给出完整的代码实战。

2. Ollama 简介与安装

2.1 什么是 Ollama

Ollama 是一个开源的大模型本地运行框架,支持 macOS、Linux 和 Windows 三大平台。它封装了模型下载、推理加速和 API 服务等底层细节,开发者只需几条命令即可完成模型的部署和调用。

2.2 安装 Ollama

在 macOS 上,可以通过 Homebrew 一键安装:

brew install ollama

在 Linux 上,使用官方安装脚本:

curl -fsSL https://ollama.com/install.sh | sh

在 Windows 上,直接下载 OllamaSetup.exe 安装包,双击安装即可。安装完成后,在终端执行以下命令验证:

ollama --version

3. 下载并运行模型

3.1 选择模型

Ollama 支持众多开源模型,常见的有:

  • Llama 3.1:Meta 出品,综合能力强,适合通用对话和代码生成。
  • Qwen2.5:阿里开源,中文表现优秀,适合中文开发场景。
  • CodeLlama:专注于代码生成与补全。
  • DeepSeek-Coder:深度优化的代码模型。

3.2 下载并运行模型

以 Qwen2.5 为例,执行以下命令下载并启动模型:

ollama run qwen2.5

首次运行会自动下载模型,之后进入交互式对话界面。输入 /bye 退出。如果想指定模型大小,可以使用带参数版本的模型,例如:

ollama run qwen2.5:7b

3.3 查看已安装的模型

ollama list

4. 启动 Ollama API 服务

Ollama 默认在后台提供 RESTful API 服务,端口为 11434。可以通过以下命令手动启动服务:

ollama serve

验证服务是否正常:

curl http://localhost:11434/api/tags

该命令会返回已安装模型的 JSON 列表,说明服务已就绪。

5. 实战一:Python 调用 Ollama API

5.1 安装依赖

pip install requests

5.2 基础对话示例

import requests
import json

def chat_with_ollama(prompt, model="qwen2.5"):
    url = "http://localhost:11434/api/chat"
    payload = {
        "model": model,
        "messages": [
            {"role": "user", "content": prompt}
        ],
        "stream": False
    }
    response = requests.post(url, json=payload)
    return response.json()["message"]["content"]

if __name__ == "__main__":
    result = chat_with_ollama("用 Python 写一个快速排序算法")
    print(result)

5.3 流式输出示例

import requests

def stream_chat(prompt, model="qwen2.5"):
    url = "http://localhost:11434/api/chat"
    payload = {
        "model": model,
        "messages": [{"role": "user", "content": prompt}],
        "stream": True
    }
    with requests.post(url, json=payload, stream=True) as resp:
        for line in resp.iter_lines():
            if line:
                data = json.loads(line)
                if not data.get("done"):
                    print(data["message"]["content"], end="", flush=True)

if __name__ == "__main__":
    stream_chat("解释一下 Python 的装饰器")

6. 实战二:构建本地代码助手 CLI

下面构建一个命令行代码助手,支持代码生成、代码解释和代码审查三种模式。

import argparse
import requests
import sys

OLLAMA_URL = "http://localhost:11434/api/chat"
MODEL = "qwen2.5"

def call_ollama(system_prompt, user_prompt):
    payload = {
        "model": MODEL,
        "messages": [
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": user_prompt}
        ],
        "stream": False
    }
    resp = requests.post(OLLAMA_URL, json=payload)
    return resp.json()["message"]["content"]

def generate_code(requirement):
    system = "你是一名资深软件工程师,请根据需求生成高质量、可运行的代码,并附上必要的注释。"
    return call_ollama(system, requirement)

def explain_code(code):
    system = "你是一名技术导师,请逐段解释以下代码的功能、逻辑和关键点。"
    return call_ollama(system, code)

def review_code(code):
    system = "你是一名代码审查专家,请指出代码中的问题、潜在 bug 和改进建议。"
    return call_ollama(system, code)

def main():
    parser = argparse.ArgumentParser(description="本地代码助手")
    parser.add_argument("--mode", choices=["generate", "explain", "review"], required=True)
    parser.add_argument("--input", required=True, help="需求描述或代码内容")
    args = parser.parse_args()

    if args.mode == "generate":
        print(generate_code(args.input))
    elif args.mode == "explain":
        print(explain_code(args.input))
    elif args.mode == "review":
        print(review_code(args.input))

if __name__ == "__main__":
    main()

使用示例:

python code_assistant.py --mode generate --input "用 Python 写一个读取 CSV 文件的函数"
python code_assistant.py --mode explain --input "def add(a, b): return a + b"
python code_assistant.py --mode review --input "def div(a, b): return a / b"

7. 实战三:接入 VS Code 作为开发助手

7.1 安装 Continue 插件

在 VS Code 扩展市场搜索并安装 Continue 插件。Continue 是一个开源 AI 编程助手,支持对接 Ollama 本地模型。

7.2 配置 Continue 连接 Ollama

打开 Continue 配置文件(~/.continue/config.json),添加以下配置:

{
  "models": [
    {
      "title": "Ollama Qwen2.5",
      "provider": "ollama",
      "model": "qwen2.5",
      "apiBase": "http://localhost:11434"
    }
  ]
}

7.3 使用方式

配置完成后,在 VS Code 中打开 Continue 侧边栏,即可使用 Tab 补全、代码对话、选中代码解释等功能。选中一段代码后,按 Cmd+I(macOS)或 Ctrl+I(Windows)即可向本地模型提问。

8. 实战四:构建 Web 版开发助手

使用 Flask 构建一个简单的 Web 界面,通过浏览器与本地模型交互。

from flask import Flask, request, jsonify, render_template
import requests

app = Flask(__name__)
OLLAMA_URL = "http://localhost:11434/api/chat"
MODEL = "qwen2.5"

@app.route("/")
def index():
    return render_template("index.html")

@app.route("/api/chat", methods=["POST"])
def chat():
    data = request.json
    prompt = data.get("prompt", "")
    payload = {
        "model": MODEL,
        "messages": [{"role": "user", "content": prompt}],
        "stream": False
    }
    resp = requests.post(OLLAMA_URL, json=payload)
    return jsonify({"reply": resp.json()["message"]["content"]})

if __name__ == "__main__":
    app.run(port=5000, debug=True)

对应的前端页面 templates/index.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>本地 AI 开发助手</title>
</head>
<body>
    <h1>本地 AI 开发助手</h1>
    <textarea id="prompt" rows="4" cols="60" placeholder="输入你的问题..."></textarea>
    <br><br>
    <button onclick="send()">发送</button>
    <div id="result" style="margin-top:20px; white-space:pre-wrap;"></div>

    <script>
    async function send() {
        const prompt = document.getElementById("prompt").value;
        const resp = await fetch("/api/chat", {
            method: "POST",
            headers: {"Content-Type": "application/json"},
            body: JSON.stringify({prompt: prompt})
        });
        const data = await resp.json();
        document.getElementById("result").innerText = data.reply;
    }
    </script>
</body>
</html>

9. 性能优化与注意事项

9.1 硬件要求

本地运行大模型对硬件有一定要求。7B 参数模型建议至少 8GB 显存,13B 模型建议 16GB 显存。如果没有独立显卡,可以使用 CPU 运行,但速度会明显下降。

9.2 常用优化技巧

  • 选择合适模型:根据任务类型选择模型,代码任务优先 CodeLlama 或 DeepSeek-Coder。
  • 控制上下文长度:过长的上下文会显著增加推理耗时,尽量精简输入。
  • 使用量化版本:Ollama 默认使用量化模型,在精度和速度之间取得平衡。
  • 批量请求:在服务端做请求合并,减少重复加载模型的开销。

9.3 常见问题排查

问题 可能原因 解决方案
连接被拒绝 Ollama 服务未启动 执行 ollama serve 启动服务
模型下载慢 网络问题 配置代理或使用国内镜像源
内存不足 模型过大 换用更小的模型或量化版本
响应速度慢 CPU 推理 使用 GPU 或减少上下文长度

10. 总结

本文从 Ollama 的安装开始,逐步讲解了模型下载、API 调用、CLI 工具构建、VS Code 集成和 Web 应用开发等完整流程。通过本地部署大模型,开发者可以在不依赖外部 API 的情况下获得 AI 编程辅助能力,既保护了代码隐私,又降低了使用成本。建议读者从 Python API 调用开始实践,逐步构建适合自己的开发助手工具。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐