开发四大痛点及处置打算 RAG
1、痛点1:常识缺失
常识库缺乏必要的高低文消息,造成 RAG 系统在不可找到确切答案时,或者会提供模棱两可的失误消息,而不是间接标明其无知。这种状况下,用户或者会接纳到误导性的消息,从而感到丧气。针对这一疑问,有以下两种处置打算:
处置打算一:优化数据品质
“渣滓输入,渣滓输入。” 若源数据品质不佳,比如:存在相互矛盾的消息,即使是再完美的 RAG 流程也不可从劣质数据中提炼出有价值的常识。以下提出的处置打算不只能处置这一难题,还能应答本文中提到的其余疑问。高品质的数据是确保 RAG 流程顺畅运转的关键。
以下是一些经常出现的数据优化战略:
1. 肃清噪音和有关消息:包括移除不凡字符、停用词(比如:“the”和“a”等经常出现词汇)以及 HTML 标签。
2. 识别并批改失误:触及拼写失误、打字失误和语法失误。拼写审核工具和言语模型等资源对此很有协助。
3. 去除反双数据:消弭可无能扰检索环节的重复或相似记载。
处置打算二:优化提醒词设计
由于常识库消息无余,系统或者会提供看似正当却失误的答案。在这种状况下,优化提醒词可以清楚优化系统体现。经过经常使用“若你不确定答案,请标明你不知道”等提醒词,可以疏导大模型抵赖其局限,并更明晰地表白不确定性。只管这不能确保答案的相对正确性,但在数据优化之后,设计失当的提醒词是提高系统透明度的有效手腕之一。
2、痛点2:更关系的常识没有检索进去
在初步检索阶段常识未能被检索进去。关键的文档或者没有在检索组件给出的初步结果中,造成正确答案被遗漏,大模型因此不可提供准确的照应。钻研指出:“疑问的答案其实就藏在文档里,只是由于它排名不够高,所以没有被出现给用户。”针对这一疑问,有以下两种处置打算:
处置打算一:调整 chunk_size 和 similarity_top_k 超参数
在 RAG 模型中,chunk_size 和 similarity_top_k 是控制数据检索效率和准确性的两个关键参数。对这些参数的调整会影响到计算效率和消息检索品质之间的平衡。
处置打算二:Rerank 重排序
在将检索结果传递给大言语模型(LLM)之前对其启动从新排序,可以清楚增强 RAG 系统的性能。LlamaIndex 的笔记提醒了有无从新排序的差异:
import osfrom llama _ index.postprocessor.cohere _ rerank import CohereRerankapi _ key = os.environ["COHERE _ API _ KEY"]cohere _ rerank = CohereRerank ( api _ key=api _ key , top _ n=2 ) # return top 2 nodes from rerankerquery _ engine = index.as _ query _ engine(similarity _ top _ k=10 ,# we can set a high top _ k here to ensure maximum relevant retrievalnode _ postprocessors= [ cohere _ rerank ],# pass the reranker to node _ postprocessors)response = query _ engine.query("What did Sam Altman do in this essay?" ,)
3、痛点3:格局失误
输入格局不正确。当大言语模型(LLM)未能遵照以特定格局(比如:表格或列表)提敞开息的指令时,咱们提出了以下四种处置打算:
处置打算一:优化提醒词设计
为了改善提醒词并处置这一疑问,可以采取以下几种战略:
处置打算二:输入解析方法
输入解析可以用于以下目的,以确保取得希冀的输入格局:
以下是一个经常使用 LangChain 输入解析模块的示例代码片段,该模块可在LlamaIndex 中运行。
from llama _ index.core import VectorStoreIndex , SimpleDirectoryReaderfrom llama _ index.core.output _ parsers import LangchainOutputParserfrom llama _ index.llms.openai import OpenAIfrom langchain.output _ parsers import StructuredOutputParser , ResponseSchema# load documents , build indexdocuments = SimpleDirectoryReader(" .. /paul _ graham _ essay/data").load _>
处置打算三:Pydantic 程序
Pydantic 程序是一个多配置的框架,它能够将输入的字符串转换成结构化的 Pydantic 对象。LlamaIndex 提供了几种不同类型的 Pydantic 程序:
LLM 文本补全 Pydantic 程序:这类程序担任处置输入的文本,并将其转换成用户自定义的结构化对象,这个环节联合了文本补全 API 和输入解析。
LLM 函数调用 Pydantic 程序:这些程序经过经常使用 LLM 函数调用 API 来处置输入文本,并将其转换成用户指定的结构化对象。
预制 Pydantic 程序:这些程序设计用于将输入文本转换成预约义的结构化对象。
以下是一个经常使用 OpenAI 的 Pydantic 程序的示例代码片段:
from pydantic import BaseModelfrom typing import Listfrom llama _ index.program.openai import OpenAIPydanticProgram# Define output schema ( without docstring )class Song(BaseModel) :title : strlength _ seconds : intclass Album(BaseModel) :name : strartist : strsongs : List [ Song ] # Define openai pydantic programprompt _ template _ str ="""\Generate an example album , with an artist and a list of songs.\Using the movie { movie _ name } as inspiration.\"""program = OpenAIPydanticProgram.from _ defaults(output _ cls=Album , prompt _ template _ str=prompt _ template _ str , verbose= True)# Run program to get structured outputoutput = program(movie _ name="The Shining" , description="Data model for an album.")
处置打算四:OpenAI JSON形式
经过OpenAI的 JSON 形式,咱们可以将`response_format`设置为`{ "type": "json_object" }`,从而激活照应的 JSON 形式。当启用 JSON 形式后,大模型将被限度仅生成可以解析为有效 JSON 对象的字符串。JSON 形式确保了输入格局的强迫性,但它并不允许依据特定形式启动验证。
4、痛点4:输入不完整
回答缺失完整性。只管局部回答没有失误,但它们并未蕴含一切必要的细节,即使这些消息在高低文中是可失掉的。比如:当有人提问:“文档A、B和C中探讨的重要议题是什么?”为了确保回答的完整性,独自对每份文档启动查问或者更为有效。
处置打算一:查问变换
在最后的 RAG 方法中,比拟类型的疑问体现尤为不佳。优化 RAG 推理才干的一个有效方法是引入查问了解层——在实践将查问向量存入存储之行启动查问变换。以下是四种不同的查问变换方法:
1. 路由:保管原始查问,并识别出与之关系的适合工具子集。随后,将这些工具指定为适合的选项。
2. 查问重写:保管选定的工具,但以不同形式从新构建查问,以便在同一工具集中运行。
3. 子疑问合成:将查问拆分为几个更小的疑问,每个疑问针对不同的工具,由其元数据来选择。
4. ReAct Agent 工具选用:基于原始查问,确定经常使用的工具,并制订在该工具上运转的特定查问。
请参考以下示例代码片段,了解如何运行 HyDE(假定文档嵌入)这一查问重写技术。给定一个人造言语查问,首先生成一个假定文档/答案。接着,经常使用这个假定文档启动嵌入搜查,而不是经常使用原始查问。
# load documents , build indexdocuments = SimpleDirectoryReader(" .. /paul _ graham _ essay/data").load _>
原文链接: