在不断发展的人工智能领域,检索增强生成(RAG)取得了重大飞跃,尤其是在解决大型语言模型(LLM)输出中的事实错误方面。RAG使模型能够检索相关的外部知识,从而提高其响应的准确性和上下文相关性。然而,即使是RAG也有其局限性。它通常会不加区分地检索文档,而不评估检索到的信息是否对回答查询有意义。这可能会导致输出混乱甚至误导。在不断发展的人工智能领域,搜索增强生成(RAG)取得了大幅飞跃,尤其是在解决大型语言模型(LLM)输出中的事实错误方面。RAG使模型能够搜索相关的外部知识,从而提高其响应它的准确性和上下文相关性。然而,即使是RAG也有其局限性。通常不会加区分检索文档,而不评估检索到的信息是否对回答查询有意义。这可能会导致混乱甚至错误。
我精简了原始论文中描述的方法,以优化减少延迟和成本,使该版本更加高效,同时仍保持准确性和可靠性。
什么是Self-RAG?自反思检索增强生成(Self-RAG)是一种通过添加自我评估机制来增强传统RAG的框架,允许系统批判性地评估检索到的文档和生成的响应。在传统的RAG中,检索过程通常是不加区分的。检索文档时不会评估其与查询的真正相关性,也不会反思生成的响应是否与检索到的信息一致。
通过评估块的相关性进行自我纠正:
在检索的每个步骤中,系统都会评估检索到的块的相关性。通过主动检查块是否有助于回答问题,系统可以避免混乱并确保只有高质量、相关的数据才能传递到生成过程。
通过检查幻觉和相关性进行自我反思:
这种简化的方法侧重于通过避免不必要的文档检索并添加针对幻觉和相关性的轻量级检查来最大限度地减少延迟和计算成本。结果是一个高效而强大的Self-RAG框架,它保留了反射和校正的核心优势,而无需更复杂的实现开销。
使用LangGraph实现Self-RAG在以下部分中,我将介绍如何使用LangGraph实现此版本的Self-RAG。您可以跟随并通过我的GoogleCollab笔记本测试实现。
加载矢量存储为了构建有效的Self-RAG系统,我们需要一个向量库—一个以向量格式存储文档或数据的数据库,以便快速高效地检索。向量库是提出问题时检索相关数据块的核心组件。每个文档都嵌入到向量中,这些向量可以捕获文本的含义和上下文,从而可以根据语义相似性快速搜索相关信息。
在本节中,我们将加载包含预处理数据的向量存储和用于对文档进行向量化的嵌入模型。在此示例中,我们将处理一组科学论文,这些论文存储为向量嵌入并准备进行检索。我们还将加载用于此过程的嵌入模型—在本例中为AmazonTitan嵌入模型,可通过AWSBedrock访问。
一旦向量存储启动并运行,它就成为处理我们Self-RAG系统中的检索任务的基础。
Initializeembeddingmodelbedrock_client=("bedrock-runtime",region_name='us-east-1')bedrock_embeddings=BedrockEmbeddings(model_id="",client=bedrock_client)大型语言模型(LLM)对于我们的AI代理的交互,我们将利用强大的大型语言模型(LLM):Anthropic的。该模型在自然语言理解和生成方面表现出色,使其成为处理复杂查询和提供准确、上下文相关的响应的可靠选择。我们将通过AWSBedrock访问,这简化了集成并允许我们使用温度等设置来微调响应创造力和相关性等参数。
以下是的初始化代码:
遍历每个文档并评估其相关性fordocindocuments:score=retrieval_({"question":question,"document":doc})使用检索到的文档作为上下文生成答案answer=rag_({"context":"\n\n".join(documents),"question":question})return{"documents":documents,"question":question,"answer":answer}该功能的工作原理:
输入:该函数接受当前状态,其中包含用户的问题和在前面的步骤中检索到的文档(来自vectorstore或websearch)。
上下文构建:检索到的文档被组合成一个字符串,每个块由换行符分隔。这作为生成响应的上下文。
生成答案:rag_()调用该方法,将问题和上下文输入模型,生成与文档中的事实内容相符的精确答案。
输出:该函数返回生成的答案以及文档和问题。
幻觉评分器在语言模型中,幻觉是指自信地生成但并非基于检索到的数据的响应。这可能会导致误导性答案,尤其是当生成的响应没有得到提供的文档的充分支持时。为了解决这个问题,幻觉评分器会评估答案并确保其基于事实并与用户的查询直接相关。如果幻觉评分器检测到答案不相关或包含幻觉,它会触发回退机制:将查询发送到网络搜索以检索更准确的信息。
hallucination_grader_prompt旨在评估生成的答案是否完全由检索到的文档支持。该模型根据响应是否基于事实来分配二进制分数(或)yes。no
hallucination_grader_prompt=PromptTemplate(template="""Youareagraderassessingwhetherananswerisgroundedin/'yes'or'no'scoretoindicatewhethertheanswertothequestionisgroundedin/,'score':{question}Herearethefacts:{documents}Hereistheanswer:{answer}""",input_variables=["answer","documents","question"],)一旦定义了幻觉评分器提示,我们就可以将其与模型和JSON输出解析器结合起来,创建一个幻觉评分器链。该链评估生成的答案是否有事实依据。
hallucination_grader=hallucination_grader_prompt|model|JsonOutputParser()
接下来,该grade_answer_v_documents_and_question函数处理生成的响应,检查检索到的文档是否完全支持它,并决定是否需要网络搜索等额外步骤。
defgrade_answer_v_documents_and_question(state:Dict[str,Any])-str:print("---CHECKHALLUCINATIONS---")如果尚未执行网络搜索,则对生成的答案进行幻觉评分else:score=hallucination_({"documents":state["documents"],"answer":state["answer"],"question":state["question"]})print('halluscore',score)如果答案不受支持(检测为幻觉),则将查询发送到网络搜索else:print(“---不支持答案,正在启动网络搜索---”)return“websearch”该函数中的关键步骤:
输入(状态):函数接受状态,包括用户的问题、检索到的文档和生成的响应。
避免冗余检查:如果已经执行了网络搜索,该函数将跳过幻觉检查以避免循环并返回有用的响应。
对响应进行评分:如果没有进行网络搜索,幻觉评分器会评估生成的答案是否得到检索到的文档中的事实支持。
决策过程:如果响应有事实依据,则函数返回有用。如果响应不受文档支持(即包含幻觉或不相关),则函数会触发网络搜索以收集更多信息并改进响应。
定义AIAgentGraph现在我们已经定义了核心组件——检索、评分以及生成和评分响应——是时候将这些构建块组装成一个有凝聚力的系统了。为了有效地管理任务流,我们使用状态图来构建AI代理。这允许在每个步骤中进行动态决策,确保代理可以根据输入调整其操作并在处理信息时不断发展。AI代理图是使用节点(表示任务)、边(定义任务之间的逻辑流)和条件边(允许系统根据特定条件进行调整和重定向)构建的。
状态定义
状态存储了在整个AI代理的工作流程中持续存在的关键参数。当代理处理用户的问题、检索相关信息以及生成和评分答案时,这些参数会在节点之间传递。状态包括以下参数:
问题:用户提出的原始查询。
答案:对用户问题最终生成的答复。
web_search:用于指示是否已执行网络搜索的标志。这有助于避免工作流程中出现不必要的循环。
文档:从矢量存储或通过网络搜索检索的相关文本块列表。
我们对状态的定义如下:
定义LangGraph工作流Workflow=StateGraph(GraphState)添加边_edge(START,"retrieve")_edge("retrieve","grade_documents")_edge("grade_documents","generate")_edge("websearch","generate")此设置确保代理首先检索文档、对其进行评级、生成响应,并且(如果需要)执行网络搜索以补充信息。
条件边在工作流中引入了决策点,允许系统根据上一个节点的输入或输出动态决定下一个要继续哪个节点。在这种情况下,我们在生成步骤后添加了一个条件边。如果生成的答案被视为不相关或不受支持(检测为幻觉),代理将启动网络搜索。如果答案有用且有事实依据,工作流将终止。
编译工作流compiled_workflow=()
一旦编译完成,AI代理就可以无缝地完成检索、评分和响应生成的各个阶段,并在遇到不受支持的答案时通过触发网络搜索进行动态调整。
运行AI代理为了评估AI代理的性能,我们将使用相关问题和不相关问题对其进行测试。这使我们能够观察系统如何处理信息可用的查询以及矢量存储中可能不存在相关数据的查询。
测试场景1:相关问题问题:“什么是癌症疫苗?”
我们首先测试一个我们知道相关信息存在于向量库中的问题。这有助于验证检索、评分和响应生成过程。
以下是我们初始化状态的方法:
定义一个空状态state={"question":question,"documents":[],"answer":"","web_search":"",}output=[]foroutputincompilation_(state):print(output)forkey,():({key:value})print('outputs',output)AI代理逐步执行编译的工作流程。对于每个输出,它从vectorstore中检索相关文档,对相关性进行评级,并根据最相关的信息生成答案。每一步都会打印输出:
---RETRIEVE---{'retrieve':{'question':'whatisacancervaccine?','documents':['Tllelizedminiaturizedproductionlinesandsignificantlyenhancedtheoverallefficiencyandaccessibilityofcancervaccinesforclinicalapplications.']}}---CHECKDOCUMENTRELEVANCETOQUESTION------GRADE:DOCUMENTRELEVANT------GRADE:DOCUMENTRELEVANT------GRADE:DOCUMENTRELEVANT------GRADE:DOCUMENTRELEVANT---{'grade_documents':{'question':'whatisacancervaccine?','documents':['nofscaledparallelizedminiaturizedproductionlinesandsignificantlyenhancedtheoverallefficiencyandaccessibilityofcancervaccinesforclinicalapplications.']}}---GENERATE------CHECKHALLUCINATIONS---halluscore{'score':'yes'}{'generate':{'question':'whatisacancervaccine?','answer':"Detailedanswer",'documents':[Detaileddocuments]}outputs[{'retrieve':{'question':'whatisacancervaccine?','documents':[]}检索:
AI代理成功从vectorstore中检索了包含有关癌症疫苗详细信息的几个文档。
相关性评级:
系统对检索到的文档进行评级,确定所有文档与癌症疫苗查询相关。此步骤确认代理过滤不相关数据并专注于高质量信息的能力。
生成:
使用分级的文档,AI代理生成详细的答案,准确解释癌症疫苗。
幻觉检查:
幻觉评分员验证生成的响应是否完全由检索到的文档支持,从而确认信息的准确性和事实完整性。
问题:“埃隆·马斯克是谁?”
在这个测试中,我们向AI代理询问一个不相关的问题,以观察它如何处理矢量存储可能不包含相关数据的情况。这将有助于测试系统的后备机制,包括在需要时启动网络搜索。
以下是我们如何初始化此场景的状态:
定义一个空状态state={"question":question,"documents":[],"answer":"","web_search":"",}output=[]foroutputincompilation_(state):print(output)forkey,():({key:value})print('outputs',output)这是输出:
---RETRIEVE---{'retrieve':{'question':'whoiselonmusk?','documents':['']}---GRADE:DOCUMENTNOTRELEVANT------GRADE:DOCUMENTNOTRELEVANT------GRADE:DOCUMENTNOTRELEVANT------GRADE:DOCUMENTNOTRELEVANT---{'grade_documents':{'question':'whoiselonmusk?','documents':[]}}---GENERATE------CHECKHALLUCINATIONS---halluscore{'score':'no'}{'generate':{'question':'whoiselonmusk?','answer':"ElonMuskisaprominententrepreneur,businessmagnate,andinvesto,CEO,andchiefengineerofSpaceX,,Inc.,aleadingelectricvehicleandcleanenergycompany.\n\nBorninSouthAfricain1971,,anonlinepaymentcompany,reassuchassustainableenergy,spaceexploration,andartificialintelligence.\n\nSomeofMusk'sothernotableprojectsinclude:\n\n-TheBoringCompany,whichaimstorevolutionizetransportationthroughundergroundtunnelsystems\n-Neuralink,aneurotechnologycompanydevelopingbrain-computerinterfaces\n-OpenAI,anartificialintelligenceresearchlaboratory(thoughhehassincesteppeddownfromtheboard)\n\nMuskisknownforhisambitiousgoals,innovativethinking,,renewableenergy,andspacetechnology,earninghimbothpraiseandcriticismfromvarioussectorsofsocietyandindustry.",'documents':[]}}---WEBSEARCH---{'websearch':{'question':'whoiselonmusk?','web_search':'Yes','documents':["ElonMusk,theSouthAfrican-bornentrepreneurwidelyknownasthefounderofSpaceXandTesla,isrenownedforhisadvancesinelectricvehiclesandspace\xa0Zip2·Tesla,Inc.·Electronicgame·PayPal\n“ElonMuskTriedtoPitchtheHeadoftheYellowPagesBeforetheInternetBoom:‘HeThrewtheBookatMe’.”\nCompaqComputer,\nMuskusedmostoftheproceedsfromhisPayPalstaketofoundSpaceExplorationTechnologiesCorp.,therocket',Muskspent$100milliontofoundSpaceXin2002.\nMusksubsequentlysettledaSecuritiesandExchangeCommission(SEC)complaintallegingheknowinglymisledinvestorswiththetweetbypayinga$20millionfinealongwiththesamepenaltyforTesla,andagreeingtoletTesla’slawyersapprovetweetswithmaterialcorporateinformationbeforeposting.\nTesla\nMuskbecameinvolvedwiththeelectriccarsventureasanearlyinvestorin2004,ultimatelycontributingabout$6.3million,tobeginwith,andjoinedtheteam,includingengineerMartinEberhard,’sboardadoptedapoisonpillprovisiontodiscourageMuskfromaccumulatinganevenlargerstake,buttheyultimatelyacceptedMusk’sofferafterhedisclosed$46.5billionincommittedfinancingforthedealinasecuritiesfiling.\n3hoursago·TeslaCEOElonMuskrevealsdetailsandtimingofCybercabproduction·:3:00Posted:3hoursago\nAstheco-founderandCEOofTesla,Elonleadsallproductdesign,engineeringandglobalmanufacturingofthecompany'selectricvehicles,batteryproductsand\xa0\nElonisTechnokingofTeslaandhasservedasourChiefExecutiveOfficersinceOctober2008andasamemberoftheBoardsinceApril2004."]}}---GENERATE------CHECKHALLUCINATIONS---{'generate':{'question':'whoiselonmusk?','answer':"ElonMuskisaprominententrepreneurandbusinessmagnat,aprivatespaceexplorationcompany,andtheCEOofTesla,anelectricvehicleandcleanenergycompany.\n\nBorninSouthAfrica,Muskhasmadesignificantcontributionstovariousindustries:\n\:FoundedSpaceXin2002withthegoalofreducingspacetransportationcostsandenablingthecolonizationofMars.\n\:JoinedTeslaMotorsin2004asanearlyinvestorandbecameCEOin2008,leadingthecompany'seffortsindevelopingandmanufacturingelectriccars.\n\:,\n\:ThroughTesla,Muskhasbeeninvolvedindevelopingsolarenergyproductsandbatterystoragesystems.\n\nMuskisknownfor,hehasalsofacedcontroversy,includingasettlementwiththeSecuritiesandExchangeCommissionovermisleadingtweetsaboutTesla'sstock.\n\nHisleadershipstyleandbusinessdecisionshaveattractedbothpraiseandcriticism,'scompanieshavehadasignificantimpactontheirrespectiveindustries,pushingforadvancementsinelectricvehicles,renewableenergy,andspaceexploration.",'documents':["ElonMusk,theSouthAfrican-bornentrepreneurwidelyknownasthefounderofSpaceXandTesla,isrenownedforhisadvancesinelectricvehiclesandspace\xa0Zip2·Tesla,Inc.·Electronicgame·PayPal\n“ElonMuskTriedtoPitchtheHeadoftheYellowPagesBeforetheInternetBoom:‘HeThrewtheBookatMe’.”\nCompaqComputer,\nMuskusedmostoftheproceedsfromhisPayPalstaketofoundSpaceExplorationTechnologiesCorp.,therocket',Muskspent$100milliontofoundSpaceXin2002.\nMusksubsequentlysettledaSecuritiesandExchangeCommission(SEC)complaintallegingheknowinglymisledinvestorswiththetweetbypayinga$20millionfinealongwiththesamepenaltyforTesla,andagreeingtoletTesla’slawyersapprovetweetswithmaterialcorporateinformationbeforeposting.\nTesla\nMuskbecameinvolvedwiththeelectriccarsventureasanearlyinvestorin2004,ultimatelycontributingabout$6.3million,tobeginwith,andjoinedtheteam,includingengineerMartinEberhard,’sboardadoptedapoisonpillprovisiontodiscourageMuskfromaccumulatinganevenlargerstake,buttheyultimatelyacceptedMusk’sofferafterhedisclosed$46.5billionincommittedfinancingforthedealinasecuritiesfiling.\n3hoursago·TeslaCEOElonMuskrevealsdetailsandtimingofCybercabproduction·:3:00Posted:3hoursago\nAstheco-founderandCEOofTesla,Elonleadsallproductdesign,engineeringandglobalmanufacturingofthecompany'selectricvehicles,batteryproductsand\xa0\nElonisTechnokingofTeslaandhasservedasourChiefExecutiveOfficersinceOctober2008andasamemberoftheBoardsinceApril2004."]}}outputs[{'retrieve':{'question':'whoiselonmusk?','documents':['']}不相关问题的结果细目:
检索:
相关性评级:
所有检索到的文档都被正确地评为不相关,这表明系统能够识别检索到的信息何时与用户的查询不匹配。
生成:
尽管检索结果不相关,但AI代理仍能够生成有关ElonMusk的连贯答案。这表明系统能够在检索步骤中处理不相关的数据,同时仍能根据预先存在的知识生成事实正确的响应。
幻觉检查:
幻觉评分员将生成的响应标记为未基于检索到的文档,表明所提供的信息不受检索步骤的支持。
网络搜索:
在本文中,我们探索了Self-RAG的迷人世界,这是一种创新方法,旨在通过结合自我反思和自我纠正,使AI系统更智能、更准确、更可靠。虽然AI功能强大,但有时会产生“幻觉”——听起来令人信服但并非基于真实数据的答案。Self-RAG通过结合多层检查(从文档检索到相关性评分和幻觉检测)来解决这个问题,以确保AI提供基于事实的响应。
该过程始于人工智能检索相关文档并对其准确性进行评分,过滤掉可能误导最终输出的无关信息。自我纠正在这里起着关键作用,使人工智能能够主动评估检索到的信息是否真的有用。然后,人工智能进行自我反思,评估生成的响应是否存在幻觉,确保所有说法都有数据支持。如果答案没有完全依据,人工智能就会触发网络搜索,交叉引用实时外部数据来完善和验证响应。
参考:





