一文读懂什么是RAG,如何搭建多模态RAG降低大模型幻觉

探索检索增强生成(RAG)技术的无限可能:Vector+KG RAG、Self-RAG、多向量检索器多模态RAG集成 阅读详情

img

大语言模型(LLM)能够执行各种自然语言任务,例如文本生成、语言翻译、文本摘要、问答等。然而,使用 LLM 的一个显著局限是 LLM 幻觉。

幻觉是指由 LLM 生成的响应虽然看起来正确且一致,但实际并非完全准确的现象。如果您不是特定领域内的专家,很难发现 LLM 生成的回答是不准确的。

本文将介绍一种减轻 LLM 幻觉的解决方案——检索增强生成(Retrieval-Augmented Generation,RAG)。我们将搭建一个结合了不同模态数据(文本和图像)的多模态 RAG 应用,以减轻 LLM 幻觉。

01.

什么是 RAG?

当我们向 LLM 提出超出其预训练知识范围的问题时,通常 LLM 会出现幻觉。例如,如果我们向 LLM 提出涉及医学或法律等高度专业化的问题,并包含大量内部术语时,我们就有可能得到 LLM 随机生成的不准确的回答。

缓解这一问题的一种方法是使用特定的数据集对 LLM 进行微调。虽然这种方法很有效,但十分耗时且高成本,需要消耗的内存也非常高。

RAG 是另一种基于信息检索方法,可以缓解 LLM 幻觉。我们首先获取用户的查询,然后在我们的数据库中找到最相关的上下文,这些上下文可以帮助 LLM 生成准确的回答。通过在用户查询的同时提供上下文,我们可以显著提高 LLM 响应的准确性。

img

RAG 本身由三部分构成:检索(Retrieval)、增强(Augmentation)、生成(Generation)。

在检索组件中,RAG 检索可以帮助 LLM 生成基于上下文的回答。为了检索上下文,我们首先必须使用如 Sentence Transformers、OpenAI、VoyageAI 等 Embeding 模型将所有上下文信息转换为向量。接下来,我们将这些向量存储在 Milvus 和 Zilliz Cloud(全托管 Milvus 服务)之类的向量数据库中。

当用户进行查询时,我们使用与编码上下文相同的模型将查询转换为向量。然后,在 Milvus 这样的向量数据库中执行向量搜索(也称为向量相似性搜索或语义相似性搜索),以计算查询向量与向量数据库内上下文向量之间的相似性。最后,与用户查询相似度最高的top-k 个结果将被作为相关上下文。

在增强组件中,从检索组件检索到的相关上下文被合并在一起,与原始用户查询一起形成一致的 Prompt,传入 LLM。最后,LLM 根据提供的 Prompt 在生成组件中生成最终响应。

img

02.

什么是多模态 RAG 应用?

RAG 通过在用户查询的同时提供相关上下文,能够有效提高 LLM 响应质量。然而,在现实世界的应用中,并非所有相关上下文都以文本形式提供。

可能存在这样的情况,即最相关的上下文以文档中的图像或表格的形式提供。问题是,由于大多数 LLM 和 Embedding 模型的性质,它们无法推断图像内的内容。它们在推断表格或表格数据的内容时也往往遇到困难。正如你可能已经了解的那样,LLM 被预训练用于预测给定 Token 的下一个最可能的 Token。这意味着 LLM 会自然地尝试按顺序理解文本内容,这并不适用于表格数据。

多模态 RAG 是一种新方法,它接受来自不同模态的数据作为上下文传递给 LLM。我们需要使用具有多模态能力的 LLM 来执行多模态 RAG 任务,例如 LLaVA、GPT-4-V、Gemini 1.5、Claude 3.5 Sonnet 等模型。不过,我们仍然可以使用基于文本的 Embedding 模型,像 CLIP 这样的多模态模型也是一个不错的选择。

我们可以通过几种方式实现多模态 RAG:

  • 使用像 CLIP 这样的多模态 Embedding 模型将文本和图像转换为向量。接下来,通过执行查询和文本/图像向量之间的相似性搜索来检索相关上下文。最后,将最相关上下文的原始文本和/或图像传递给我们的多模态 LLM。
  • 使用多模态 LLM 为图像或表格生成文本摘要。接下来,使用基于文本的 Embedding 模型将这些文本摘要转换为向量。然后,执行查询和摘要向量之间的文本相似性搜索。最后,将最相关摘要的原始图像传递给我们的 LLM 以生成响应。

