到 2024 年中期,创建一个令人印象深刻和令人兴奋的 AI 演示将变得轻而易举。只需一名强大的开发人员、一些巧妙的快速实验以及对强大基础模型的几次 API 调用,您通常可以在一个下午内构建一个定制的 AI 机器人。添加一个库,例如
人们常说,在人工智能时代,数据就是你的护城河。为此,构建生产级 RAG 应用程序需要合适的数据基础架构来存储、版本控制、处理、评估和查询构成专有语料库的数据块。由于 MinIO 对人工智能采取数据优先的方法,我们对此类项目的默认初始基础设施建议是设置一个现代数据湖和一个矢量数据库。虽然在此过程中可能需要插入其他辅助工具,但这两个基础设施单元是基础。它们将成为将 RAG 应用程序投入生产后遇到的几乎所有任务的重心。
可以找到基于 MinIO 构建的现代数据湖参考架构
启发式基于代码的评估- 使用各种措施(如输出标记计数、关键字存在/不存在、JSON 有效性等)以编程方式对输出进行评分。这些通常可以使用正则表达式和断言库进行确定性评估,以进行常规单元测试。
基于算法代码的评估- 使用各种众所周知的数据科学指标对输出进行评分。例如,通过将提示重新定义为排名问题,您可以使用推荐系统中的流行评分函数,例如归一化折扣累积增益 (NDCG) 或平均倒数排名 (MRR)。相反,如果可以将提示定义为分类问题,那么准确率、召回率和 F1 分数可能比较合适。最后,您可以使用 BLEU、ROUGE 和语义答案相似度 (SAS) 等指标将语义输出与已知的基本事实进行比较。
基于模型的评估- 使用一个模型对另一个模型的输出进行评分,详情见
人工评估- 要求人类领域专家提供最佳答案通常是黄金标准。虽然这种方法缓慢且昂贵,但不应忽视,因为它对于获得洞察力和构建初始评估数据集非常有价值。如果您想从所执行的工作中获得额外的收益,您可以使用
在决定使用哪种评估技术的同时,请考虑创建一个自定义基准评估数据集 - 通常用于 Hugging Face 排行榜的通用数据集,例如
考虑对评估数据集中每一行的输入提示应用约束,以便 LLM 以具体的判断类型回答:二进制、分类、排名、数字或文本。混合判断类型将使您的评估保持合理的多样性并减少输出偏差。在其他条件不变的情况下,评估测试用例越多越好;但是,建议在此阶段注重质量而不是数量。最近关于 LLM 微调的研究
虽然您可以临时开始手动运行评估,但不要等太久才实施 CI/CD 管道来自动执行评估评分流程。每天或在与源代码存储库和可观察性工具连接的触发器上运行评估通常被认为是 ML-ops 的最佳实践。考虑使用开源 RAG 评估框架,例如
文档提取- 专有 PDF、办公文档、演示文稿和 Markdown 文件可以成为丰富的信息来源。存在一个庞大的开源和 SaaS 工具生态系统来提取这些数据。通常,数据提取器是特定于文件类型的(JSON、CSV、docx 等)、基于 OCR 或由机器学习和计算机视觉算法提供支持。从简单开始,然后根据需要添加复杂性。
API 提取- 公共和私有 API 可以成为丰富的领域内知识来源。此外,精心设计的基于 JSON 和 XML 的 Web API 已经具有一些内置结构,可以更轻松地在有效负载内执行相关属性的有针对性的提取,同时丢弃任何被认为不相关的内容。存在一个庞大的经济实惠的低代码和无代码 API 连接器生态系统,可帮助您避免为每个要使用的 API 编写自定义 ETL - 如果没有专门的数据工程师团队,这种方法可能难以维护和扩展。
Web 抓取工具- 网页被视为具有树状 DOM 结构的半结构化数据。如果您知道要获取哪些信息、信息位于何处以及信息所在的页面布局,那么即使没有详尽的 API,您也可以快速构建抓取工具来使用这些数据。许多脚本库和低代码工具都为 Web 抓取提供了有价值的抽象。
网络爬虫- 网络爬虫可以遍历网页并构建递归 URL 列表。此方法可以与抓取相结合,以根据您的标准扫描、汇总和过滤信息。从更大的范围来看,此技术可用于创建您自己的知识图谱。
固定大小策略- 在这种方法中,我们只需为内容块选择固定数量的标记,并相应地将内容分解为较小的块。通常,使用此策略时建议相邻块之间有一些重叠,以避免丢失太多上下文。这是最直接的分块策略,通常是在进一步探索更复杂的策略之前的一个很好的起点。
动态大小策略- 此方法使用各种内容特征来确定块的开始和结束位置。一个简单的例子是标点符号分块器,它根据句号和换行符等特定字符的存在来拆分句子。虽然标点符号分块器对于简单的短内容(即推文、字符限制的产品描述等)可能效果不错,但如果用于更长更复杂的内容,它将有明显的缺点。
内容感知策略- 内容感知分块器会根据所提取的内容和元数据的类型进行调整,并使用这些特性来确定每个分块的开始和结束位置。例如,HTML 博客的分块器使用标题标签来划分分块边界。另一个示例是语义分块器,它将每个句子的成对余弦相似度得分与其前面的句子进行比较,以确定上下文何时发生了足够大的变化,从而有必要划分新的分块。
在许多情况下,RAG 期间为检索而索引的内容块在上下文上与您的应用程序在生产中遇到的实际提示不同。例如,如果您正在构建一个 AI 问答机器人,您可能拥有大量专有信息语料库,其中包含大量对客户查询的正确答案。然而,在原始形式下,您的语料库不太可能以问答对的格式预先组织,而这种格式对于基于相似性的嵌入检索来说是理想的。在这个例子中,如果在检索时,我们天真地在语料库中搜索与入站客户问题在语义上相似的原始内容块,我们可能会遇到检索结果集的次优相关性。这是因为我们正在比较上下文不同的项目(即问题与答案)的相似性。幸运的是,解决方案相对简单:我们可以利用 LLM 的强大功能,通过将它们重新语境化为假设问题来丰富我们的可能答案(即原始内容块)。然后,我们将这些假设问题索引到我们的向量数据库中,以便随后进行检索。这种技术称为
System Prompt: Given the provided snippet of text, generate three hypothetical questions that could be asked about it. Each question must be able to be answered using the information within the referenced snippet of text and only that information. Be concise. User Prompt: “At the 52nd Annual Grammy Awards, Beyoncé received ten nominations, including Album of the Year for I Am... Sasha Fierce, Record of the Year for "Halo", and Song of the Year for "Single Ladies (Put a Ring on It)", among others. She tied with Lauryn Hill for most Grammy nominations in a single year by a female artist. In 2010, Beyoncé was featured on Lady Gaga's single "Telephone" and its music video. The song topped the US Pop Songs chart, becoming the sixth number-one for both Beyoncé and Gaga, tying them with Mariah Carey for most number-ones since the Nielsen Top 40 airplay chart launched in 1992. "Telephone" received a Grammy Award nomination for Best Pop Collaboration with Vocals.” Response: Here are some questions that could be asked based on the provided text: * How many nominations did Beyoncé receive at the 52nd Annual Grammy Awards? * For which album was Beyoncé nominated for Album of the Year at the 52nd Annual Grammy Awards? * Which song earned Beyoncé a nomination for Record of the Year at the 52nd Annual Grammy Awards?
如果您有任何疑问,请通过以下方式联系我们