【Ollama本地大模型】性能优化思考

作者:盛世隐者日期:2026/4/13

文章目录

  • 1. 硬件配置与模型选择
  • 2. 模型参数配置
    • 🧠 参数详解:为何这样配置你的10核+8GB显存
  • 3. 本地API调用
    • 3.1 模型驻留
      • ⚙️ 工作原理
        • 🛠️ 配置方式
        • 💡 实用技巧
        • 💡 最佳实践与注意事项
    • 3.2 流式输出
      • 🔌 原理:它是如何工作的?
        • ⚖️ 场景与效果对比
        • ⚙️ 默认行为与语言SDK差异
        • 🛠️ 实际应用示例
        • ✨ 高级特性:工具调用与思考过程
        • 💡 最佳实践
    • 3.3 思考模式
      • 🧠 哪些模型支持思考?
        • 🛠️ 如何设置`think`参数?
          • 1. CLI (命令行界面)
            * 2. API 调用
            * 3. Modelfile 配置
            * 4. 流式处理思考内容
        • 📊 何时用,何时不用?
        • 🔗 与`keep_alive`、`stream`的协同
        • 📊 核心参数与效果对比
        • 🛠️ 示例:使用 `hide_thinking` 参数
        • ⚠️ 注意事项
  • 4. ollama+agent

1. 硬件配置与模型选择

deepseek提供的模型参数量与推荐的硬件配置如下。

  • 应该在满足运行条件的前提下,尽可能选择最大参数量的模型,因为模型参数量越大效果越好
  • 如果模型参数量超过硬件配置的支持,可能导致运行缓慢,因为模型不能全在GPU跑,部分计算任务被调度到CPU

在这里插入图片描述
如果内存16GB,显存8GB,推荐模型参数量小于7b,如qwen3.5:4b

1ollama run qwen3.5:4b
2

2. 模型参数配置

建议输入自己的硬件配置信息和模型信息,让AI来帮忙确定

16GB内存,8GB显存,10核CPU推荐的qwen3.5:4b模型参数配置(Modelfile.txt):

1ollama create qwen3.5:4b-mine -f .\Modelfile.txt
2
1FROM qwen3.5:4b
2
3# ========== 硬件适配参数 ==========
4PARAMETER num_ctx 5120
5PARAMETER num_gpu 999
6PARAMETER num_thread 10
7
8# ========== 输出质量控制 ==========
9PARAMETER temperature 0.7
10PARAMETER top_k 40
11PARAMETER top_p 0.95
12

🧠 参数详解:为何这样配置你的10核+8GB显存

  • 基础模型 (FROM qwen3.5:4b):默认采用 Q4_K_M 量化,模型文件仅 3.4 GB。对于你的8GB显存来说,这留下了充裕的 KV Cache 空间。
  • 上下文长度 (num_ctx 5120):这是针对你8GB显存的 “极限甜点值”
    • 估算显存占用:模型权重 (3.4GB) + 5120 上下文的 KV Cache (~4.0GB) ≈ 7.4GB。这个数值安全地卡在8GB显存上限以内,既利用了几乎全部显存资源,又留出了约 600MB 的缓冲地带,可以避免因显存波动导致的崩溃。
    • 对比收益:相比我之前建议的 4096,这个值能让你一次性处理更长的代码文件,或维持更多轮的复杂对话记忆。
  • GPU层数 (num_gpu 999):强制将4B模型的全部层加载到你的8GB显存中运行,确保获得最高的推理速度

通过以下命令可以查看ollama模型计算任务调度情况:

1ollama ps  

在这里插入图片描述

  • CPU线程数 (num_thread 10):与你10核CPU精确匹配。这能优化模型首次加载时的权重解析速度,并在极少数显存压力大、需要CPU参与计算时,发挥CPU的最大多核效能。
  • 温度参数 (temperature 0.7):维持代码生成和创意对话之间的最佳平衡点。
  • (top_k=40):保留概率最高的 40 个词。这一步几乎保留了所有合理词汇(食物种类一般不超过40个),但绝对滤掉了“水泥”这类离谱词。
  • (top_p=0.95):在上一步的40个词中,继续累加概率至 95%。这一步会动态剪掉那些概率极低、可有可无的候选词(比如“泡面”、“炒饭”等,如果它们排在末尾的话)。

3. 本地API调用

3.1 模型驻留

keep_alive 是 Ollama API 中用于精细控制模型内存占用的参数,它的核心作用是定义模型在完成一次请求后,会在显存中继续“待命”多久。

理解这个参数,对优化本地 AI 应用的响应速度和资源管理至关重要。它的取值非常灵活:

  • 立即释放 ("0"0):响应生成后立即卸载模型。适合显存紧张、用完即走的场景。
  • 限时驻留 ("5m" / "2h" / "24h" / 300):Ollama 全局默认值为 "5m"。可使用 “h”, “m”, “s” 为单位,或直接写秒数。
  • 永久驻留 (-1"-1" 等):让模型常驻显存。适合追求极速响应的开发或高频调用场景。

⚙️ 工作原理

keep_alive 的计时是 “滑动刷新” 的:

  • 每一次请求完成,计时器都会重置,开始新一轮倒计时。
  • 这意味着,只要你的请求间隔小于设定的 keep_alive 值,模型就会一直保持在显存中,随时准备“热启动”响应。

🛠️ 配置方式

它有三种配置方式,优先级依次降低

  1. API 调用时指定(最高优先级):在请求体中直接定义,拥有最高控制权。
  2. 启动时设置环境变量:设置 OLLAMA_KEEP_ALIVE 环境变量,为所有模型定义默认行为。
  3. 服务端默认配置(最低优先级):默认值为 5分钟

💡 实用技巧

  • 预热模型:服务启动后,可发送 keep_alive: -1 的空请求让模型常驻,避免首个真实请求的加载延迟。
  • 主动卸载:发送 keep_alive: 0 的空请求,立即释放资源。
  • 监控状态:使用 ollama ps 命令查看当前已加载的模型及其驻留时间。

💡 最佳实践与注意事项

keep_alive 的设置需要结合实际场景来权衡:

  • 根据场景选择策略
    • 高并发/生产环境:推荐设为 -1 让模型常驻,以获得最低延迟和最高吞吐量。
    • 间歇性使用/开发环境:设为 "1h""24h",在工作时段内保持热启动,同时避免长期占用资源。
    • 资源受限/短期任务:设为 "5m" 或更短,让系统自动管理,或主动用 0 释放显存。
  • 注意事项
    • 监控显存:常驻大模型会持续占用大量显存,运行多程序时需监控避免冲突。
    • 谨慎多模型共存:同时常驻多个模型会加剧显存压力,注意 OLLAMA_MAX_LOADED_MODELS 的配置限制。
    • 注意版本兼容:部分旧版库可能将 keep_alive 视为布尔值,使用时请查阅所用 SDK 的文档。

掌握了 keep_alive 参数,你就可以精细地控制 Ollama 模型的内存驻留行为。你可以按需在“即时响应”和“释放资源”之间自由切换,从而构建出既高效又稳定的 AI 应用。

3.2 流式输出

stream参数是控制Ollama API响应方式的开关。它决定了模型是像真人打字一样逐词输出stream: true),还是等待完整回答后一次性返回stream: false)。

keep_alive控制模型“驻留多久”不同,stream只控制结果“如何呈现”,并不影响模型在显存中的状态。

🔌 原理:它是如何工作的?

stream的两种模式对应着截然不同的数据传输方式。

参数值响应格式 (Content-Type)数据传输方式
true (流式)application/x-ndjson服务器将生成的每个词或短语,作为一个独立的JSON对象,通过换行分隔的JSON (NDJSON) 流式发送。
false (非流式)application/json服务器在模型生成完所有内容后,将完整结果打包成一个标准的JSON对象一次性返回。

⚖️ 场景与效果对比

选择哪种模式,主要取决于你的应用场景。

特性流式 (stream: true)非流式 (stream: false)
响应速度极低的感知延迟,可即时看到首个生成片段。感知延迟,用户需等待完整内容生成完毕。
适用场景聊天机器人、实时文本生成、代码补全等注重交互体验的场景。结构化数据提取、文本分类、单元测试等需要完整、可预测结果的场景。
开发复杂度较高。需处理数据流、解析不完整JSON、累积片段并维护状态。较低。一次请求即可获得完整、稳定的JSON,易于解析。
功能支持完整支持常规对话、思考过程 (thinking)工具调用 (tool calling) 的流式输出。不支持流式工具调用。如需使用tools参数,必须设置stream: false。

⚙️ 默认行为与语言SDK差异

了解不同环境下的默认设置,可以避免很多困惑。

调用方式stream 默认值行为说明
REST APItrue直接调用 /api/generate 或 /api/chat 时,默认即为流式响应。
Ollama 命令行 (CLI)true在终端中运行 ollama run ... 时,默认就是打字机效果。
官方 Python SDKfalse使用 ollama 库的 chat 或 generate 函数时,默认为非流式。
官方 JavaScript SDKfalse与Python库一样,默认关闭流式传输,需手动开启。

🛠️ 实际应用示例

1. 流式 (stream: true)
  • REST API (cURL)
1# 注意:无需显式设置stream: true,因为它是默认值  
2curl http://localhost:11434/api/generate -d '{  
3  "model": "qwen3.5:4b",  
4  "prompt": "解释一下什么是API。"  
5}'  
  • Python SDK
1from ollama import chat  
2stream = chat(  
3    model='qwen3.5:4b-mine',  
4    messages=[{'role': 'user', 'content': '解释一下什么是API。'}],  
5    stream=True,  # 必须显式开启  
6)  
7for chunk in stream:  
8    print(chunk['message']['content'], end='', flush=True)  
2. 非流式 (stream: false)
  • REST API (cURL)
1curl http://localhost:11434/api/generate -d '{  
2  "model": "qwen3.5:4b",  
3  "prompt": "将下面的句子翻译成中文:Hello World.",  
4  "stream": false  
5}'  
  • Python SDK
1from ollama import chat  
2response = chat(  
3    model='qwen3.5:4b-mine',  
4    messages=[{'role': 'user', 'content': '将下面的句子翻译成中文:Hello World.'}],  
5    # stream默认为False,可不写  
6)  
7print(response['message']['content'])  

✨ 高级特性:工具调用与思考过程

对于支持高级功能的模型(如 qwen3),stream 参数能与工具调用和思考过程(thinking)无缝结合。

  • 工具调用:在流式模式下,tool_calls 信息会分散在多个数据块中,需要在客户端进行累积和重组。
  • 思考过程:支持思考的模型会在每个数据块中额外携带一个 thinking 字段,用于展示模型的内部推理步骤。

💡 最佳实践

  • 完整对话历史:在流式模式下,记得将分散的数据块累积起来,才能作为下一次请求的对话历史。
  • 性能指标:流式响应的最后一个数据块(done: true)会包含详细的性能指标,如 total_duration(总耗时)、eval_count(生成的token数)等,是分析性能的重要依据。
  • 结构化输出:当需要模型输出符合特定JSON格式的结果时,应将 stream 设置为 false,以便获取一个完整、合法的JSON对象。
  • 超时设置:对于非流式请求,特别是可能生成大量文本的场景,务必设置一个足够长的客户端读取超时(如60秒),防止请求意外中断。

3.3 思考模式

think参数是Ollama为“推理模型”提供的“透明模式”开关,让你能窥见AI得出最终答案前的内部思考过程。

简单来说,think参数控制着推理模型在给出最终答案前,是否输出其内部思考过程。

  • think: true (慢思考):让模型先输出thinking字段内容,再输出content最终答案。这就像展示了AI的“思考草稿”或“解题步骤”,方便你debug或审计。
  • think: false (快回答):强制模型跳过思考步骤,直接给出答案。这会显著加快响应速度,适合简单问答场景。

🧠 哪些模型支持思考?

并非所有模型都具备思考能力,目前主要支持以下几类(更多正在加入):

  • Qwen 3 / 3.5:支持true/false。若运行时思考过程过长,可通过启动参数 --think=false 或交互命令 /set nothink 关闭以提速。
  • GPT-OSS:仅支持"low""medium""high"三个等级控制思考深度,传入true/false无效。
  • DeepSeek R1:支持true/false
  • DeepSeek-v3.1:支持true/false

🛠️ 如何设置think参数?

