前端大模型入门:使用Transformers.js实现纯网页版RAG(一)

news2024/9/28 7:36:44

我将使用两篇文章的篇幅,教大家如何实现一个在网页中运行的RAG系统。本文将其前一半功能:深度搜索。

通过这篇文章,你可以了解如何在网页中利用模型实现文本相似度计算、问答匹配功能,所有的推理都在浏览器端本地执行,无需依赖服务器。

RAG搜索与传统搜索的不同之处在于:它不再是关键字匹配,而且基于高纬向量(768至数千维)空间的距离,所以匹配时不需要全词命中等。对一些说法不一样但意思一样的搜索有奇效,例如RAG搜索土豆可以得出马铃薯、洋芋相关的结果,因为它们的高纬空间距离很近

1 测试页面概述

以下是我创建的一个简单测试的HTML页面,核心功能包括用户输入问题,系统会基于预定义的问答库进行向量检索,并返回最相关的问题和答案:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>网页RAG</title>
  </head>

  <body>
    <div id="app">
      <div>
        <input type="text" id="question" />
        <button id="search">搜索</button>
      </div>
      <div id="info"></div>
    </div>
    <script type="module">
      import {
        pipeline,
        env,
        cos_sim,
      } from "https://cdn.jsdelivr.net/npm/@xenova/transformers@2.17.2/dist/transformers.min.js";
     env.remoteHost = "https://hf-mirror.com";
    </script>
  </body>
</html>

2 核心功能解析

2.1 知识库

我们首先定义了一组预先设置好的问题和对应的正确答案,分别存储在questionsground_truth数组中。这个系统的工作原理是:用户输入的问题将与这些已知问题进行相似度匹配,找到最相似的问题,然后返回对应的答案。

      const questions = [
        "洛基在征服地球的尝试中使用了什么神秘的物体?",
        "复仇者联盟的哪两名成员创造了奥创?",
        "灭霸如何实现了他在宇宙中消灭一半生命的计划?",
        "复仇者联盟用什么方法扭转了灭霸的行动?",
        "复仇者联盟的哪位成员牺牲了自己来打败灭霸?",
      ];


      const ground_truth = [
        "六角宝",
        "托尼·斯塔克(钢铁侠)和布鲁斯·班纳(绿巨人浩克)。",
        "通过使用六颗无限宝石",
        "通过时间旅行收集宝石。",
        "托尼·斯塔克(钢铁侠)",
      ];
      

2.2 初始化配置-向量库+查询管道

      const verctorStore = [];
      const task = "feature-extraction";
      const model = "Xenova/bge-base-zh-v1.5";
      const infoEl = document.getElementById("info");
      const pipe = pipeline(task, model, {
        progress_callback: (d) => {
          infoEl.innerHTML = JSON.stringify(d);
        },
      });

transformers.js我已经在上一篇文章前端大模型入门:Transformer.js 和 Xenova进行了介绍,此次使用了Xenova/bge-base-zh-v1.5模型进行特征提取-词嵌入。

2.3 向量存储与构建

为了提高性能,我们在用户第一次查询时,将所有预定义问题的特征向量一次性生成并存储在verctorStore中。后续查询时,直接基于这些预生成的向量进行相似度计算。

      const buildVector = async () => {
        if (!verctorStore.length) {
          const embedding = await pipe;
          const output = await embedding(questions, {
            pooling: "mean",
            normalize: true,
          });
          questions.forEach((q, i) => {
            verctorStore[i] = output[i];
          });
        }
      };

2.4 相似度计算与答案匹配

当用户输入问题时,系统将问题向量化,并与存储的预定义问题向量进行余弦相似度(cosine similarity)计算。最后,返回得分最高的问题及其对应的答案。

      const search = async () => {
        const embedding = await pipe;
        const question = document.getElementById("question").value;
        const [qVector] = await embedding([question], {
          pooling: "mean",
          normalize: true,
        });
        await buildVector();
        const scores = verctorStore.map((q, i) => {
          return {
            score: cos_sim(qVector.data, verctorStore[i].data),
            question: questions[i],
            index: i,
          };
        });
        const max = scores.reduce((a, b) => (a.score > b.score ? a : b));
        infoEl.innerHTML = JSON.stringify(`最相似问题:${max.question} - 答案:${ground_truth[max.index]}`);
      };

      document.querySelector("#search").onclick = search;

2.5 效果测试

3 网页端 RAG 应用场景

在浏览器内直接运行基于 RAG,能够大幅提高用户的交互体验,我们可以在用户的浏览器中实时执行自然语言处理任务,而不必依赖外部 API 或服务器。以下是一些适合网页端 RAG 模型应用的场景:

3.1 列表搜索和过滤

在许多现代网页应用中,用户往往需要在庞大的列表数据中找到自己感兴趣的条目。传统的搜索方式可能是基于关键词的匹配,但这对于一些复杂查询或上下文相关的搜索可能效果不佳。通过在浏览器中使用 RAG 模型,用户可以直接输入自然语言问题,系统可以检索并生成更符合语义的答案。例如:

  • 电商平台商品列表搜索:用户可以用自然语言提出复杂查询,比如“价格低于100美元的蓝色连衣裙”,RAG 模型能够根据查询生成符合条件的商品列表,并准确筛选出符合条件的商品。
  • 文件或文章列表的智能检索:在教育或工作环境中,用户可能需要从大量文件中找到特定信息,例如“找到包含人工智能技术应用的文章”。RAG 可以快速检索列表并为用户生成最相关的结果。

3.2 网页功能搜索和导航

对于复杂的网页或应用,用户在寻找某一特定功能时,可能很难记住具体的按钮位置或操作流程。通过使用 RAG,用户可以直接在搜索框中输入自然语言命令,模型会根据查询生成详细的功能位置或直接执行相应操作。例如:

  • 设置页面的功能搜索:用户可以在设置页面内输入“如何更改密码”或“开启暗黑模式”,RAG 模型可以快速定位到相关设置选项,甚至生成具体的操作步骤或自动跳转到对应功能页面。
  • 复杂 SaaS 系统的导航:在企业级 SaaS 系统中,功能模块繁多且设置复杂。用户可以通过自然语言查询,快速找到如何执行某个任务,例如“如何导出销售报告”或“查看上月的财务报表”,提高用户的操作效率。

3.3 文档或产品说明的智能查询

对于一些技术文档、产品说明书或者服务条款等长篇文字内容,用户通常需要花费较多时间来查找具体的信息。而通过在网页端集成 RAG 模型,用户可以直接提出问题,模型会从相关文档中检索出最相关的内容并生成精确的回答。例如:

  • 技术文档的问答:在开发者平台或在线帮助文档中,用户可以输入自然语言问题,如“如何在项目中集成 API”,RAG 模型可以立即生成与该问题相关的文档片段,并提供详细的操作指引。
  • 产品说明的快速解答:对于电子产品或软件产品的用户,可能会有具体功能或使用上的疑问。用户可以直接在产品页面输入问题,如“如何启用手写识别功能”,RAG 可以从产品说明书中检索并生成详细的使用说明。

3.4 智能表单填写助手

在许多应用场景中,用户需要填写复杂的表单,如申请表、注册表或调查问卷。通过 RAG 模型,可以为用户提供智能化的表单填写建议。用户可以输入自然语言描述,模型生成相应的表单字段内容,自动填充或提供填写建议。例如:

  • 在线申请表单:用户可以输入“我住在纽约,我的邮政编码是10001”,RAG 模型可以自动填写地址相关的表单字段,减少用户的手动操作。
  • 复杂调查问卷:在调查问卷中,RAG 模型可以根据用户提供的信息生成智能化建议,如“我想投资科技领域”,模型可以根据此生成相关的问卷选项或建议答案。

4 小结

通过阅读本文,相信你已经学会在浏览器端实现一个深度搜索功能,让用户不必严格按照某些格式等输入内容便能实现搜索、过滤等,尤其是文本多,大列表的场景。接下来的一章,我将会教你如何实现后部分的生成功能。

代码比较粗糙,但可以跑起来的,希望看完的你能够下载页面,自己修改一些内容参数等跑一跑哈~

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

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

相关文章

C语言-IO

一,阻塞IO与非阻塞IO 简介: IO的本质是基于操作系统接口来控制底层的硬件之间数据传输&#xff0c;并且在操作系统中实现了多种不同的 IO 方式&#xff08;模型&#xff09;&#xff0c;比较常见的有下列三种 阻塞型IO模型 非阻塞型IO模型 多路复用IO模型 在 C 语言中&#…

牛客SQL练习详解 02:条件查询

牛客SQL练习详解 02&#xff1a;条件查询 1、基础排序sql36 查找后排序sql37 查找后多列排序sql38 查找后降序排列 2、基础操作符sql6 查找学校时北大的学生信息sql7 查找年龄大于24岁的用户信息sql8 查找某个年龄段的用户信息sql9 查找chuchu 3、高级操作符sql11 高级操作符练…

认知杂谈91《菜鸟的自我修炼:减少过度干预》

内容摘要&#xff1a;          在投资和生活中&#xff0c;动作过多往往因情绪波动和缺乏计划而引发亏损。历史上的安史之乱和现代投资中的频繁交易都是例证。要管理情绪&#xff0c;首先要认识自己的情绪模式&#xff0c;然后改变消极的思考方式&#xff0c;并通过合…

『USB3.0Cypress』QT基于cyusb_linux_1.0.5开发上位机

文章目录 1.CyUSB Suite2.搭建开发环境3.Cyusb的应用4.疑问解决5.传送门1.CyUSB Suite CyUSB Suite for Linux是一个围绕现有开源用户空间USB库libusb的wrapper。CyUSB套件通过围绕libusb的简化包装器以及在下载固件后提供用于测试外围设备的基础设施,让您快速入门。换句话说…

1.6 物理层

欢迎大家订阅【计算机网络】学习专栏&#xff0c;开启你的计算机网络学习之旅&#xff01; 文章目录 前言1 物理层的基本概念1.1 定义1.2 作用1.3 物理层的主要任务 2 数据通信的基础知识2.1 常用术语2.2 信号2.3 码元2.4 信道2.5 数据通信系统模型 3 信道的极限容量3.1 基本术…

LabVIEW提高开发效率技巧----合理管理程序架构

在LabVIEW开发中&#xff0c;合理管理程序架构是保持项目可维护性和扩展性的关键。随着项目复杂度的增加&#xff0c;良好的架构设计可以避免代码混乱&#xff0c;并且便于后期的修改和扩展。以下是两种常见且有效的架构管理方式&#xff1a; 1. 面向对象编程&#xff08;OOP&a…

Sony IMX334LQR-C 1/1.8寸 8.42 M像素

索尼IMX334LQR宽动态超星光级交通监测CMOS 封装&#xff1a;LGA 对⾓线&#xff1a;8.86 mm&#xff08;类型1/1.8&#xff09; 索尼IMX334LQR宽动态超星光级交通监测CMOS的参数及规格书资料&#xff1a; IMX334LQR-C是⼀个对⾓线8.86 mm&#xff08;类型1/1.8&#xff09;的…

安科瑞Acrel-1000DP分布式光伏监控系统在鄂尔多斯市鄂托克旗巴音乌苏六保煤矿5MW分布式光伏项目中的应用

安科瑞 华楠 摘 要&#xff1a;分布式光伏发电就是将太阳能光伏板分散布置在各个区域&#xff0c;通过小规模、模块化的方式实现电能的并网或独立使用&#xff0c;这种发电方式具有就近发电、就近并网、就近转换、就近使用的特点。近年来&#xff0c;技术进步和政策支持推动了光…

8086介绍

内部结构 执行部件EU&#xff08;Execution Unit&#xff09; 包含运算器、通用寄存器组、EU控制单元。 只负责控制&#xff0c;不和外部总线打交道 总线接口部件BIU&#xff08;Bus Interface Unit&#xff09; 包含指令队列缓冲器、16位指令指针寄存器IP、16位段寄存器&am…

TypeScript入门 (五)异步编程与前后端交互

引言 大家好&#xff0c;我是GISer Liu&#x1f601;&#xff0c;一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年9月学习赛的TypeScript学习总结文档。本文旨在全面介绍 TypeScript 中的异步编程与网络请求&#xff0c;帮助读者深入理解 TypeScript 中的 asyn…

