重磅开源Denser Retriever:轻松构建企业级RAG应用和聊天机器人(内附机器人构建指引)

开源 0

重磅开源Denser Retriever:轻松构建企业级RAG应用和聊天机器人(内附机器人构建指引)

一、什么是检索增强生成?

检索增强生成RAG是人工智能中的一种先进技术,它通过将外部知识源整合到大型语言模型 (LLM) 的生成过程中来提高其能力。

与仅基于预先训练的知识生成响应的传统 LLM 不同,RAG 从外部数据库或文档中检索相关信息,并使用这些信息生成更准确、更符合上下文的响应。

这种方法可确保输出基于最新、最权威的数据,对于需要最新信息的应用程序特别有用。

二、RAG 系统的关键组件

为了全面理解 RAG,重要的是分解其主要组成部分:信息检索 (IR) 系统和自然语言生成 (NLG) 模型。

  • 信息检索

IR 系统使用高级搜索算法来扫描大型数据集并快速找到相关信息。这些算法采用语义搜索技术,超越了简单的关键字匹配,能够理解查询的上下文和含义。

RAG 系统可以从多个来源检索数据,包括内部数据库、在线存储库和实时网络搜索。这些数据源的质量和范围对于系统的有效性至关重要。

  • 自然语言生成

NLG 组件依赖于强大的语言模型,例如 GPT-3,这些模型能够生成类似人类的文本。这些模型在庞大的数据集上进行训练,使其能够创建连贯且与上下文相关的响应。

NLG 涉及多种技术,以确保生成的文本相关且准确。这包括使用特定领域的数据微调模型和使用高级文本生成算法。

三、为什么使用 RAG?

RAG 解决了 LLM 的几个固有局限性,例如其依赖静态训练数据,这可能导致响应过时或不准确。通过集成外部知识库,RAG 使 LLM 能够访问实时信息,从而提高其响应的相关性和准确性。

这种方法降低了错误信息出现的可能性,并增强了人们对 AI 输出的信任。此外,RAG 还允许组织控制和更新知识源,从而提供更具动态性和适应性的 AI 解决方案。

四、RAG 的 4 个优点和用例

如果将实时信息检索与高级 NLG 相结合,它可以帮助 RAG 系统提供更准确、更相关且更符合语境的响应。以下是使 RAG 适用于各行各业广泛应用的关键优势。

  • 经济高效的实施

与使用新数据重新训练大型语言模型相比,使用 RAG 更经济实惠。它允许您添加新信息,而无需大量重新训练带来的高昂技术和财务费用。

  • 当前信息

RAG 可让 LLM 连接实时数据、新闻网站和其他经常更新的信息源,提供最新信息。即使出现新信息,此功能也能确保响应保持相关性和准确性。

  • 提高用户信任度

提供包含权威来源的引用或参考的回复可以帮助 RAG 建立用户信任。用户可以验证信息,从而对 AI 生成的回复更有信心。

  • 更多开发人员控制

RAG 为开发人员提供了灵活性,使他们能够更有效地更改信息源并解决问题。它还允许根据授权级别限制敏感信息检索,确保响应适用于不同的上下文。

五、RAG 如何工作?

了解 RAG 的内部工作原理有助于我们认识到其改进 AI 生成内容的潜力。RAG 流程涉及几个关键步骤:

  • 创建外部数据

外部数据存在于 LLM 原始训练数据之外,是从各种来源(例如 API、数据库或文档存储库)收集的。然后使用嵌入语言模型将这些数据转换为数值表示并存储在矢量数据库中,从而创建生成式 AI 模型可以访问的知识库。

  • 检索相关信息

当收到用户查询时,它会被转换成向量表示,并与向量数据库匹配以检索相关文档。例如,在智能聊天机器人应用中,如果员工询问他们的年假,系统将检索政策文档和过去的休假记录来回答问题。

  • 增强 LLM 提示

检索到的数据被添加到用户输入中,从而创建增强提示。此增强提示包括原始查询和相关的检索信息,然后被输入到 LLM 中,以生成既知情又符合上下文的响应。

  • 更新外部数据

