Ollama 概述
Ollama 是一个快速运行 (Large Language Models,大语言模型)的简便工具。通过 ,用户无需复杂的环境配置,即可轻松与大语言模型对话互动。它支持在本地部署,有效保护数据隐私,同时降低了大模型的使用门槛。
Ollama 是一款简化大语言模型运行的本地化工具,采用客户端 - 服务器(CS)架构。其核心由 ollama-http-server 和 llama.cpp 推理引擎组成,两者通过 HTTP 通信。本地存储遵循类似容器镜像的结构,包含日志、密钥及模型数据(blobs 和 manifests),利用 digest 实现文件共享。对话流程涉及 CLI 发起请求,服务端检查模型元数据,必要时自动拉取模型,随后通过 /api/chat 接口调用推理引擎完成交互。该架构屏蔽了底层复杂性,支持常用命令管理模型,并提供本地隐私保护能力,适合开发者快速集成和使用 LLM。

Ollama 是一个快速运行 (Large Language Models,大语言模型)的简便工具。通过 ,用户无需复杂的环境配置,即可轻松与大语言模型对话互动。它支持在本地部署,有效保护数据隐私,同时降低了大模型的使用门槛。
LLMOllama本文将深入解析 Ollama 的整体架构设计,并详细讲解用户在与 Ollama 进行对话时的具体处理流程,帮助开发者理解其底层机制。

Ollama 采用了经典的客户端 - 服务器(Client-Server, CS)架构模式,这种设计使得系统具有良好的扩展性和解耦性。
Client(客户端): 通常通过命令行界面(CLI)与用户交互。用户可以通过终端输入指令来管理模型、发起对话或查询状态。CLI 负责将用户的意图转换为 HTTP 请求发送给服务端。
Server(服务端): 可以通过命令行、桌面应用(基于 Electron 框架)、Docker 容器中的一种方式启动。无论采用何种启动方式,最终调用的都是同一个核心可执行文件。服务端负责监听请求、调度资源并返回结果。
通信协议:
Client 与 Server 之间使用标准的 HTTP 协议进行通信,这使得 Ollama 易于集成到各种编程语言和系统中。
Ollama Server 内部包含两个核心部分,它们协同工作以完成推理任务:
ollama-http-server:
这是 Ollama 的主服务进程,负责接收来自客户端的 HTTP 请求,进行参数校验、会话管理,并协调后端引擎的工作。
llama.cpp:
作为 LLM 推理引擎,llama.cpp 负责加载模型权重、执行矩阵运算并生成文本。它是一个独立的开源项目,具备优秀的跨平台能力和硬件友好性,可以在没有 GPU 的设备(如 CPU 甚至树莓派)上运行。
ollama-http-server 与 llama.cpp 之间也是通过 HTTP 进行交互,这种内部微服务化的设计增强了系统的模块化程度。
Ollama 本地存储默认使用的文件夹路径为 $HOME/.ollama(Linux/macOS)或 %USERPROFILE%\.ollama(Windows)。其文件结构设计借鉴了云原生领域的最佳实践。

本地存储中的文件主要可分为三类:
日志文件:
包括记录了用户对话输入的 history 文件,用于保存上下文记忆;以及 logs/server.log 服务端日志文件,用于排查运行时问题。
密钥文件:
包含 id_ed25519 私钥和 id_ed25519.pub 公钥,用于身份验证和安全通信。
模型文件: 这是存储的核心,分为两部分:
blobs:存储模型的原始二进制数据文件(通常是 GGUF 格式),按内容哈希命名。manifests:存储元数据文件,描述模型的结构、版本及依赖关系。元数据文件(例如 models/manifests/registry.ollama.ai/library/llama3.2/latest)的内容遵循 JSON 格式,并借鉴了 OCI(Open Container Initiative)规范。

如上图所示,manifests 中的 digest 字段与 blobs 目录下的文件名相对应。这种设计允许模型文件被多个 Manifest 引用,实现了类似 Docker 镜像层的共享机制,节省存储空间。
用户与 Ollama 进行对话的大致流程如下图所示:

用户通过 CLI 命令行执行 ollama run llama3.2 开启对话(llama3.2 是一种开源的大语言模型,你也可以使用其它 LLM)。此时 CLI 会尝试连接本地运行的 Server。
ollama-http-server 发起 HTTP 请求,获取模型信息。Server 会尝试读取本地的 manifests 元数据文件。ollama-http-server 发起拉取模型的请求。Server 会从远程仓库下载模型数据到本地 blobs 目录并更新 Manifest。ollama-http-server 发起一个空消息的 /api/generate 请求,Server 会在内部进行通道(Go 语言中的 channel)处理,初始化上下文。/api/chat 接口请求 ollama-http-server。ollama-http-server 需要依赖 llama.cpp 引擎加载模型并执行推理(llama.cpp 也是以 HTTP server 的方式提供服务)。ollama-http-server 会先向 llama.cpp 发起 /health 请求,确认后者的健康状况。/completion 请求,传入 Prompt 和参数(如 temperature, top_p 等)。llama.cpp 计算并流式返回对话响应,最终由 ollama-http-server 封装后返回给 CLI 显示出来。通过上述步骤,Ollama 完成了用户与大语言模型的交互对话,整个过程对开发者透明且高效。
为了更高效地使用 Ollama,以下是常用的 CLI 命令:
ollama list
ollama pull <model_name>
ollama rm <model_name>
ollama cp <source> <destination>
ollama show <model_name>
这些命令提供了对模型生命周期管理的完整支持,便于运维和开发调试。
由于 Ollama 支持本地运行,数据不会上传至云端,这为隐私敏感场景提供了保障。但在部署时仍需注意以下几点:
Ollama 仅监听 localhost。若需远程访问,应配置防火墙规则,避免直接暴露在公网。Ollama 的用户具有最小必要权限,防止模型文件被恶意篡改。Ollama 通过集成 llama.cpp 推理引擎,并进一步封装,将复杂的 LLM 技术变得触手可及。其清晰的 CS 架构、类容器的存储管理以及便捷的 API 接口,为开发者和技术人员提供了一个高效且灵活的工具,很好地助力了各种应用场景下的大语言模型推理与交互。无论是本地测试、私有化部署还是构建 AI 应用,Ollama 都是一个值得优先考虑的基础设施选择。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online