Denser Retriever: RAG中更强大的AI检索器,让您10 分钟内构建聊天机器人应用

一、Denser Retriever 介绍

Denser Retriever 是一个企业级的RAG检索器,将多种搜索技术整合到一个平台中。在MTEB数据集上的实验表明,Denser Retriever可以显著提升向量搜索(VS)的基线(snowflake-arctic-embed-m模型, 在MTEB/BEIR排行榜达到了最先进的性能)。

它来自Denser.ai公司,创始人是黄志恒,曾担任 AWS 首席科学家,领导过 Amazon Kendra 和 Amazon Business Q 项目,截至 2024 年7 月,他的谷歌学术被引用次数超过 13,700 次。Denser Retriever是完全开源的,可以使用其构建自己专属的RAG应用和聊天机器人。

RAG系统主要包括两个部分:检索器和生成器。AI检索器用于确保 AI 应用中的准确和无缝体验。检索器大致分为两类:关键词搜索和向量搜索。关键词搜索依赖于关键词匹配,而向量搜索则关注语义相似性。流行的工具包括用于关键词搜索的 Elasticsearch 和用于向量搜索的 Milvus、Chroma 和 Pinecone。

在大语言模型时代,许多领域的专业人士都热衷于开发 RAG AI 应用原型。像 Langchain 这样的工具发挥着重要作用。例如,用户可以使用 Langhian 和 Chroma 快速构建一个用于法律文档分析的 RAG 应用。

DenserAI 团队推出的 Denser Retriever 侧在快速原型设计方面表现优异。Denser Retriever将多种搜索技术整合到一个平台中。它利用梯度提升(xgboost)机器学习技术,将关键词搜索、向量搜索和机器学习重排序结合在一起。

在 MTEB 数据集上评估 Denser Retriever。通过xgboost模型(记作ES+VS+RR_n)将关键词搜索、向量搜索和重排序器结合,可以显著提升向量搜索(VS)的基线(snowflake-arctic-embed-m模型, 在MTEB/BEIR排行榜达到了最先进的性能)。ES+VS+RR_n模型在15个MTEB数据集上达到了最高的NDCG@10得分56.47,相比snowflake模型(NDCG@10得分54.24)绝对提升了2.23,相对提升了4.11%。在广泛认可的MSMARCO基准数据集上,ES+VS+RR_n模型将snowflake模型的NDCG@10得分从41.77提升到47.23,带来了13.07%的相对提升。

用户可以通过一个简单的 Docker Compose 命令快速安装 Denser Retriever 及其所需工具,用于构建自己专属的RAG应用。同时Denser Retriever还提供了自托管解决方案,支持企业级别生产环境的部署。

1.1、Denser Retriever 能做什么?

Denser Retriever 的初始版本提供了如下功能:

● 支持异构检索器,如关键词搜索、向量搜索和机器学习模型重排序

● 利用 xgboost 机器学习技术有效结合异构检索器。

● 在MTEB检索基准测试上达到最先进的精确度

● 演示如何使用 Denser Retriever 来驱动端到端应用,如聊天机器人和语义搜索。

● 提供了详细的开发文档和安装指南

1.2、Denser Retriever的优势

完全开源:Denser Retriever 是开源的,提供透明性和持续的社区驱动改进机会。

可企业级中使用:设计用于生产环境的部署,确保实际应用中的可靠性和稳定性。

最先进的精度:提供最先进的准确性,提高 AI 应用质量。

可扩展:无论是处理不断增长的数据需求还是扩展用户需求,Denser Retriever 都能无缝扩展以满足要求。

灵活性:该工具适应广泛的应用,并可根据具体需求进行定制,是多种行业的多功能选择。

接下来,我们会介绍如何使用Denser Retriever构建一个由 AI 驱动的聊天机器人应用程序,该应用程序允许您根据自己的数据自定义自己的知识聊天机器人。

我们将介绍如何:

  • 使用 Next.js 构建 Web 应用程序,
  • 使用@vercel/ai 将 AI 集成到软件应用程序中,
  • 使用 DenserRetriever 检索您自己的数据。

1.3、先决条件

要完全理解本教程,您需要对 React 或 Next.js 有基本的了解。以下是构建 AI 驱动的聊天机器人应用程序所需的工具:

Docker&Docker compose - 在您的本地主机上提供 DenserRetriever api服务器。

OpenAI API——提供 API 密钥,使我们能够使用 ChatGPT 模型执行各种任务。

二、项目设置和包安装

