人类是复杂的,因为我们的复杂性,语言也变得错综复杂。其中充满了细微的差别和只有我们复杂的大脑才能解读的微妙之处,这种复杂性往往让人工智能难以理解和捕捉。基于复杂文档检索增强生成(RAG)解决方案可能会导致令人困惑甚至错误的答案。在本视频中,我们将讨论当面对复杂文档集时如何构建实用的解决方案。
假设你问朋友:“谁赢得了2020年NCAA橄榄球全国冠军?”他们可能会回答,当然是路易斯安那州立大学(LSU)老虎队。然而,另一位朋友却可能会说是阿拉巴马州红潮队。他们俩都能对吗?还是必须有一个是错的?正确的答案取决于原始问题的意图。因此,当我们谈论橄榄球赛季时,它通常从八月持续到十二月;但当我们谈论冠军赛时,那场比赛通常在次年的一月举行。
这会造成混淆。这就是为什么在通用语言中,人们会将LSU既称为2019年的冠军也称为2020年的冠军。在现实世界中,文档集是由多人在不同时期汇编而成的。1990年代制定的法律或政策可能与2020年代的法律法规相矛盾。人是混乱的,他们的书面历史也是如此。文档经常像人一样自相矛盾。
在存储库中极有可能存在这样的文档,例如将LSU既称为2019年的冠军也称为2020年的冠军。那么,当文档集为某个问题提供多个正确答案时,RAG解决方案应该怎么做呢?让我们看一些实用的解决方案。首先从一个非常简单的架构开始:极简形式的RAG架构始于终端用户,该用户提出问题。
这个问题将被发送到一个向量数据库中。在向量数据库内部,问题将产生搜索结果。然后,这些搜索结果和原始问题将被传递给一个大型语言模型(LLM)。该模型利用来自向量数据库的信息以及原始问题来回答问题,并将答案发送回原始用户。那么,在处理复杂文档集时,你如何增强这一架构呢?
第一,你需要确保不犯任何“无受迫性错误”。所谓无受迫性错误,我特指你的向量数据库中不应包含那些本不该存在的文档。例如,假设你有一份2019年实施的政策,以及另一份旨在于2024年取代原政策的文件。你不希望这两份政策都存在于向量数据库中,因为如果两者都在那里,可能会混淆你的RAG解决方案。
因此,首先你需要一个良好的文档管理方案,以确保不出现这些无受迫性错误。搜索结果出来的所有内容都应该是确实需要的。你可以做的另一件事是使用一种称为“澄清循环”的机制。“澄清循环”顾名思义,是内置在AI解决方案中的一种机制,以确保提出正确的问题。
这可能非常简单。例如,如果用户使用RAG解决方案并问“为什么香蕉?”,这是一个荒谬的问题。因此,你需要你的RAG识别出这是荒谬的,并提示用户说:“嘿,我不太明白这个,你能重新表述一下吗?”你也可以在流程中使用澄清循环,以确保问题足够具体。
例如,如果有人说“谁赢得了2010年的冠军?”,显然有很多锦标赛:是体育比赛吗?还是拼字大赛?到底是指什么?这会识别出该问题不够具体,并提示用户提供更多细节。最终结果是答案正是他们正在寻找的特定内容。
但可能最重要的一点,虽然这看似显而易见,但你可能会惊讶于我见过这种错误发生的频率:AI的能力必须小于或等于你的数据。这是什么意思呢?如果你问一个问题,根据数据库中的文档,如果人类阅读其中所有内容,他们会理解该问题的答案可能是X、Y或Z。一个问题有多个答案。
因此,你需要确保你的AI解决方案足够强大,能够理解这种复杂性。例如,如果我问这个问题,它不会只返回X或Y,而是会回答:“可能是X、Y或Z。”这种情况在政策和法律中很常见。2012年制定的法律与1912年的法律规定相矛盾并不罕见;如果你有一个同时拥有联邦和州法规的机构,这些规定相互冲突也不足为奇。
这取决于数据库中的数据内容。例如,如果你的数据库中只有法律意见,你不希望将这些意见呈现为事实,而应在它们应被解释的语境中呈现。我认为这一切意味着,在开始开发解决方案之前,你真的需要理解你构建AI解决方案所基于的底层数据。
因为如果你开发的方案认为很多问题或某个问题只有一个答案,而实际上不止一个;或者你基于意见而非事实的数据构建方案,并让该解决方案像陈述事实一样提供信息,你就会遇到问题。人们会说它在“幻觉”(胡编乱造)。但事实上,它并不是在幻觉,只是设计不当。
那么告诉我,你目前正在处理什么样的复杂文档集?请在评论中告知我。非常感谢。