在接下来的部分中,我们将根据第二种方法实现多模态 RAG。具体来说,我们将使用 Gemini 1.5 模型为图像和表格生成文本摘要,并生成最终响应。

03.

Milvus Lite、Gemini 1.5、BGE M3 和 LangChain 简介

我们即将构建的多模态 RAG(Retrieval-Augmented Generation)系统将使用到以下 4 个部分:Milvus 向量数据库、Gemini 1.5 大语言模型、BGE M3 Embedding 模型和 LangChain 框架。

Milvus Lite

Milvus 是一款开源向量数据库,能够高效存储十亿规模的向量数据,并在 RAG 的检索阶段执行高效的向量搜索。Milvus 提供多种安装方式,但对于初学者来说,最简单的方式是使用 Milvus Lite。如果您是初学者并且只想简单尝试 Milvus,那么我们推荐您使用 Milvus Lite。只需一个简单的命令,您就可以立即开始使用 Milvus 存储至高 1 百万个向量。以下是安装 Milvus Lite 的命令:

pip install pymilvus

然而,如果您需要扩展您的应用,并最终部署到生产环境,我们推荐您在 Docker 容器或 Kubernetes 上部署 Milvus。更多内容,请参考 Milvus 官方安装指南 (https://milvus.io/docs/install-overview.md)。

Gemini 1.5

Gemini 1.5 是由 Google DeepMind 开发的一款多模态大语言模型(LLM),基于此前的 Gemini 1.0 模型进行了改进。与 Gemini 1.0 相比,这个模型在数学、编程、多语言能力以及理解图像、音频和视频方面都有显著提升。Gemini 1.5 有两个独特的特点:模型架构和上下文长度。

Gemini 1.5 的架构结合了 Transformer 架构和 Mixture of Experts(MoE)。这种结合提高了模型的效率,因为 MoE 模型学会了根据用户的输入或 Prompt 有选择地激活其神经网络中最相关的专家路径。Gemini 1.5 还支持更长的上下文,能够处理高达 100 万个 Token 的上下文。相比之下,Gemini 1.0 只能处理 32,000 个 Token。

img

Gemini 1.5 模型有两个版本:Flash 和 Pro。Flash 是 Gemini 1.5 的轻量版本,它在生成响应时更快、更高效。而 Pro 是 Gemini 1.5 模型中性能最强的版本,其性能与迄今为止最大的 Gemini模型 —— Gemini 1.0 Ultra 相当。

在本文中,我们将使用 Gemini 1.5 Pro。为了在搭建多模态 RAG 应用时使用这个模型,您需要先设置一个 API 密钥。可以参考这个 Google 页面上的指南来生成 API 密钥 (https://ai.google.dev/gemini-api/docs/api-key)。

BGE-M3

BGE-M3 是一个多功能的 Embedding 模型,能够处理多种语言的文本,并支持不同的粒度级别。例如,您可以处理短句,也可以处理长达 8192 个 Token 的长文档。这个 Embedding 模型还能够输出两种不同的向量类型:稠密向量(Dense embedding)和稀疏向量(Sparse embedding)。

稠密向量的维度比稀疏向量更紧凑,并且包含原始输入的语义表示。与此同时,正如其名,稀疏向量具有高维度,但大多数元素都是零。因此,针对稀疏向量可以使用专门的数据结构和算法实现更高效地存储和处理。

在下面的 RAG 应用中,我们将使用 BGE-M3 作为 Embedding 模型,将文本输入转换为向量。我们可以使用以下代码在 Milvus 中使用 BGE-M3:

!pip install "pymilvus[model]"

from pymilvus.model.hybrid import BGEM3EmbeddingFunction

bge_m3_ef = BGEM3EmbeddingFunction(

    model_name='BAAI/bge-m3', # Specify the model name

    device='cpu', # Specify the device to use, e.g., 'cpu' or 'cuda:0'

    use_fp16=False # Specify whether to use fp16. Set to `False` if `device` is `cpu`.

)

docs = [

    "Artificial intelligence was founded as an academic discipline in 1956.",

    "Alan Turing was the first person to conduct substantial research in AI.",

    "Born in Maida Vale, London, Turing was raised in southern England.",

]

docs_embeddings = bge_m3_ef.encode_documents(docs)

# Print embeddings

print("Embeddings:", docs_embeddings)

"""

Output:

Embeddings: {'dense': [array([-0.02505937, -0.00142193,  0.04015467, ..., -0.02094924,

        0.02623661,  0.00324098], dtype=float32), array([ 0.00118463,  0.00649292, -0.00735763, ..., -0.01446293,

        0.04243685, -0.01794822], dtype=float32), array([ 0.00415287, -0.0101492 ,  0.0009811 , ..., -0.02559666,

        0.08084674,  0.00141647], dtype=float32)], 'sparse': <3x250002 sparse array of type '<class 'numpy.float32'>'

        with 43 stored elements in Compressed Sparse Row format>}

"""

如上所示,我们可以基于同一个输入获取两种不同类型的向量:稠密向量和稀疏向量。因为 Milvus 支持混合搜索(Hybrid Search),我们可以在向量搜索中同时使用这两种向量类型,从而增强 RAG 系统中检索到的上下文的准确性和质量。

LangChain

LangChain 框架可以帮助我们在几分钟内构建 LLM 驱动的应用。LangChain 是一个编排工具,连接诸如向量数据库、Embedding 模型和 LLM 等组件,构建一个功能完整的 RAG 系统。LangChain 支持无缝集成主流 LLM (如 OpenAI、Anthropic 和 Google)以及向量数据库(如 Zilliz 等)。

LangChain 还处理 RAG 系统的端到端工作流程,从数据预处理(如数据解析、清洗和分块)到 LLM 生成响应并返回给用户。我们将在下一章节中详细介绍该框架的具体实现方式。

04.

搭建多模态 RAG 应用

在这个部分,我们将构建一个多模态 RAG 应用。正如前面提到的,大多数 LLM 为预训练模型,在处理图像或表格中的上下文时可能会遇到困难。我们即将搭建的多模态 RAG 可以将图像中的上下文考虑在内,从而提高我们 LLM 的整体响应质量。

我们的多模态 RAG 用例如下:我们将构建一个 RAG 系统,帮助我们查询与研究论文(以 PDF 文件格式保存)相关的信息。我们将要处理的研究论文是《Attention is All You Need》(https://arxiv.org/pdf/1706.03762),这篇论文介绍了著名的 Transformer 架构。

首先,我们将下载 PDF 文件并提取所有的图表和表格。接下来,我们将使用 Gemini 1.5 Pro 为每个提取的图表和表格生成摘要,以便进行上下文检索。然后,我们将使用 BGE-M3 模型将这些摘要转换为 Embedding 向量,并存储在 Milvus 向量数据库中。

在 RAG 搭建过程中,我们将把用户查询转换为 Embedding 向量,并执行向量搜索以找到最相关的摘要。然后,系统最相关摘要的原始图表或表格检索出来,并传入 Gemini 1.5 以生成响应。

如果您希望跟随以下指南进行操作,可以在这个 Notebook 中获取本文的所有代码 (https://colab.research.google.com/drive/1X16irfbWboi7BdyYhnF6QYirRba5doAi?usp=sharing)。

让我们从第一步开始——下载研究论文。我们可以使用 Arxiv API 来完成这个任务。

import arxiv

import os

import getpass

from langchain_core.prompts import PromptTemplate

from langchain_core.runnables import RunnableLambda, RunnablePassthrough

from langchain_core.output_parsers import StrOutputParser

from langchain_milvus.vectorstores import Milvus

from langchain.schema import Document

from langchain.embeddings.base import Embeddings

from pymilvus.model.hybrid import BGEM3EmbeddingFunction

from langchain_core.messages import HumanMessage

from langchain_google_genai import ChatGoogleGenerativeAI

from IPython.display import HTML, display

from PIL import Image

import base64

from pdf2image import convert_from_path

import layoutparser as lp

import cv2

import numpy as np

file_path = "./Dataset/pdf/"

arxiv_client = arxiv.Client()

paper = next(arxiv.Client().results(arxiv.Search(id_list=["1706.03762"])))

# Download the PDF to a specified directory with a custom filename.

paper.download_pdf(dirpath=file_path, filename="attention.pdf")

您可以根据提供的 ID 下载任何研究论文。当您在 Arxiv 上浏览研究论文时,您可以在网页地址中找到这个 ID。例如,《Attention is All You Need》 这篇论文的 ID 是 1706.03762。

接下来,让我们从 PDF 文件中提取图表和表格。根据我的观察,使用基于 PubLayNet 数据集训练的 Mask-RCNN 模型进行这项任务是最准确的。我们可以借助 LayoutParser 库来使用 Mask-RCNN 模型来执行提取任务。


image_path = "./Dataset/img/"

def extract_image_and_table(pdf_path, output_dir):

    images = convert_from_path(pdf_path)

    model = lp.Detectron2LayoutModel('lp://PubLayNet/mask_rcnn_X_101_32x8d_FPN_3x/config',

                                 extra_config=["MODEL.ROI_HEADS.SCORE_THRESH_TEST", 0.75],

                                 label_map={0: "Text", 1: "Title", 2: "List", 3:"Table", 4:"Figure"})

    for i, image in enumerate(images):

        image_np = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR)

        layout_result = model.detect(image_np)

        blocks = lp.Layout([b for b in layout_result if b.type=='Table' or b.type=='Figure'])

        for j, block in enumerate(blocks._blocks):

            x1 = int(block.block.x_1)

            y1 = int(block.block.y_1)

            x2 = int(block.block.x_2)

            y2 = int(block.block.y_2)

            cropped_image = Image.fromarray(image_np).crop((x1, y1, x2, y2))

            cropped_image.save(f'{output_dir}/{i}_{j}.png', 'PNG')

extract_image_and_table(f"{file_path}attention.pdf", image_path)

我们已经从研究论文中提取了所有的图表和表格,现在让我们使用 Gemini 1.5 Pro 生成每个图表和表格的摘要。您需要使用您的 API 密钥来访问这个 LLM。

我们从 PDF 文件中提取的图表和表格被存储为 PNG 文件。然而,我们不能将这些原始图像作为输入直接提供给我们的多模态 LLM,因为大多数 API 都要求输入的是文本。因此,我们需要将这些图像文件编码为 base64 格式。通过编码,我们可以将图像作为文本字符串在 API 请求中发送。

def encode_image(image_path):

    with open(image_path, "rb") as image_file:

        return base64.b64encode(image_file.read()).decode("utf-8")

def image_summarize(img_base64, prompt):

    msg = llm_model.invoke(

        [

            HumanMessage(

                content=[

                    {"type": "text", "text": prompt},

                    {

                        "type": "image_url",

                        "image_url": {"url": f"data:image/jpeg;base64,{img_base64}"},

                    }

                ]

            )

        ]

    )

    return msg.content

def generate_img_summaries(path):

    # Store base64 encoded images

    img_base64_list = []

    # Store image summaries

    image_summaries = []

    # Prompt

    prompt = """You are an assistant tasked with summarizing images for retrieval. 

    These summaries will be embedded and used to retrieve the raw image. 

    Give a concise summary of the image that is well optimized for retrieval."""

    # Apply to images

    for i, img_file in enumerate(sorted(os.listdir(path))):

        if img_file.endswith(".png"):

            img_path = os.path.join(path, img_file)

            base64_image = encode_image(img_path)

            img_base64_list.append(base64_image)

            image_summaries.append(image_summarize(base64_image, prompt))

    return img_base64_list, image_summaries

img_base64_list, image_summaries = generate_img_summaries(image_path)

documents = [Document(page_content=image_summaries[i], metadata={"source": img_base64_list[i]}) for i in range (len(image_summaries))]

现在,让我们通过一个例子来检查 Gemini 1.5 Pro 生成的对应摘要是否合适。您可以通过以下代码实现:


def plt_img_base64(img_base64):

    # Create an HTML img tag with the base64 string as the source

    image_html = f'<img src="data:image/jpeg;base64,{img_base64}" />'

    # Display the image by rendering the HTML

    display(HTML(image_html))

 

 plt_img_base64(img_base64_list[0])

 print(image summaries[0])

img

由 Gemini 1.5 Pro 模型生成的摘要准确概括了图表中提供的整体信息。接下来,我们需要将这些摘要与编码后的图像一起存储在 Milvus 向量数据库中。

首先,需要将摘要转换为 Embedding 向量。我们将使用 BGE-M3 模型来执行这项任务。稍后,我们将仅使用 BGE-M3 生成的稠密向量进行上下文检索。

在 LangChain 中使用这个 Embedding 模型时,我们需要创建一个自定义 Class,其中包含两个不同的 Method:embed_documents 和 embed_query。LangChain 会默认调用这两个函数,将输入转换为向量并存储在向量数据库中。

class BGEMilvusEmbeddings(Embeddings):

    def __init__(self):

        self.model = BGEM3EmbeddingFunction(

                    model_name='BAAI/bge-m3', # Specify the model name

                    device='cpu', # Specify the device to use, e.g., 'cpu' or 'cuda:0'

                    use_fp16=False # Specify whether to use fp16. Set to `False` if `device` is `cpu`.

                )

    def embed_documents(self, texts):

        embeddings = self.model.encode_documents(texts)

        return [i.tolist() for i in embeddings["dense"]]

    def embed_query(self, text):

        embedding = self.model.encode_queries([text])

        return embedding["dense"][0].tolist()

  

# Instantiate embedding model and LLM

embedding_model = BGEMilvusEmbeddings()

os.environ['GOOGLE_API_KEY'] = getpass.getpass('Gemini API Key:')

llm_model = ChatGoogleGenerativeAI(model="gemini-1.5-pro",

                 temperature=0.7, top_p=0.85)

URI = "./milvus_demo.db"

# Create Milvus vector store and store the embeddings inside it

vectorstore = Milvus.from_documents(

    documents,

    embedding_model,

    connection_args={"uri": URI},

    collection_name="multimodal_rag_demo"

)

# Create a retriever from the vector store

retriever = vectorstore.as_retriever()

现在让我们来试用这个 RAG 应用。

假设我们的查询为:“What’s the BLEU score of the base model on English to German translation task?”

我们可以通过以下示例代码来查看 RAG 系统检索到的最相关图像。


# Use the retriever

query = "What's the BLEU score of the base model on English to German translation task?"

retrieved_docs = retriever.invoke(query, limit= 1)

plt_img_base64(retrieved_docs[0].metadata["source"])


img

我们可以看到,RAG 系统能够根据查询检索到最相关的图像。在 RAG 流程中,这张图像将作为上下文传入 Gemini 1.5 Pro,生成一个基于上下文的答案。

剩下要做的事情就是构建端到端的响应生成工作流程。这个过程包括接收用户查询、获取最相关的上下文、将该上下文和用户查询合并成一个连贯的 Prompt、将 Prompt 传入 LLM,最后从 LLM 生成响应并返回给用户。您可以使用 LangChain 并通过几行代码完成所有上述步骤。


def prepare_image_context(docs):

    b64_images = []

    for doc in docs:

        b64_images.append(doc.metadata["source"])

    return {"images": b64_images}

def img_prompt(data_dict):

    messages = []

    if data_dict["context"]["images"]:

        for image in data_dict["context"]["images"]:

            image_message = {

                "type": "image_url",

                "image_url": {"url": f"data:image/jpeg;base64,{image}"},

            }

            messages.append(image_message)

    text_message = {

        "type": "text",

        "text": (

            "You will be given an image or a table.\n"

    "Use information contained in the image or table to provide contextualized answer related to the user question. \n"

    f"User-provided question: {data_dict['question']}\n\n"

        ),

    }

    messages.append(text_message)

    return [HumanMessage(content=messages)]

def multi_modal_rag_chain(retriever):

    # RAG pipeline

    chain = (

        {

            "context": retriever | RunnableLambda(prepare_image_context),

            "question": RunnablePassthrough(),

        }

        | RunnableLambda(img_prompt)

        | llm_model

        | StrOutputParser()

    )

    return chain

# Create RAG chain

chain_multimodal_rag = multi_modal_rag_chain(retriever)


我们可以用一行代码调用 RAG 应用来处理查询。


# Run RAG chain

chain_multimodal_rag.invoke(query)

"""

Output:

The BLEU score of the base Transformer model on English to German translation task is 27.3. 

"""


查看 notebook 获取本示例所有代码*(https://colab.research.google.com/drive/1X16irfbWboi7BdyYhnF6QYirRba5doAi?usp=sharing)*。

05.

总结

恭喜!您已成功搭建了一个基于 Milvus、Gemini 1.5、BGE-M3 和 LangChain 的多模态 RAG 系统。多模态 RAG 系统可以增强 LLM 对特定用户查询的响应准确性,特别是在相关上下文以非文本格式存储的场景中。

现在,您可以将这个基础 RAG 流程应用于查询其他研究论文或更丰富的用户场景中。在本文示例中,我们在向量数据库中仅存储了约 15 个上下文向量。但 Milvus Lite 允许您存储多达一百万个向量,我们推荐您通过安装 Milvus Lite 或在 Docker/Kubernetes 上部署 Milvus 或使用全托管 Mlivus 服务——Zilliz Cloud 来存储更多上下文向量,从而扩展您的应用。

如何学习AI大模型?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

想正式转到一些新兴的 AI 行业,不仅需要系统的学习AI大模型。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高

那么我作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,希望可以帮助到更多学习大模型的人!至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

👉 福利来袭优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

全套AGI大模型学习大纲+路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

read-normal-img

640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

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

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

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

👉 福利来袭优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

img

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

RAG(检索增强生成)在LLM(大型语言模型)中的应用 在当今信息时代,大型语言模型(LLM)的崛起标志着自然语言处理领域的一次重大进步。这些模型不仅是深度学习的杰出代表,而且在多个领域中取得了显著的成功。本文将聚焦于检索增强生成(RAG)技术在大型语言模型中的应用,深入探讨其原理、应用以及与传统生成模型的差异 阅读详情

相关推荐

使用 RAG 和 LLM 与您的数据库对话

检索增强生成 (RAG) 涉及从外部数据库获取当前或上下文相关信息,并在请求大型语言模型 (LLM) 生成响应时将其呈现给大型语言模型 (LLM) 的过程。这种方法有效地解决了生成不正确或误导性信息的问题。您能够存储专有业务数据或全局知识,并使您的应用程序能够在响应生成阶段为 LLM 检索此数据。

iCloudEnd的博客 941

一文读懂:大模型RAG(检索增强生成)

本文概述 RAG 的核心算法,并举例说明其中的一些方法。RAG融合是一个强大的功能,能够提高RAG应用的语义搜索效率。通过使用语言模型生成多个查询并对搜索结果进行重新排序,RAG融合可以呈现更丰富多样的内容,并提供了一个额外的层次,用于调整应用。此外,RAG融合还可以实现自动纠正、节省成本以及增加内容多样性。但是,需要注意一些权衡,比如潜在的延迟问题、自动纠正的挑战以及成本影响。对于依赖常见概念但可能出现内部行话或重叠词汇的应用来说,RAG融合尤其有用。

m0_59164304的博客 4万+

第四节、C# 上位机面向对象编程详解(工控硬件继承实战版)

继承核心价值:在 C# 上位机工控开发中,继承的核心是通用逻辑复用与接口统一,将所有硬件的通用属性 / 方法封装到抽象基类,子类只需实现独有逻辑,大幅减少冗余代码。基类设计要点:优先使用抽象基类,合理分配访问修饰符(privateprotectedpublic),定义通用事件与虚方法,提供资源释放机制,兼顾复用性与扩展性。子类设计要点:通过: base()调用基类构造函数,强制实现抽象方法(保证接口统一),选择性重写虚方法(实现独有逻辑),复用基类的protected成员。多设备管理。

kylezhao2019的博客 787

一文带你了解大模型的RAG(检索增强生成) | 概念理论介绍+ 代码实操(含源码)

RAG的全称是Retrieval-Augmented Generation,中文翻译为检索增强生成。它是一个为大模型提供外部知识源的概念,这使它们能够生成准确且符合上下文的答案,同时能够减少模型幻觉。本文介绍了 RAG 的概念及其背后的一些理论,本文通过Python、LangChain将其实现,在此过程中使用了 OpenAI的ChatGPT接口(可以自己搭建chatGLM3)、Weaviate矢量数据库(可以自己搭建Milvus )、OpenAI 嵌入模型实现了 RAG 管道。

机器学习社区 3万+

机器人控制入门:用SAC算法让机械臂学会抓取(PyBullet仿真教程)

本文详细介绍了如何使用SAC算法在PyBullet仿真环境中训练机械臂完成抓取任务。通过强化学习中的软Actor-Critic(SAC)算法,结合熵最大化机制和双Q网络架构,有效解决了机械臂控制中的探索难题。教程包含环境搭建、算法原理、状态空间设计、奖励函数优化等核心内容,并提供了实用的训练技巧和参数调优指南。

weixin_29091105的博客 362

Siemens SIMATIC软件二次开发:使用C#进行SIMATIC软件二次开发

通过使用OPC-UA通信协议和S7通信库,可以有效地在C#应用程序中与Siemens SIMATIC软件进行数据交换。OPC-UA提供了一个标准化的平台,而S7通信库则提供了直接访问PLC数据的能力。掌握这两种通信方式,将极大地增强在工业自动化领域的二次开发能力。在Siemens SIMATIC软件中,自定义功能块开发是实现二次开发的关键步骤之一。通过C#,可以创建高度定制化的功能块,以满足特定的控制需求。下面,我们将通过一个示例来展示如何使用C#开发一个自定义功能块。OPC-UA通信。

kkchenjj的博客 1415

一文读懂什么是RAG,如何搭建多模态RAG降低大模型幻觉?

如果你真的想学习大模型,请不要去网上找那些零零碎碎的教程,真的很难学懂!你可以根据我这个学习路线和系统资料,制定一套学习计划,只要你肯花时间沉下心去学习,它们一定能帮到你!

2401_85373691的博客 1229

基于电能质量治理的场景实例:统一电能质量调节器(UPQC)与并网逆变器集成

本文通过Simulink平台,详细演示了统一电能质量调节器(UPQC)与并网逆变器的集成系统建模与仿真过程。主要内容包括:1)系统架构设计,包含光伏并网系统、非线性负载和电压扰动源;2)UPQC主电路设计,包括串联/并联单元拓扑和控制策略实现;3)与并网逆变器的能量交互与协同控制逻辑;4)典型电能质量问题的仿真测试场景。结果表明,该集成系统能有效治理电压暂降(维持负载电压380V±2%)和电流谐波(电网THD<3%),直流母线电压稳定在800V±5V。该系统为应对复杂电能质量问题提供了"电压