2.1、创建 Next.js 项目

首先,通过在终端中运行以下代码片段来创建 Next.js 应用程序:

npx create-next-app --example https://github.com/vercel/ai/tree/main/examples/next-langchain next-retriever

在本教程中,我们将使用 vercel 的 langchain 集成模板。接下来,我们可以安装依赖项。

cd next-retriever
npm install

2.2、启动 DenserRetriever

首先,将 docker-compose.yml 文件复制到您的工作目录。

version: "3.5"services:denserretriever:image: jotyy318/denserretrieverhealthcheck:test: ["CMD", "curl", "-f", "http://localhost:8090/"]interval: 30stimeout: 20sretries: 3ports:- "8090:8090"elasticsearch:image: elasticsearch:8.13.4environment:- discovery.type=single-node- ES_JAVA_OPTS=-Xms1g -Xmx1g- xpack.security.enabled=falsevolumes:- ${DOCKER_VOLUME_DIRECTORY:-./docker-volume}:/usr/elasticsearch/dataports:- "9200:9200"- "9300:9300"etcd:container_name: milvus-etcdimage: quay.io/coreos/etcd:v3.5.0environment:- ETCD_AUTO_COMPACTION_MODE=revision- ETCD_AUTO_COMPACTION_RETENTION=1000- ETCD_QUOTA_BACKEND_BYTES=4294967296volumes:- ${DOCKER_VOLUME_DIRECTORY:-./docker-volume}/volumes/etcd:/etcdcommand: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcdminio:container_name: milvus-minioimage: minio/minio:RELEASE.2020-12-03T00-03-10Zenvironment:MINIO_ACCESS_KEY: minioadminMINIO_SECRET_KEY: minioadminvolumes:- ${DOCKER_VOLUME_DIRECTORY:-./docker-volume}/volumes/minio:/minio_datacommand: minio server /minio_datahealthcheck:test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]interval: 30stimeout: 20sretries: 3standalone:container_name: milvus-standaloneimage: milvusdb/milvus:v2.3.15command: ["milvus", "run", "standalone"]environment:ETCD_ENDPOINTS: etcd:2379MINIO_ADDRESS: minio:9000volumes:- ${DOCKER_VOLUME_DIRECTORY:-./docker-volume}/volumes/milvus:/var/lib/milvusports:- "19530:19530"depends_on:- "etcd"- "minio"networks:default:name: milvus

接下来,您可以将 /code/data 中的数据替换为您自己的数据。如果没有,它将使用 DenserAI 的默认数据。

最后,运行以下命令启动 DenserRetriever。

docker compose up -d

索引建立完成后,DenserRetriever 的状态是可正常运行的。

然后,您现在可以构建应用程序了。

三、构建聊天机器人应用程序

在本节中,我将引导您构建聊天机器人应用程序。要设置 Next.js 和 DenserRetriever 之间的连接,请导航到 Next.js 应用程序文件夹 /api/chat 并编辑文件 route.ts 。

import { ChatOpenAI } from "@langchain/openai";
import { LangChainAdapter, Message, StreamingTextResponse } from "ai";
import { AIMessage, HumanMessage } from "langchain/schema";export const dynamic = "force-dynamic";
export const maxDuration = 60;function generatePrompt(query: string, passages: string[]): string {let prompt: string ="### Instructions:\n" +"The following context consists of an ordered list of sources. If you can find answers from the context, use the context to provide a long response. You MUST cite the context titles and source URLs strictly in Markdown format in your response. If you cannot find the answer from the sources, use your knowledge to come up with a reasonable answer and do not cite any sources. If the query asks to summarize the file or uploaded file, provide a summarization based on the provided sources. If the conversation involves casual talk or greetings, rely on your knowledge for an appropriate response.";prompt += `### Query:\n${query}\n`;if (passages.length > 0) {prompt += `\n### Context:\n${JSON.stringify(passages)}\n`;}prompt += "### Response:";return prompt;
}export async function POST(req: Request) {const {messages,}: {messages: Message[];} = await req.json();const model = new ChatOpenAI({model: "gpt-4o",},{baseURL: process.env.OPENAI_API_BASE_URL,},);const query = messages[messages.length - 1].content;const { passages } = await fetch("http://127.0.0.1:8090/retrieve", {method: "POST",headers: {"Content-Type": "application/json",},body: JSON.stringify({question: query,}),}).then((res) => {if (res.ok) {return res.json();} else {throw new Error("Failed to fetch");}}).catch((err) => {return { docs: [], passages: [] };});const prompt = generatePrompt(query, passages);const stream = await model.stream(messages.map((message) =>message.role == "user"? new HumanMessage(prompt): new AIMessage(message.content),),);return new StreamingTextResponse(LangChainAdapter.toAIStream(stream));
}

接下来,在 .env.local 中设置 OPENAI_API_KEY 环境变量。

cp .env.local.example .env.local

现在,启动您的 Next.js 应用程序,您将看到神奇的效果。

四、结论

此 Chatbot 应用程序演示了如何使用 DenserRetriever 为端到端应用程序提供支持。

如果您正在构建企业 AI 应用程序,DenserRetriever 是满足您的数据检索需求的绝佳选择。

五、参考资料

[1]. Denser GitHub 地址

https://github.com/denser-org/denser-retriever/tree/main

[2]. Denser Retriever官网

https://retriever.denser.ai/

[3]. snowflake-arctic-embed-m模型

https://www.snowflake.com/blog/introducing-snowflake-arctic-embed-snowflakes-state-of-the-art-text-embedding-family-of-models/

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

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

相关文章

C++笔记-sstream的使用(字符串转其他类型,读取文件时用得多)

在 C 中&#xff0c;std::stringstream 类可以用来进行字符串流的输入输出&#xff0c;将字符串和其他类型的数据进行转换。 #include <iostream> #include <sstream>int main() {// 将整数转换为字符串int num 123;std::stringstream ss;ss << num;std::s…

谁偷偷看了你的网站?这两款统计工具告诉你!小白易上手~

前两天&#xff0c;上线了一个知识库网站&#xff1a;花了一天时间&#xff0c;搭了个专属知识库&#xff0c;终于上线了&#xff0c;手把手教&#xff0c;不信你学不会。 想知道这个网站的流量如何&#xff0c;怎么搞&#xff1f; 网站流量统计分析工具&#xff0c;了解下&a…

【电子科技大学主办丨IEEE 出版】第三届电子信息技术国际学术会议(EIT 2024,9月20-22)

第三届电子信息技术国际学术会议&#xff08;EIT 2024&#xff09;将于2024年9月20-22日在中国成都召开。 电子信息工程在我国信息化产业的发展过程中举足轻重&#xff0c;且随着移动通信与网络技术的发展&#xff0c;电讯网络、工业智能制造等领域与电子信息工程技术密切相关。…

No fallbackFactory instance of type xxxx found for feign client xx

文章目录 前言问题描述解决方式1、定位问题2、feign接口放置其他模块 前言 最近在openfeign中碰见一个头疼的问题&#xff0c;已经解决&#xff0c;做一次问题记录。 问题描述 报错信息nested exception is java.lang.IllegalStateException: No fallbackFactory instance of…

vue+ckEditor5 复制粘贴wold文字+图片并保存格式

第一步在vue2项目下安装 npm install --save ckeditor/ckeditor5-build-decoupled-document 第二 项目下新建一个plugins的文件夹将这个包ckeditor5-build-classic放入 &#xff08;包在页面最上方 有个下载按钮 可以下载&#xff09; 刚开始时 ckeditor5-build-classic文件…

【GLM-4微调实战】GLM-4-9B-Chat模型之Lora微调实战

系列篇章&#x1f4a5; No.文章1【GLM-4部署实战】GLM-4-9B-Chat模型本地部署实践指南2【GLM-4部署实战】GLM-4-9B-Chat模型之对话机器人部署测试3【GLM-4部署实战】GLM-4-9B-Chat模型之vLLM部署推理实践4【GLM-4微调实战】GLM-4-9B-Chat模型之Lora微调实战 目录 系列篇章&…

国产光电耦合器:2024年的发展现状与未来前景

随着全球电子技术的快速发展&#xff0c;光电耦合器&#xff08;光耦&#xff09;在各种应用场景中发挥着越来越重要的作用。近年来&#xff0c;国产光电耦合器凭借其技术进步和性价比优势&#xff0c;在国内外市场上取得了显著的成就。本文将深入探讨2024年国产光电耦合器的发…

Spring中使用JdbcTemplate访问数据库

首先在原来的基础上添加jar包&#xff0c;建一个测试数据库pring5&#xff0c;里边新建两个表users&#xff0c;authorities&#xff0c;user_authority&#xff1a; <dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc<…

听专家的,不如听国家的,网络安全究竟值不值得报?

