自定义 RAG 实验设置
在 "AutoAI,中构建检索增强生成解决方案时,您可以自定义实验设置,以定制结果。
如果根据默认设置运行 RAG 实验,AutoAI进程会选择
- 在寻找最佳RAG流程时,需要最大化的优化指标
- 根据可用列表尝试嵌入模型
- 根据现有清单,可尝试的基础模型
要对 RAG 实验进行更多控制,可以自定义实验设置。 输入所需的实验定义信息后,单击实验设置 ,在运行实验前自定义选项。 您可以查看或编辑的设置分为三类:
- 检索与生成 :选择优化RAG模式选择的指标、检索的数据量以及 AutoAI 可用于实验的模型。
- 索引: 选择数据的分块方式、用于衡量语义相似性的度量标准,以及可用于实验的嵌入模型 AutoAI。
- 补充信息:查看实验环境。
若您使用的是现有的知识库,某些设置可能不会包含在配置流程中。
检索和生成设置
查看或编辑用于生成 RAG 管道的设置。
优化指标
在搜索最佳RAG模式时,选择最大化指标。 如需了解优化指标及其实施细节的更多信息,请参阅 RAG指标。
- 答案忠实度衡量生成的响应与从向量存储中检索到的上下文之间的契合程度。 该评分通过词汇度量法计算得出,该方法统计生成的响应令牌中有多少个包含在从向量存储中检索到的上下文中。 高分表明该响应很好地体现了检索到的上下文。 但高保真度评分并不一定意味着响应的正确性。 有关该指标的更多信息,请参阅 “忠诚度”。
- 答案正确率是指生成的答案与基准文件提供的正确答案的吻合程度。 这包括检索到的上下文的相关性和生成的响应的质量。 该评分采用词汇度量法计算,统计生成响应中包含多少个真实响应令牌。 有关度量标准的更多信息,请参阅正确性。
- 上下文正确性指从向量存储库检索到的上下文与基准测试中提供的真实上下文在多大程度上保持一致。 该分数是根据真实上下文在检索到的片段中的排名计算得出的。 真实情况与排名越接近,得分越高。 有关如何实施该指标的更多信息,请参阅 " 上下文正确性 "。
大型语言模型作为法官 ( LLMaaJ )
您还可以选择通过使用LLM-as-a-Judge ( LLMaaJ )指标进行优化:
- 答案 忠实 ( LLMaaJ )
- 答案正确性 ( LLMaaJ )
LLMaaJ 度量标准所衡量的质量与标准度量标准相同,但它们不是使用基于标记重叠的公式,而是使用 LLM 来评估生成输出的质量。 LLM 会收到一个提示,其中包含问题、生成的输出、检索到的上下文或基准答案(取决于所选的指标)。 然后,LLM 评估输出是否语义准确、事实正确,以及是否与从文件索引中检索到的数据一致。
与基于公式的评分相比,LLM 可以提供更准确、更细致的评估,尤其是对开放式或复杂答案的评估。 这是因为 LLM 可以识别有效的转述、检测幻觉并更好地反映人类的判断,从而提供更全面的评估。
要使用 LLMaaJ 指标,您必须在环境中安装以下其中一种模型:
mistralai/mistral-smallmistralai/mistral-mediummistralai/mistral-largemeta-llama/llama
检索方法
您可以自动选择配置以检索相关数据,也可以编辑配置设置。 检索方法在过滤和排列文档的方式上有所不同。
选择窗口检索法或简单检索法。
- 窗口检索方法:根据原始文档内容,在检索到的数据块前后添加额外数据块进行包围。 这种方法有助于包含更多在最初检索到的区块中可能缺失的上下文。 窗口检索的工作原理如下:
- 搜索: 在向量存储中找到最相关的文档块。
- 展开 :对于每个找到的区块,检索周围的区块以提供上下文。
- 每个块都在元数据中存储其序列号。
- 在检索完一个区块后,区块元数据将用于从同一文档中获取相邻区块。 例如,如果
window_size是2,则会在其前后各添加2个区块。 - 合并 :合并窗口中重叠的文本,删除冗余。
- 元数据处理 :通过保留相同的键并将值分组到列表中来合并元数据字典。
- 返回: 将合并后的窗口作为新块输出,替换原来的窗口。
- 简单检索方法:在向量存储中查找最相关的数据块。
- 窗口检索方法:根据原始文档内容,在检索到的数据块前后添加额外数据块进行包围。 这种方法有助于包含更多在最初检索到的区块中可能缺失的上下文。 窗口检索的工作原理如下:
从 1 到 10 之间选择块数。 检索块的数量决定了检索文本段落被分割成的较小块的数量。
如果选择窗口检索方法,则可将窗口大小设置为 1 至 4。 窗口大小是指模型从索引文档中检索信息时考虑的相邻分块数量。
您可以选择混合策略来提高输出质量。 一种混合策略结合了稀疏和密集嵌入向量,在向量数据库中进行相似性搜索。 稀疏嵌入式优先考虑精确匹配的关键词,而密集嵌入式则优先考虑具有语义相似性的输出。 将稀疏嵌入和密集嵌入相结合,可以提高搜索精度和相关性,从而从数据库中获得更全面的信息检索。 此设置不适用于内存中的 Chroma 向量数据库。 如果使用 Elasticsearch 向量数据库,则需要安装 ELSER 模型。
从这些混合策略选项中选择一个:
- RRF(互惠排名融合) :将多个来源的排名合并为一个更相关的列表。 要在 Elasticsearch 向量数据库中使用 RRF,需要 Elasticsearch 8.8 或更高版本。
- 加权 :为输出赋予重要性,优先选择最可靠的输出作为最终输出。
- 无 :只使用高密度嵌入,不使用混合策略。
如果使用混合策略,可以选择稀疏嵌入模型系列。 如果安装了同一型号的多个版本, AutoAI 将使用最新版本。
选择其中一个型号系列选项:
- 自动 :根据您选择的向量存储库以及在该存储库中安装的模型,自动选择模型。 若您正在使用向量 Elasticsearch 存储且已安装ELSER模型,则会自动选择ELSER。 但如果没有安装 ELSER,则会选择 BM25。
- ELSER :仅适用于 Elasticsearch 向量存储。 要使用 ELSER 模型,必须将其安装到 Elasticsearch 向量存储区。
- BM25 :适用于 Elasticsearch 和 Milvus 向量存储数据库。
基础模型包括
您可以选择使用提供的基础模型或自定义基础模型。
默认情况下,会选择所有支持 AutoAI for RAG 的可用基础模型进行实验。 您可以手动编辑所提供的基础模型列表, AutoAI ,以便生成 RAG 模式。 对于每个车型,您可以点击 “车型详情” 查看或导出该车型的详细信息。
有关提供的可用基础模型列表及说明,请参见按任务划分的基础模型。
要使用自定义基础模型,请点击 “自定义模型 ”,然后选择您希望 AutoAI 用于生成RAG模式的模型。 自定义模型列表包含按需部署模型,以及部署在您正在运行实验的项目中,以及您作为成员的所有空间中的自定义模型。
要添加新的自定义基础模型,请参阅部署自定义基础模型。
有关如何使用自定义基础模型编码实验的信息,请参阅使用自定义基础模型编码 AutoAI RAG 实验。
完成的最大 RAG 图案
您可以在实验阶段指定要完成的RAG模式数量,最多为20个。 更高的数值比较更多的模式,可能会得出得分更高的模式,但会消耗更多的计算资源。
匹配输入语言
默认情况下, AutoAI 系统会自动检测提示语中使用的语言,并指示模型以相同语言进行响应。 不支持输入语言的模型在搜索 RAG 模式时优先级较低。 关闭此设置可考虑所有可用模型并只生成英文回复。
索引设置
查看或编辑从文件集创建文本矢量数据库的设置。
分块
您可以为分块数据自动选择配置或编辑配置设置。 分块设置决定索引文件在存入矢量存储之前如何被分解为更小的部分。 数据分块允许在文档中搜索和检索与查询最相关的数据块。 这样,生成模型就可以只处理最相关的数据。
您可以从以下分块方法中选择一种:
递归: AutoAI RAG使用 LangChain’s 递归文本分割器将文档分解为若干片段。 该方法以分层方式将文档分解,从段落开始,接着是句子,最后是单词。 它试图尽可能长时间地保持这些元素的完整性,直到数据块小于请求的大小。 递归分块法特别适用于格式清晰的结构化数据,并有助于确保分块大小的一致性。 有关递归分块方法的更多信息,请参阅Langchain文档中的按字符递归拆分检索。
语义:该方法利用基于嵌入的相似度,将文档分割为语义上具有意义的片段。 语义分块技术根据语义而非字符或句子长度来识别文本中的自然分隔点。 这种方法通过将相关概念保持在一起,从而保留上下文并提高检索相关性。 语义分块法特别适用于复杂或非结构化数据。
较小的区块与文本的交互更精细,能够更精确地搜索相关内容,而较大的区块则能够提供更多的上下文信息。 对于您的批量使用案例,请为以下一项或多项选择指定选项:
- 每个数据块中包含的字符数。
- 用于数据分块的重叠字符数。 该数字必须小于分块大小。
在实验阶段,对选定的选项进行探索和比较。
嵌入模型
嵌入模型用于检索增强生成解决方案,将编码块和查询作为向量来捕获其语义。 矢量化的输入数据块被存入矢量存储器。 对于查询,向量化表示用于在向量存储中搜索相关块。
如需了解可用于 AutoAI RAG实验的嵌入式型号列表,请参阅 watsonx.ai 支持的编码器型号。
其他信息
回顾实验所使用的环境定义。
实验设置的配置参数
若您正在编写RAG AutoAI 实验,可通过对象 rag_optimizer 以编程方式配置参数。 有关如何使用自定义参数初始化 RAG 优化器的更多信息,请参阅 AutoAI RAG 类和 rag_optimizer。
| 参数 | 描述 | 值 |
|---|---|---|
| 名称 | 输入有效的实验名称 | 实验名称 |
| 描述 | 可选择描述实验 | 试验描述 |
| 分块 | 文件分割的分块设置 | {"method": "recursive", "chunk_size": 256, "chunk_overlap": 128} |
| 嵌入模型 | 尝试嵌入模型 | ibm/slate-125m-english-rtrvrintfloat/multilingual-e5-large |
| 检索 | 检索设置 | 使用 AutoAIRAGRetrievalConfig 数据类型 |
| 基础模型 | 使用基础模型或自定义模型 | 按任务查看基础模型 使用 AutoAIRAGModelConfig 或 AutoAIRAGCustomModelConfig |
| 代 | 生成步骤配置 | {"language": {"auto_detect": False}} |
| 最大rag图案数量 | 创建 RAG 模式的最大数量 | 4-20 |
| 优化指标 | 用于优化的度量名称 | faithfulnessanswer_correctnesscontext_correctnessanswer_correctness_judgefaithfulness_judge |
您可以使用以下代码示例初始化RAG优化器并配置每个参数。
检索配置示例:
from ibm_watsonx_ai.foundation_models.schema import AutoAIRAGRetrievalConfig, AutoAIRAGHybridRankerParams, HybridRankerStrategy
from ibm_watsonx_ai.foundation_models.extensions.rag.retriever import RetrievalMethod
retrieval_config = AutoAIRAGRetrievalConfig(
method=RetrievalMethod.SIMPLE,
number_of_chunks=5,
window_size=2,
hybrid_ranker=AutoAIRAGHybridRankerParams(
strategy=HybridRankerStrategy.RRF,
sparse_vectors={"model_id": "elser_model_2"},
alpha=0.9,
k=70,
)
)
地基模型配置示例
from ibm_watsonx_ai.foundation_models.schema import (
AutoAIRAGModelConfig,
AutoAIRAGCustomModelConfig,
AutoAIRAGModelParams,
TextGenDecodingMethod
)
# Foundation model
model_id = "meta-llama/llama-3-1-8b-instruct"
# Foundation model with properties
fm = AutoAIRAGModelConfig(
model_id="ibm/granite-13b-instruct-v2",
parameters=AutoAIRAGModelParams(
decoding_method=TextGenDecodingMethod.SAMPLE,
min_new_tokens=5,
max_new_tokens=300,
max_sequence_length=4096,
),
prompt_template_text="My question {question} related to these documents {reference_documents}.",
context_template_text="My document {document}",
word_to_token_ratio=1.5,
)
# Custom foundation model with properties
custom_fm = AutoAIRAGCustomModelConfig(
deployment_id="<PASTE_DEPLOYMENT_ID_HERE>",
space_id="<PASTE_SPACE_ID_HERE>",
parameters=AutoAIRAGModelParams(
decoding_method=TextGenDecodingMethod.GREEDY,
min_new_tokens=5,
max_new_tokens=300,
max_sequence_length=4096,
),
prompt_template_text="My question {question} related to these documents {reference_documents}.",
context_template_text="My document {document}",
word_to_token_ratio=1.5,
)
foundation_models = [model_id, fm, custom_fm]
分块配置示例
chunking_config = {
"method": "recursive",
"chunk_size": 256,
"chunk_overlap": 128,
}
使用自定义配置初始化 RAG 优化器的示例:
from ibm_watsonx_ai.experiment import AutoAI
experiment = AutoAI(credentials, project_id=project_id)
rag_optimizer = experiment.rag_optimizer(
name="DEMO - AutoAI RAG ibm-watsonx-ai SDK documentation",
description="AutoAI RAG experiment grounded with the ibm-watsonx-ai SDK documentation",
embedding_models=["ibm/slate-125m-english-rtrvr", "intfloat/multilingual-e5-large"],
foundation_models=foundation_models,
retrieval=[retrieval_config],
chunking=[chunking_config],
generation={"language": {"auto_detect": False}},
max_number_of_rag_patterns=5,
optimization_metrics=[AutoAI.RAGMetrics.ANSWER_CORRECTNESS],
)