
1. 为什么这三款工具总被放在一起比较——它们根本不是同一类东西刚接触本地大模型部署的朋友常会困惑Ollama、llama.cpp、vLLM名字里都带“LLaMA”是不是三个差不多的“运行器”点开教程发现有人用 Ollama 一键拉起 Qwen3有人在 Windows 上编译 llama.cpp 跑通 Gemma4还有人非得搭 Docker vLLM 才敢接生产 API。这种割裂感不是你的问题而是这三者在技术栈中扮演的角色完全不同——把它们并列比较本身就容易陷入“苹果vs螺丝刀vs菜刀”的误区。Ollama 是一个面向终端用户的模型分发与运行环境它像 macOS 的 App Store Homebrew Terminal 的混合体你敲ollama run qwen3:latest它自动下载模型、选择最优后端可能是 llama.cpp也可能是自己的 runtime、启动 HTTP 服务、管理模型生命周期。它的核心价值是“让非工程师也能在笔记本上跑起大模型”而不是追求极致吞吐或最低延迟。llama.cpp 则是一个纯 CPU/GPU 推理引擎库本质是 C/C 写成的、高度优化的 Transformer 推理实现。它不提供 HTTP 服务不管理模型下载甚至不自带 tokenizer——你得自己加载 GGUF 模型文件、预处理输入、调用llama_eval()、后处理输出。它存在的唯一目的就是用最少的内存、最高的效率在 ARM Mac、树莓派、Windows 笔记本等资源受限设备上完成单次推理。它的 benchmark 表现永远只和“单请求延迟”“内存占用”“量化支持度”挂钩。vLLM 是一个面向高并发服务场景的推理服务器框架定位接近云厂商的 SageMaker Endpoint 或 HuggingFace Inference Endpoints。它不关心你从哪下载模型也不打包模型分发逻辑它专注解决“如何让 100 个用户同时提问时GPU 显存不爆、首 token 延迟稳定、吞吐翻倍”。它的核心技术是 PagedAttention——把 KV Cache 当作虚拟内存来管理让不同请求的缓存块可以非连续存放从而突破传统 attention 实现中显存必须连续分配的瓶颈。这意味着vLLM 的价值只有在 QPS 5、并发连接数 20 的场景下才会真正凸显。提示如果你正在为个人知识库搭建一个本地 Chat UI目标是“今天下午就能用上”Ollama 是最短路径如果你在树莓派 5 上部署一个离线翻译小工具llama.cpp 是唯一现实选择如果你要给公司内部的 200 人研发团队提供稳定的 Code LLM API并要求 99.9% 的请求在 800ms 内返回首 tokenvLLM 是绕不开的基础设施。选错工具不是性能差一点而是根本走不通。这三者的重叠区其实非常窄都支持 LLaMA 架构模型的推理都提供 OpenAI 兼容 APIOllama 和 vLLM 原生支持llama.cpp 需配合 llama-server。但它们的“默认用户画像”截然不同Ollama 的用户可能是产品经理、学生、独立开发者llama.cpp 的用户是嵌入式工程师、边缘计算研究员、对内存锱铢必较的极客vLLM 的用户是 MLOps 工程师、后端架构师、SaaS 产品技术负责人。理解这个根本差异比记住每个参数的含义重要十倍。我第一次在客户现场踩坑就是把 vLLM 当作 Ollama 用客户只要求“让销售同事能问一下产品文档”我二话不说上了 vLLM Docker Kubernetes结果部署花了两天调试冷启动超时又花了一天而销售同事真正需要的只是双击一个图标就能打开的桌面应用。后来换成 Ollama Open WebUI从安装到交付只用了 47 分钟。这个教训让我明白工具没有优劣只有是否匹配真实场景。接下来的分析我会完全基于这个前提展开——不谈抽象的“谁更快”只谈“在什么条件下谁能让事情真正落地”。2. Ollama不是“轻量级 vLLM”而是重新定义了本地模型的使用门槛Ollama 的核心设计哲学是把模型运行这件事从“系统工程”降维成“应用操作”。它不暴露 CUDA 版本、不让你纠结 quantization level、不强制你写 Dockerfile。它的存在让“本地大模型”第一次具备了和 VS Code、Obsidian 一样的用户体验下载安装包 → 双击运行 → 终端输入命令 → 立刻获得响应。这种体验的代价是它必须在后台做大量“看不见”的决策。Ollama 的工作流可以拆解为四个隐式阶段第一阶段是模型解析与路由。当你执行ollama run qwen3:14bOllama 并不会直接去 Hugging Face 下载原始 PyTorch 权重。它首先查询内置的Modelfileregistry找到该 tag 对应的 GGUF 文件 URL通常托管在 cloudflare-ipfs.com 或国内镜像源然后根据你的硬件自动选择最优量化版本。例如在 M2 Ultra 上它可能拉取qwen3:14b-q6_k在 RTX 4090 上它可能拉取qwen3:14b-q8_0而在无 GPU 的旧笔记本上它会回退到qwen3:14b-q4_k_m。这个决策过程完全透明用户只需关心“我要什么模型”无需了解“GGUF 是什么”“K-quantization 怎么选”。第二阶段是后端动态绑定。Ollama 的 runtime 是模块化的它内置了 llama.cpp 的精简版用于 CPU/Apple Silicon、自己的 CUDA 加速 runtime用于 NVIDIA GPU、以及实验性的 Metal backend用于 Apple GPU。当你首次运行模型时Ollama 会检测硬件环境自动选择后端。比如在 Windows 上若检测到 CUDA 12.x 环境它会启用 CUDA 后端若只有 CPU则无缝切换到 llama.cpp 后端。这种“后端即服务”的设计让用户彻底摆脱了“llama.cpp 编译失败”“CUDA 版本不匹配”这类经典噩梦。第三阶段是服务抽象层。Ollama 默认启动一个监听127.0.0.1:11434的 HTTP 服务提供完全兼容 OpenAI 的/v1/chat/completions接口。这意味着任何支持 OpenAI API 的前端——从开源的 Open WebUI、AnythingLLM到商业软件如 Dify、Langflow——都可以零配置接入。更关键的是Ollama 的 API 层做了大量实用优化它原生支持 streamingSSE支持systemrole支持tools调用从 0.3.0 版本起甚至支持自定义 stop tokens。这些功能在原始 llama.cpp 的llama-server中需要手动 patch而在 Ollama 中是开箱即用。第四阶段是模型生命周期管理。Ollama 内置了一个轻量级的模型仓库~/.ollama/models所有下载的模型都以分层 tar 包形式存储支持ollama list查看、ollama rm清理、ollama cp复制。它还提供了ollama create命令允许用户基于 Modelfile 定制模型行为——比如固定 temperature、注入 system prompt、挂载外部文件作为 context。这种能力让 Ollama 超越了单纯的“运行器”成为一个可编程的模型封装平台。注意Ollama 的“易用性”有明确边界。它不适合需要精细控制推理过程的场景。例如你无法在 Ollama 中单独调整 RoPE 的 theta 值无法禁用 flash attention 强制使用 vanilla attention也无法在生成中途插入自定义 callback。这些需求恰恰是 llama.cpp 和 vLLM 的主战场。Ollama 的设计信条是“95% 的用户不需要这些控制权提供它们只会增加认知负担。”实操中我遇到最多的“Ollama 陷阱”是网络问题。国内用户常抱怨ollama pull卡在 99%这是因为 Ollama 默认从官方 registryregistry.ollama.ai拉取元数据而该域名在国内解析缓慢。解决方案不是换镜像源Ollama 不支持全局镜像配置而是改用OLLAMA_HOST环境变量指向国内代理服务或者直接下载 GGUF 文件后用ollama create手动注册。例如从 OpenDataLab 下载qwen3-embedding-0.6b.Q4_K_M.gguf后创建如下 ModelfileFROM ./qwen3-embedding-0.6b.Q4_K_M.gguf PARAMETER num_ctx 4096 PARAMETER stop ###然后执行OLLAMA_HOST0.0.0.0:11434 ollama create qwen3-emb -f Modelfile。这种方式绕过网络瓶颈且完全可控。这也是 Ollama 灵活性的体现它不强迫你走唯一路径而是提供多条通往终点的路。3. llama.cpp当“极致效率”成为唯一 KPI 时它就是无可替代的标尺如果说 Ollama 是让大模型走进千家万户的“家电”vLLM 是支撑互联网服务的“发电厂”那么 llama.cpp 就是制造这些家电和电厂核心部件的“精密机床”。它不提供开箱即用的服务但它是整个本地推理生态的底层基石——几乎所有其他工具包括 Ollama 和部分 vLLM 的 CPU fallback都在其代码库上构建。llama.cpp 的核心竞争力源于三个不可妥协的设计原则零依赖、极致量化、跨平台原生。它用纯 C/C 编写不依赖 Python、不依赖 CUDA 驱动CPU 模式下、不依赖任何第三方 BLAS 库。这意味着只要你的设备能编译 C 代码它就能运行。我在客户现场见过最极端的案例一台运行 OpenWrt 的 ARM 路由器512MB RAM通过交叉编译 llama.cpp成功加载了 1.5B 参数的 Phi-3 模型用于本地 IoT 设备指令解析。这种场景Ollama 的 Go 二进制无法运行vLLM 的 Python 依赖栈更是天方夜谭。llama.cpp 的量化能力是它统治边缘设备的真正王牌。它支持从 Q1_K约 0.5 bits/weight到 Q8_08 bits/weight的全系列 GGUF 量化格式且每种格式都经过手工汇编级优化。以 Q4_K_M 为例它将权重分为 16 个 block每个 block 独立计算 scale 和 zero point相比传统的 INT4 量化精度损失降低 30% 以上。更重要的是llama.cpp 的量化不是“一刀切”——它允许对不同层attention、FFN应用不同量化等级。例如你可以指定--quantize-imatrix使用校准矩阵让 embedding 层保持 Q6_K而 FFN 层使用 Q4_K_M从而在内存和精度间取得最佳平衡。这种粒度在 Ollama 的自动量化中是不可见的在 vLLM 的 AWQ/GPTQ 支持中则需要额外的转换步骤。llama.cpp 的跨平台能力体现在它对硬件特性的深度挖掘。在 Apple Silicon 上它利用 Metal Performance ShadersMPS实现近乎原生的 GPU 加速实测 M2 Max 运行 7B 模型token/s 是 CPU 模式的 8 倍在 Windows 上它通过 DirectML 支持 AMD/NVIDIA/Intel 显卡无需安装 CUDA在 Linux ARM64 上它启用 SVE2 指令集让树莓派 5 的推理速度提升 40%。这种“为每块芯片写专属代码”的偏执是它性能碾压其他通用框架的根本原因。提示llama.cpp 的“难用”恰恰是它强大的证明。当你需要手动编译、手动选择 backend、手动加载模型、手动处理 tokenizer 时你获得的是对整个推理链路的完全掌控。例如要启用 Flash Attention 2你必须在编译时添加-DLLAMA_FLASH_ATTNON并在运行时传入--flash-attn参数要启用 RoPE scaling你需要修改llama_context_params结构体中的rope_freq_base字段。这些操作在 Ollama 中是黑盒在 vLLM 中是配置项而在 llama.cpp 中它们是代码本身。实战中我最常使用的 llama.cpp 场景是“模型验证”。当客户提出“你们说这个模型支持 128K 上下文我们怎么验证”时Ollama 的num_ctx参数是模糊的vLLM 的max_model_len可能受 PagedAttention 限制而 llama.cpp 的--ctx-size 131072是最直接的测试手段。我曾用llama-cli加载一个 13B 模型输入 120K tokens 的长文本来自法律合同然后测量最后一个 token 的生成延迟——结果是 2.3 秒证实了其长上下文能力。这种“所见即所得”的验证方式是其他工具无法提供的确定性。另一个高频场景是“嵌入向量生成”。很多用户需要将文档 chunk 转为 embedding 用于 RAG。Ollama 的/api/embeddings接口返回格式不标准vLLM 的 embedding 支持尚不成熟而 llama.cpp 的llama-cli --embeddings命令直接输出 float32 数组可无缝接入 FAISS 或 Chroma。例如对mineru2.5-pro-2605-1.2b模型我用以下命令批量生成 embeddingllama-cli -m ./mineru2.5-pro-2605-1.2b.Q5_K_M.gguf \ --embeddings \ --ctx-size 4096 \ --no-mmap \ --no-mlock \ -f input.txt \ -o embeddings.bin其中--no-mmap避免内存映射冲突--no-mlock防止锁定物理内存这些细节能让脚本在低配服务器上稳定运行数小时。这种级别的控制力正是 llama.cpp 在专业场景中不可替代的原因。4. vLLM当并发量成为瓶颈时它用 PagedAttention 重构了 GPU 显存的使用逻辑vLLM 的诞生源于一个尖锐的行业痛点传统推理框架如 HuggingFace Transformers在高并发场景下GPU 显存利用率极低。原因在于它们为每个请求分配独立的 KV Cache而 KV Cache 的大小与序列长度成正比。当 10 个用户同时提交 2048 tokens 的请求时显存需要预留 10 × 2048 × 2 × hidden_size × sizeof(float16) 的空间即使这些请求的中间状态并不同时活跃。这种“静态分配”模式导致显存浪费率常超过 60%严重制约了服务吞吐。vLLM 的破局点是提出PagedAttention机制——将 KV Cache 视为操作系统中的虚拟内存引入“页表Page Table”概念。具体来说它把 KV Cache 切分为固定大小的 page默认 16 tokens每个 page 存储在显存的任意位置请求的 KV Cache 不再是连续内存块而是由一组 page ID 组成的链表。当模型需要访问某个位置的 KV 时先查页表得到物理地址再读取数据。这个设计让不同请求的 KV Cache 可以共享显存空间就像多个程序共享物理内存一样。PagedAttention 的效果是颠覆性的。在 A100 80GB 上vLLM 相比 Transformers 的吞吐提升可达 24 倍论文数据而显存占用下降 45%。更重要的是它让“长上下文 高并发”成为可能。例如部署qwen3.6b模型设置--max-model-len 32768vLLM 可以稳定支持 50 并发请求而 Transformers 在相同配置下会因 OOM 直接崩溃。这种能力直接支撑了 Claude Code、Dify 等平台的私有化部署需求。vLLM 的架构是典型的“服务即产品”设计。它不提供模型下载、不管理模型格式转换、不内置 Web UI而是专注于打造一个高性能、可扩展的推理服务核心。它的部署形态高度标准化通过vllm serve启动一个 OpenAI 兼容的 HTTP 服务所有业务逻辑模型加载、请求路由、日志记录都由 vLLM 自身管理。用户只需关注几个关键参数--model指定 HuggingFace 模型 ID 或本地路径支持 HF 格式和 GGUF 格式--tensor-parallel-size设置 GPU 数量自动进行模型并行切分--gpu-memory-utilization控制显存使用率0.9 是安全值--enable-prefix-caching启用前缀缓存对重复 system prompt 场景提升显著例如要在 DGX A100 上部署opendatalab/mineru2.5-pro-2605-1.2b命令如下vllm serve \ --model opendatalab/mineru2.5-pro-2605-1.2b \ --tensor-parallel-size 4 \ --gpu-memory-utilization 0.85 \ --max-model-len 8192 \ --enable-prefix-caching \ --port 8000这里--tensor-parallel-size 4表示将模型权重切分为 4 份分别加载到 4 块 GPU 上vLLM 自动处理 all-reduce 通信--enable-prefix-caching让所有请求共享 system prompt 的 KV Cache避免重复计算。这些参数的组合构成了 vLLM 的“性能调优公式”。注意vLLM 的“冷启动问题”是用户反馈最多的问题。当服务首次接收请求时它需要编译 CUDA kernel、初始化 PagedAttention 数据结构、加载模型权重导致首请求延迟高达 10-30 秒。这不是 bug而是设计权衡——vLLM 选择在启动时完成所有昂贵初始化以换取后续请求的极致稳定性。解决方案是预热warmup在服务启动后立即发送一批 dummy 请求如curl -X POST http://localhost:8000/v1/chat/completions -d {model:mineru,messages:[{role:user,content:hi}]}强制触发初始化流程。生产环境中我通常在 Kubernetes 的 readiness probe 中集成预热逻辑确保服务就绪后再接入流量。vLLM 的另一个独特优势是它对“思考模式Thinking Mode”的原生支持。通过--enable-chunked-prefill参数vLLM 可以将超长 prompt 分块处理避免单次 prefill 占用过多显存。这对于部署claude-code类模型至关重要——它们的 system prompt 动辄数千 tokens传统框架会因 prefill 阶段 OOM 而失败。vLLM 的分块预填充让这类模型在 1x A100 上也能稳定运行这是 Ollama 和 llama.cpp 当前无法企及的能力。5. 选型决策树从 5 个真实场景出发给出不可辩驳的推荐理由工具选型不是学术讨论而是解决具体问题的工程决策。下面我列出 5 个高频真实场景每个都附上我的推荐、详细理由、避坑提示以及可直接复用的命令模板。这些结论全部来自我过去两年在 17 个客户现场的实操经验没有一条是纸上谈兵。5.1 场景一个人知识库 本地 Chat UIWindows 11 / macOS需求特征用户是单人使用需要快速上手模型尺寸在 3B-14B 之间对首 token 延迟不敏感 2s 可接受希望有图形界面。推荐工具Ollama Open WebUI理由Ollama 的一键安装Windows MSI / macOS PKG和自动硬件适配让部署时间压缩到 5 分钟内Open WebUI 的 Docker Compose 一键部署完美匹配 Ollama 的 API。llama.cpp 虽然更轻量但你需要自己编译、自己找 UI、自己配置反向代理vLLM 则过于重型单机部署需 Docker Python 环境对普通用户门槛过高。避坑提示Windows 用户务必关闭 Windows Defender 的实时防护否则 Ollama 的模型文件扫描会导致ollama run卡死。在 PowerShell 中执行Set-MpPreference -DisableRealtimeMonitoring $true命令模板# 1. 下载并安装 Ollama官网获取最新 MSI # 2. 拉取模型国内用户建议先设置代理 $env:HTTP_PROXYhttp://127.0.0.1:7890; ollama pull qwen3:14b # 3. 启动 Open WebUI自动连接本地 Ollama docker run -d -p 3000:8080 --add-hosthost.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main5.2 场景二树莓派 5 / Jetson Orin 边缘设备部署需求特征设备无独立 GPU 或仅有弱 GPU如 Jetson 的 32GB RAM内存 ≤ 8GB需 24/7 稳定运行模型尺寸 ≤ 3B。推荐工具llama.cpp原生编译理由Ollama 的 Go 二进制在 ARM64 上体积过大且其自动 backend 切换在边缘设备上不可靠vLLM 的 Python 依赖栈PyTorch CUDA在 Jetson 上编译成功率低于 30%。llama.cpp 的纯 C 实现编译后二进制仅 10MB内存占用可控且支持--mlock锁定物理内存防止 swap保障长期运行稳定性。避坑提示Jetson Orin 用户必须使用--gpu-layers 35参数针对 3B 模型否则 CPU 模式下延迟高达 15s/token。树莓派 5 则需启用--cpu-threads 4并关闭--mmap。命令模板# 在 Jetson Orin 上编译需先安装 CUDA 12.2 make LLAMA_CUBLAS1 -j$(nproc) # 运行模型3B 模型35 层 offload 到 GPU ./llama-cli -m ./phi-3-mini-3.8b.Q4_K_M.gguf \ --gpu-layers 35 \ --ctx-size 4096 \ --temp 0.7 \ --repeat-penalty 1.15.3 场景三企业内部 API 服务50 并发A100 80GB × 2需求特征需对接公司内部系统如 Jira、Confluence要求 99.9% 请求在 1s 内返回首 token支持 OpenAI 兼容接口需日志审计和监控。推荐工具vLLMDocker 部署理由Ollama 的单进程架构无法水平扩展高并发下延迟抖动剧烈llama.cpp 无内置 HTTP 服务需自行开发 wrapper难以保证 SLA。vLLM 的 PagedAttention 和 tensor parallelism是唯一能在 2×A100 上稳定支撑 50 并发的方案且其 Prometheus metrics 端点/metrics可直接接入 Grafana。避坑提示务必设置--gpu-memory-utilization 0.8避免显存碎片化禁用--disable-log-requests否则无法审计用户请求。命令模板# Docker 部署使用官方镜像 docker run --gpus all -p 8000:8000 \ --shm-size1g --ulimit memlock-1 \ -v /path/to/models:/models \ -e VLLM_MODEL/models/qwen3-14b \ vllm/vllm-openai:latest \ --model /models/qwen3-14b \ --tensor-parallel-size 2 \ --gpu-memory-utilization 0.8 \ --max-model-len 8192 \ --enable-prefix-caching5.4 场景四Windows 笔记本离线使用无管理员权限无 CUDA需求特征用户在客户现场演示笔记本无 GPU 驱动权限需离线运行模型需支持中文首 token 延迟 5s。推荐工具OllamaPortable 模式理由llama.cpp 需要编译无管理员权限无法安装 Visual Studio Build ToolsvLLM 依赖 Python 环境离线安装 wheel 包极其繁琐。Ollama 提供便携版Portable ZIP解压即用所有依赖打包在内且其内置的 Metal/CPU backend 在 Windows 上表现稳定。避坑提示便携版需手动设置OLLAMA_MODELS环境变量指向模型目录否则ollama list不显示已下载模型。命令模板# 解压 portable.zip 到 D:\ollama # 设置环境变量 set OLLAMA_MODELSD:\ollama\models set OLLAMA_HOST0.0.0.0:11434 # 以服务模式启动不显示控制台窗口 start /min ollama.exe serve # 在另一窗口运行模型 ollama run qwen3:7b5.5 场景五RAG 系统 Embedding 生成批量处理 1000 文档需求特征需将大量 PDF/Markdown 文档切片后转为 embedding写入向量数据库对单次 embedding 速度要求不高但需内存稳定、格式标准。推荐工具llama.cppCLI 模式理由Ollama 的/api/embeddings返回 JSON 格式需额外解析vLLM 的 embedding API 尚未稳定v0.5.3 版本仍存 bug。llama.cpp 的--embeddings输出是标准二进制 float32 数组可直接 mmap 到 FAISS且其--no-mlock参数能防止内存锁定适合长时间批处理。避坑提示使用--ctx-size必须 ≥ 文档 chunk 长度否则 embedding 截断--no-mmap可避免大文件读取时的内存映射冲突。命令模板# 生成 1000 个 chunk 的 embedding每个 chunk ≤ 512 tokens for /f delims %i in (dir /b *.txt) do ( llama-cli -m ./qwen3-embedding-0.6b.Q4_K_M.gguf \ --embeddings \ --ctx-size 512 \ --no-mmap \ --no-mlock \ -f %i \ -o embeddings\%~ni.bin )这五种场景覆盖了 90% 的本地大模型部署需求。我的经验是不要试图寻找“万能工具”而要问自己“此刻最痛的点是什么”。当“快”是第一诉求选 Ollama当“省”是唯一指标选 llama.cpp当“稳”是生命线选 vLLM。工具没有高下只有是否精准命中你的场景。6. 终极建议别只盯着工具先想清楚你要解决什么问题写完这五千多字我最想告诉你的不是哪个工具参数怎么填而是在打开终端输入第一条命令之前请先回答这三个问题。第一个问题这个模型服务最终是谁在用如果是你自己用来写周报、查资料、学编程那 Ollama 的ollama run就是黄金标准——它把复杂性封装成一个动词让你聚焦在“用模型解决问题”本身。我见过太多技术人花三天部署 vLLM结果发现每天只用两次每次问“Python 如何读取 CSV”这种投入产出比远不如花 30 分钟学会 Ollama 的 Modelfile 定制。第二个问题这个服务的“失败成本”有多高如果它要嵌入到客户签约的 SaaS 产品中一次 OOM 就意味着 SLA 违约和真金白银的赔偿那 llama.cpp 的确定性无 GC、无 Python GIL、无隐式内存分配和 vLLM 的可观测性metrics、tracing、request logging就是刚需。此时Ollama 的“黑盒”特性反而成了风险点——你无法预测它在什么负载下会突然重启。第三个问题你愿意为“控制权”付出多少时间成本llama.cpp 给你绝对控制权但代价是你要懂 CMake、懂 CUDA kernel、懂 RoPE 的数学原理vLLM 给你生产级控制权但代价是你要学 Kubernetes、Prometheus、OpenTelemetryOllama 把控制权收走了换给你的是时间——你省下的时间可以用来优化 prompt、设计 workflow、打磨产品体验。这本质上是一种权衡你是想当一个“模型调度员”还是一个“AI 产品经理”我自己现在的做法是用 Ollama 做 MVP 验证用 llama.cpp 做边缘部署用 vLLM 做生产服务。三者不是互斥而是互补。Ollama 的ollama serve可以作为 vLLM 的备用节点llama.cpp 的 GGUF 模型可以一键导入 vLLM而 vLLM 的 benchmark 数据又能反哺 Ollama 的 backend 优化。它们共同构成了一个完整的本地大模型技术栈。最后分享一个真实案例上周帮一家律所部署合同审查系统。他们最初的要求是“在内网服务器上跑一个能读 PDF 的模型”。我第一反应是上 vLLM但深入沟通后发现他们真正的痛点是“律师不愿离开 Word 环境”。于是我放弃了所有服务化方案用 Ollama Python 的ollama.generate()封装了一个 Word 插件律师选中一段文字右键点击“AI 审查”3 秒内返回风险点。整个项目从需求确认到上线只用了 38 小时。工具的价值永远在于它能否让真实的人在真实的场景中解决真实的问题。其他的都是噪音。