AI LLM 利器 Ollama 架构和对话处理流程解析

Ollama 概述

Ollama 是一个快速运行 LLM(Large Language Models,大语言模型)的简便工具。通过 Ollama,用户无需复杂的环境配置,即可轻松与大语言模型对话互动。

本文将解析 Ollama 的整体架构,并详细讲解用户在与 Ollama 进行对话时的具体处理流程。

Ollama 整体架构

Ollama 使用了经典的 CS(Client-Server)架构,其中:

  • Client 通过命令行的方式与用户交互。
  • Server 可以通过命令行、桌面应用(基于 Electron 框架)、Docker 其中一种方式启动。无论启动方式如何,最终都调用同一个可执行文件。
  • Client 与 Server 之间使用 HTTP 进行通信。

Ollama Server 有两个核心部分:

  • ollama-http-server:负责与客户端进行交互。
  • llama.cpp:作为 LLM 推理引擎,负责加载并运行大语言模型,处理推理请求并返回结果。
  • ollama-http-serverllama.cpp 之间也是通过 HTTP 进行交互。

说明:llama.cpp 是一个独立的开源项目,具备跨平台和硬件友好性,可以在没有 GPU、甚至是树莓派等设备上运行。

Ollama 存储结构

Ollama 本地存储默认使用的文件夹路径为 $HOME/.ollama,文件结构如下图所示:

文件可分为三类:

  • 日志文件:包括记录了用户对话输入的 history 文件,以及 logs/server.log 服务端日志文件。
  • 密钥文件:id_ed25519 私钥和 id_ed25519.pub 公钥。
  • 模型文件:包括 blobs 原始数据文件,以及 manifests 元数据文件。

元数据文件,例如图中的 models/manifests/registry.ollama.ai/library/llama3.2/latest 文件内容为:

如上图所示,manifests 文件是 JSON 格式,文件内容借鉴了云原生和容器领域中的 OCI spec 规范,manifests 中的 digest 字段与 blobs 相对应。

Ollama 对话处理流程

用户与 Ollama 进行对话的大致流程如下图所示:

  1. 用户通过 CLI 命令行执行 ollama run llama3.2 开启对话(llama3.2 是一种开源的大语言模型,你也可以使用其它 LLM)。
  2. 准备阶段:
    • CLI 客户端向 ollama-http-server 发起 HTTP 请求,获取模型信息,后者会尝试读取本地的 manifests 元数据文件,如果不存在,则响应 404 not found。
    • 当模型不存在时,CLI 客户端会向 ollama-http-server 发起拉取模型的请求,后者会去远程存储仓库下载模型到本地。
    • CLI 再次请求获取模型信息。
  3. 交互式对话阶段:
    • CLI 先向 ollama-http-server 发起一个空消息的 /api/generate 请求,server 会先在内部进行一些 channel(go 语言中的通道)处理。
    • 如果模型信息中包含有 messages,则打印出来。用户可以基于当前使用的模型和 session 对话记录保存为一个新的模型,而对话记录就会被保存为 messages。
    • 正式进入对话:CLI 调用 /api/chat 接口请求 ollama-http-server,而 ollama-http-server 需要依赖 llama.cpp 引擎加载模型并执行推理(llama.cpp 也是以 HTTP server 的方式提供服务)。此时,ollama-http-server 会先向 llama.cpp 发起 /health 请求,确认后者的健康状况,然后再发起 /completion 请求,得到对话响应,并最终返回给 CLI 显示出来。

通过上述步骤,Ollama 完成了用户与大语言模型的交互对话。

总结

Ollama 通过集成 llama.cpp 推理引擎,并进一步封装,将复杂的 LLM 技术变得触手可及,为开发者和技术人员提供了一个高效且灵活的工具,很好地助力了各种应用场景下的大语言模型推理与交互。

(关注我,无广告,专注技术,不煽动情绪,也欢迎与我交流)


参考资料:

  • https://github.com/ollama/ollama
  • https://github.com/ggerganov/llama.cpp

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/448075.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FFmpeg的简单使用【Windows】

目录 一、视频生成图片 静态图片 转码过程 动态图片gif 二、图片生成视频 三、FFmpeg常用参数命令 3.1 主要参数 3.1.1、-i 3.1.2、-f 3.1.3、-ss 3.1.4、-t 3.2 音频参数 3.2.1、-aframes 3.2.2、 -b:a 3.2.3、-ar 3.2.4、-ac 3.2.5、-acodec 3.2.6、-an 3…

desmos和webgl绘制线条

目录 desmos绘制 webgl绘制 将线段坐标生成三角化坐标 处理斜接线段 处理圆角 尖角 先在desmos上面完成线条lineJoin绘制的,再将代码和公式转到js用webgl绘制. desmos绘制 示例 desmos计角斜接角时,需要用到的一些函数。在desmos定义成公共函数&#xff0c…

【全网最全】AI产品经理面试高频100题答案解析

详细的目录如下,需要的小伙伴可以详细看一下~ 第一章:机器学习和深度学习的关系 第二章:机器学习7大经典算法 算法一:K近邻算法【分类算法】 1.1 KNN 算法的实现原理 1.2 KNN应用场景举例:预测候选人能不能拿到 O…

心觉:激活潜意识财富密码:每天一练,财富自动来

Hi,我是心觉,与你一起玩转潜意识、脑波音乐和吸引力法则,轻松掌控自己的人生! 挑战每日一省写作200/1000天 为什么有些人总是轻而易举地吸引到财富 而你却努力多年仍然徘徊在财务的困境中? 你每天都在辛苦工作&…

LabVIEW离心泵监测系统

LabVIEW的离心泵监测系统在监测离心泵的运行状态,通过实时数据采集和故障预警,提高泵的运行效率和安全性。系统集成了多种传感器,利用Modbus RTU协议和RS485串口总线进行数据通信,通过LabVIEW软件平台实现数据处理和用户界面交互。…

使用 MongoDB 构建 AI:利用实时客户数据优化产品生命周期

在《使用 MongoDB 构建 AI》系列博文中,我们看到越来越多的企业正在利用 AI 技术优化产品研发和用户支持流程。例如,我们介绍了以下案例: Ventecon 的 AI 助手帮助产品经理生成和优化新产品规范 Cognigy 的对话式 AI 帮助企业使用任意语言&a…

Opencv:FisherFace算法实现人脸检测

目录 简介 实现步骤 1. 图像读取和预处理 2. 创建和训练识别器 3. 图像识别和结果展示 4、结果展示 总结 简介 在人工智能和计算机视觉领域,人脸识别是一项非常有趣且实用的技术。本文将向您介绍如何使用OpenCV库以及FisherFace算法实现人脸识别。我们将一步…

数据可视化-使用python制作词云图(附代码)

想象一下,当你写完一篇日记或者一篇文章后,想要知道里面哪些词语出现得最多。这时候,词云图就能派上用场了。它会统计出文章里每个词语出现的次数,然后把这些词语以不同大小的字体展示出来,出现次数越多的词语&#xf…

【MATLAB代码】基于RSSI原理的蓝牙定位程序(N个锚点、三维空间),源代码可直接复制

文章目录 介绍主要功能技术细节适用场景程序结构运行截图源代码详细教程:基于RSSI的蓝牙定位程序1. 准备工作2. 代码结构2.1 清理工作环境2.2 定义参数2.3 生成锚点坐标2.4 定义信号强度与距离的关系2.5 模拟未知点的位置2.6 定位函数2.7 绘图2.8 输出结果2.9 定义定位函数3. …

SSL---SSL certificate problem

0 Preface/Foreword 0.1 SSL certificate problem 开发过程中,gitlab-runner连接gitlab时候出现SSL 证书问题。 场景:公司的gitlab runner服务器引入了SSL证书,每年都会主动更新一次。当前的gitlab-runner运行在PC机器上,但是g…

某乎接口zse96解析(附带可直接运行js)

某乎接口zse96解析 下面是作者呕心沥血,观看各路大神和某乎js拼接在一起的js,附带浏览器环境,可以直接运行示例接口多请求几次发现,出来zse96在变化之外,其余的基本不变,那么源码中直接搜索x-zse-96,得出下面2个函数 var tE = eo(te, tp.body, {xUDId: tv,zse93: tT,xApp…

IO编程--拷贝文件、文件总行数输出、时间打印

一、使用fread和fwrite完成两个文件的拷贝&#xff0c;要求源文件和目标文件由外界输入 代码如下: #include <myhead.h> int main(int argc, const char *argv[]) {//判断是否输入两个文件名if(argc!3){fprintf(stderr,"文件个数错误");return -1;}//以读形式打…

【去哪儿-注册安全分析报告-缺少轨迹的滑动条】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

Linux系统——lvm逻辑卷

Linux系统——lvm逻辑卷 一、lvm逻辑卷1、lvm操作流程2、操作指令 二、逻辑卷操作1、创建逻辑卷1.1 /dev/cloud/openstack 5G xfs /cloud/openstack1.2 /dev/cloud/docker 10G ext4 /cloud/docker 2、逻辑卷扩容2.1 扩容流程2.2 需求一&#xff1a;扩容ext4文件系统的逻辑卷2.3…

4款高效电脑录屏软件推荐:高清、不卡顿、无水印

在当今这个数字化时代&#xff0c;屏幕录制技术已经成为教育工作者、游戏玩家以及各类数字内容创作者不可或缺的工具。一款高效、稳定的录屏软件不仅能够帮你轻松捕捉屏幕上的精彩瞬间&#xff0c;还能提升你的内容创作效率。今天&#xff0c;我们就为大家推荐5款高清、不卡顿、…

斯坦福大学提出电影剧本可视化工具ScriptViz:能够根据剧本中的文本和对话自动检索相关的电影画面,帮助剧作家更好地构思和调整剧情

title:斯坦福大学提出电影剧本可视化工具ScriptViz&#xff1a;能够根据剧本中的文本和对话自动检索相关的电影画面&#xff0c;帮助剧作家更好地构思和调整剧情 斯坦福大学的研究者们开发了一个电影剧本可视化工具ScriptViz工具&#xff0c;ScriptViz的工作原理可以简单地理解…

oceanbase的日志量太大,撑爆磁盘,修改下日志级别

oceanbase的日志量太大&#xff0c;撑爆磁盘&#xff0c;修改下日志级别&#xff1a; [adminlnpg ~]$ obclient -h127.0.0.1 -uroot -P2881 -plinux123 Welcome to the OceanBase. Commands end with ; or \g. Your OceanBase connection id is 3221561020 Server version: O…

echarts显示隐藏柱状图柱子的背景色

showBackground: true, //控制是否显示背景色backgroundStyle: {// color: rgba(180, 180, 180, 0.4) //背景色的颜色color: red} 关键代码是 showBackground: true, //控制是否显示背景色 设置为false或者直接而不写就是不显示背景色&#xff0c;默认是不显示背景色 true的时…

IO作业代码

问题 通过 fwrite和 fread去拷贝 文件到另外一个文件上 #include<myhead.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include<errno.h> #include<time.h> int main(int argc, const char *argv[]) { FILE *fp fo…

ES 全文检索完全匹配高亮查询

我们ES会将数据文字进行拆词操作&#xff0c;并将拆解之后的数据保存到倒排索引当中几十使用文字的一部分也能查询到数据&#xff0c;这种检索方式我们就称之为全文检索&#xff0c;ES的查询结果也会倒排索引中去查询匹配 下面的查询结果中输入的词&#xff0c;就是输入小也可…