文档及其嵌入内容通过自动实时流程或定期批处理定期更新。此持续更新过程对于保持 RAG 系统检索到的信息的准确性和相关性非常重要。

六、提示、微调和 RAG 之间的区别

有几种方法可以充分利用语言模型。三种常见技术是提示、微调和 RAG。每种方法的工作原理不同,各有优势。

  • 提示工程Prompt Engineering

提示工程涉及设计特定的输入或提示来指导模型的响应。这种方法方便用户且经济高效,但受到模型预训练知识的限制。它最适合一般主题和快速答案。

  • 微调Fine-Tuning

微调使用额外数据调整模型参数,以提高知识密集型任务的性能。这种方法提供了高度的定制化,但资源密集,需要大量的计算能力和专业知识。

  • RAG

RAG 结合了检索和生成的优势,使用外部知识库来指导模型的响应。它平衡了提示的简易性和微调的定制性,使其适合需要动态和上下文丰富的输出的应用程序。

RAG 允许整合最新和最相关的信息,而无需进行大量的再培训。

七、Denser Retriever项目

Denser Retriever 项目是 RAG 强大功能的典型示例。这项开源计划将多种搜索技术整合到一个平台中,使用梯度增强 (xgboost) 机器学习技术来集成基于关键字的搜索、向量数据库和机器学习排名器。

其结果是一个高度精确的搜索系统,其性能明显优于传统的向量搜索基线。

在广泛使用的 MSMARCO 基准数据集上,Denser Retriever 与最佳向量搜索基线相比,实现了 13.07% 的相对 NDCG@10 增益,证明了其卓越的性能和有效性。这一显著的改进展示了 RAG 在提高搜索和检索系统的准确性和相关性方面的潜力。

这款检索器由 Denser.ai 公司开发,其创始人黄志恒曾担任 AWS 首席科学家,领导过 Amazon Kendra 和 Amazon Business Q 项目。截至 2024 年 7 月,黄志恒的谷歌学术引用次数已超过 13,700 次。他最引人注目的贡献是开创性的“用于序列标记的双向 LSTM-CRF 模型”论文。

GitHub 存储库:https://github.com/denser-org/denser-retriever/tree/main

博客:https://denser.ai/blog/denser-retriever/

文档:https://retriever.denser.ai/

Denser Retriever 完全开源,允许用户轻松构建自己的 RAG 应用和聊天机器人。

针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈

八、Denser Retriever 能做什么?

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

  • 支持异构检索器:包括关键词搜索、向量搜索以及机器学习模型重排序,确保在各种检索场景下均能实现高效准确的结果。

  • 利用 xgboost 技术:通过 xgboost 机器学习技术,将异构检索器的结果进行有效结合,提高整体检索性能。

  • 先进的精确度:在 MTEB 检索基准测试中,Denser Retriever 达到了最先进的精确度水平,展现出其卓越的性能。

  • 驱动端到端应用:提供了如何使用 Denser Retriever 来驱动聊天机器人和语义搜索等端到端应用的示范。

  • 详细的开发文档和安装指南:为开发者提供了全面的文档支持,帮助快速上手并进行部署。

九、Denser Retriever应用:10分钟内构建聊天机器人

通过一下步骤,你将可以学习如何构建一个由 AI 驱动的聊天机器人应用程序,该应用程序允许您根据自己的数据自定义自己的知识聊天机器人。

9.1 前置条件

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

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

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

9.2 项目设置和软件包安装

9.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-retrievernpm install
9.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-urls http://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: minio server /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。

      docker compose up -d

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

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

9.3 构建聊天机器人应用程序

我将引导构建聊天机器人应用程序。要设置 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 应用程序,你将看到其效果。

Denser Retriever 是一个非常出色的工具。它集成了多种搜索技术,结合关键词搜索、向量搜索和机器学习重排序,为构建高效的 RAG 应用提供了强大的支持。Denser Retriever 不仅具备企业级的应用潜力,还通过其开源特性为开发者提供了灵活的定制和扩展能力,是构建高性能检索系统的理想选择。

在这里插入图片描述

读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
在这里插入图片描述

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉大模型视频和PDF合集👈

观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
在这里插入图片描述

也许您对下面的内容还感兴趣: