[深度学习] 大模型学习8上-推理部署框架llama.cpp与Ollama使用指北
随着大语言模型(Large Language Model,LLM)全面步入实际应用阶段,推理部署框架成为模型落地进程中必不可少的重要组成部分。不同框架在性能优化方式、部署复杂度以及适用场景上差异较大,在实际工程选型中往往需要先理解其基本定位与使用方式。关于模型推理部署基础概念的介绍,可参考:大模型学习6-模型量化与推理部署。

本文将对当前常见的LLM推理框架进行简要梳理,并聚焦于本地推理场景中极具代表性的llama.cpp与Ollama,介绍它们的核心原理及基础用法。另一广泛使用的生产级框架vLLM,作为面向高吞吐环境的推理方案,内容相对独立且较为丰富,将留待下一篇文章专门展开。
1 推理框架概述
常见LLM推理框架
近年来,随着LLM的持续发展,推理部署框架在模型落地中的作用日益重要。作为连接模型能力与实际应用场景的关键基础设施,其设计与性能直接影响部署效率与最终效果。目前,业界已涌现出多种具有代表性的推理框架,常见的包括以下几类:
-
llama.cpp
llama.cpp是一个由开源社区维护的轻量级LLM推理框架,采用纯C/C++实现,并结合多种量化技术,具有很强的硬件兼容性和较低的资源占用。它支持CPU与GPU混合推理,尤其适合边缘设备、普通电脑,以及需要离线运行模型的个人开发者。 -
Ollama
Ollama是一个面向本地部署的轻量级推理平台,主要在llama.cpp推理能力之上提供统一的运行与管理接口,致力于降低LLM本地运行的门槛。它支持一键下载、运行和管理多种主流模型,适合个人开发者、研究人员以及本地快速验证场景。 -
vLLM
vLLM是由加州大学伯克利分校团队开发的开源推理框架,主要解决LLM服务中的显存占用和吞吐量问题。其核心创新包括PagedAttention(分页注意力)和Continuous Batching(连续批处理):前者借鉴操作系统的分页机制提升显存利用率,后者通过动态调度请求批次显著提升推理效率。vLLM目前已成为生产环境中应用较广的推理引擎之一。 -
SGLang
SGLang由加州大学伯克利分校团队开发,是一款专注于提升推理吞吐量、降低响应延迟的推理引擎,同时提供更灵活的编程接口。其核心技术RadixAttention通过高效的前缀缓存机制,大幅提升共享上下文场景下的推理效率,在结构化输出和复杂工作流等高并发任务中表现突出。 -
TensorRT-LLM
TensorRT-LLM是NVIDIA推出的官方推理引擎,基于TensorRT深度优化,专为LLM设计。它通过算子融合、模型量化和分布式推理等技术,能够充分释放NVIDIA GPU性能,是追求高吞吐和低延迟场景的重要选择。 -
XInference
XInference是一款高性能分布式推理框架,专注于简化各类AI模型的部署、运行和集成。它支持多种模型类型和异构硬件,具备较强的扩展能力,适合大规模分布式部署场景。 -
LightLLM
LightLLM是一个基于Python的轻量级LLM推理与服务框架,以架构简洁、扩展性强和推理速度快为特点。其模块化设计提供了较高的定制灵活性,适合需要深入定制推理流程的开发者。
学习路线建议
上述框架覆盖从本地推理到分布式服务的多种技术路线,但全部掌握并不现实。如果希望以最低学习成本入门LLM推理部署并理解核心机制,通常只需沿一条主线学习即可。
本地推理阶段可选择llama.cpp或Ollama,用于理解模型在单机环境中的加载与运行方式,建立对模型如何运行的基础认知。其中,llama.cpp偏底层实现,强调推理细节与资源控制;Ollama在其基础上做了封装,使用更简单直观。二者本质属于同一层级工具,选择其一即可。完成本地推理的理解后,再学习vLLM,可进一步掌握推理服务化的核心机制,如并发请求处理与显存优化,从而形成从单机运行到多用户服务的完整认知闭环。

