如何将LLMs封装成应用并在本地运行

最近我一直在致力于Ollama的工作,因此我花了很多时间思考如何在本地系统上运行大型语言模型(LLMs)以及如何将它们打包成应用程序。对于使用LLMs的大多数桌面应用程序而言,通常的体验要么是插入OpenAI API密钥,要么是从源代码构建一个Python项目。这些方法可以作为概念验证,但它们需要一些基础知识,而许多用户可能不具备。我追求的体验是一个只需单击即可下载并直接运行的应用程序。计划

  • 一键下载并运行。
  • 无外部依赖。
  • 应用程序文件尺寸最小化。
  • 简单的LLM版本控制和分发系统。
  • 为所有主要操作系统构建和发布。
  • 充分利用本地运行,使本地文件系统可用。
  • 用户不暴露任何设置。LLM应该在用户系统上以最佳性能运行,无需干预。
  • 内置电池,但可替换。对于高级用户,他们应该能够使用高级配置自定义驱动应用程序的LLM。

考虑到所有这些因素,我决定开发一个名为“chatd”的桌面应用程序,允许用户与其文档进行聊天。这是一个常见的LLM应用场景,但我认为目前对于非技术终端用户而言,尚未有一个简单而出色的选择。它还充分利用了应用程序轻松访问文件系统的特点。架构95cd093cf59ec65549edbdfee1a132fb.jpeg该项目可以分为四个明确定义的部分:渲染、进程间通信、主进程和LLM运行器。

渲染和进程间通信

渲染部分使用典型的HTML、CSS和JavaScript完成。当用户执行需要处理的操作时,通过进程间通信将其发送到主进程。这使得可以执行代码,并访问实际的主机系统。

主进程

包括一些自定义文档处理(附注:请有人为通用文档处理用例创建一个标准的JavaScript库),然后将提取的数据输入到transformers.js中。transformers.js库是由Hugging Face维护的一个项目,允许您在浏览器中使用ONNX运行时运行模型。这可以非常快速。最后,我将向量存储在内存中,因为目前尚无符合我的需求的内存向量数据库。

LLM运行器

在处理了所有这些信息后,我使用Ollama作为打包和分发将驱动交互的LLM的方式。目前,大多数用户将Ollama作为独立的应用程序运行,并向其发送查询,但也可以直接将其打包到桌面应用程序中并进行编排。我为每个操作系统的相应软件包添加了Ollama可执行文件,并编写了一些JavaScript代码来编排可执行文件的使用。

这非常方便,因为我不仅能够利用Ollama作为可靠的系统来运行LLM,还能为在Electron软件包之外分发LLM提供便利的系统。将LLM添加到Electron应用程序包本身意味着需要进行大规模的初始下载(超过4GB),并将用户锁定为仅使用我在chatd中发布的模型。此外,使用Ollama的分发系统,我还可以在不发布新应用程序的情况下更新或修改模型。我可以进行更改,将模型推送到ollama.ai注册表,用户将在下次启动应用程序时获得更新。利用Ollama还使用户体验保持简单,同时仍然允许高级用户根据需要更换驱动应用程序的模型。早期采用本地LLM的用户(以及我与之互动的Ollama用户)对事物的工作方式感兴趣,并希望使用最新的模型保持领先地位。尽管Ollama被打包到chatd中,但它可以检测到Ollama是否已在运行。在这种情况下,它会向用户显示额外的设置,让他们根据需要配置chatd并更换模型。这还意味着用户无需重新下载已经存在的模型。

结果

我向一些不属于典型ChatGPT用户群体的朋友展示了chatd,他们的反响非常积极。在他们的计算机上看到AI简单而本地地运行是让他们惊叹不已的,他们迅速看到了让这个本地聊天机器人访问其文件的潜力。我期待着改进这一体验,希望我们能看到一批新的桌面应用程序使LLMs变得更加易用。Chatd项目地址:https://www.chatd.ai/

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

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

相关文章

protobuf基础学习

部分内容出自:https://blog.csdn.net/baidu_32237719/article/details/99723353 proto文件来预先定义的消息格式。数据包是按照proto文件所定义的消息格式完成二进制码流的编码和解码。proto文件,简单地说,就是一个消息的协议文件&#xff0c…

Git常用命令大全

1.强制推送(慎用,除非你认为其他冲突等可以丢弃 或者不是很重要) git push -- force2.创建文件等小命令 touch a // 创建一个a文件 echo 1234 >> a // 把1234这个内容放入a文件 cat a // 打开a文件 读取出a文件中的内容 mkdir test /…

MAC IDEA Maven Springboot

在mac中,使用idea进行maven项目构建 环境配置如何运行maven项目1.直接在IDEA中运行2.使用jar打包后执行 如何搭建spring boot1.添加依赖2.创建入口类3.创建控制器4. 运行5.其他 环境配置 官网安装IDEA使用IDEA的创建新项目选择创建MAEVEN项目测试IDEA的MAVEN路径是…

(第64天)UNPLIUG/PLUG 迁移 PDB

在 Oracle 12C 之前,迁移数据库的方式大多通过 RMAN 或者数据泵的方式,但是在 12C 版本提出 CDB/PDB 架构后,对数据库进行了整合,只需要针对 PDB 进行迁移即可,本文介绍通过 UNPLUG/PLUG 的方式来迁移数据库。 环境信息 测试环境信息: 角色主机名IP地址数据库版本实例名…

