如何将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/

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

freemarker+Aspose.word实现模板生成word并转成pdf

需求:动态生成pdf指定模板 实现途径:通过freemarker模板,导出word文档,同时可将word转为pdf。 技术选择思路 思路一:直接导出pdf 使用itext模板导出pdf 适用范围 业务生成的 pdf 是具有固定格式或者模板的文字及其…

【Hadoop_05】NN、2NN以及DataNode的工作机制

1、NameNode和SecondaryNameNode1.1 NN和2NN工作机制1.2 Fsimage和Edits解析1.3 CheckPoint时间设置 2、DataNode2.1 DataNode工作机制2.2 数据完整性2.3 掉线时限参数设置 1、NameNode和SecondaryNameNode 1.1 NN和2NN工作机制 思考:NameNode中的元数据是存储在哪…

HarmonyOS鸿蒙应用开发——数据持久化Preferences

文章目录 数据持久化简述基本使用与封装测试用例参考 数据持久化简述 数据持久化就是将内存数据通过文件或者数据库的方式保存到设备中。HarmonyOS提供两两种持久化方案: Preferences:主要用于保存一些配置信息,是通过文本的形式存储的&…

【启扬方案】启扬储能管理平板助力储能电站实现智能且高效化运行

在储能领域,储能电站扮演着重要角色,储能电站技术的应用贯穿于电力系统发电、输电、配电、用电的各个环节。实现电力系统削峰填谷、可再生能源发电波动平滑与跟踪计划处理、高效系统调频,增加供电的可靠性。 但随着储能电⼒系统建设发展得越来…

实时云渲染技术下的虚拟汽车展厅 为什么越来越受青睐?

虚拟汽车展厅正成为各大车企展示和推广汽车的热门选择。这一趋势背后,反映了汽车行业对数字化转型和消费者需求变化的灵敏应对。 虚拟汽车展厅通常需要大量的3D建模和渲染技术来展示汽车的逼真效果。而点量实时云渲染技术可以通过云端计算来实现实时渲染&#xff0…

【Matlab】如何将二阶线性微分方程进行Laplace变换得到传递函数

二阶线性微分方程进行Laplace变换 前言正文代码实现 前言 二阶线性微分方程: 一个二阶线性微分方程通常可以写成如下形式: y ′ ′ ( t ) p ( t ) y ′ ( t ) q ( t ) y ( t ) f ( t ) y^{\prime \prime}(t)p(t) y^{\prime}(t)q(t) y(t)f(t) y′′(t)p(t)y′(t)q(t)y(t)f(…

CS110L 系统编程安全 笔记

用户向程序输入数据,程序分析数据,但是当用户的输入大于缓冲区长度时,数据会溢出,覆盖掉内存中其他内容,比如函数返回地址,从而可能导致程序返回到错误的地址执行了不安全的程序(远程代码执行&a…

selenium自动化(中)

显式等待与隐式等待 简介 在实际工作中等待机制可以保证代码的稳定性,保证代码不会受网速、电脑性能等条件的约束。 等待就是当运行代码时,如果页面的渲染速度跟不上代码的运行速度,就需要人为的去限制代码执行的速度。 在做 Web 自动化时…

基于单片机的定时插座在智能家居中的应用

近年来,随着科学技术的发展迅速,人们对智能化的要求越来越高。越来越多的智能化产品进入千家万户,如电脑电视、扫地机器人、智能空气净化器等。这些家居电器和电子产品大都需要连接电源,为满足多种用电器的正常使用,延…

beebox靶场A3 low级别 xss通关教程(二)

六:xss get型 eval 通过观察我们可以发现url地址中存在一个date函数 那我们可以试一下把后面的date()函数去掉,直接写入一个alert(555) 发现直接弹出一个框,证明有xss漏洞 七:xss href 直接进入页面会看到是get方法&#xff0c…

计网 - LVS 是如何直接基于 IP 层进行负载平衡调度

文章目录 模型LVS的工作机制初探LVS的负载均衡机制初探 模型 大致来说,可以这么理解(只是帮助我们理解,实际上肯定会有点出入),对于我们的 PC 机来说,物理层可以看成网卡,数据链路层可以看成网卡…

计算机毕业设计 基于SpringBoot的乡村政务办公系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

Appium 自动化自学篇 —— 初识Appium自动化!

Appium 简介 随着移动终端的普及,手机应用越来越多,也越来越重要。而作为测试 的我们也要与时俱进,努力学习手机 App 的相关测试,文章将介绍手机自动化测试框架 Appium 。 那究竟什么是 Appium 呢? 接下来我们一起来学习PythonS…

CentOS 7 离线安装MySQL审计插件

命令行 cd /data/toolssz mariadb-10.2.38-linux-x86_64.tar.gztar -zxvf mariadb-10.2.38-linux-x86_64.tar.gzinstall lib/plugin/server_audit.so /usr/lib64/mysql/plugin/mysql -uroot -prootinstall plugin server_audit SONAME server_audit.so;show variables like &q…

【Apollo】ubuntu20.04源码安装apollo8.0

官方源码安装教程 https://blog.csdn.net/weixin_45929038/article/details/120113008 安装NVIDIA GPU驱动 Apollo 8.0 的一些模块的编译和运行需要依赖 NVIDIA GPU 环境(例如感知模块),如果有编译和运行这类模块的需求,则需要安…

Redis生产实战-热key、大key解决方案、数据库与缓存最终一致性解决方案

生产环境中热 key 处理 热 key 问题就是某一瞬间可能某条内容特别火爆,大量的请求去访问这个数据,那么这样的 key 就是热 key,往往这样的 key 也是存储在了一个 redis 节点中,对该节点压力很大 那么对于热 key 的处理就是通过热…

深入探索 Spring Boot:简化开发,加速部署的全方位利器

目录 导言 1. 自动配置(Auto-Configuration) 2. 起步依赖(Starter Dependencies) 3. 嵌入式 Web 服务器 4. Actuator 5. 外部化配置 6. 简化的安全性配置 7. Spring Boot CLI 8. Spring Boot DevTools 导言 在当今软件开…

【华为数据之道学习笔记】4-2信息架构原则:建立企业层面的共同行为准则

信息架构承载了企业如何管理数据资产的方法,需要从整个企业 层面制订统一的原则,这些原则不仅是对数据专业人员的要求,也是对业务的要求,因为业务才是真正的数据Owner。所以,公司所有业务部门都应该共同遵从信息架构原…

学习pytorch20 pytorch完整的模型验证套路

pytorch完整的模型验证套路 使用非数据集的测试数据,测试训练好模型的效果代码预测结果解决报错 B站小土堆pytorch学习视频 https://www.bilibili.com/video/BV1hE411t7RN/?p32&spm_id_frompageDriver&vd_source9607a6d9d829b667f8f0ccaaaa142fcb 使用非数…

postman接口测试之Postman配置环境变量和全局变量

前言  我们在测试的过程中,遇到最多的问题也可以是环境的问题了吧,今天开发用了这个测试环境,明天又换了另一个测试环境,这样对于我们测试非常的麻烦,特别最接口的时候需要来回的输入环境地址比较麻烦,今天…