返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

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

[复制链接]
链载Ai 显示全部楼层 发表于 昨天 11:00 |阅读模式 打印 上一主题 下一主题

一、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还提供了自托管解决方案,支持企业级别生产环境的部署。

ingFang SC";font-weight: bold;color: rgb(255, 255, 255);line-height: 22px;letter-spacing: 1px;">1.1、Denser Retriever 能做什么?

ingFang SC";font-weight: bold;color: rgb(24, 61, 111);line-height: 22px;letter-spacing: 1px;">

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

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

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

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

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

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

ingFang SC";font-weight: bold;color: rgb(255, 255, 255);line-height: 22px;letter-spacing: 1px;">1.2、Denser Retriever的优势

ingFang SC";font-weight: bold;color: rgb(24, 61, 111);line-height: 22px;letter-spacing: 1px;">

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

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

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

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

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

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

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

ingFang SC";font-weight: bold;color: rgb(255, 255, 255);line-height: 22px;letter-spacing: 1px;">1.3、先决条件

ingFang SC";font-weight: bold;color: rgb(24, 61, 111);line-height: 22px;letter-spacing: 1px;">

要完全理解本教程,您需要对 React 或 Next.js 有基本的了解。以下是构建 AI 驱动的聊天机器人应用程序所需的工具:
Docker&Docker compose - 在您的本地主机上提供 DenserRetriever api服务器。
OpenAI API——提供 API 密钥,使我们能够使用 ChatGPT 模型执行各种任务。

二、项目设置和包安装


ingFang SC";font-weight: bold;color: rgb(255, 255, 255);line-height: 22px;letter-spacing: 1px;">2.1、创建 Next.js 项目

ingFang SC";font-weight: bold;color: rgb(24, 61, 111);line-height: 22px;letter-spacing: 1px;">

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


ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;overflow-x: auto;border-radius: 8px;margin: 10px 8px;">npxcreate-next-app--examplehttps://github.com/vercel/ai/tree/main/examples/next-langchainnext-retriever
在本教程中,我们将使用 vercel 的 langchain 集成模板。接下来,我们可以安装依赖项。
ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;overflow-x: auto;border-radius: 8px;margin: 10px 8px;">cdnext-retriever
npminstall


2.2、启动 DenserRetriever


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

services:
denserretriever:
image:jotyy318/denserretriever
healthcheck:
test:["CMD","curl","-f","http://localhost:8090/"]
interval:30s
timeout:20s
retries:3
ports:
-"8090:8090"

elasticsearch:
image:elasticsearch:8.13.4
environment:
-discovery.type=single-node
-ES_JAVA_OPTS=-Xms1g-Xmx1g
-xpack.security.enabled=false
volumes:
-${DOCKER_VOLUME_DIRECTORY:-./docker-volume}:/usr/elasticsearch/data
ports:
-"9200:9200"
-"9300:9300"

etcd:
container_name:milvus-etcd
image:quay.io/coreos/etcd:v3.5.0
environment:
-ETCD_AUTO_COMPACTION_MODE=revision
-ETCD_AUTO_COMPACTION_RETENTION=1000
-ETCD_QUOTA_BACKEND_BYTES=4294967296
volumes:
-${DOCKER_VOLUME_DIRECTORY:-./docker-volume}/volumes/etcd:/etcd
command:etcd-advertise-client-urls=http://127.0.0.1:2379-listen-client-urlshttp://0.0.0.0:2379--data-dir/etcd

minio:
container_name:milvus-minio
image:minio/minio:RELEASE.2020-12-03T00-03-10Z
environment:
MINIO_ACCESS_KEY:minioadmin
MINIO_SECRET_KEY:minioadmin
volumes:
-${DOCKER_VOLUME_DIRECTORY:-./docker-volume}/volumes/minio:/minio_data
command:minioserver/minio_data
healthcheck:
test:["CMD","curl","-f","http://localhost:9000/minio/health/live"]
interval:30s
timeout:20s
retries:3

standalone:
container_name:milvus-standalone
image:milvusdb/milvus:v2.3.15
command:["milvus","run","standalone"]
environment:
ETCD_ENDPOINTS:etcd:2379
MINIO_ADDRESS:minio:9000
volumes:
-${DOCKER_VOLUME_DIRECTORY:-./docker-volume}/volumes/milvus:/var/lib/milvus
ports:
-"19530:19530"
depends_on:
-"etcd"
-"minio"

networks:
default:
name:milvus

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

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

dockercomposeup-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";

exportconstdynamic="force-dynamic";
exportconstmaxDuration=60;

functiongeneratePrompt(query:string,passages:string[]):string{
letprompt:string=
"###Instructions:\n"+
"Thefollowingcontextconsistsofanorderedlistofsources.Ifyoucanfindanswersfromthecontext,usethecontexttoprovidealongresponse.YouMUSTcitethecontexttitlesandsourceURLsstrictlyinMarkdownformatinyourresponse.Ifyoucannotfindtheanswerfromthesources,useyourknowledgetocomeupwithareasonableansweranddonotciteanysources.Ifthequeryaskstosummarizethefileoruploadedfile,provideasummarizationbasedontheprovidedsources.Iftheconversationinvolvescasualtalkorgreetings,relyonyourknowledgeforanappropriateresponse.";

prompt+=`###Query:\n${query}\n`;

if(passages.length>0){
prompt+=`\n###Context:\n${JSON.stringify(passages)}\n`;
}

prompt+="###Response:";

returnprompt;
}

exportasyncfunctionPOST(req:Request){
const{
messages,
}:{
messages:Message[];
}=awaitreq.json();

constmodel=newChatOpenAI(
{
model:"gpt-4o",
},
{
baseURL:process.env.OPENAI_API_BASE_URL,
},
);

constquery=messages[messages.length-1].content;

const{passages}=awaitfetch("http://127.0.0.1:8090/retrieve",{
method:"POST",
headers:{
"Content-Type":"application/json",
},
body:JSON.stringify({
question:query,
}),
})
.then((res)=>{
if(res.ok){
returnres.json();
}else{
thrownewError("Failedtofetch");
}
})
.catch((err)=>{
return{docs:[],passages:[]};
});

constprompt=generatePrompt(query,passages);

conststream=awaitmodel.stream(
messages.map((message)=>
message.role=="user"
?newHumanMessage(prompt)
:newAIMessage(message.content),
),
);

returnnewStreamingTextResponse(LangChainAdapter.toAIStream(stream));
}

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

cp.env.local.example.env.local

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

四、结论


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

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

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

链载AI是专业的生成式人工智能教程平台。提供Stable Diffusion、Midjourney AI绘画教程,Suno AI音乐生成指南,以及Runway、Pika等AI视频制作与动画生成实战案例。从提示词编写到参数调整,手把手助您从入门到精通。
  • 官方手机版

  • 微信公众号

  • 商务合作

  • Powered by Discuz! X3.5 | Copyright © 2025-2025. | 链载Ai
  • 桂ICP备2024021734号 | 营业执照 | |广西笔趣文化传媒有限公司|| QQ