我最近一直在研究 Ollama,所以我花了很多时间思考如何在本地系统上运行大型语言模型 (LLMS) 以及如何将它们打包到应用程序中。 对于大多数使用 LLMS 的桌面应用程序,通常的体验是插入 OpenAI API 密钥或从源代码构建 Python 项目。 这些方法可以作为概念证明,但它们需要一些许多用户可能不具备的基本知识。 我一直在寻找的体验是一个只需单击一下即可直接运行的应用程序。 计划
一键**并运行。 没有外部依赖关系。 应用程序文件大小最小化。 简单的LLM版本控制和分发系统。 为所有主要操作系统构建和发布。 利用本地运行使本地文件系统可用。 用户不公开任何设置。 LLM 应在用户系统上以最佳性能运行,无需干预。 内置电池,但可更换。 对于高级用户,他们应该能够使用高级配置自定义驱动程序应用程序的 LLM。 考虑到所有这些因素,我决定开发一个名为“ChatGPT”的桌面应用程序,允许用户与他们的文档聊天。 这是一个常见的 LLM 用例,但我认为现在对于非技术最终用户来说,没有一个简单而伟大的选择。 它还充分利用了应用程序对文件系统的轻松访问。 建筑
该项目可以分解为四个定义明确的部分:渲染、进程间通信、主进程和 LLM 运行器。
渲染和进程间通信
渲染部分是使用典型的 HTML、CSS 和 J**ascript 完成的。 当用户执行需要处理的动作时,通过进程间通信将其发送到主进程。 这样就可以执行**并访问实际的主机系统。
主要流程
包括一些自定义文档处理(注意:请有人为常见的文档处理用例创建一个标准的 j**ascript 库),然后将提取的数据输入到 transformers 中JS中。 transformers.JS 库是由 Hugging Face 维护的项目,它允许您使用 Onnx 运行时在浏览器中运行模型。 这可能非常快。 最后,我将向量存储在内存中,因为目前没有满足我需求的内存中向量数据库。
LLM 跑步者
在处理完所有这些信息后,我使用 ollama 来打包和分发将驱动交互的 LLM。 目前,大多数用户将 Ollama 作为独立应用程序运行并向其发送查询,但它也可以直接打包和编排到桌面应用程序中。 我将 ollama 可执行文件添加到每个操作系统的相应包中,并编写了一些 j**ascript** 来协调可执行文件的使用。
这非常方便,因为我不仅能够使用 Ollama 作为运行 LLM 的可靠系统,而且还能够促进 Electron 包之外的 LLM 分发。 将 LLM 添加到 Electron 应用程序包本身意味着需要有大量的初始**(超过 4GB),并锁定用户仅使用我在 ChatGPT 中发布的模型。 此外,使用 Ollama 的分发系统,我还可以在不发布新应用程序的情况下更新或修改模型。 我可以进行更改以将模型推送到 ollamaAI 注册表,用户将在下次启动应用程序时获得更新。 利用 Ollama 还可以使用户体验保持简单,同时仍允许高级用户根据需要更改驱动应用程序的模型。 本地LLM的早期采用者(以及与我互动的Llama用户)对事物的工作原理感兴趣,并希望通过最新模型保持领先地位。 虽然 ollama 被打包到 chatd 中,但它可以检测 ollama 是否已经在运行。 在这种情况下,它会向用户显示其他设置,并允许他们配置 ChatGPT 并根据需要更改模型。 这也意味着用户不需要重新创建现有模型。
结果
我把ChatGPT给一些不属于典型ChatGPT用户群的朋友看,反响非常积极。 他们惊讶地看到 AI 在他们的计算机上简单且本地运行,他们很快看到了让这个原生聊天机器人访问他们文件的潜力。 我期待着改善这种体验,希望我们能看到一批新的桌面应用程序,使LLMS更易于使用。 ChatGPT项目地址: