Ollama 概述
Ollama 是一个快速运行大语言模型(LLM)的简便工具。通过 Ollama,用户无需复杂的环境配置,即可轻松在本地部署并运行大语言模型,实现与大模型的对话互动。本文将深入解析 Ollama 的整体架构,详细讲解用户在与 Ollama 进行对话时的具体处理流程,并提供相关的 API 使用示例。
Ollama 整体架构
Ollama 采用了经典的 C/S(Client-Server)架构设计,主要包含以下核心组件:
1. Client 与 Server 交互
- Client:通常通过命令行界面(CLI)与用户交互。用户执行
ollama命令后,客户端负责发送请求并展示结果。 - Server:可以通过命令行、桌面应用(基于 Electron 框架)或 Docker 容器启动。无论采用何种启动方式,最终都调用同一个可执行文件。Server 默认监听本地端口
11434。 - 通信协议:Client 与 Server 之间使用 HTTP 协议进行通信,支持 JSON 格式的数据传输。
2. Server 内部核心组件
Ollama Server 内部主要由两个核心部分组成:
- ollama-http-server:负责接收来自客户端的 HTTP 请求,进行路由分发和参数校验。
- llama.cpp:作为 LLM 推理引擎,负责加载模型权重、执行推理计算并返回生成结果。
这两个部分之间也通过 HTTP 进行交互。llama.cpp 是一个独立的开源项目,具备优秀的跨平台能力和硬件友好性,可以在没有 GPU 的设备(如树莓派)甚至 CPU 上高效运行。
Ollama 存储结构
Ollama 在本地存储模型文件和元数据时,默认使用的文件夹路径为 $HOME/.ollama(Linux/macOS)或 %USERPROFILE%\.ollama(Windows)。其文件结构主要分为三类:
1. 日志文件
- history:记录了用户的对话历史输入。
- logs/server.log:服务端运行日志,用于调试和监控。
2. 密钥文件
- id_ed25519:私钥文件。
- id_ed25519.pub:公钥文件。 这些密钥用于身份验证和安全通信。
3. 模型文件
这是存储的核心部分,分为两类:
- blobs:存储原始的二进制数据文件。每个 blob 对应模型的一个层或一部分数据,文件名通常为 SHA256 哈希值。
- manifests:存储元数据文件,描述了模型的配置、层级关系和对应的 blobs 引用。
Manifests 文件格式
Manifests 文件采用 JSON 格式,内容借鉴了云原生和容器领域中的 OCI(Open Container Initiative)规范。例如,一个 llama3.2 模型的 manifest 路径可能为 models/manifests/registry.ollama.ai/library/llama3.2/latest。
文件中包含 digest 字段,该字段的哈希值与 blobs 目录下的文件名一一对应,确保模型文件的完整性和一致性。
Ollama 对话处理流程
用户与 Ollama 进行对话的流程可以分为准备阶段和交互式对话阶段。
1. 准备阶段
当用户首次运行模型时,系统会检查本地是否存在所需模型。
- :CLI 客户端向 发起 HTTP 请求,尝试读取本地的 manifests 元数据文件。


