当前位置: 首页 > news >正文

构建 LLM 应用程序时经常遇到的高级概念的快速指南

使用案例

数据支持的 LLM 应用程序有无数的用例,但大致可以分为四类:

结构化数据提取 Pydantic 提取器允许您指定要从数据中提取的精确数据结构,并使用 LLM 以类型安全的方式填充缺失的部分。这对于从 PDF、网站等非结构化来源中提取结构化数据非常有用,并且是自动化工作流程的关键。

查询引擎:查询引擎是一种端到端流程,可让您针对数据提出问题。它接收自然语言查询,并返回响应,以及检索并传递给 LLM 的参考上下文。

聊天引擎:聊天引擎是一种与您的数据进行对话的端到端流程(多次来回对话而不是单个问答)。

代理:代理是一个由 LLM 驱动的自动决策者,它通过一组工具与世界互动。代理可以采取任意数量的步骤来完成给定的任务,动态地决定最佳行动方案,而不是遵循预先确定的步骤。这使其具有额外的灵活性来处理更复杂的任务。

检索增强生成 (RAG)

提示

如果您还没有,请在阅读本文之前安装 LlamaIndex并完成入门教程。这将有助于您在经验中巩固这些步骤。

LLM 是在大量数据上进行训练的,但它们并不是在您的数据上进行训练的。检索增强生成 (RAG) 通过将您的数据添加到 LLM 已经可以访问的数据中来解决此问题。您将在本文档中经常看到对 RAG 的引用。查询引擎、聊天引擎和代理经常使用 RAG 来完成其任务。

RAG 中,您的数据会被加载并准备用于查询或“索引”。用户查询将根据索引进行,索引会将您的数据过滤到最相关的上下文。然后,此上下文和您的查询将连同提示一起发送到 LLMLLM 会提供答复。

即使您正在构建的是聊天机器人或代理,您也需要了解将数据传入应用程序的 RAG 技术。

在这里插入图片描述

RAG 内的阶段

RAG 中有五个关键阶段,它们将成为您构建的大多数大型应用程序的一部分。它们是:

  • 加载:这指的是将数据从其所在位置(无论是文本文件、PDF、其他网站、数据库还是 API)加载到您的工作流程中。LlamaHub提供了数百种连接器可供选择。

  • 索引:这意味着创建一个允许查询数据的数据结构。对于 LLM,这几乎总是意味着创建vector embeddings数据含义的数值表示,以及许多其他元数据策略,以便于准确找到上下文相关的数据。

  • 存储:一旦您的数据被索引,您几乎总是希望存储您的索引以及其他元数据,以避免重新索引它。

  • 查询:对于任何给定的索引策略,您可以通过多种方式利用 LLM 和 LlamaIndex 数据结构进行查询,包括子查询、多步骤查询和混合策略。

  • 评估:任何流程中的关键步骤是检查它相对于其他策略的有效性,或检查您进行更改时的效果。评估提供了客观的衡量标准,可以衡量您对查询的响应有多准确、多忠实、多快速。

在这里插入图片描述

RAG 中的重要概念

您还会遇到一些涉及每个阶段内的步骤的术语。

加载阶段

  • 节点和文档:ADocument是任何数据源的容器 - 例如,PDF、API 输出或从数据库检索数据。ANode是 LlamaIndex 中数据的原子单位,代表源的“块”Document。节点具有将它们与所在文档和其他节点相关联的元数据。

  • 连接器:数据连接器(通常称为Reader)将来自不同数据源和数据格式的数据导入Documents和Nodes。

索引阶段

  • 索引:一旦您提取了数据,LlamaIndex 将帮助您将数据索引为易于检索的结构。这通常涉及生成存储vector embeddings在称为 的专用数据库中的数据vector store。索引还可以存储有关数据的各种元数据。

  • 嵌入:LLM 生成称为 的数据的数值表示embeddings。在筛选数据以查找相关性时,LlamaIndex 会将查询转换为嵌入,并且您的向量存储将找到与查询的嵌入在数值上相似的数据。

查询阶段

  • 检索器:检索器定义在给定查询时如何有效地从索引中检索相关上下文。检索策略是检索数据的相关性和检索效率的关键。

  • 路由器:路由器确定使用哪个检索器从知识库中检索相关上下文。更具体地说,该类RouterRetriever 负责选择一个或多个候选检索器来执行查询。它们使用选择器根据每个候选的元数据和查询选择最佳选项。

  • 节点后处理器:节点后处理器接收一组检索到的节点并对其应用转换、过滤或重新排序逻辑。

  • 响应合成器:响应合成器使用用户查询和一组给定的检索到的文本块从 LLM 生成响应。


http://www.mrgr.cn/news/29509.html

相关文章:

  • 低代码集成多方API的简单实现
  • AndroidStudio-常用布局
  • STM32问题集
  • 现代无线通信接收机架构:超外差、零中频与低中频的比较分析
  • AI 扩展开发者思维方式:以 SQL 查询优化为例
  • Pixel Streaming入门教程:SignallingWebServer
  • 3.postman脚本语言、接口关联(json引用(变量)、脚本用正则表达式)、断言封装、自动化构造接口请求(Postman工具)
  • 直播开播极速流,如何有效接入?
  • 基于Spring Boot的学生社区故障维修预约系统的设计与实现(开题报告)
  • C++面试模拟01
  • C++:日期类的实现
  • YOLOv8改进:SA注意力机制【注意力系列篇】(附详细的修改步骤,以及代码,与其他一些注意力机制相比,不仅准确度更高,而且模型更加轻量化。)
  • 隐藏excel单元格数据的两个方法
  • 【d2l安装超详细老妈子教程】
  • 史上最强异步编程~CompletableFuture精读
  • hym8563/pcf8563 定时关机后,中断没有清除,导致INT脚一直为低,系统不开机。
  • GEE教程:1950-2023年ECMWF数据中积雪的长时序统计分析
  • 什么是泛在智能?应用在哪些场景?
  • PMP出成绩非常慢?PDU如何获取?
  • 为什么收录是谷歌seo的底子?
  • 在 Docker 中部署无头 Chrome:在 Browserless 中运行
  • ISO 26262功能安全标准与汽车软件代码质量的关系探讨
  • 点工干了三年,快要废了。。。
  • Mastering openFrameworks_第十一章_网络
  • 健身房预约小程序定制搭建,数字化运营管理
  • 【C++登堂入室】类和对象(下)