RAG
检索增强(Retrieval Augmented Generation)生成将从源数据(DataSource)中提取信息并将其分成(Splitter)较小的单元,每个单元都在模型的 令牌限制内(Tiktoken)。然后, 这些片段(Chunk)被存储 在数据库(VectorStore)中。 当用户发出请求时, 从数据库中检索(Retriever)出 最相关(Relevant) 的文档片段(Document), 以丰富提示词(prompt),以提高 AI 模型的响应准确性。
关键概念:
- 数据加载器(Data Loaders )负责读取和格式化数据,以便将其分成适合存储在数据库中的片段。
- 分割器(Splitters):Splitters 是用来将源数据分割成较小单元(Chunks)的工具或组件,
- 数据库(Vector Database)负责通过高效的向量检索技术来实现文档片段的快速检索。
- 检索器(Retrievers)负责从数据库中检索出最相关的文档片段。
Indexing 阶段
准备知识库,提炼知识,以便在查询阶段进行检索。
流程示例:
graph LR
DataSource -->|DataLoader| Documents;
Documents -->|Split| Chunk;
Chunk -->|Tokenize| EmbedDocument;
EmbedDocument -->|Indexing| KnowledgeBase;
Querying 阶段
从知识库中检索出相关的上下文,以协助 LLM 回答问题。
流程示例:
graph LR
KnowledgeBase --> Retriever;
Retriever --> QueryEngine;
Retriever --> Agents;
RAGScript 示例
详细见注释:
rag {
indexing {
// 从文件中读取文档
val document = document("filename.txt")
// 将文档切割成 chunk
val chunks = document.split()
// 建立索引
store.indexing(chunks)
}
querying {
// 查询
store.findRelevant("workflow dsl design ").also {
println(it)
}
}
}