使用客户端技术构建 LLM 驱动的 Web 应用

Web 应用的本地 LLM 集成

仅使用本地模型和客户端技术构建 Web 应用,可以消除对 OpenAI 或 Anthropic 等提供商进行昂贵 API 调用所需的成本。这种方法具有三个主要优势:为开发者提供零额外计算成本,由于数据从未离开本地机器,从而增强了用户隐私,并且通过消除 HTTP 调用开销,具有提高速度的潜力,尽管这可能会被用户硬件的限制所抵消。

实现本地 RAG 流水线

检索增强生成 (RAG) 允许用户通过从非结构化数据中提取信息来“与文档对话”。一个完全本地的 RAG 流水线由两个主要阶段组成:数据摄取和检索/生成。

数据摄取

数据摄取通过三个步骤将原始文档(如 PDF 或网页)转换为可查询的格式:

  1. Semantic Chunking:将文档拆分为更小、更有意义的片段。
  2. Vector Representation:使用嵌入模型为每个片段创建嵌入。
  3. Vector Storage:将这些片段和向量加载到专门的向量存储中。

在此实现中,LangChain 处理了文档加载和拆分。嵌入是通过 Transformers.js 包使用量化后的 HuggingFace 模型生成的,而向量存储由基于 Web Assembly 的向量存储 Voy 管理。

检索与生成

为了回答用户查询,系统会在向量存储中搜索与输入语义最相似的文档片段。这些片段与原始问题结合,引导 LLM 生成最终答案。

对于包含代词或对之前聊天历史引用的后续问题,会增加一个解引用(dereferencing)步骤。该步骤将初始查询重新表述为一个“独立”问题,以确保向量存储的检索保持准确。

Ollama 在本地 Web 应用中的作用

虽然特定任务的模型(如嵌入模型)可以在浏览器中高效运行,但全规模的 LLM 通常太大,无法直接打包进 Web 应用中。作者发现,基于浏览器的 LLM 项目通常要么无法生成高质量的响应,要么需要数 GB 的下载,从而导致显著的延迟。

Ollama 通过允许将本地运行的模型通过 shell 命令暴露给 Web 应用来解决这个问题。在本文描述的项目中,使用了 Mistral 7B 模型,该模型在 16GB M2 MacBook Pro 上运行良好。这使得 Web 应用可以利用用户机器上预装的强大 LLM,而无需在应用包中携带模型。

未来展望与浏览器 API 提案

随着开源模型变得越来越小且越来越快,以及消费级硬件越来越多地包含 GPU,本地 LLM 执行正变得越来越可行。然而,由于非技术用户不太可能运行 shell 命令来配置 CORS 并启动服务器,因此需要更无缝的集成方式。

作者提出了一个新的浏览器 API,该 API 将允许 Web 应用通过弹出窗口请求访问本地运行的 LLM,从而使应用能够利用本地计算能力,并结合其他浏览器内技术,而无需手动进行技术配置。

Sources

相关

  • Dispatch
  • 项目
  • 项目
  • 项目
  • 项目