Ollama提供了多种方式来控制思考模式,从命令行到API调用,一应俱全。

1. CLI (命令行界面)
  • 单次运行
1# 启用思考(默认为true)  
2ollama run qwen3.5 --think "你的问题"  
3# 禁用思考,快速回答  
4ollama run qwen3.5 --think=false "你的问题"  
5# 为GPT-OSS指定思考等级  
6ollama run gpt-oss --think=high "你的问题"  
  • 交互模式
1# 在交互对话中动态切换  
2/set think     # 启用思考  
3/set nothink   # 禁用思考  
  • 隐藏思考内容:若想使用思考模型但不想看到其内部过程,可使用 --hidethinking 标志,它会在后台运行思考逻辑,最终只展示答案。
2. API 调用

/api/chat/api/generate端点均支持think参数。

  • Chat API 示例 (cURL)
1curl http://localhost:11434/api/chat -d '{  
2  "model": "qwen3.5",  
3  "messages": [{"role": "user", "content": "如何实现一个单例模式?"}],  
4  "think": true,  
5  "stream": false  
6}'  

成功响应中,message对象将包含thinkingcontent两个字段,分别对应推理轨迹和最终答案。

  • Python 示例
1from ollama import chat  
2response = chat(  
3    model='qwen3.5',  
4    messages=[{'role': 'user', 'content': '解释一下"多态"的概念。'}],  
5    think=True,  # 启用思考  
6    stream=False  
7)  
8print("思考过程:", response['message']['thinking'])  
9print("最终答案:", response['message']['content'])  
3. Modelfile 配置

可以在Modelfile中预定义think行为,但实际测试发现部分模型可能不生效,最稳妥的方式还是在API调用时动态指定。

1FROM qwen3.5:4b
2PARAMETER think false  # 尝试默认禁用思考
3
4. 流式处理思考内容

当启用流式响应(stream: true)时,思考过程会以数据块的形式先于答案到达。你需要根据message.thinkingmessage.content字段来区分它们。

📊 何时用,何时不用?

了解think参数的配置和用法后,核心在于如何选择。

场景建议设置原因
代码生成、复杂逻辑推理think: true模型会先规划、设计,生成的代码结构更清晰、健壮。
数学问题、数据分析think: true模型的思考轨迹包含了计算步骤,答案更可靠。
简单问答、闲聊、翻译think: false无需复杂推理,禁用思考可换取最快响应速度。
游戏NPC对话、实时交互think: false延迟是最重要的体验指标,快速响应比深度思考更重要。
模型调试、审计、教学think: true需要查看模型内部工作流程,以评估其决策路径。

🔗 与keep_alivestream的协同

  • keep_alivekeep_alive管理模型在显存中的驻留,而think决定模型如何回答。两者互不干扰,可以自由组合。
  • stream:二者常结合使用。think: true开启思考,stream: true则能实时打印思考过程,极大提升交互感。

在Ollama的API调用中,让模型进行内部思考但不输出内容,有两种方式:

  • 过滤响应数据:在客户端收到模型返回的完整数据后,选择只使用或显示 content 字段,主动忽略 thinking 字段。
  • 使用API参数组合("think": true + "hide_thinking": true:由服务端直接处理,API响应中只包含 content 字段,thinking 字段完全不存在。这是更直接、更高效的方式。

📊 核心参数与效果对比

下表展示了在非流式 ("stream": false) 场景下,不同 thinkhide_thinking 参数组合对响应内容的影响:

thinkhide_thinking响应内容说明
false(不生效)只有 content 字段模型不进行推理,响应最快。
truefalse (或不设置)包含 thinking 和 content 字段可以查看推理轨迹,适合调试。
truetrue只有 content 字段隐藏思考内容,模型内部推理,客户端仅显示最终答案。

🛠️ 示例:使用 hide_thinking 参数

该功能在Ollama的REST API、Python SDK和CLI中均可使用。

  • REST API (cURL) 示例
1curl http://localhost:11434/api/chat -d '{  
2  "model": "qwen3.5:4b-mine",  
3  "messages": [{"role": "user", "content": "什么是闭包?"}],  
4  "stream": false,  
5  "think": true,  
6  "hide_thinking": true  
7}'  

在此响应中,message 对象将只包含 content 字段。

  • Python SDK 示例
1from ollama import chat  
2response = chat(  
3    model='qwen3.5:4b-mine',  
4    messages=[{'role': 'user', 'content': '什么是闭包?'}],  
5    stream=False,  
6    options={'think': True, 'hide_thinking': True}  
7)  
8print(response['message']['content']) # 只打印最终答案  
  • 命令行 (CLI) 示例
1ollama run qwen3.5:4b-mine --think --hidethinking "什么是闭包?"  

⚠️ 注意事项

  • Modelfile 限制think 参数可在 Modelfile 中预设,但无法预设 hide_thinking。它必须在每次API调用时动态设置。
  • stream: true 配合:在流式模式下,此组合依然生效。模型不会发送 thinking 字段的数据块,客户端可直接处理 content 的流式数据,逻辑更简单。
  • 模型支持:此功能适用于支持思考功能的模型,如 Qwen 3 系列DeepSeek R1DeepSeek-v3.1

4. ollama+agent

  • 执行以下命令安装agent-mini,建议安装到全局python环境,这样可以方便启动agent-min,自动完成一些任务
1pip install agent-mini
2
  • 安装完成后,执行以下命令初始化配置信息
1agent-mini init
2

在这里插入图片描述

  • 执行以下命令启动agent-mini,通过对话可以让ollama模型调用工具自动执行一些任务,比如文件与目录操作、网络搜索(无法使用,duckduckgo国内不支持)
1agent-mini chat
2

在这里插入图片描述
在这里插入图片描述


【Ollama本地大模型】性能优化思考》 是转载文章,点击查看原文


相关推荐


JVM学习问题记录(2) jps命令无法识别
Engineer邓祥浩2026/4/5

现象: 命令行输入jps命令,提示"jps不是内部或外部命令,也不是可运行的程序" 背景: 学习JVM,测试jdk自带性能分析工具,需要用到jps工具 思路: 先怀疑自己 可能的原因 JDK安装有问题,无jps.exe环境变量设置问题,找不到jps.exe 动手: 去JAVA_HOME配置的查看,发现jps.exe在,用绝对路径执行是正常的查看环境变量,JAVA_HOME和path配置也是正确的,echo结果也是对的 这里就感觉很奇怪,而且试了下javac命令是正常的,那也不是路径配置问题,这里


微软官方Python网格覆盖与鼠标控制库
鹓于2026/3/28

微软官方:网格覆盖 / 鼠标指针控制 Python 库 微软官方网格覆盖(Grid Overlay)、移动鼠标指针的 Python 库,是: ✅ 官方库:windows-ui-automation / pywin32 + 微软 Mouse 原生 API 微软官方推荐的 Python 鼠标 / 网格覆盖控制方案: pywin32(Windows 系统 API,官方支持)windows.ui.input(UWP 官方鼠标 / 指针 API)Win32 API mouse_event / Se


Room 3.0:这次不是升级,是重来
Android_小雨2026/3/20

用了 Room 这么多年,大家都习惯了那套熟悉的注解和生成代码。但 Google 这次直接玩大的:新包名、只生成 Kotlin 代码、彻底抛弃 KAPT,还把同步的 DAO 方法一刀切了。所有数据库操作必须走协程或者响应式类型。 这不是 Google 闲着没事干,而是为了彻底拥抱 Kotlin Multiplatform(KMP)。Room 从出生就死死绑定 Android 的 SupportSQLite,现在想跨平台(Android、iOS、JVM、甚至 Web),只能大破大立,甩掉历史包袱


OpenClaw龙虾图鉴:16只AI Agent选型指南
默语佬2026/3/11

这里写目录标题 🦞 OpenClaw龙虾图鉴:16只AI Agent选型指南🎯 快速选型指南🥇 第一梯队:官方正统1️⃣ OpenClaw - 原生官网框架2️⃣ 🌙 KimiClaw - 云端大存储+Kimi K2.53️⃣ ⚡ MaxClaw - 成本杀手,10秒部署 🥈 第二梯队:极客专精4️⃣ 🔥 NullClaw - 678KB极致疯子5️⃣ 🦀 OpenFang - Rust生产级Agent OS6️⃣ 🐍 Nanobot - Python死忠粉7️⃣ 🤖


