微信扫码
与创始人交个朋友
我要投稿
检索增强生成RAG是人工智能中的一种先进技术,它通过将外部知识源整合到大型语言模型 (LLM) 的生成过程中来提高其能力。
与仅基于预先训练的知识生成响应的传统 LLM 不同,RAG 从外部数据库或文档中检索相关信息,并使用这些信息生成更准确、更符合上下文的响应。
这种方法可确保输出基于最新、最权威的数据,对于需要最新信息的应用程序特别有用。
为了全面理解 RAG,重要的是分解其主要组成部分:信息检索 (IR) 系统和自然语言生成 (NLG) 模型。
IR 系统使用高级搜索算法来扫描大型数据集并快速找到相关信息。这些算法采用语义搜索技术,超越了简单的关键字匹配,能够理解查询的上下文和含义。
RAG 系统可以从多个来源检索数据,包括内部数据库、在线存储库和实时网络搜索。这些数据源的质量和范围对于系统的有效性至关重要。
NLG 组件依赖于强大的语言模型,例如 GPT-3,这些模型能够生成类似人类的文本。这些模型在庞大的数据集上进行训练,使其能够创建连贯且与上下文相关的响应。
NLG 涉及多种技术,以确保生成的文本相关且准确。这包括使用特定领域的数据微调模型和使用高级文本生成算法。
RAG 解决了 LLM 的几个固有局限性,例如其依赖静态训练数据,这可能导致响应过时或不准确。通过集成外部知识库,RAG 使 LLM 能够访问实时信息,从而提高其响应的相关性和准确性。
这种方法降低了错误信息出现的可能性,并增强了人们对 AI 输出的信任。此外,RAG 还允许组织控制和更新知识源,从而提供更具动态性和适应性的 AI 解决方案。
如果将实时信息检索与高级 NLG 相结合,它可以帮助 RAG 系统提供更准确、更相关且更符合语境的响应。以下是使 RAG 适用于各行各业广泛应用的关键优势。
与使用新数据重新训练大型语言模型相比,使用 RAG 更经济实惠。它允许您添加新信息,而无需大量重新训练带来的高昂技术和财务费用。
RAG 可让 LLM 连接实时数据、新闻网站和其他经常更新的信息源,提供最新信息。即使出现新信息,此功能也能确保响应保持相关性和准确性。
提供包含权威来源的引用或参考的回复可以帮助 RAG 建立用户信任。用户可以验证信息,从而对 AI 生成的回复更有信心。
RAG 为开发人员提供了灵活性,使他们能够更有效地更改信息源并解决问题。它还允许根据授权级别限制敏感信息检索,确保响应适用于不同的上下文。
了解 RAG 的内部工作原理有助于我们认识到其改进 AI 生成内容的潜力。RAG 流程涉及几个关键步骤:
外部数据存在于 LLM 原始训练数据之外,是从各种来源(例如 API、数据库或文档存储库)收集的。然后使用嵌入语言模型将这些数据转换为数值表示并存储在矢量数据库中,从而创建生成式 AI 模型可以访问的知识库。
当收到用户查询时,它会被转换成向量表示,并与向量数据库匹配以检索相关文档。例如,在智能聊天机器人应用中,如果员工询问他们的年假,系统将检索政策文档和过去的休假记录来回答问题。
检索到的数据被添加到用户输入中,从而创建增强提示。此增强提示包括原始查询和相关的检索信息,然后被输入到 LLM 中,以生成既知情又符合上下文的响应。
文档及其嵌入内容通过自动实时流程或定期批处理定期更新。此持续更新过程对于保持 RAG 系统检索到的信息的准确性和相关性非常重要。
有几种方法可以充分利用语言模型。三种常见技术是提示、微调和 RAG。每种方法的工作原理不同,各有优势。
提示工程涉及设计特定的输入或提示来指导模型的响应。这种方法方便用户且经济高效,但受到模型预训练知识的限制。它最适合一般主题和快速答案。
微调使用额外数据调整模型参数,以提高知识密集型任务的性能。这种方法提供了高度的定制化,但资源密集,需要大量的计算能力和专业知识。
RAG 结合了检索和生成的优势,使用外部知识库来指导模型的响应。它平衡了提示的简易性和微调的定制性,使其适合需要动态和上下文丰富的输出的应用程序。
RAG 允许整合最新和最相关的信息,而无需进行大量的再培训。
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 应用和聊天机器人。
Denser Retriever 的初始版本提供了以下功能:
通过一下步骤,你将可以学习如何构建一个由 AI 驱动的聊天机器人应用程序,该应用程序允许您根据自己的数据自定义自己的知识聊天机器人。
如下教程需要对 React 或 Next.js 有基本的了解。以下是构建 AI 驱动的聊天机器人应用程序所需的工具:
Docker&Docker compose - 在您的本地主机上提供 DenserRetriever api服务器。
OpenAI API——提供 API 密钥,让我们可以使用 ChatGPT 模型执行各种任务。
首先,通过在终端中运行以下代码片段创建一个 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
首先,将 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 的状态是可正常运行的。
然后,您现在可以构建应用程序了。
我将引导构建聊天机器人应用程序。要设置 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 不仅具备企业级的应用潜力,还通过其开源特性为开发者提供了灵活的定制和扩展能力,是构建高性能检索系统的理想选择。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-11-23
FastRAG半结构化RAG实现思路及OpenAI O1-long COT蒸馏路线思考
2024-11-23
检索增强生成(RAG):解密AI如何融合记忆与搜索
2024-11-23
如何提高RAG系统准确率?12大常见痛点及巧妙解!
2024-11-23
RAG 2.0性能提升:优化索引与召回机制的策略与实践
2024-11-22
RAG技术在实际应用中的挑战与解决方案
2024-11-22
从普通RAG到RAPTOR,10个最新的RAG框架
2024-11-22
如何使用 RAG 提高 LLM 成绩
2024-11-21
提升RAG性能的全攻略:优化检索增强生成系统的策略大揭秘 | 深度好文
2024-07-18
2024-05-05
2024-07-09
2024-05-19
2024-07-09
2024-06-20
2024-07-07
2024-07-07
2024-07-08
2024-07-09
2024-11-06
2024-11-06
2024-11-05
2024-11-04
2024-10-27
2024-10-25
2024-10-21
2024-10-21