【二分查找】【双指针】LeetCode:2565最少得分子序列

作者推荐 【动态规划】【广度优先】LeetCode2258:逃离火灾 本文涉及的基础知识点 二分查找算法合集 有序向量的二分查找,初始化完成后,向量不会修改。 双指针: 用于计算子字符串是s的字符串的子系列。 题目 给你两个字符串 s 和 t 。 你…

《地理信息系统原理》笔记/期末复习资料(10. 空间数据挖掘与空间决策支持系统)

目录 10. 空间数据挖掘与空间决策支持系统 10.1. 空间数据挖掘 10.1.1. 空间数据挖掘的概念 10.1.2. 空间数据挖掘的方法与过程 10.1.3. 空间数据挖掘的应用 10.2. 空间决策支持系统 10.2.1. 空间决策支持系统的概念 10.2.2. 空间决策支持系统的结构 10.2.3. 空间决策…

Java网络编程,使用UDP实现TCP(二), 实现数据传输过程

简介: 经过了三次握手过程,我们的服务端和客户端已经建立了连接。我们接下来需要做的就是数据的传输。 主要步骤: 数据发送:客户端或服务器将数据打包成一个或多个数据段,每个数据段都有一个序列号(SEQ&a…

mybatis xml 热部署

平时我们在项目中多多少少会根据不同的情况等等原因去调试sql,在数据库测试完后也需要在代码里面运行测试,但是每次修改就需要重启服务就显得太繁琐,所以如果mybatis的xml也可以热部署当然是最好的了,那我来试试如何可以将mybatis…

pytorch-0.4.0上古版本安装参考

由于pytorch previous-versions中已经不显示该版本,而且网络上信息很少,配环境给我配麻了,所以提供一个参考。 我的配置: cuda 9.0 gcc 4.8.5 安装过程: conda create -n torch040 python3.6.6 conda install pytorc…

C++ 学习系列 -- conversion function

一 什么是转换函数? 在 c 编码中,我们可能遇到要将类 A 转为 类 B 的情况,此时就可以定义类 A 的转换函数将其按照一定规则转换为 类 B; 转换函数声明规则如下: operator 转换类型() const; 转换函数无返回值&#x…

基于chaos混沌的彩色图像加解密系统matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 混沌理论简介 4.2 基于混沌的图像加密原理 4.3 数学公式与实现过程 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 .................…

记录将C语言编写的Windows程序转换为python语言编写,演示具体效果在最后,这对初学者理解Windows消息机制及框架有一定参考作用

主要思路 由于C语言的数组定义使用名字加中括号及括号内数字定义,但是在python中【】已经被作为列表 元组等序列类型分片、存取元素,因此我们不能像C语言那样定义数组 例如C语言 int a[10] 是声明定义一个含有10个int类型的数组a,而在执行语句部分…

Android基础:使用Intent意图类 和 Bundle类对安卓页面Activity页面进行数据的传递 实现Activity页面之间通信技术

Android Intent 和 Bundle与Activity之间的通信 下面是Android基础:使用Intent意图类 和 Bundle类对安卓页面Activity页面进行数据的传递 && 实现Activity页面之间通信技术 ** 实现的目的 **:页面之间的数据传输,通过将数据打包传递…

华为OD机试真题B卷 Java 实现【统计大写字母个数】,附详细解题思路

一、题目描述 找出给定字符串中大写字符(即’A’-‘Z’)的个数。 数据范围:字符串长度:1≤∣s∣≤250 字符串中可能包含空格或其他字符 二、输入描述 对于每组样例,输入一行,代表待统计的字符串。 三、输出描述 输出一个整…

【1day】​万户协同办公平台 iSignatureHTML.jsp/DocumentEdit.jsp 文件SQL注入漏洞学习

注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录 一、漏洞描述 二、影响版本 三、资产测绘 四、漏洞复现

【css】css实现文字两端对齐效果:

文章目录 一、方法1:二、方法2:三、注意: 一、方法1: 给元素设置 text-align: justify;text-align-last: justify;并且加上text-justify: distribute-all-line; 目的是兼容ie浏览器 p{width: 130px;text-align: justify;text-alig…

飞天使-linux操作的一些技巧与知识点3-http的工作原理

文章目录 http工作原理nginx的正向代理和反向代理的区别一个小技巧dig 命令巧用 http工作原理 http1.0 协议 使用的是短连接,建立一次tcp连接,发起一次http的请求,结束,tcp断开 http1.1 协议使用的是长连接,建立一次tc…

Network 灰鸽宝典【目录】

目前已有文章 21 篇 Network 灰鸽宝典专栏主要关注服务器的配置,前后端开发环境的配置,编辑器的配置,网络服务的配置,网络命令的应用与配置,windows常见问题的解决等。 文章目录 服务配置环境部署GitNPM 浏览器编辑器系…

GEE:重分类

作者:CSDN @ _养乐多_ 本文记录了在 Google Earth Engine(GEE)平台上对一副类别图像进行重分类的代码。并以 COPERNICUS/Landcover/100m/Proba-V-C3/Global 数据集中的土地利用数据为例。 结果如下图所示, 文章目录 一、核心函数二、示例代码三、代码链接一、核心函数 核…

文件操作及函数

什么是文件? 在程序设计中,文件有两种:程序文件和数据文件。 程序文件 包括源程序文件(.c),目标文件(.obj),可执行程序(.exe)。 数据文件 文件的内容不一定是程序&…