检索增强生成(RAG)的挑战与优化措施

2024-06-17 23:04

本文主要是介绍检索增强生成(RAG)的挑战与优化措施,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如何理解检索增强生成(RAG)

简单来说,RAG就是让LLM通过外部知识源获取额外信息,从而生成更准确、更符合上下文的答案,并减少错误信息(或称为“幻觉”)的产生。

我们都知道,最先进的LLM是通过训练大量数据来获得广泛的通用知识,这些知识被储存在神经网络的权重(参数记忆)中。但是,当我们让LLM生成需要训练数据之外的知识(比如最新的、专有的或特定领域的信息)时,就可能导致事实上的不准确,也就是我们所说的“幻觉”。

因此,让模型适应特定的行业或私有信息就变得非常重要。我们通常会对模型进行微调。这个方法虽然行得通,但它既耗费大量计算资源,又花费不菲,还得需要技术高手来操刀,因此在迅速适应信息更新上就显得有些笨重了。

那么,有没有更加灵活的办法呢?早在2020年,Lewis和他的团队在一篇名为《知识密集型NLP任务的检索增强生成》的论文中给出了答案。他们提出了一种新技术,叫做检索增强生成(RAG)。这个方法的亮点在于,它把一个能生成内容的模型和一个能进行信息检索的模块结合在一起。这样,模型就可以直接从一个容易更新的外部知识源那里获得所需信息了。

对大型语言模型(LLM)来说,检索增强生成(RAG)就像是开卷考试一样。在开卷考试中,学生可以携带参考资料,比如教科书或笔记,用它们来查找回答问题所需的相关信息。开卷考试的理念在于,考试重点在于考察学生的推理能力,而不是记忆特定信息的能力。

类似地,在RAG中,事实知识从LLM的推理能力中分离出来,存储在一个容易访问和更新的外部知识源中:

  • 参数化知识:在训练期间学习,隐式地存储在神经网络的权重中。
  • 非参数化知识:存储在外部知识源中,比如向量数据库。

检索增强生成(RAG)的基本工作流程如下:

img

  1. 检索:使用用户的查询来从外部知识源检索相关上下文。为此,需要用嵌入模型将用户查询嵌入到与向量数据库中额外上下文相同的向量空间。这样就可以进行相似性搜索,从向量数据库中返回最接近的前k个数据对象。
  2. 增强:将用户查询和检索到的额外上下文放入一个提示模板中。
  3. 生成:最后,将增强后的提示输入到大型语言模型(LLM)中进行生成。

这个流程就像是让LLM在处理查询时,先去查阅一下外部的“参考资料”,然后再基于这些信息给出回答。这样的做法让LLM在回答问题时更加准确和丰富,因为它不仅仅依赖于训练时学到的知识,还可以利用最新的、来自外部的信息。

基于Langchain实现

要实现检索增强生成(RAG)流程,我们可以使用LangChain来协调整个过程,结合OpenAI的大型语言模型(LLM)、Weaviate向量数据库和OpenAI嵌入模型。以下是实现此流程所需的准备工作和具体步骤:

准备工作——Python环境配置

pip install langchain openai weaviate-client
  • langchain:用于协调整个流程。
  • openai:提供嵌入模型和LLM。
  • weaviate-client:用于操作Weaviate向量数据库。

此外,在根目录的 .env 文件中定义相关的环境变量。要获取 OpenAI API 密钥,我们需要一个 OpenAI 的API 密钥(没有的小伙伴可以私信我免费领取)。

OPENAI_API_KEY="<YOUR_OPENAI_API_KEY>"

然后,运行以下命令以加载相关的环境变量。

import dotenv
dotenv.load_dotenv()

准备工作——数据加载及处理

除了Python环境,我们还需要准备一个向量数据库作为包含所有其他信息的外部知识源。首先是收集和加载数据,可以使用LangChain的众多内置 DocumentLoader 之一,比如 TextLoader 。

import requests
from langchain.document_loaders import TextLoader
​
with open("xxxxx.txt", "w") as f:f.write(res.text)
​
loader = TextLoader('./xxxxx.txt')
documents = loader.load()

接下来,由于文档可能太长,需要进行分块,否则无法加载入 LLM 的上下文窗口,LangChain提供了许多内置的文本分割工具来帮助完成这个任务。示例如下,我们可以使用CharacterTextSplitter来分割文本,设置chunk_size大约为500,chunk_overlap为50,这样可以确保文本在各个块之间的连贯性。

from langchain.text_splitter import CharacterTextSplitter
text_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = text_splitter.split_documents(documents)

最后一步是嵌入和存储这些小块。为了实现跨文本块的语义搜索,我们需要为每个块生成向量嵌入,然后将它们连同嵌入一起存储。生成向量嵌入时,我们可以使用OpenAI的嵌入模型;存储它们时,可以使用Weaviate向量数据库。通过调用.from_documents(),向量数据库会自动填充这些文本块。

from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Weaviate
import weaviate
from weaviate.embedded import EmbeddedOptions
​
client = weaviate.Client(embedded_options = EmbeddedOptions()
)
​
vectorstore = Weaviate.from_documents(client = client,    documents = chunks,embedding = OpenAIEmbeddings(),by_text = False
)

步骤1——检索

填充向量数据库后,可以将其定义为检索器组件,该组件根据用户查询和嵌入块之间的语义相似性,在Weaviate数据库中进行相似性搜索,找到最相关的内容。

retriever = vectorstore.as_retriever()

步骤2——增强

接下来,将检索到的内容与用户查询结合,形成一个新的提示,需要准备一个提示模板。可以从提示模板轻松自定义提示,如下

from langchain.prompts import ChatPromptTemplate
​
template = """You are an assistant for question-answering tasks. 
Use the following pieces of retrieved context to answer the question. 
If you don't know the answer, just say that you don't know. 
Use three sentences maximum and keep the answer concise.
Question: {question} 
Context: {context} 
Answer:
"""
prompt = ChatPromptTemplate.from_template(template)
​
print(prompt)

步骤3——生成

最后,我们可以将这个增强后的提示输入到OpenAI的LLM中,生成最终的回答。

from langchain.chat_models import ChatOpenAI
from langchain.schema.runnable import RunnablePassthrough
from langchain.schema.output_parser import StrOutputParser
​
llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)
​
rag_chain = ({"context": retriever,  "question": RunnablePassthrough()} | prompt | llm| StrOutputParser() 
)
​
query = "What did the president say about the business? "
rag_chain.invoke(query)

这样我们就构建了一个高效且定制化的RAG系统,可以根据具体需求进行调整,例如改变嵌入模型、调整检索策略或者优化生成的提示模板,适用各种复杂的查询和任务。

检索增强生成(RAG)技术的挑战

在探讨这些策略之前,让我们先剖析导致RAG系统性能不佳的关键挑战,将它们分为三个不同的类别:数据检索、信息增强以及后续生成过程。除了技术上的复杂性之外,数据偏差、不断发展的领域和语言的动态性质等外部因素也使情况进一步复杂化。本文深入探讨了这些失败背后的无数原因,提供了RAG实施所面临的障碍的整体观点。

数据检索问题

通常,如果RAG系统性能不佳,这是因为检索步骤很难找到用于生成的正确上下文。当使用矢量搜索返回基于相似性的结果时,可能会由于多种原因而出现差异:

  • 语义歧义: 向量表示(例如词嵌入)可能无法捕捉概念之间的细微差别。例如,“苹果”一词可能指的是水果或科技公司。嵌入可能会混淆这些含义,导致不相关的结果。
  • 大小与方向: 余弦相似度是一种常见的度量,重点关注向量的方向而不是它们的大小。这可能会导致语义上遥远但方向上相似的匹配。
  • 粒度不匹配: 您的查询向量可能代表特定概念,但如果您的数据集仅包含更广泛的主题,则您可能会检索到比预期更广泛的结果。
  • 向量空间密度: 在高维空间中,密切相关和不相关的项之间的距离差异可能非常小。这可能导致看似不相关的结果被认为是相关的。
  • 全局相似性与局部相似性: 大多数向量搜索机制都识别全局相似性。有时,您可能对未捕获的本地或上下文相似之处感兴趣。
  • 稀疏检索挑战: 检索机制可能很难在庞大的数据集中识别正确的段落,特别是当所需的信息稀疏地分布在多个文档中时。

例如,当查询诸如“云安全中的图机器学习用例”之类的小众主题时,如果检索系统获取有关“云安全”的通用文章而没有图机器学习的具体信息,则后续生成将造成错误。

随着生成式人工智能和Transformer网络变得越来越流行,动态嵌入(dynamic embeddings)和上下文感知搜索(context-aware searches)可能会减少其中一些差异。此外,结合符号和子符号人工智能元素的混合模型可能会提供更好的精度。

信息增强问题

1.上下文的集成: 这里的挑战是将检索到的段落的上下文与当前的生成任务顺利地集成。如果做得不好,输出可能会显得脱节或缺乏连贯性。

示例:如果检索到的段落提供了有关“Python的历史”的深入信息,而生成任务是详细说明“Python的应用程序”,则输出可能会过分强调历史而忽视应用程序。

2.冗余和重复: 如果多个检索到的段落包含相似的信息,则生成步骤可能会产生重复的内容。

示例:如果检索到的三篇文章都提到“PyTorch的动态计算图”,则生成的内容可能会多次冗余地强调这一点。

3.排名和优先级: 确定多个检索到的段落对于生成任务的重要性或相关性可能具有挑战性。增强过程必须适当权衡每个段落的价值。

示例:对于“云安全最佳实践”的查询,如果检索到的有关“双因素身份验证”的段落排名低于不太重要的点,则最终输出可能会歪曲双因素身份验证的重要性。

4.风格或语气不匹配: 检索到的内容可能来自具有不同写作风格或语气的来源。增强过程需要协调这些差异以确保一致的输出。

示例:如果检索到的一段文章是用随意的语气写的,而另一段则比较正式,那么最后一代可能会在这些风格之间摇摆不定,导致反应缺乏凝聚力。

5.过度依赖检索内容: 生成模型可能过于依赖增强信息,导致输出重复检索内容,而不是增加价值或提供合成。

示例:如果检索到的段落提供了有关“图机器学习技术”的多种观点,但生成的输出仅重申了这些观点,而没有综合或提供额外的见解,则增强并没有增加实质性价值。

生成模型问题

常用的生成模型-大语言模型(LLM)存在以下问题:

  • 幻觉(Hallucinations): 大语言模型会编造非事实数据。
  • 错误信息(Misinformation): 训练数据包含不正确的信息。
  • 上下文(context)长度受限: 你将受到所选大语言模型的背景长度的限制。通常,上下文长度越大,您可以提交的上下文就越多。

下面列出了可能会损害RAG管道性能的生成模型问题:

1.连贯性和一致性: 确保生成的输出在逻辑上连贯并保持一致的叙述,特别是在集成检索到的信息时,可能具有挑战性。

示例:输出可能会开始讨论“Python在机器学习中的效率”,然后突然切换到“Python在Web开发中的使用”,而没有明确的过渡。

2.冗长或冗余的输出: 生成模型可能会产生不必要的冗长响应或重复某些点。

示例:在阐述“PyTorch的优点”时,模型可能会以不同的措辞多次提及“动态计算图”。

3.过度概括: 模型可能提供通用答案,而不是针对查询定制的具体、详细的响应。

示例:关于“PyTorch和TensorFlow之间的差异”的查询可能会得到有关深度学习框架重要性的广泛回应,但没有解决具体差异。

4.缺乏深度或洞察力: 即使有相关的检索信息,生成的响应也可能不够深入或提供有洞察力的综合。

示例:当被问及“图机器学习在云技术中的潜在应用”时,该模型可能会列出一般应用程序,而不会详细说明或提供独特的见解。

5.检索中的错误传播: 检索数据中的错误或偏差可以在生成过程中继续传播和放大。

示例:如果检索到的段落不准确地声称“next.js是后端框架”,则生成的内容可能会在此错误的前提下扩展。

6.风格不一致: 生成的内容可能无法保持一致的风格,尤其是在尝试混合来自不同检索源的信息时。

示例:在同一响应中将正式的技术解释与随意的轶事内容混合在一起。

7.未能解决矛盾: 如果检索到的段落包含矛盾信息,则生成模型可能难以协调这些差异,甚至可能在输出中重现矛盾。

示例:如果一个检索到的来源说“PyTorch主要用于研究”,而另一个来源说“PyTorch广泛用于生产”,则生成的响应可能会在没有澄清的情况下混淆两者。

8.上下文忽略: 生成的响应有时可能会错过或误解查询背后更广泛的上下文或意图。

示例:为了回应“告诉我一个关于机器学习的有趣事实”,该模型可能会产生一个技术性很强的观点,而不是对一般受众来说轻松有趣的内容。

这些生成问题凸显了生成准确、相关和高质量内容的复杂性,即使在使用检索到的数据进行增强时也是如此。它强调需要迭代细化、反馈循环,甚至可能进行特定领域的调整来优化生成过程,特别是在云技术和机器学习等专业领域。接下来我们将看看如何解决这些问题。

检索增强生成(RAG)技术优化措施

数据优化

对于高性能RAG系统,数据需要干净、一致且上下文丰富。 文本应该被标准化,以去除特殊字符和不相关的信息,从而提高检索器的效率。应消除实体和术语的歧义以保持一致性,同时应消除重复或冗余信息以简化检索器的焦点。真实性是关键;应尽可能验证每条数据的准确性。实现特定领域的注释可以添加另一层上下文,并结合用户反馈循环进行持续更新,确保系统适应现实世界的交互。时间敏感的主题需要一种机制来刷新过时的文档。总体而言,重点应放在清晰度、上下文和正确性上,以使系统高效可靠。 以下是最佳实践列表:

  • 文本清理: 规范文本格式,去除特殊字符和不相关信息。这提高了检索器的效率并避免垃圾进垃圾出。
  • 实体解析: 消除实体和术语的歧义以实现一致的引用。例如,将“ML”、“机器学习”和“机器学习”标准化为通用术语。
  • 重复数据删除: 删除重复文档或冗余信息,以增强检索者的注意力和效率。
  • 文档分割: 将长文档分解为可管理的块,或者相反,将小片段组合成连贯的文档以优化检索器性能。
  • 特定于领域的注释: 使用特定于领域的标签或元数据来注释文档。例如,考虑到您关注的云技术,您可以标记与云相关的技术,例如“AWS”、“Azure”等。
  • 数据增强: 使用同义词、释义甚至其他语言的翻译来增加语料库的多样性。
  • 层次结构和关系: 识别文档之间的父子或兄弟关系,以提高上下文理解。
  • 用户反馈循环: 使用基于现实世界交互的新问答对不断更新您的数据库,标记它们的事实正确性。
  • 时间敏感数据: 对于经常更新的主题,实施一种机制来使过时的文档失效或更新。

表征优化

OpenAI的表征是固定大小且不可微调的。对于固定的OpenAI表征,重点确实是优化RAG管道的其他部分(例如检索机制或数据语料库的质量),以确保您充分利用现有的表征。

如果您的表征模型是可微调的,您可以利用微调表征模型、动态表征或

a. 微调表征(具有可微调/可训练的嵌入)

RAG中表征的微调对其功效有直接影响。通过使表征适应领域的具体情况,检索步骤变得更加清晰,确保获取的内容与查询高度相关。这种微调的检索为后续生成步骤奠定了更准确的基础。特别是在专业领域,或者在处理不断发展或罕见的术语时,这些定制的表征至关重要。本质上,对于RAG来说,微调表征类似于在让声音说话之前调整耳朵,确保听到的(检索到的)内容能够最佳地影响所说的(生成的)内容。

目前您无法微调ada-embedding-02,bge嵌入模型,如bge-large-en是可微调的候选高性能表征模型。可以使用LLaMaIndex来微调bge嵌入模型。要创建训练数据来微调bge模型,首先需要使用gpt-35-turbo等LLM为文档块创建问题,(问题,答案)对(pair)是进行微调的微调数据。

b. 动态表征(具有可微调/可训练的表征)

动态表征根据单词出现的上下文进行调整,这与用单个向量表示每个单词的静态表征不同。例如,在像BERT这样的Transformer模型中,同一个单词可以根据周围的单词有不同的表征。

还有经验证据表明,当文本长度(例如<5个标记)时,OpenAI的嵌入模型text-embedding-ada-002会给出意想不到的高余弦相似度结果。理想情况下,我们应该确保表征文本周围有尽可能多的上下文,以便表征给出“健康”的结果。

OpenAI的embeddings-ada-02模型基于GPT等大型语言模型的原理。它比静态表征模型更先进,并且可以捕获某种程度的上下文。这意味着它生成的表征在一定程度上受到周围文本的影响。然而,值得注意的是,虽然它比静态模型更好地捕获上下文,但它可能不像GPT-4等最新的全面语言模型那样对上下文敏感。

c. 刷新表征(具有可微调/可训练的表征)

表征还应该定期刷新,以捕获语料库中不断变化的语义。目标是使它们能够高效地进行检索和匹配,确保快速、准确的RAG实施。

检索优化

为了提高RAG系统的检索效率,请采用整体策略。首先完善你的分块过程,探索各种尺寸以达到适当的平衡。嵌入元数据以改进过滤功能和丰富上下文。支持跨多个索引的查询路由,满足不同的查询类型。考虑Langchain的多向量检索方法,该方法采用较小的块、摘要嵌入和假设问题来提高检索准确性。 通过重新排序解决向量相似性问题,并尝试混合搜索和递归检索技术以提高性能。HyDE等策略和“ReadRetrieveRead”等迭代方法提供了有希望的结果。最后,微调矢量搜索算法,优化准确性和延迟之间的权衡。这种全面的方法可确保您的RAG系统在检索相关且上下文丰富的信息方面表现出色。

调整分块

我们的目标是收集尽可能多的相关背景信息并尽可能减少噪音。具有小、中和大尺寸的块,并使用“LlamaIndex响应评估”之类的评估框架来决定最佳块大小,该框架使用GPT4来评估忠实度和相关性,以评级和比较单独的块大小。

在构建RAG系统时,请始终记住chunk_size是一个关键参数。投入时间仔细评估和调整块大小,以获得无与伦比的结果。LLaMA索引具有针对不同分块方法的自动评估功能。

  • 将引用(元数据)嵌入到块中: 例如日期和用于过滤的用途。添加章节、子章节参考也可能是有助于改进检索的元数据。
  • 多个索引上的查询路由: 这与之前的元数据过滤和分块方法密切相关。您可能有不同的索引并同时查询它们。如果查询是定向查询,可以使用标准索引,或者如果它是基于元数据(例如某个“日期”)的关键字搜索或过滤,则可以使用相关的单独索引。

Langchain的多向量检索也是一种好的优化方案,它为每个文档创建多个向量的方法包括:

  • 较小的块: 将文档分割成较小的块,并将它们与较长的块一起嵌入。
  • 添加“摘要嵌入”: 为每个文档创建摘要,将其与文档一起嵌入(或代替)。
  • 假设性问题: 创建每个文档都适合回答的假设性问题,将这些问题与文档一起嵌入(或代替文档)。
  • 重新排序: 嵌入的向量相似搜索可能无法解释为语义相似性。通过重新分配,您可以解决这种差异。
  • 探索混合搜索: 通过智能地混合基于关键字的搜索、语义搜索和矢量搜索等技术,您可以利用每种方法的优势。这种方法使您的RAG系统能够适应不同的查询类型和信息需求,确保它始终检索最相关且上下文丰富的信息。混合搜索可以成为您检索策略的有力补充,从而提高RAG管道的整体性能。
  • 递归检索和查询引擎: 在RAG系统中优化检索的另一种强大方法是实现递归检索和复杂的查询引擎。递归检索涉及在初始检索期间获取较小的文档块以捕获关键语义。在此过程的后期,为您的语言模型(LM)提供包含更多上下文信息的更大块。这种两步检索方法有助于在效率和上下文丰富的响应之间取得平衡。

强大的查询引擎是对这一策略的补充。精心设计的查询引擎对于有效解释用户查询至关重要,特别是当它们涉及微妙或复杂的语言时。它使RAG系统能够迭代评估缺失信息的问题,并在所有相关详细信息可用后制定更全面的响应。

递归检索和智能查询引擎的结合可以显着增强RAG系统的性能,确保它不仅检索相关信息,而且检索上下文完整的信息,以获得更准确和信息丰富的答案。

  • HyDE: HyDE是一种策略,它接受查询,生成假设响应,然后使用两者进行嵌入查找。研究发现这可以显着提高性能。
  • 阅读检索阅读/ReAct: 迭代评估问题是否缺少信息,并在所有信息可用后制定响应。
  • 父文档检索器: 在检索期间获取小块以更好地捕获语义含义,为您的LLM提供具有更多上下文的更大块。
  • 矢量搜索: 调整矢量搜索算法和参数,在准确性和延迟之间找到适当的平衡。当涉及RAG系统中的矢量搜索时,精度和速度是关键。首先微调矢量搜索算法和参数,重点关注要搜索的邻居数量和使用的距离度量等因素。目标是在准确性和延迟之间取得适当的平衡。尝试不同的配置并衡量它们对检索效率的影响。

随着新选项的不断出现,请随时了解矢量搜索算法和库的最新进展。此外,考虑实施查询批处理以提高搜索效率。通过优化矢量搜索,可以确保RAG系统准确、快速地响应用户查询,这是高效且响应迅速的管道的关键因素。

查询分解+提示工程优化

我们深入研究查询转换,这是将复杂查询分解为可管理子查询的技术,这是一种经过验证的增强大型语言模型(LLM)有效性的策略。此外,我们还讨论了设计基本提示的关键方面,其中提示模板和条件在根据特定用例和上下文定制RAG系统的行为方面发挥着关键作用。这些策略共同提高了RAG管道的精度和效率。

a. 查询转换

将复杂的问题拆分为多个问题(llamaindex)。大语言模型(LLM)在分解复杂查询时往往会工作得更好,可以将其构建到RAG系统中,以便将一个查询分解为多个问题。

b. 提示工程

在RAG系统中设计基本提示对于指导模型的行为至关重要。有两种方法:提示模板和提示调节。

  • 提示模板: 定义一个模板来捕获查询和上下文的本质,同时牢记特定的用例。例如,如果正在构建技术支持机器人,模板可能如下所示:“帮助用户解决问题:{issue_description}。考虑这些文档:{document_snippets}。”
  • 提示调节: 您还可以通过添加前缀来设置上下文或指示模型以某种方式回答来调节模型。例如,考虑到您对机器学习的兴趣,您可以在前面加上“利用您对机器学习和云技术的理解,回答以下问题:”

下面是创建此类提示的简化Python示例,假设您已获得查询并检索到文档:

#您的问题和检索到的文档
Question=“最好的机器学习分类算法是什么?”
retrieve_docs=[“Doc1:SVM被广泛使用......”,“Doc2:随机森林很强大......”]
#模板
template=“根据这些文档帮助回答以下问题:{question}。考虑这些文档:{docs}”
#构建完整的提示
full_prompt=template.format(question=question,docs="".join(retrieved_docs))
#现在,这个`full_prompt`可以被输入到RAG生成器中

作为额外的改进,请考虑微调基本模型并使用函数调用。

生成模型微调优化

仅微调RAG设置中的生成模型(例如,微调上下文和提示发送到的基本gpt模型)旨在改进语言生成组件,而无需触及检索部分。这样做有几个好处:

  • 答案质量: 直接提高生成器制定答案的能力。
  • 上下文理解: 对特定领域的数据集进行微调可以帮助生成器更准确地理解检索器提供的上下文。
  • 速度: 它可以使生成模型更加高效,从而加快整个RAG的运行速度。

函数调用优化

函数调用功能可以通过在生成步骤中引入结构化、可操作的输出来显着增强检索增强生成(RAG)系统。 这允许实时API集成以获得最新答案,优化查询执行以减少错误,以及模块化检索方法以提高相关性。它还可以促进动态文档获取的反馈循环,并为多步骤推理或数据聚合提供结构化JSON输出。总体而言,它使RAG系统更加动态、准确且响应迅速。

如何系统的去学习大模型LLM ?

作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料 包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来

😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓

一、全套AGI大模型学习路线

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

img

二、640套AI大模型报告合集

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

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

在这里插入图片描述

四、AI大模型商业化落地方案

img

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。
  • 内容
    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
    • L1.4.1 知识大模型
    • L1.4.2 生产大模型
    • L1.4.3 模型工程方法论
    • L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
  • 内容
    • L2.1 API接口
    • L2.1.1 OpenAI API接口
    • L2.1.2 Python接口接入
    • L2.1.3 BOT工具类框架
    • L2.1.4 代码示例
    • L2.2 Prompt框架
    • L2.2.1 什么是Prompt
    • L2.2.2 Prompt框架应用现状
    • L2.2.3 基于GPTAS的Prompt框架
    • L2.2.4 Prompt框架与Thought
    • L2.2.5 Prompt框架与提示词
    • L2.3 流水线工程
    • L2.3.1 流水线工程的概念
    • L2.3.2 流水线工程的优点
    • L2.3.3 流水线工程的应用
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
  • 内容
    • L3.1 Agent模型框架
    • L3.1.1 Agent模型框架的设计理念
    • L3.1.2 Agent模型框架的核心组件
    • L3.1.3 Agent模型框架的实现细节
    • L3.2 MetaGPT
    • L3.2.1 MetaGPT的基本概念
    • L3.2.2 MetaGPT的工作原理
    • L3.2.3 MetaGPT的应用场景
    • L3.3 ChatGLM
    • L3.3.1 ChatGLM的特点
    • L3.3.2 ChatGLM的开发环境
    • L3.3.3 ChatGLM的使用示例
    • L3.4 LLAMA
    • L3.4.1 LLAMA的特点
    • L3.4.2 LLAMA的开发环境
    • L3.4.3 LLAMA的使用示例
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
  • 内容
    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

学习计划:

  • 阶段1:1-2个月,建立AI大模型的基础知识体系。
  • 阶段2:2-3个月,专注于API应用开发能力的提升。
  • 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
  • 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓

这篇关于检索增强生成(RAG)的挑战与优化措施的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1070665

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

跨国公司撤出在华研发中心的启示:中国IT产业的挑战与机遇

近日,IBM中国宣布撤出在华的两大研发中心,这一决定在IT行业引发了广泛的讨论和关注。跨国公司在华研发中心的撤出,不仅对众多IT从业者的职业发展带来了直接的冲击,也引发了人们对全球化背景下中国IT产业竞争力和未来发展方向的深思。面对这一突如其来的变化,我们应如何看待跨国公司的决策?中国IT人才又该如何应对?中国IT产业将何去何从?本文将围绕这些问题展开探讨。 跨国公司撤出的背景与

AI一键生成 PPT

AI一键生成 PPT 操作步骤 作为一名打工人,是不是经常需要制作各种PPT来分享我的生活和想法。但是,你们知道,有时候灵感来了,时间却不够用了!😩直到我发现了Kimi AI——一个能够自动生成PPT的神奇助手!🌟 什么是Kimi? 一款月之暗面科技有限公司开发的AI办公工具,帮助用户快速生成高质量的演示文稿。 无论你是职场人士、学生还是教师,Kimi都能够为你的办公文

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

poj 1287 Networking(prim or kruscal最小生成树)

题意给你点与点间距离,求最小生成树。 注意点是,两点之间可能有不同的路,输入的时候选择最小的,和之前有道最短路WA的题目类似。 prim代码: #include<stdio.h>const int MaxN = 51;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int P;int prim(){bool vis[MaxN];

poj 2349 Arctic Network uva 10369(prim or kruscal最小生成树)

题目很麻烦,因为不熟悉最小生成树的算法调试了好久。 感觉网上的题目解释都没说得很清楚,不适合新手。自己写一个。 题意:给你点的坐标,然后两点间可以有两种方式来通信:第一种是卫星通信,第二种是无线电通信。 卫星通信:任何两个有卫星频道的点间都可以直接建立连接,与点间的距离无关; 无线电通信:两个点之间的距离不能超过D,无线电收发器的功率越大,D越大,越昂贵。 计算无线电收发器D

MySQL高性能优化规范

前言:      笔者最近上班途中突然想丰富下自己的数据库优化技能。于是在查阅了多篇文章后,总结出了这篇! 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份