其余框架更多面向特定工程优化或场景需求,不影响对核心原理的理解。详细的框架介绍可参阅: 一文梳理主流大模型推理部署框架。
基于这一路径,本文将重点介绍llama.cpp和Ollama的核心使用方式,vLLM将在下一篇文章中结合服务化部署进行讲解。
2 llama.cpp快速入门
本部分将展示如何使用llama.cpp在本地机器上运行模型,默认在Linux环境下使用C++编译器进行本地编译,Windows用户请参考llama.cpp仓库的说明:llama.cpp。
2.1 部署准备
2.1.1 环境准备
本地编译需要安装C++编译器和构建工具。可在Linux终端中输入以下命令检查是否已安装:
cc --version
cmake --version
若已安装,终端将显示配置信息,即可直接使用。若出现错误提示,则需先安装相关工具,Ubuntu下的安装命令如下:
sudo apt install build-essential gcc cmake
完成环境准备后,先克隆仓库并进入目录:
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp
然后使用CMake进行编译。第一条命令会检查本地环境,确定要包含的后端和功能;第二条命令实际执行编译(不加-j 16也可以正常编译,加上则可利用CPU多核并行加速),使用纯CPU编译命令如下:
cmake -B build
cmake --build build --config Release -j 16
如果需要启用NVIDIA GPU加速,可以在配置阶段添加CUDA选项:
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release -j 16
编译完成后,运行程序位于llama.cpp仓库的build/bin/目录中。
2.1.2 模型准备
使用llama.cpp进行本地推理,本质上遵循一个相对固定的流程:首先准备运行环境与可执行程序,其次获取GGUF格式的模型文件,最后根据需求选择运行方式进行推理。其中,llama.cpp提供llama-cli用于本地命令行交互,同时提供llama-server用于服务化部署与API调用。
llama.cpp仅支持GGUF格式模型,因此在使用前必须确认模型格式是否符合要求。GGUF是llama.cpp定义的统一模型格式,用于以轻量化方式将模型权重、配置以及tokenizer等信息打包为单一文件。

如果当前模型已经是GGUF格式,可以直接使用;如果来源是Hugging Face(如safetensors或bin格式),则需通过llama.cpp仓库提供的转换工具完成格式转换:
python convert_hf_to_gguf.py
可在Hugging Face、ModelScope或Unsloth搜索开源模型的GGUF版本。虽然Unsloth并非官方模型发布方,但其提供的量化GGUF模型在实际使用中兼容性较好、量化效果好,因此较为常见。关于Unsloth框架的进一步介绍,可阅读:大模型学习5-高效微调框架Unsloth使用指北。
以Unsloth发布的Qwen系列为例,可通过搜索以.GGUF结尾的仓库名查找所需模型。如文件名Qwen3.5-0.8B-Q4_K_M.gguf中,0.8B表示模型参数规模约为8亿(适合入门级硬件),Q4_K_M表示4位量化中的Medium级别,在模型体积与输出质量之间取得平衡,是较为常用的量化选择。该模型整体体积约500–600MB,因此即使在普通CPU环境下也可以较为流畅地运行。
可以通过ModelScope下载GGUF模型至llama.cpp根目录下的model文件夹:
modelscope download --model unsloth/Qwen3.5-0.8B-GGUF Qwen3.5-0.8B-Q4_K_M.gguf --local_dir ./model
上述命令使用的是unsloth提供的Q4_K_M量化版本。量化技术让LLM能够在普通电脑上运行,在尽量保持精度的前提下显著降低显存占用。不同量化版本在精度与资源消耗上有所取舍,常见版本如下:
| 量化版本 | 精度损失 | 适用场景 |
|---|---|---|
| UD-Q4_K_XL | 极小 | 精度损失极小,整体平衡较好 |
| Q4_K_M | 小 | 经典4-bit量化,兼容性最好 |
| UD-Q2_K_XL | 可接受 | 极致节省显存,适合低显存设备 |
| Q8_0 | 几乎无 | 精度最高,资源消耗较高 |
2.2 llama-cli使用
llama-cli是llama.cpp提供的命令行交互工具,用于直接与LLM进行推理与对话。在完成llama.cpp编译后,可在其构建目录中直接调用llama-cli运行模型。若想快速了解基本用法,可参考llama.cpp使用指南和Qwen3.5本地部署指南。

2.2.1 参数说明
从整体设计来看,llama-cli的参数体系可以划分为三大类:模型与上下文控制、生成策略控制、会话与模板系统。这一划分对应了模型运行的三个核心阶段:加载什么模型、如何生成内容、以及如何组织对话结构。
1️⃣模型与上下文控制
这一类参数决定模型的运行资源分配与上下文能力,是影响性能与显存占用的核心部分。
-m
-hf
-ngl
-t
-c
-b
--no-context-shift
| 参数 | 说明 |
|---|---|
-m |
字符串,本地GGUF格式模型文件的路径 |
-hf |
字符串,Hugging Face仓库名称 |
-ngl |
整数,加载到GPU的模型层数。值越大,GPU占用越高、推理越快;设为0表示纯CPU运行 |
-t |
整数,CPU线程数。值越大,CPU推理越快;默认为物理核心数 |
-c |
整数,上下文窗口长度。值越大,模型能记住的对话越多,但显存消耗也越大 |
-b |
整数,单次批处理的token数量。值越大,吞吐量越高,但显存占用也越大 |
--no-context-shift |
布尔标志,禁用上下文滚动移位,超限时直接截断 |
📌实践建议:显存不足时优先降低-c或-b,通常比降低-ngl更稳定。
2️⃣生成控制(采样策略)
这一组参数直接影响输出质量、随机性与稳定性,本质上控制模型如何说话。
-n
--temp
--top-k
--top-p
--repeat-penalty
--presence-penalty
--frequency-penalty
| 参数 | 说明 |
|---|---|
-n |
整数,最多生成的token数量。值越大,回复越长 |
--temp |
浮点数(0~2),控制生成的随机性。值越大,输出越具创造性;值越小,输出越保守确定 |
--top-k |
整数,仅从概率最高的K个token中采样。值越小,输出越集中(1等价于贪婪采样) |
--top-p |
浮点数(0~1),仅从累计概率达到P的token中采样。值越小,截断越明显 |
--repeat-penalty |
浮点数,值越大,越能抑制重复内容 |
--presence-penalty |
浮点数,值越大,越鼓励模型讨论新话题 |
--frequency-penalty |
浮点数,值越大,越能减少相同词的反复出现 |
常见经验组合:
- 稳定输出:
temp=0.2~0.5 - 平衡模式:
top-k=20~50,top-p=0.9~0.95 - 创意模式:提高
temp并放宽top-p
3️⃣会话与模板系统
这一部分决定模型如何理解对话格式与上下文结构,本质上是在规定输入内容的组织方式,构造成模型可解析的指令序列。
-p "prompt"
--system-prompt ""
--reverse-prompt ""
--jinja
--chat-template-file
--reasoning off
--color
--log-disable
| 参数 | 说明 |
|---|---|
-p |
字符串,初始提示词 |
--system-prompt |
字符串,设置系统级前置指令 |
--reverse-prompt |
字符串,遇到该内容时停止生成,用于控制多轮对话 |
--jinja |
布尔标志,启用Jinja聊天模板 |
--chat-template-file |
字符串,自定义聊天模板文件的路径 |
--reasoning off |
最新版关闭模型的思考输出。旧版需用--chat-template-kwargs '{"enable_thinking": false}' --jinja |
--color |
布尔标志,启用彩色输出 |
--log-disable |
布尔标志,关闭日志输出 |
其中--jinja对于LLM尤为重要,例如Qwen、Llama3等都依赖结构化的聊天模板chat template,否则容易出现格式错乱。
2.2.2 推理与交互
下面通过一系列示例,逐步演示如何使用llama-cli。
1️⃣简单推理测试
最基础用法是直接输入prompt,然后生成回答结果:
./build/bin/llama-cli -m ./model/Qwen3.5-0.8B-Q4_K_M.gguf -p "hello world" -n 100
-m:指定本地模型文件-p:初始提示词-n 100:最多生成100个token
直接运行上述命令会进入交互界面,按Ctrl+C退出。
模型加载方式有两种:
- 使用
-hf Qwen/model表示从Hugging Face Hub获取模型文件 - 使用
-m xxx.gguf表示从本地路径加载模型文件
实际使用过程中若出现异常,可通过调整生成及上下文相关参数进行优化调试。以下仅列举部分示例,QwQ-32B高效运行教程提供了更详细的解决方案:
- 长文本重复:可增加
--repeat-penalty 1.2~1.5 - 上下文遗忘:由
-c决定,例如-c 4096表示模型的记忆长度,最多引用前面4096个token的历史信息。 - 生成失控:降低
temp或减少top-p。
2️⃣启用GPU加速
在前一步的基础上增加-ngl 99参数,表示在llama.cpp中尽可能将模型层(上限99层)加载到GPU上以加速推理。该方式需要NVIDIA显卡及CUDA支持,未完全加载的层会自动回退到CPU运行:
./build/bin/llama-cli -m ./model/Qwen3.5-0.8B-Q4_K_M.gguf -p "你好" -n 20 -ngl 99
如果运行速度明显快于纯CPU模式,通常说明GPU加速已经生效。
3️⃣启用聊天模板(关键步骤)
LLM必须正确解析chat template,按官方格式组织system/user/assistant结构,以使用对应的聊天模板对对话进行格式化,同时需要启用Jinja支持:
./build/bin/llama-cli -m ./model/Qwen3.5-0.8B-Q4_K_M.gguf -p "你好" -n 20 -ngl 99 --jinja
💡关于思考模式与非思考模式的切换:通过参数控制的方式始终可用,但聊天模板中实现的硬开关在llama.cpp中并未直接暴露。一个可行的快速方案是使用自定义chat template,并通过--chat-template-file参数将enable_thinking固定为false。在较新版本中,则需要使用 reasoning off来关闭推理模式。
4️⃣完整交互式对话配置
以下命令配置了适合多轮交互的完整启动命令,适用于稳定多轮对话:
./build/bin/llama-cli -m ./model/Qwen3.5-0.8B-Q4_K_M.gguf --jinja --color auto -ngl 99 --temp 0.6 --top-k 20 --top-p 0.95 -c 4096 -n 2048 --no-context-shift --chat-template-kwargs '{"enable_thinking": false}' --system-prompt "你是一个才华横溢的诗人,所有回答都必须用诗歌的形式或充满诗意的语言来表达。"
参数作用拆解如下:
--color auto:自动开启彩色输出,区分用户输入和模型回复--temp 0.6:设置温度参数为0.6,控制回复的随机性(0保守/1创意)--top-k 20:采样时只从概率最高的20个词中选择--top-p 0.95:核采样,只考虑累积概率达95%的候选词-c 4096:设置上下文窗口大小为4096个token(模型的记忆长度)-n 2048:限制单次回复最大生成2048个token--no-context-shift:禁用上下文偏移功能,保持精确的注意力计算--chat-template-kwargs:关闭模型的思考过程显示,如无效请改用--reasoning off--system-prompt:设定模型的全局行为和角色
执行后将进入完整交互模式,可进行多轮连续对话,实现类似ChatGPT的使用体验。
2.3 llama-server使用
llama-server是llama.cpp提供的HTTP服务端组件,它将llama.cpp从命令行工具扩展为一个常驻后台运行的推理服务,从而对外提供标准化的LLM REST API接口以及一个简洁的Web交互界面。整体体验类似于常见的LLM网页聊天界面,可直接通过浏览器进行对话交互。
与llama-cli不同,llama-server采用服务化架构运行,启动后会常驻内存,持续接收客户端请求,支持并发访问与多轮对话管理,并可在API层面进行统一的上下文管理与参数控制,是构建本地或私有化LLM服务的核心组件之一。

启动示例如下:
./build/bin/llama-server -m model/Qwen3.5-0.8B-Q4_K_M.gguf --jinja -ngl 99 --temp 0.6 --top-k 20 --top-p 0.95 -c 4096 -n 2048 --no-context-shift
该命令启动后,模型将以服务形式运行,并加载指定GGUF模型,同时启用Jinja聊天模板与标准采样策略配置。
启动成功后,服务默认监听以下地址:
- Web界面:
http://localhost:8080/ - OpenAI兼容API:
http://localhost:8080/v1/
其中:
- Web界面用于可视化对话测试与调试
/v1/接口提供与OpenAI API风格兼容的调用方式,便于接入现有应用或框架
对于端口与网络配置,可通过以下参数调整服务监听行为:
--host:绑定IP地址(如0.0.0.0用于局域网访问)--port:指定端口号
例如,将服务绑定到所有网络接口(0.0.0.0)并监听8081端口,使其可在局域网或远程设备上访问:
--host 0.0.0.0 --port 8081
3 Ollama快速入门
3.1 环境准备
Ollama是基于llama.cpp构建的LLM推理框架,集成了推理、量化与硬件加速能力。用户通过简单命令即可下载、运行和管理模型,支持文本生成、翻译、代码编写等任务。
相较于侧重底层推理与硬件优化的llama.cpp,Ollama更强调开箱即用,适用于快速原型开发、本地AI助手和轻量级部署。支持Windows、Linux、macOS和Docker,无GPU也可运行模型,有GPU时推理性能更高。Ollama功能丰富,本节仅介绍基础用法,更多内容请参考官方文档:Ollama官方文档。
官方下载地址:Ollama下载。进入官方下载页面后,可根据所使用的操作系统选择对应安装包。下面以Linux环境为例说明安装流程。在需要长期运行模型或进行开发测试时,Linux通常是更常见的部署环境。
在终端中执行以下安装脚本:
curl -fsSL https://ollama.com/install.sh | bash
部分环境可能需要追加sudo权限。如果下载速度较慢,可参考这篇文章中的方法进行优化:解决Ollama官方下载过慢的问题。
安装完成后,可通过以下命令检查版本信息:
ollama --version
若成功输出版本号,则表明安装已完成。
通常情况下,安装脚本会自动完成Ollama服务注册并启动。若需要手动管理服务,可使用:
sudo systemctl status ollama # 查看服务状态
sudo systemctl start ollama # 启动服务
sudo systemctl enable ollama # 设置开机自启

3.2 Ollama基本使用
3.2.1 核心命令
Ollama能够实现开箱即用,核心原因在于其内置官方模型仓库:Ollama模型库。所有模型均统一托管于远程仓库中。当运行某个模型时,系统会自动检查本地是否存在对应文件;若不存在,则自动下载并在完成后立即加载运行。
这些模型大多来自开源生态,例如Meta的Llama系列、Mistral AI的Mistral系列,以及阿里云推出的Qwen系列等。Ollama会统一完成GGUF格式转换、默认推理参数配置以及聊天模板适配,从而实现直接运行。Ollama本身并不负责模型训练,而是作为模型分发与运行平台存在。关于Ollama的基本入门用法,可参考Ollama教程。
为实现快速调用,Ollama提供了一套完整的命令行工具,用于本地模型的下载、运行与管理,其基本格式如下:
ollama [args]
可以通过以下命令查看Ollama支持的所有指令:
ollama --help
在实际使用中,常见操作主要包括模型拉取、运行、查看以及删除等。最核心的命令是:
ollama run
该命令首次执行时会自动下载模型,随后进入交互式对话模式。在此模式下,可以直接输入问题与模型对话,结束时输入/bye或按Ctrl+D即可退出。因此,大多数场景下只需使用run这一个命令即可完成从下载到运行的完整流程。
例如:
ollama run qwen3.5:0.8b
如果只需要执行一次推理,而不进入交互模式,可以使用:
ollama generate ""
也可以从文件中读取prompt,将其作为单条用户输入发送给模型完成推理,并在输出结果后立即结束进程。
ollama run < input.txt
3.2.2 交互模式常用命令
进入交互界面后,操作对象已经不再是命令行,而是模型会话本身。此时可使用以下快捷指令:
| 分类 | 命令 | 示例 | 功能说明 |
|---|---|---|---|
| 参数设置 | /set parameter ... |
/set parameter top_p 0.5 |
设置模型参数 |
| 参数设置 | /set system |
/set system 你是专家 |
设置系统提示词 |
| 参数设置 | /set format json |
/set format json |
强制JSON输出 |
| 参数设置 | /set noformat |
/set noformat |
关闭格式限制 |
| 参数设置 | /set verbose |
/set verbose |
显示统计信息 |
| 参数设置 | /set quiet |
/set quiet |
关闭统计信息 |
| 参数设置 | /set think |
/set think |
显示思考过程 |
| 参数设置 | /set nothink |
/set nothink |
隐藏思考过程 |
| 信息查看 | /show info |
/show info |
查看模型详情 |
| 信息查看 | /show modelfile |
/show modelfile |
查看模型配置 |
| 信息查看 | /show parameters |
/show parameters |
查看当前参数 |
| 信息查看 | /show system |
/show system |
查看系统提示词 |
| 信息查看 | /show template |
/show template |
查看Prompt模板 |
| 会话管理 | /clear |
/clear |
清空上下文 |
| 会话管理 | /bye |
/bye |
退出会话 |
| 帮助 | /help |
/help |
显示帮助信息 |
除了直接运行模型,Ollama还可以查看模型的元数据和参数信息:
ollama show
查看当前正在运行的模型及其状态:
ollama ps
如果希望只下载模型而不立即运行,可以使用:
ollama pull
下载完成后,可通过以下命令查看本地已安装的模型:
ollama list
当模型不再需要时,可以使用以下命令将其删除以释放磁盘空间:
ollama rm
关于本地存储,模型默认保存在以下目录中:
cd ~/.ollama/models
其目录结构通常如下:
models/
├── blobs/
├── manifests/
Ollama并不会直接保存完整的.gguf文件,而是将模型拆分为多个基于内容寻址的Blob数据块。这种设计能够支持断点续传、数据去重以及完整性校验,并在运行时根据manifests中的索引动态组装模型。

