前言:接触 AI 已经有一段时间了,从最开始用 ChatGPT 写点脚本,到尝试接入 API 做应用,越用越觉得:云端模型固然强大,但隐私、延迟和费用真的是绕不开的坑。最近正好学到了 Ollama —— 一个能让大语言模型在本地跑起来的工具。折腾了一下之后,发现它真的把复杂的事情简化了很多。
Ollama:让本地跑大模型变简单
Ollama 是个开源项目,目标就是降低“本地跑大模型”的门槛。它帮你把复杂的模型管理、推理调用都封装好了,留给开发者一个熟悉的 API 接口。换句话说:
- 数据安全:数据全程在本地,不用担心外泄
- 延迟更低:没有网络传输环节,响应快
- 费用一次性:模型下好就能无限用,不再受 API 计费绑架
- 完全掌控:可以换模型、改参数,随心折腾
对习惯了 OpenAI API 的开发者来说,迁移到 Ollama 基本没啥学习成本。
快速上手:用 Next.js 做一个本地对话接口
这里给一个最常见的场景:在 Next.js 里接入 Ollama,做一个对话接口。
1. 安装 Ollama 并启动模型
去官网下载Ollama:ollama.com/download
// 下载并启动一个模型,比如 deepseek-r1:1.5b
ollama run deepseek-r1:1.5b
Ollama 默认会在本地 11434 端口开一个 API 服务,后面所有请求都走这个接口。
2. Next.js 创建 API 路由
在项目中新建一个 API 路由,代理请求到 Ollama:
// app/api/chat/route.ts
import { NextRequest } from 'next/server'
import {
Message,
ChatRequest,
ChatResponse
} from '@/types/chat'
const OLLAMA_API_URL = 'http://localhost:11434/api/chat'
const MODEL_NAME = 'deepseek-r1:1.5b'
export async function POST(request: NextRequest) {
try {
const body: { messages: Message[] } = await request.json()
const ollamaRequestBody: ChatRequest = {
model: MODEL_NAME,
messages: body.messages,
stream: false
}
const response = await fetch(OLLAMA_API_URL, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(ollamaRequestBody)
})
if (!response.ok) {
const errorText = await response.text()
return Response.json({
error: `Ollama API ERROR: ${errorText}`
})
}
const ollamaData: ChatResponse = await response.json()
return Response.json(ollamaData)
} catch (err) {
console.error('Chat API Error', err)
return Response.json({ status: 500 })
}
}
写一层代理,让前端只调 /api/chat,而不用直接连 11434 端口,后期扩展更方便。
3. 定义 TypeScript 类型
// types/chat.ts
export type Message = {
role: 'user' | 'assistant' | 'system' | 'tool';
content: string;
}
export type ChatResponse = {
model: string;
created_at: string;
message: Message;
done: boolean;
total_duration: number;
load_duration: number;
prompt_eval_count: number;
prompt_eval_duration: number;
eval_count: number;
eval_duration: number;
}
export type ChatRequest = {
model: string;
messages: Message[];
stream?: boolean; // 默认是 false
}
定义类型后,前后端交互会更清晰,避免传参写错。
4. 前端调用接口
const sendMessage = async (message: string) => {
const response = await fetch('/api/chat', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
messages: [
{ role: 'user', content: message }
]
}),
});
const data = await response.json();
console.log('AI 回复:', data.message.content);
};
调用方式和常见的云端 API 没啥区别,迁移成本几乎为零。
成品展示:
更进阶的玩法
Ollama 不止是跑模型,还提供了很多实用功能。
模型管理
# 查看已下载的模型
ollama list
# 下载新模型
ollama pull llama2
# 删除模型
ollama rm llama2
# 创建自定义模型
ollama create my-model -f Modelfile
随时切换不同模型,甚至能写 Modelfile 自定义一个属于自己的模型。
GPU 加速
如果你有 NVIDIA 显卡,可以让推理速度直接起飞:
# 启动时检查 GPU 支持
ollama serve --gpu
# 指定 GPU 加速的层数
OLLAMA_GPU_LAYERS=35 ollama run llama2
一般 8GB 显存就能带来比较明显的提升。
自定义配置
Ollama 支持通过 Modelfile 来控制模型参数:
FROM llama2
PARAMETER temperature 0.7
PARAMETER stop "AI:"
SYSTEM """你是一个乐于助人的助手"""
可以设定模型风格,比如回答的温度、停止符、系统提示等。
能派上用场的地方
说了半天,Ollama 适合拿来干什么?结合几个常见场景:
- 企业内部问答系统:数据留在公司本地,安全合规
- 离线助手:出差、飞机上或者没网的时候依旧能用
- 科研教学:研究人员可以本地测试不同模型,不受 API 限制
- 个人隐私场景:比如写日记、处理文件,更安心
总结
Ollama 让“在本地跑大模型”变得像用 API 一样简单。它解决了隐私、延迟和费用的问题,还给开发者更多可控性和自由度。
未来随着硬件更强、模型更轻量,本地 AI 会越来越普及。无论是做企业应用还是个人项目,Ollama 都值得一试。