Colorful/七彩虹将星X17 XS 22 Win11原厂OEM系统 带COLORFUL一键还原

安装完毕自带原厂驱动和预装软件以及一键恢复功能&#xff0c;自动重建COLORFUL RECOVERY功能&#xff0c;恢复到新机开箱状态。 【格式】&#xff1a;iso 【系统类型】&#xff1a;Windows11 原厂系统下载网址&#xff1a;http://www.bioxt.cn 注意&#xff1a;安装系统会…

Redis 五大基本数据类型及其应用场景进阶(缓存预热、雪崩 、穿透 、击穿)

Redis 数据类型及其应用场景 Redis 是什么? Redis是一个使用C语言编写的高性能的基于内存的非关系型数据库&#xff0c;基于Key/Value结构存储数据&#xff0c;通常用来 缓解高并发场景下对某一资源的频繁请求 &#xff0c;减轻数据库的压力。它支持多种数据类型,如字符串、…

Linux安装JDK及配置环境变量超详细教程

微服务Linux解析部署使用全流程 linux系统的常用命令 Linux安装vim超详细教程 Linux安装tomcat及配置环境变量超详细教程 1、上传压缩包 统一创建目录&#xff1a;/usr/local/jdk&#xff0c;将压缩包上传到这个目录下。拖动文件到这个目录下即可。 2、执行解压命令 先进…

ELMO理论

目录 1 优点 2 缺点 3.知识点个人笔记 2018年3月份&#xff0c;ELMo出世&#xff0c;该paper是NAACL18 Best Paper。在之前2013年的word2vec及2014年的GloVe的工作中&#xff0c;每个词对应一个vector&#xff0c;对于多义词无能为力。ELMo的工作对于此&#xff0c;提出了一…

在 Gitlab 中使用 ChatGPT 进行 CodeReview

ChatGPT集成Gitlab&#xff0c;实现自动代码审计并进行评论&#xff0c;为软件开发团队提供高效、智能的代码审查解决方案。支持其他模型如通义千问等 自动触发与及时响应&#xff1a;利用Gitlab的Webhook功能&#xff0c;实现代码提交、合并请求和标签创建等事件的自动触发。一…

安全帽检测系统丨OPENAIGC开发者大赛高校组AI创作力奖

在第二届拯救者杯OPENAIGC开发者大赛中&#xff0c;涌现出一批技术突出、创意卓越的作品。为了让这些优秀项目被更多人看到&#xff0c;我们特意开设了优秀作品报道专栏&#xff0c;旨在展示其独特之处和开发者的精彩故事。 无论您是技术专家还是爱好者&#xff0c;希望能带给…

国产化低功耗低延时广覆盖物联网无线通讯方案_LAKI模组

01 物联网系统中为什么要使用LAKI模组。 物联网系统中使用LAKI模组的原因可以归结为以下几个方面&#xff1a; 技术先进性 广覆盖能力&#xff1a;LAKI模组具有卓越的广覆盖能力&#xff0c;其射频SoC芯片接收灵敏度小于-120dBm125kbps&#xff0c;系统通讯距离可达5千米以上…

一款好用的多种格式电子书制作软件

在数字化阅读日益普及的今天&#xff0c;电子书已经成为人们日常生活中不可或缺的一部分。而一款功能强大、操作简便的电子书制作软件&#xff0c;无疑是满足广大用户需求的最佳选择。 这款软件名为“FLBOOK在线制作电子杂志平台”&#xff0c;它支持多种格式输入&#xff0c;如…

设计模式、系统设计 record part02

软件设计模式&#xff1a; 1.应对重复发生的问题 2.解决方案 3.可以反复使用 1.本质是面向对象 2.优点很多 1.创建型-创建和使用分离 2.结构型-组合 3.行为型-协作 571123种模式 UML-统一建模语言-Unified Modeling Language 1.可视化&#xff0c;图形化 2.各种图&#xff08;9…

Python编程:08- pycharm使用技巧

新建文件时,自动填充代码 设置方法&#xff1a; settings→editor→file and code templates,选择python script #${NAME} 文件名 #${DATE} 日期自动补齐 if name ‘main’: # 先输入main,然后按tab键自动补齐自定义的段落 settings→editor→live templates,在右侧点击号…