3.2.3 Python SDK调用模型
Ollama提供了Python SDK,可直接在本地调用模型实现文本生成、流式输出以及多轮对话。安装SDK并拉取模型:
pip install ollama
ollama pull qwen3.5:0.8b
单轮对话
最基础的用法是使用generate接口进行单轮文本生成,适用于简单问答或文本补全场景:
import ollama
response = ollama.generate(
model="qwen3.5:0.8b",
prompt="你能做什么?"
)
print(response["response"])
若需要实时输出生成内容,可以启用流式模式。流式模式会逐块返回生成结果,更适合终端交互或Web前端展示场景:
from ollama import chat
stream = chat(
model="qwen3.5:0.8b",
messages=[{"role": "user", "content": "写一个Python冒泡代码"}],
stream=True
)
for chunk in stream:
print(chunk["message"]["content"], end="", flush=True)
多轮对话
对于需要上下文记忆的场景,可通过messages维护完整历史记录:
from ollama import chat
# 初始化对话历史(可包含系统设定)
history = [
{"role": "system", "content": "你是一个编程助手,请用中文回答"}
]
# 第一轮:用户提问
history.append({"role": "user", "content": "推荐一本适合初学Python编程的书"})
response = chat(model="qwen3.5:0.8b", messages=history, think=False)
print(response.message.content)
# 将模型的回复加入历史
history.append({"role": "assistant", "content": response.message.content})
# 第二轮:基于历史继续提问
history.append({"role": "user", "content": "这本书大概需要多久能学完?"})
response = chat(model="qwen3.5:0.8b", messages=history, think=False)
print(response.message.content)
chat接口本身不保存上下文,每次请求都必须传入完整history。开发者需要自行维护对话列表,每轮把用户输入和模型回复追加进去,再在下一轮整体传回。通过列表管理对话,结构清晰直观,支持system角色设定,也便于调试和排查问题。
3.3 Ollama自定义使用
3.3.1 Modelfile配置
基础配置
在掌握模型下载与运行之后,可进一步通过Modelfile机制构建自定义模型,实现对模型行为、输出格式以及推理方式的长期控制。与一次性prompt不同,Modelfile会在模型运行阶段自动注入配置,因此更适合构建稳定、可复用的模型能力。关于Modelfile的详细介绍,见官方文档:Modelfile官方文档。

首先创建一个Modelfile:
touch Modelfile
然后在文件中写入基础配置,例如:
FROM qwen3.5:0.8b
SYSTEM "回答必须以[分析]/[执行]开头,并用步骤1、步骤2输出;先结果;禁止废话"
其中:
FROM用于指定基础模型;SYSTEM用于定义长期生效的系统规则。
完成基础配置后,可以直接构建模型:
ollama create my-model -f ./Modelfile
命令执行完成后,会生成一个名为my-model的自定义模型。此时可以直接运行:
ollama run my-model
输入任意问题,模型输出会自动遵循该配置规则。
常用Modelfile指令如下:
FROM:指定基础模型或GGUF文件SYSTEM:定义系统提示词TEMPLATE:定义Prompt模板PARAMETER:设置推理参数ADAPTER:指定LoRA适配器MESSAGE:提供Few-shot示例REQUIRES:指定最低Ollama版本LICENSE:声明许可证
高级配置
除基础系统提示词外,还可以进一步配置推理参数与输出结构,但是修改后需要重新构建模型并再次运行:
FROM qwen3.5:0.8b
SYSTEM """
你是一个专业顾问,回答必须严格遵守:
1. 只输出最终答案
2. 不展示任何思考、推理、分析过程
3. 禁止输出 、 或中间步骤
4. 内容直接、简洁、有结论
5. 总字数不超过150字
固定输出格式:
结论:一句话核心答案
要点:
- 要点1
- 要点2
- 要点3
潜在问题:一句话最大潜在问题
总结:不超过两行
"""
PARAMETER temperature 0.6
PARAMETER top_p 0.8
PARAMETER top_k 20
PARAMETER num_ctx 4096
PARAMETER repeat_penalty 1.5
PARAMETER num_predict 1000
TEMPLATE """{{ if .System }}{{ .System }}
{{ end }}用户:{{ .Prompt }}
助手:"""
Modelfile并非简单固化prompt,而是将零散的Prompt Engineering转化为结构化配置体系,这些部分共同构成完整的模型行为控制机制:
SYSTEM定义行为规则;PARAMETER控制生成特性;TEMPLATE决定输入输出结构;ADAPTER用于扩展模型能力。
3.3.2 导入自有模型
如果希望在Ollama中使用已有模型文件,需要注意:Ollama不支持直接运行任意格式的模型文件,模型必须为GGUF格式。如果使用的是.pt、.bin或safetensors格式的文件,需要先转换为GGUF格式,可以使用llama.cpp提供的convert.py或convert_hf_to_gguf.py工具进行转换。
准备好GGUF模型文件后,在同一目录下创建Modelfile,声明模型来源,同时需要正确配置TEMPLATE。TEMPLATE用于定义用户、系统和助手消息的拼接方式,从而让模型能够按照训练时的对话格式正确理解输入。
以下模板适用于Qwen3.5系列模型,完整模板说明可参考Qwen3.5 Ollama完整ChatML模板:
FROM ./mymodel.gguf
TEMPLATE """
{{- if .System }}
<|im_start|>system
{{ .System }}
<|im_end|>
{{- end }}
{{- range .Messages }}
<|im_start|>{{ .Role }}
{{ .Content }}
<|im_end|>
{{- end }}
<|im_start|>assistant
"""
PARAMETER stop "<|im_end|>"
PARAMETER stop "<|im_start|>"
PARAMETER temperature 0.7
随后执行:
ollama create mymodel -f Modelfile
命令执行成功后模型即完成注册,注册后使用ollama run mymodel运行模型,通过ollama list查看已注册模型列表。若输出类似mymodel xxx xxxGB,说明本地模型已成功接入并可正常使用。
3.3.3 Ollama API
Ollama核心是一个本地常驻服务,本质为HTTP API Server,默认监听地址为127.0.0.1:11434。所有模型加载、文本生成、上下文管理以及对话请求,均通过该服务统一处理。在使用ollama run运行模型时,Ollama会自动检查服务状态。若服务未启动,则自动在后台拉起服务进程,因此通常无需手动管理。
在服务器部署、脚本调用或独立API服务场景下,也可以手动启动服务:
ollama serve
服务启动后,还可通过HTTP API进行模型调用。
默认API地址:
http://localhost:11434/api
常用接口如下:
/api/generate:文本生成/api/chat:对话接口(支持流式返回)/api/pull:拉取模型/api/tags:查询本地模型列表
调用示例如下:
curl http://localhost:11434/api/generate -d '{"model":"qwen3.5:0.8b","prompt":"hello"}'
3.3.4 Ollama聊天界面
Ollama负责本地模型的下载、管理和运行,支持命令行或API调用,但默认不提供网页聊天界面。如需浏览器中的对话体验,可以搭配OpenWebUI使用。OpenWebUI负责提供聊天窗口、历史记录、模型选择等界面功能,底层的模型推理仍然由Ollama完成。
整体关系可以理解为:
浏览器
↓
OpenWebUI(聊天界面)
↓
Ollama API( http://localhost:11434 )
↓
本地LLM

Ollama环境准备
在使用OpenWebUI之前,需要先确保Ollama服务已启动:
ollama serve
Ollama默认监听地址为:
http://localhost:11434
可通过以下命令检查Ollama是否正常运行:
curl http://localhost:11434/api/tags
若能返回模型列表,说明Ollama服务已启动成功。
安装并启动OpenWebUI
可通过pip安装OpenWebUI:
pip install open-webui
安装完成后启动服务:
open-webui serve
启动成功后,在浏览器中访问:
http://localhost:8080
首次进入OpenWebUI时,需要创建一个本地管理员账户,该账户仅用于当前OpenWebUI系统的登录和管理。
连接Ollama
通常情况下,若Ollama和OpenWebUI运行在同一台电脑上,OpenWebUI会自动识别本机的Ollama服务。如果OpenWebUI没有自动识别,可以进入OpenWebUI的设置页面,手动填写Ollama地址:
http://localhost:11434
配置完成后,OpenWebUI即可调用Ollama中的本地模型。
在OpenWebUI中选择模型
进入OpenWebUI聊天页面后,可以在页面顶部或输入框附近找到模型选择框。如果Ollama本地已下载多个模型,例如:
qwen3.5:0.8b
llama3.1
mistral
这些模型会出现在OpenWebUI的模型列表中。使用时只需选择对应模型,然后输入问题即可。如果想更换模型,无需重启Ollama或OpenWebUI,直接在聊天页面的模型选择框中切换即可继续提问。如果某个模型不再使用,可以通过Ollama的rm命令删除。删除后刷新OpenWebUI页面,模型列表也会随之更新。
4 参考
原文地址: https://www.cveoy.top/t/topic/qGGa 著作权归作者所有。请勿转载和采集!