xiaoheshang_123的博客 310

【AI大模型】一文读懂什么是RAG,如何搭建多模态RAG降低大模型幻觉

大语言模型(LLM)能够执行各种自然语言任务,例如文本生成、语言翻译、文本摘要、问答等。然而,使用 LLM 的一个显著局限是 LLM 幻觉。 幻觉是指由 LLM 生成的响应虽然看起来正确且一致,但实际并非完全准确的现象。如果您不是特定领域内的专家,很难发现 LLM 生成的回答是不准确的。 本文将介绍一种减轻 LLM 幻觉的解决方案——检索增强生成(Retrieval-Augmented Generation,RAG)。我们将搭建一个结合了不同模态数据(文本和图像)的多模态 RAG 应用,以减轻 LLM

bugyinyin的博客 1109

PSO-BP和BP多输入多输出回归预测模型 matlab (多输入多输出)

PSO-BP和BP多输入多输出回归预测模型 matlab (多输入多输出)

算法如诗的博客 258

华为数字化转型之道 方法篇 第五章 视IT为投资,用产品思维管理IT

比较传统信息化和数字化转型下的IT系统特征,我们发现业务环境、IT能力、业务和IT的关系都发生了巨大的变化(见图5-1)从“管理系统”到“作业平台”。企业通常的做法是将线下的文档、流程线上化,IT系统是作为管理系统而存在的。而面向数字化,企业的业务作业、业务运营和决策、团队协同等业务动作已经和IT系统集成,IT系统逐步转变为作业系统。从“功能优先”到“体验优先”,如果要整体完成一项工作往往需要用户在不同系统间切换,费时费力。

沧海之巅的专栏 1094
上一篇: 练完这些大模型项目,天下没有再难倒你的大模型!
下一篇: HuggingFace发布LLM超大规模实战手册 | 200页报告解读 | 4000个Scaling实验 | 激活值重计算
我爱学大模型
博客等级 码龄3年 7883粉丝 687原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值