1.3.1 数据准备
根据LLM需要处理的任务类型,数据准备通常包括识别数据源、从数据源中提取数据、清洗数据并将其存储在数据库中等环节。用于存储数据的数据库类型和准备数据的步骤可能会因应用场景和检索方法的不同而有所变化。例如,如果使用像Faiss这样的向量存储库,需要为数据创建嵌入并将其存储在向量存储库中;如果使用像Elasticsearch这样的搜索引擎,需要将数据索引到搜索引擎中;如果使用像Neo4j这样的图数据库,需要为数据创建节点和边,并将它们存储到图数据库中。下面将分别介绍不同类型的数据库以及准备数据的步骤。
1.向量存储库
向量存储库非常适合存储文本、图像、音频等非结构化数据,并根据语义相似性搜索数据。向量模型用于为数据库中存储的数据生成向量嵌入。根据数据类型、任务和向量模型的不同,数据需要被切分成更小的块。例如,如果要存储文本数据,则可以将数据切分成句子或段落。如果要存储代码,则可以将数据切分成函数或类。如果选择提供更多的上下文片段,则可以使用更小的块。将数据切分成块后,可以为每个块生成向量并将其存储在向量存储库中。在最简单的RAG系统中,当向量存储库接收到用户查询时,查询也会被转换为一个向量,向量存储库会返回与查询最相似的候选数据。
2.搜索引擎
在RAG系统中,可以从通用搜索引擎(如百度、Bing等)或内部搜索引擎(如Elasticsearch、Solr等)中检索数据。在RAG架构的检索阶段,使用问题/任务详细信息查询搜索引擎,搜索引擎返回最相关的文档。搜索引擎对于从网络中检索数据和使用关键字搜索数据非常有用。可以将来自搜索引擎的数据与来自其他数据库(如向量存储库、图数据库等)的数据结合起来,以提高输出的质量。
3.图数据库
图数据库以节点和边的形式存储数据。它适用于存储结构化数据,如表格、文档等,并使用数据之间的关系搜索数据。例如,如果你正在存储有关人员的数据,可以为每个人创建节点,并在彼此相识的人之间创建边。当对图数据库进行查询时,图数据库返回与查询节点相连的节点。这种使用知识图谱的检索对于完成像问题回答这样的任务非常有用,其中答案是人或实体。