跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Go / GolangAI算法

Ollama 架构详解与对话处理流程解析

Ollama 是一个快速运行大语言模型的本地化工具,采用 Client-Server 架构,默认监听 11434 端口。其核心由 ollama-http-server 和 llama.cpp 推理引擎组成,通过 HTTP 协议通信。存储结构遵循 OCI 规范,包含 blobs 原始数据和 manifests 元数据。对话流程涵盖模型拉取、初始化会话及 API 交互,支持流式输出。详细解析了其架构原理、存储机制及 API 使用方法,并提供了性能调优建议。

极光发布于 2025/2/6更新于 2026/7/2343 浏览
Ollama 架构详解与对话处理流程解析

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 客户端向 ollama-http-server 发起 HTTP 请求,尝试读取本地的 manifests 元数据文件。
  • 模型拉取:如果本地不存在模型(响应 404 not found),CLI 客户端会向 Server 发起拉取请求。Server 会从远程仓库下载模型文件到本地 blobs 和 manifests 目录。
  • 确认就绪:拉取完成后,CLI 再次请求获取模型信息,确认模型已就绪。
  • 2. 交互式对话阶段

    1. 初始化会话:CLI 先向 ollama-http-server 发起一个空消息的 /api/generate 请求,Server 会在内部进行通道(Go channel)处理以准备上下文。
    2. 历史记录处理:如果模型配置中包含 messages,系统会打印出来。用户可以基于当前模型和 session 对话记录保存为新的模型版本,对话记录会被持久化为 messages。
    3. 正式对话:
      • CLI 调用 /api/chat 接口请求 Server。
      • Server 依赖 llama.cpp 引擎加载模型并执行推理。
      • Server 首先向 llama.cpp 发起 /health 请求,确认其健康状况。
      • 随后发起 /completion 请求,获取对话响应。
      • 最终结果通过 HTTP 返回给 CLI 显示。

    API 使用示例

    Ollama 提供了丰富的 RESTful API 供开发者集成。

    1. 列出模型

    curl http://localhost:11434/api/tags
    

    2. 创建模型

    curl http://localhost:11434/api/create \
      -d '{"name": "my-model", "modelfile": "FROM llama3.2"}'
    

    3. 聊天接口

    curl http://localhost:11434/api/chat \
      -d '{
        "model": "llama3.2",
        "messages": [
          {"role": "user", "content": "你好,请介绍一下你自己"}
        ]
      }'
    

    4. 流式输出

    Ollama 支持流式响应,客户端可以逐块接收生成的文本,降低延迟感。

    总结

    Ollama 通过集成 llama.cpp 推理引擎,并进一步封装复杂的底层技术,将大语言模型(LLM)的运行变得触手可及。它提供了一个高效且灵活的工具,极大地降低了本地部署大模型的门槛,助力开发者在各种应用场景下进行大语言模型的推理与交互。其清晰的架构设计和标准化的存储结构,也为二次开发和扩展提供了良好的基础。

    常见问题与优化

    1. 显存不足如何处理?

    如果本地 GPU 显存不足以加载整个模型,Ollama 会自动利用 CPU 内存进行卸载(Offloading),虽然速度会变慢,但能够保证模型正常运行。用户可以通过设置环境变量 OLLAMA_NUM_PARALLEL 来控制并发数,减少资源占用。

    2. 如何自定义 Prompt?

    在 /api/chat 请求中,可以通过 system 角色定义系统提示词,从而控制模型的行为风格。例如:

    {
      "role": "system",
      "content": "你是一个专业的编程助手。"
    }
    

    3. 性能调优

    对于生产环境,建议开启 OLLAMA_KEEP_ALIVE 环境变量,保持模型在内存中驻留,避免频繁加载导致的冷启动延迟。同时,根据硬件情况调整 num_ctx 参数以平衡上下文长度和推理速度。

    目录

    1. Ollama 概述
    2. Ollama 整体架构
    3. 1. Client 与 Server 交互
    4. 2. Server 内部核心组件
    5. Ollama 存储结构
    6. 1. 日志文件
    7. 2. 密钥文件
    8. 3. 模型文件
    9. Manifests 文件格式
    10. Ollama 对话处理流程
    11. 1. 准备阶段
    12. 2. 交互式对话阶段
    13. API 使用示例
    14. 1. 列出模型
    15. 2. 创建模型
    16. 3. 聊天接口
    17. 4. 流式输出
    18. 总结
    19. 常见问题与优化
    20. 1. 显存不足如何处理?
    21. 2. 如何自定义 Prompt?
    22. 3. 性能调优
    • 免费图片AI生成工具免费生成了解详情
    • Magick API 一键接入全球大模型注册送1000万token查看
    • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
    • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
    • 100+免费在线小游戏爽一把
    极客日志微信公众号二维码

    微信扫一扫,关注极客日志

    微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

    更多推荐文章

    查看全部
    • Linux 系统 Git 安装配置与常见问题排查
    • 10 分钟搭建专属 AI Agent:从零到落地全流程实操
    • 零基础转行AI产品经理:核心能力与职业发展指南
    • JDK-17 安装与配置教程
    • C++ STL list 容器详解与模拟实现
    • 前端 AI 应用:浏览器中的机器学习模型
    • 华为机试题解:素数伴侣(最大二分图匹配)
    • Java 项目构建与管理:Maven 核心实战指南
    • Llama-3.2-3B 对比 Qwen2-1.5B:Ollama 部署与摘要 BLEU 实测
    • Flutter 三方库 huggingface_client 的鸿蒙化适配指南
    • Cursor 中配置与使用 MCP 服务实战指南
    • 红黑树原理及在C++ map与set中的应用
    • Rokid JSAR 实战指南:Web 技术栈 AR 开发环境搭建与 3D 时钟项目详解
    • 企业级 AI Agent 全栈架构蓝图:从聊天机器人到智能自动化落地
    • Ψ0 人形全身 VLA:基于人类视频预训练与 MM-DiT 后训练方案
    • CarelessWhisper: 将 Whisper 改造为因果流式语音识别模型
    • 全球首位 AI 软件工程师 Devin 发布:能力解析与行业影响探讨
    • 英伟达GTC 2026:黄仁勋发布新推理芯片与Rubin架构,AI智能体时代开启
    • 使用 Skill 提升大模型生成前端设计的审美能力
    • AI 大模型核心学习资源与实战路径指南

    相关免费在线工具

    • 加密/解密文本

      使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

    • RSA密钥对生成器

      生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

    • Mermaid 预览与可视化编辑

      基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

    • 随机西班牙地址生成器

      随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

    • Gemini 图片去水印

      基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

    • Base64 字符串编码/解码

      将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online