1. 引言
随着大语言模型(LLM)的快速发展,越来越多的开发者希望在自己的应用中集成 AI 能力。然而,调用云端 API 往往面临数据隐私、网络延迟和成本控制等问题。Ollama 作为一款优秀的本地模型运行工具,让我们可以在自己的电脑上轻松运行 Llama、Qwen、Mistral 等开源模型,实现完全本地化的 AI 应用。
本文将带你从零开始,完成 AI 应用与 Ollama 本地模型的对接,涵盖环境搭建、模型管理、API 调用以及 Python 实战示例。
2. 什么是 Ollama
Ollama 是一个开源的本地大语言模型运行框架,它简化了在本地机器上安装、运行和管理 LLM 的流程。它的核心优势包括:
- 一键安装:支持 macOS、Linux 和 Windows 平台,安装后即可使用。
- 模型管理简单:通过简单的命令行即可下载、运行和删除模型。
- OpenAI 兼容 API:提供与 OpenAI 格式兼容的 REST API,方便开发者迁移。
- 资源占用可控:支持 CPU 和 GPU 运行,可根据硬件配置灵活选择模型大小。
Ollama 底层使用 llama.cpp 等推理引擎,经过优化后能够在消费级硬件上流畅运行 7B、13B 甚至更大参数的模型。
3. 环境准备与安装
3.1 安装 Ollama
访问 Ollama 官网 下载对应操作系统的安装包:
- macOS :下载
.dmg文件,拖入 Applications 即可。 - Windows :下载
.exe安装包,双击运行。 - Linux:执行以下脚本一键安装:
bash
curl -fsSL https://ollama.com/install.sh | sh
安装完成后,在终端执行以下命令验证:
bash
ollama --version
3.2 下载并运行模型
Ollama 支持从模型库一键拉取模型。以 Qwen2.5 7B 为例:
bash
# 拉取模型
ollama pull qwen2.5:7b
# 运行模型(交互式对话)
ollama run qwen2.5:7b
常用模型推荐:
| 模型名称 | 参数规模 | 适用场景 |
|---|---|---|
| llama3.2 | 3B / 1B | 轻量任务、边缘设备 |
| qwen2.5 | 7B / 14B | 中文对话、通用任务 |
| mistral | 7B | 英文任务、代码生成 |
| codellama | 7B / 13B | 代码补全与生成 |
查看已安装的模型列表:
bash
ollama list
4. Ollama API 接口详解
Ollama 启动后默认监听 http://localhost:11434,提供 REST API 供外部应用调用。
4.1 生成对话(/api/chat)
这是最常用的接口,用于多轮对话:
bash
curl http://localhost:11434/api/chat -d '{
"model": "qwen2.5:7b",
"messages": [
{"role": "user", "content": "你好,请介绍一下你自己"}
]
}'
4.2 文本补全(/api/generate)
用于单次文本生成任务:
bash
curl http://localhost:11434/api/generate -d '{
"model": "qwen2.5:7b",
"prompt": "用一句话解释什么是机器学习",
"stream": false
}'
4.3 模型管理接口
bash
# 列出本地模型
curl http://localhost:11434/api/tags
# 查看模型信息
curl http://localhost:11434/api/show -d '{"model": "qwen2.5:7b"}'
4.4 OpenAI 兼容接口
Ollama 还提供了与 OpenAI 格式完全兼容的接口,地址为:
http://localhost:11434/v1
这意味着你可以直接使用 OpenAI SDK 对接 Ollama,只需修改 base_url 即可。
5. Python 实战:对接 Ollama
5.1 使用原生 requests 调用
不依赖任何第三方库,直接通过 HTTP 请求对接:
python
import requests
import json
def chat_with_ollama(messages, model="qwen2.5:7b"):
"""调用 Ollama 对话接口"""
url = "http://localhost:11434/api/chat"
payload = {
"model": model,
"messages": messages,
"stream": False
}
response = requests.post(url, json=payload)
return response.json()["message"]["content"]
# 使用示例
messages = [
{"role": "system", "content": "你是一个乐于助人的助手。"},
{"role": "user", "content": "请用三句话介绍 Python 的优势。"}
]
result = chat_with_ollama(messages)
print(result)
5.2 使用 OpenAI SDK 对接
安装 OpenAI SDK 后,只需修改 base_url 即可无缝切换:
bash
pip install openai
python
from openai import OpenAI
# 关键:将 base_url 指向 Ollama 的 OpenAI 兼容接口
client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama" # Ollama 不校验 key,任意值即可
)
response = client.chat.completions.create(
model="qwen2.5:7b",
messages=[
{"role": "system", "content": "你是一个专业的编程助手。"},
{"role": "user", "content": "写一个 Python 快速排序函数"}
]
)
print(response.choices[0].message.content)
5.3 流式输出
对于长文本生成,流式输出能显著提升用户体验:
python
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama"
)
stream = client.chat.completions.create(
model="qwen2.5:7b",
messages=[{"role": "user", "content": "写一篇关于人工智能的短文"}],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
6. 进阶:构建一个简单的 AI 问答应用
下面我们综合运用所学知识,构建一个带历史记忆的问答应用:
python
from openai import OpenAI
class LocalAIAssistant:
"""基于 Ollama 本地模型的 AI 助手"""
def __init__(self, model="qwen2.5:7b"):
self.client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama"
)
self.model = model
self.history = []
def ask(self, question):
"""向模型提问,并自动维护对话历史"""
self.history.append({"role": "user", "content": question})
response = self.client.chat.completions.create(
model=self.model,
messages=self.history
)
answer = response.choices[0].message.content
self.history.append({"role": "assistant", "content": answer})
return answer
def clear_history(self):
"""清空对话历史"""
self.history = []
# 使用示例
assistant = LocalAIAssistant()
print("AI:", assistant.ask("你好,我叫小明,请记住我的名字。"))
print("AI:", assistant.ask("我叫什么名字?"))
7. 常见问题与优化建议
7.1 模型加载速度慢
首次加载模型需要时间,可以通过以下方式优化:
bash
# 预加载模型到内存
ollama run qwen2.5:7b "" &
# 设置环境变量,保持模型常驻
export OLLAMA_KEEP_ALIVE=3600
7.2 内存不足
如果模型过大导致内存不足,可以:
- 选择更小的模型(如 3B 参数版本)。
- 设置
num_ctx参数控制上下文长度。 - 使用量化版本模型(如
qwen2.5:7b-q4_0)。
7.3 并发请求处理
Ollama 默认支持并发请求,但可通过环境变量调整:
bash
export OLLAMA_NUM_PARALLEL=4
7.4 局域网访问
如需让局域网内其他设备访问:
bash
export OLLAMA_HOST=0.0.0.0
8. 总结
通过本文的学习,你已经掌握了:
- Ollama 的安装与模型管理。
- REST API 与 OpenAI 兼容接口的调用方式。
- 使用 Python 对接本地模型的完整流程。
- 构建带记忆功能的 AI 问答应用。
Ollama 让本地 AI 应用开发变得前所未有的简单。无论是个人学习、原型验证还是生产部署,它都是一个值得信赖的选择。现在就开始你的本地 AI 开发之旅吧!