ANALYSIS
概述
Ollama 是一个开源的大语言模型运行框架,支持在本地运行 Llama、Gemma、Mistral、Qwen 等多种开源模型。它提供了两种主要的使用方式:
- CLI 命令行:直接在终端中与模型交互
- REST API:通过 HTTP 接口集成到应用程序中
本文将详细介绍 Ollama 的完整使用方法,帮助您快速上手并充分利用其功能。
安装与验证
安装 Ollama
Windows
PRTCL // POWERSHELL
# 下载安装包# 访问 https://ollama.ai/download 下载 Windows 版本
# 运行安装程序# 安装完成后,Ollama 会自动启动服务
# 验证安装ollama --versionmacOS
PRTCL // BASH
# 使用 Homebrew 安装brew install ollama
# 验证安装ollama --versionLinux
PRTCL // BASH
# 一键安装脚本curl -fsSL https://ollama.ai/install.sh | sh
# 验证安装ollama --version验证服务状态
PRTCL // BASH
# 检查服务是否运行curl http://localhost:11434/api/tags
# 或者使用 CLIollama list基础命令
下载模型
PRTCL // BASH
# 下载模型ollama pull llama3.2:3b
# 下载指定版本ollama pull qwen2.5:7b-instruct
# 下载量化模型(更小更快)ollama pull mistral:7b-q4_K_M
# 查看可用模型ollama search llama运行模型
PRTCL // BASH
# 交互式对话ollama run llama3.2:3b
# 单次提示ollama run llama3.2:3b "你好,请介绍一下自己"
# 指定参数运行ollama run llama3.2:3b --temperature 0.7 "写一首关于春天的诗"
# 使用 stdin 输入echo "解释量子力学" | ollama run llama3.2:3b查看模型列表
PRTCL // BASH
# 列出已下载的模型ollama list
# 查看模型详细信息ollama show llama3.2:3b
# 查看模型参数ollama show llama3.2:3b --modelfile删除模型
PRTCL // BASH
# 删除指定模型ollama rm llama3.2:3b
# 删除所有模型(谨慎使用)ollama list | awk '{print $1}' | xargs -I {} ollama rm {}REST API 使用
基础 API 端点
| 端点 | 方法 | 说明 |
|---|---|---|
/api/generate | POST | 生成文本 |
/api/chat | POST | 多轮对话 |
/api/tags | GET | 列出模型 |
/api/show | POST | 查看模型信息 |
/api/copy | POST | 复制模型 |
/api/delete | DELETE | 删除模型 |
生成文本
PRTCL // BASH
# 非流式输出curl http://localhost:11434/api/generate -d '{ "model": "llama3.2:3b", "prompt": "写一个 Python Hello World 程序", "stream": false}'
# 流式输出curl http://localhost:11434/api/generate -d '{ "model": "llama3.2:3b", "prompt": "写一个 Python Hello World 程序", "stream": true}'多轮对话
PRTCL // BASH
curl http://localhost:11434/api/chat -d '{ "model": "llama3.2:3b", "messages": [ { "role": "user", "content": "你好,请问你能帮我做什么?" }, { "role": "assistant", "content": "我可以帮你写代码、回答问题、翻译文本等。" }, { "role": "user", "content": "那帮我写一个快速排序算法吧" } ], "stream": false}'列出模型
PRTCL // BASH
curl http://localhost:11434/api/tagsPython 示例
PRTCL // PYTHON
import requestsimport json
# 生成文本def generate_text(prompt, model="llama3.2:3b", stream=False): url = "http://localhost:11434/api/generate" payload = { "model": model, "prompt": prompt, "stream": stream } response = requests.post(url, json=payload) return response.json()
# 多轮对话def chat(messages, model="llama3.2:3b", stream=False): url = "http://localhost:11434/api/chat" payload = { "model": model, "messages": messages, "stream": stream } response = requests.post(url, json=payload) return response.json()
# 使用示例if __name__ == "__main__": # 生成文本 result = generate_text("写一个 Python Hello World 程序") print(result["response"])
# 多轮对话 messages = [ {"role": "user", "content": "你好"}, {"role": "assistant", "content": "你好!有什么我可以帮助你的吗?"}, {"role": "user", "content": "帮我写一个快速排序算法"} ] result = chat(messages) print(result["message"]["content"])JavaScript 示例
PRTCL // JAVASCRIPT
// 生成文本async function generateText(prompt, model = "llama3.2:3b") { const response = await fetch("http://localhost:11434/api/generate", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ model: model, prompt: prompt, stream: false, }), }); const data = await response.json(); return data.response;}
// 多轮对话async function chat(messages, model = "llama3.2:3b") { const response = await fetch("http://localhost:11434/api/chat", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ model: model, messages: messages, stream: false, }), }); const data = await response.json(); return data.message.content;}
// 使用示例(async () => { // 生成文本 const result = await generateText("写一个 Python Hello World 程序"); console.log(result);
// 多轮对话 const messages = [ { role: "user", content: "你好" }, { role: "assistant", content: "你好!有什么我可以帮助你的吗?" }, { role: "user", content: "帮我写一个快速排序算法" }, ]; const chatResult = await chat(messages); console.log(chatResult);})();参数配置
生成参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
temperature | float | 0.7 | 控制输出的随机性(0-1) |
top_p | float | 0.9 | 核采样概率 |
top_k | int | 40 | 保留前 k 个最高概率的词 |
num_predict | int | -1 | 最大生成的 token 数(-1 表示无限制) |
num_ctx | int | 2048 | 上下文窗口大小 |
repeat_penalty | float | 1.1 | 重复惩罚 |
repeat_last_n | int | 64 | 重复惩罚的上下文范围 |
seed | int | 0 | 随机种子(0 表示随机) |
stop | array | [] | 停止词列表 |
format | string | "" | 输出格式(json) |
参数配置示例
PRTCL // BASH
# 创意写作(高温度)curl http://localhost:11434/api/generate -d '{ "model": "llama3.2:3b", "prompt": "写一个关于 AI 的故事", "temperature": 0.9, "top_p": 0.95, "stream": false}'
# 代码生成(低温度)curl http://localhost:11434/api/generate -d '{ "model": "llama3.2:3b", "prompt": "写一个 Python 快速排序函数", "temperature": 0.2, "top_p": 0.95, "stream": false}'
# 结构化输出(JSON 格式)curl http://localhost:11434/api/generate -d '{ "model": "llama3.2:3b", "prompt": "生成一个 JSON 格式的用户信息,包含 name、age、email 字段", "format": "json", "stream": false}'
# 自定义停止词curl http://localhost:11434/api/generate -d '{ "model": "llama3.2:3b", "prompt": "列出三个编程语言", "stop": ["\n\n"], "stream": false}'CLI 参数配置
PRTCL // BASH
# 指定温度ollama run llama3.2:3b --temperature 0.9 "写一个创意故事"
# 指定最大输出长度ollama run llama3.2:3b --num_predict 500 "写一篇文章"
# 指定上下文窗口ollama run llama3.2:3b --num_ctx 4096 "分析这段长文本"
# 组合参数ollama run llama3.2:3b \ --temperature 0.7 \ --top_p 0.9 \ --top_k 40 \ --num_predict 1000 \ --num_ctx 2048 \ "写一篇技术文章"高级功能
自定义模型(Modelfile)
创建自定义模型配置文件 Modelfile:
PRTCL // PLAINTEXT
FROM llama3.2:3b
PARAMETER temperature 0.7PARAMETER top_p 0.9PARAMETER top_k 40
SYSTEM """你是一个专业的代码助手,擅长回答编程相关的问题。回答时要简洁明了,必要时提供代码示例。"""
TEMPLATE """{{- range .Messages }}{{- if eq .Role "user" }}User: {{ .Content }}{{- else if eq .Role "assistant" }}Assistant: {{ .Content }}{{- end }}{{- end }}Assistant:"""创建模型:
PRTCL // BASH
# 从 Modelfile 创建模型ollama create my-model -f Modelfile
# 运行自定义模型ollama run my-model
# 查看模型信息ollama show my-model --modelfile模型微调
PRTCL // BASH
# 创建基础模型 Modelfilecat > base-modelfile << EOFFROM llama3.2:3bPARAMETER temperature 0.1EOF
# 创建模型ollama create my-base-model -f base-modelfile
# 准备训练数据(JSONL 格式)cat > training-data.jsonl << EOF{"user": "什么是机器学习?", "assistant": "机器学习是人工智能的一个分支..."}{"user": "什么是深度学习?", "assistant": "深度学习是机器学习的子集..."}EOF
# 注意:Ollama 本身不支持微调,需要使用其他工具如 LLaMA-Factory# 这里只是展示数据格式模型复制与共享
PRTCL // BASH
# 复制模型ollama copy llama3.2:3b my-llama3.2:3b
# 导出模型ollama export my-llama3.2:3b > my-model.gguf
# 导入模型ollama import my-model.gguf并发请求
PRTCL // PYTHON
import requestsimport asyncioimport aiohttp
async def generate_text_async(session, prompt, model="llama3.2:3b"): url = "http://localhost:11434/api/generate" payload = { "model": model, "prompt": prompt, "stream": False } async with session.post(url, json=payload) as response: return await response.json()
async def main(): prompts = [ "写一个 Python Hello World 程序", "解释什么是机器学习", "写一个快速排序算法" ]
async with aiohttp.ClientSession() as session: tasks = [generate_text_async(session, prompt) for prompt in prompts] results = await asyncio.gather(*tasks)
for result in results: print(result["response"])
if __name__ == "__main__": asyncio.run(main())性能优化
量化模型
PRTCL // BASH
# 下载量化模型ollama pull llama3.2:3b-q4_K_M
# 量化等级对比# q4_K_M: 4-bit 量化,平衡精度和速度# q4_K_S: 4-bit 量化,更小更快# q5_K_M: 5-bit 量化,精度更高# q8_0: 8-bit 量化,精度最高
# 查看模型大小ollama list批量处理
PRTCL // PYTHON
import requests
def batch_generate(prompts, model="llama3.2:3b"): results = [] for prompt in prompts: payload = { "model": model, "prompt": prompt, "stream": False } response = requests.post( "http://localhost:11434/api/generate", json=payload ) results.append(response.json()["response"]) return results
# 使用示例prompts = ["问题 1", "问题 2", "问题 3"]results = batch_generate(prompts)for i, result in enumerate(results): print(f"问题 {i+1}: {result}")缓存优化
PRTCL // BASH
# 设置模型保活时间(避免重复加载)export OLLAMA_KEEP_ALIVE=30m
# 或在 Modelfile 中设置PARAMETER keep_alive 30mGPU 加速
PRTCL // BASH
# 检查 GPU 是否可用nvidia-smi
# 启用 GPU 加速# Ollama 会自动检测并使用 GPU
# 如果 GPU 不可用,检查 NVIDIA 驱动sudo apt install nvidia-driver-525sudo systemctl restart ollama常见使用场景
文本生成
PRTCL // BASH
# 创意写作ollama run llama3.2:3b "写一个关于未来的科幻短篇故事"
# 生成标题ollama run llama3.2:3b "为这篇关于 AI 的文章生成 5 个吸引人的标题"
# 生成摘要ollama run llama3.2:3b "为以下文本生成摘要:[长文本内容]"代码生成
PRTCL // BASH
# 生成代码ollama run codellama:7b "写一个 Python 快速排序函数"
# 代码解释ollama run codellama:7b "解释以下代码的作用:[代码]"
# 代码调试ollama run codellama:7b "找出以下代码中的 bug 并修复:[有 bug 的代码]"文本处理
PRTCL // BASH
# 翻译ollama run llama3.2:3b "将以下中文翻译成英文:你好,世界"
# 摘要ollama run llama3.2:3b "为以下文章生成摘要:[文章内容]"
# 关键词提取ollama run llama3.2:3b "从以下文本中提取关键词:[文本内容]"
# 情感分析ollama run llama3.2:3b "分析以下评论的情感倾向:[评论内容]"问答系统
PRTCL // BASH
# 知识问答ollama run llama3.2:3b "什么是机器学习?"
# 数学计算ollama run llama3.2:3b "计算 123 × 456"
# 逻辑推理ollama run llama3.2:3b "如果所有的猫都喜欢鱼,而小白是一只猫,那么小白喜欢鱼吗?"与 OpenClaw 集成
配置 OpenClaw 使用 Ollama
PRTCL // YAML
providers: - name: "ollama" type: "local" baseUrl: "http://localhost:11434" api: "openai-completions" models: - id: "ollama/llama3.2:3b" name: "Llama 3.2 3B" capabilities: - "text" - "code" - id: "ollama/qwen2.5:7b" name: "通义千问 7B" capabilities: - "text" - "code" - "tool"
defaultModel: "ollama/qwen2.5:7b"测试连接
PRTCL // BASH
# 测试 Ollama 服务curl http://localhost:11434/api/tags
# 测试 OpenClaw 连接openclaw model test ollama/qwen2.5:7b监控与调试
查看日志
PRTCL // BASH
# 查看 Ollama 服务日志# macOS/Linuxtail -f ~/.ollama/logs/server.log
# Windowstype %USERPROFILE%\.ollama\logs\server.log
# Docker 部署docker logs -f ollama性能监控
PRTCL // BASH
# 查看资源使用# CPUtop
# 内存free -h
# GPUnvidia-smi
# 磁盘df -h调试模式
PRTCL // BASH
# 启用调试日志export OLLAMA_DEBUG=1
# 重新启动服务ollama serve
# 查看详细日志最佳实践
- ✅ 选择合适的模型:根据任务复杂度选择模型大小
- ✅ 使用量化模型:在精度和性能之间找到平衡
- ✅ 调整参数:根据任务类型调整 temperature、top_p 等参数
- ✅ 启用流式输出:提升用户体验
- ✅ 使用缓存:避免重复加载模型
- ✅ 监控资源:及时发现问题
- ✅ 备份数据:定期备份模型数据
- ✅ 更新版本:获取最新功能和修复
- ✅ 安全配置:生产环境使用 HTTPS 和认证
- ✅ 日志管理:配置日志轮转,避免磁盘占满
故障排查
模型加载慢
症状:首次运行模型时加载时间很长
解决方案:
PRTCL // BASH
# 使用量化模型ollama pull llama3.2:3b-q4_K_M
# 增加 GPU 内存# 在 Docker 中配置--gpus all
# 减少模型大小ollama pull llama3.2:3b响应慢
症状:生成文本速度慢
解决方案:
PRTCL // BASH
# 启用 GPU 加速nvidia-smi
# 使用量化模型ollama pull llama3.2:3b-q4_K_M
# 减少上下文长度--num_ctx 1024
# 减少输出长度--num_predict 500内存不足
症状:程序崩溃或 OOM 错误
解决方案:
PRTCL // BASH
# 减少并发数export OLLAMA_NUM_PARALLEL=1
# 减少模型大小ollama pull llama3.2:3b
# 减少上下文长度--num_ctx 1024
# 释放未使用的模型ollama rm unused-modelAPI 调用失败
症状:HTTP 请求失败
解决方案:
PRTCL // BASH
# 检查服务状态curl http://localhost:11434/api/tags
# 检查防火墙sudo ufw allow 11434
# 检查端口占用sudo netstat -tlnp | grep 11434相关资源
- Ollama 官方文档: https://ollama.ai/docs
- Ollama GitHub: https://github.com/ollama/ollama
- 模型库: https://ollama.ai/library
- API 文档: https://github.com/ollama/ollama/blob/main/docs/api.md
- OpenClaw 集成: https://docs.openclaw.ai/models/ollama
- 社区论坛: https://discord.gg/ollama
最后更新: 2026-03-24 作者: EchoHaoRan
关于我
| 项目 | 内容 |
|---|---|
| 编辑 | echowang |
| 来源 | echospace |
| 邮箱 | echohaoran@gmail.com |
| 简介 | AI 爱好者,专注于大语言模型应用与智能体开发,分享技术与实践心得 |
| 社交 | 欢迎交流讨论,共同成长 |
R P
Rhine Lab Pioneer Division
Auth_Verified: 2026.03.24
Auth_Verified: 2026.03.24