一键部署 Ceph 集群!Ansible 运维实战教程
遇见火星2026/3/3

一、Ceph 基础介绍 1.1 什么是Ceph Ceph是一款开源的分布式存储系统,具备高可用、高扩展、无单点故障的特性,可统一提供块存储(RBD)、对象存储(RGW)、文件存储(CephFS)三种存储服务,广泛应用于云计算、大数据等场景。 1.2 Ceph核心组件 组件 作用 MON(Monitor) 集群监视器,维护集群状态、管理认证、决策集群拓扑 OSD(Object Storage Daemon) 存储数据的核心进程,负责数据的存储、复制、恢复、均衡 MDS(Met


一个简单Demo彻底理解前后端怎么连的丨Figma + Supabase + Vercel
阿星AI工作室2026/2/23

哈喽,大家好! 我是阿星👋 很多小白编程学了三个月,全是AI做主UI,难以融入自己的设计理念。 甚至不了解前后端到底怎么连通的。 一旦代码出错了,可能和AI对话还要重新理解一遍概念。所以今天,我们通过一个简单的case,把一个完整前后端的核心链路全跑一遍👇🏻 让你能自己把控UI、把控数据库、把控前端、后端。 🗺️ 先看一眼全局流程 整件事分五步,每一步做完了才能进下一步: ① Figma 画页面 →  ② 定接口契约 →  ③ Supabase 建数据库→  ④ AI 帮你写连接代码


EasyExcel的使用
脸大是真的好~2026/2/15

需求1:能够导出1个Excel文件,能够导入一个Excel文件; 需求2:导出的文件,能实现第1行,第123列的合并单元格:也就是会写注册处理器;知道sheet和cell是什么; 需求3:能实现合并的单元格设置单元格宽高,背景颜色,内容居中,字体大小; 需求4:能控制从任意行开始写入,并让要输出的字段居中; 需求5:导出能实现从任意行开始读入; 导出Excel文件 <!-- EasyExcel 核心依赖 --> <dependency> <groupId>com.alibaba</gro


提示词工程入门-03
一诺滚雪球2026/2/6

前言 "写个代码" "帮我写个快速排序函数,用 Python 实现,要求时间复杂度 O(n log n),添加详细注释" 同样是让 AI 写代码,为什么第一个指令得到的是模糊的回复,而第二个能得到精确满足需求的代码? 这就是提示词工程(Prompt Engineering)的魔力。 好的 Prompt = 好的输出。今天我们来学习如何写出让 AI "秒懂"的提示词。 1. 什么是提示词工程 提示词(Prompt):你给大模型的输入指令 提示词工程(Prompt Engineering):设计和


耗时 20 天,AI 漫剧 APP 和 Web 全部开源, 已斩获 764 星!
苍何2026/1/28

这是苍何的第 474 篇原创! 大家好,我是消失了一段时间的苍何。 1 月 5 号,我写了篇文章,并开源了 AI 漫剧 APP,获得了很多朋友的喜欢。 然后在 GitHub 上一共获得了 764 星和 181 fork,让我有些吃惊。 说实话,这个项目远超我们的预期,甚至连歪果哥都来给我们提 issue,希望支持双语。 甚至还有老板来咨询问我卖不卖这个 APP,我说,大哥,咱都开源了,自己去整吧,不用付费,哈哈哈。 这或许就是开源的魅力吧。 但我发现,APP 还是不大方便,评论区也不少求


万字长文!搞懂机器学习中的概率图模型
aicoting2026/1/19

推荐直接网站在线阅读:aicoting.cn 概率图模型(Probabilistic Graphical Models, PGM)是一类结合概率论与图论的强大工具,用于描述多个随机变量之间的依赖关系。它通过图结构将复杂的联合概率分布分解为局部条件概率分布,使得对高维数据建模和推断变得可行且高效。 根据图的类型,PGM 可分为有向图模型(如贝叶斯网络)和无向图模型(如马尔可夫随机场)。贝叶斯网络利用有向无环图表示变量之间的因果关系,适合建模因果推断和序列数据;马尔可夫随机场则通过无向图捕捉变量之

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 XYZ博客