检索增强生成 (RAG) 是一种结合信息检索与文本生成的技术,用于创建能够访问和推理大型知识库的应用程序。本页面介绍了 OpenAI Cookbook 中的 RAG 实现,包括向量数据库集成、嵌入工作流以及构建 RAG 驱动应用程序的实际示例。
有关基本的嵌入和向量搜索技术,请参阅嵌入和向量搜索。有关知识检索的函数调用方法,请参阅知识检索的函数调用。
RAG 系统遵循两阶段过程:首先从知识库中检索相关上下文,然后使用该上下文进行生成。OpenAI Cookbook 展示了跨多个向量数据库提供商的这种模式。
来源:examples/vector_databases/pinecone/Gen_QA.ipynb14-28 examples/vector_databases/elasticsearch/elasticsearch-retrieval-augmented-generation.ipynb24-31
该 Cookbook 支持多种向量数据库提供商,每种都有特定的集成模式
来源:examples/vector_databases/README.md1-33 examples/vector_databases/pinecone/Gen_QA.ipynb586-608 examples/vector_databases/elasticsearch/elasticsearch-retrieval-augmented-generation.ipynb92-102
该 Cookbook 展示了为 RAG 准备文档的标准模式
| 组件 | 实现 | 目的 |
|---|---|---|
| 文本分块 | window = 20, stride = 4 | 创建重叠块以获得更好的上下文 |
| 嵌入生成 | openai.Embedding.create(input=texts, engine=embed_model) | 将文本转换为向量 |
| 批处理 | batch_size = 100 | 高效的批量操作 |
| 元数据存储 | 存储 url、title、text、published | 启用过滤和来源归属 |
来源:examples/vector_databases/pinecone/Gen_QA.ipynb492-516
来源:examples/vector_databases/pinecone/Gen_QA.ipynb704-725 examples/vector_databases/elasticsearch/elasticsearch-retrieval-augmented-generation.ipynb561-577
Pinecone RAG 实现中使用的关键函数和模式
pinecone.create_index(index_name, dimension=1536, metric='cosine')index.upsert(vectors=to_upsert)index.query(xq, top_k=2, include_metadata=True)来源:examples/vector_databases/pinecone/Gen_QA.ipynb586-608 examples/vector_databases/pinecone/GPT4_Retrieval_Augmentation.ipynb192-194
dense_vector 字段类型,带 dims: 1536, similarity: cosinehelpers.bulk(client, actions)VectorizedQuery(vector=query_embedding, k_nearest_neighbors=3)来源:examples/vector_databases/elasticsearch/elasticsearch-retrieval-augmented-generation.ipynb171-194 examples/vector_databases/elasticsearch/elasticsearch-retrieval-augmented-generation.ipynb565-577
SearchField,带 vector_search_dimensions=1536SearchIndexingBufferedSender.upload_documents()来源:examples/vector_databases/azuresearch/Getting_started_with_azure_ai_search_and_openai.ipynb369-387 examples/vector_databases/azuresearch/Getting_started_with_azure_ai_search_and_openai.ipynb614-632
Azure AI 搜索展示了结合向量相似性和关键词匹配的混合搜索
来源:examples/vector_databases/azuresearch/Getting_started_with_azure_ai_search_and_openai.ipynb614-632
通过语义理解增强相关性
SemanticConfiguration,带 prioritized_fieldsQueryType.SEMANTICQueryCaptionType.EXTRACTIVE、QueryAnswerType.EXTRACTIVE来源:examples/vector_databases/azuresearch/Getting_started_with_azure_ai_search_and_openai.ipynb673-713
该 Cookbook 展示了针对 API 调用的健壮错误处理
来源:examples/vector_databases/pinecone/Gen_QA.ipynb674-682
来源:examples/vector_databases/pinecone/Gen_QA.ipynb664-696 examples/vector_databases/elasticsearch/elasticsearch-retrieval-augmented-generation.ipynb246-262
RAG 通过将响应基于检索到的文档,实现事实性问答
| 组件 | 实现 | 示例 |
|---|---|---|
| 知识库 | 维基百科文章、文档 | jamescalam/youtube-transcriptions 数据集 |
| 查询处理 | 基于嵌入的相似性搜索 | “句子转换器使用哪种训练方法?” |
| 答案生成 | 上下文增强提示 | 多负样本排名 (MNR) 损失 |
来源:examples/vector_databases/pinecone/Gen_QA.ipynb193-225
来源:examples/vector_databases/elasticsearch/elasticsearch-semantic-search.ipynb24-28
RAG 系统可以与现有知识库集成
来源:examples/vector_databases/README.md5-7