考学选专业&#xff0c;或者跳槽选行业的&#xff0c;看这篇&#xff01; 如果你什么都不懂&#xff0c;家里也没有矿&#xff0c;那就紧跟国家大事和地方政策。 关于网络安全专业究竟是否值得报考? 要知道“二十大”、“十四五”等大会一直在提一个词叫做“数字中国建设”…

66_1JSON【浏览器中处理JSON、Java中处理JSON(FastJSON、Jackson)】、Java中的bean

JSON 概念 JSON&#xff1a;JavaScript Object Notation是一种表示对象的方式 基于JavaScript语言的轻量级的数据交换格式;&#xff08;即:用来传输数据的一种格式&#xff09; 现在传输数据的方式更多是采用json的格式&#xff0c;渐渐代替了XML JSON的数据表示 JSON采用名值…

oracle创建账户

1、查看表空间 SELECT tablespace_name FROM user_tablespaces;2、创建用户 CREATE USER FLINKCDC2 IDENTIFIED BY "123456";也可以使用指定表空间的方式 CREATE USER FLINKCDC2 IDENTIFIED BY "123456" DEFAULT TABLESPACE LOGMINER_TBS QUOTA UNLIMIT…

基于resttemplate实现微服务调用

子工程搭建与管理 新建一个cloud模块来作为公共模块&#xff0c;cloud模块中将管理用于微服务使用各个组件 euerka中的配置 package com.lingyang.euerka.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configu…

网络安全在2024好入行吗?

前言 024年的今天&#xff0c;慎重进入网安行业吧&#xff0c;目前来说信息安全方向的就业对于学历的容忍度比软件开发要大得多&#xff0c;还有很多高中被挖过来的大佬。 理由很简单&#xff0c;目前来说&#xff0c;信息安全的圈子人少&#xff0c;985、211院校很多都才建立…

[NOIP2007 普及组] 守望者的逃离 题解

题意 给定 M ( 0 ≤ M ≤ 1 0 3 ) , S ( 1 ≤ S ≤ 1 0 8 ) , T ( 1 ≤ T ≤ 3 1 0 5 ) M(0 \leq M \leq 10^3),S(1 \leq S \leq 10^8),T(1 \leq T \leq 3\times 10^5) M(0≤M≤103),S(1≤S≤108),T(1≤T≤3105)&#xff0c;守望者开始在位置 0 0 0&#xff0c;对于每一秒&…

对接的广告平台越多,APP广告变现的收益越高?

无论是游戏、社交、工具应用类APP还是泛娱乐类APP&#xff0c;流量变现的方式主要有广告、内购、订阅三种方式。其中&#xff0c;广告变现是门槛最低、适用最广的变现方式。 只要APP有流量&#xff0c;就可以进行广告变现&#xff0c;让APP的流量快速转化为商业价值。作为最常…

Typora使用教程-修改配置文件-免费使用

Typora特点 简洁美观&#xff1a;Typora的界面非常简洁&#xff0c;没有繁琐的菜单和工具栏&#xff0c;只有一个干净的编辑窗口。它使用 Markdown语法&#xff0c;将文本转化为漂亮的排版&#xff0c;无需关注样式和格式的细节。所见即所得&#xff1a;Typora实时显示Markdow…

Zotero更改插入word中所有引用编号的颜色

002-如何批量更改Zotero插入在word中参考文献的颜色&#xff08;快速变蓝&#xff09; 主要根据此视频进行学习。 需要记住 查找的内容为&#xff1a; ^19 ADDIN ZOTERO_ITEM 在word中打开 文件->更多->选项->高级 下滑选择域底纹&#xff0c; 可以看到所有的引用 …

[图解]用例规约之扩展路径

1 00:00:01,710 --> 00:00:03,670 基本路径写完之后 2 00:00:04,690 --> 00:00:07,270 接下来就是扩展路径 3 00:00:08,620 --> 00:00:14,000 扩展路径就是系统要处理的意外和分支 4 00:00:14,010 --> 00:00:19,710 系统要处理的 5 00:00:20,970 --> 00:00:…

ceph如何增删改查的管理文件

1.创建 Ceph 存储库文件 sudo tee /etc/yum.repos.d/ceph.repo <<EOF [ceph] nameCeph packages for $basearch baseurlhttps://download.ceph.com/rpm-pacific/el8/\$basearch/ enabled1 gpgcheck1 typerpm-md gpgkeyhttps://download.ceph.com/keys/release.asc[ceph-…

【python】Python如何调用外部命令,subprocess模块的详细解读以及应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…