关注我公众号以及对DSPy有兴趣的朋友,最近应该去DSPy官网看一看。斯坦福大学奥马尔(Omar)的DSPy研究团队最近更新了他们的项目文档,发了很多不错的案例,以及很多国际知名企业的DSPy用例,这些可能对您的项目有启发。关于DSPy第一作者奥马尔您可以看这篇《怎样让你的AI研究更有影响力?看DSPy作者斯坦福博士奥马尔·哈塔布的建议》
面对”幻觉“,很多研究者尝试让LLMs能够从可信的外部信息中搜索并利用它们来“落地”答案。然而,LLMs在检索信息时面临的一个重要挑战在于,如何生成恰当的搜索查询,特别是在面对复杂、多步或不明确的问题时。因此,如何有效指导模型生成有针对性的搜索查询成为了一大难题。
本文提出了一种叫做“通过尝试学习检索”(Learning to Retrieve by Trying,简称LeReT)的新型框架,结合了强化学习策略,通过不断尝试和优化,帮助大语言模型提出更优质的搜索查询,并提升它们对信息的检索能力。LeReT显著改善了检索和生成。
这几年,检索增强生成(Retrieval-Augmented Generation, RAG)是一种被广泛应用的方式,旨在让大语言模型可以基于已知文档进行更为准确的回答。这种方式尤其适用于直接提问,例如“什么是量子计算?”这样的问题。然而,对于需要复杂推理、多个步骤或信息综合的问题,例如“在从旧金山到塔霍湖的周五夜间旅途中,有哪些餐厅可以避开交通堵塞?”这样的请求,单次检索往往无法提供足够的信息。应对此类情况的解决方案是多跳检索(multi-hop retrieval),即模型通过分步骤逐步检索相关信息,最终综合出完整的回答。
然而,这种多跳检索在实际应用中并不容易实现,主要因为现有的语言模型在生成搜索查询上并不总是能达到理想效果,特别是在缺少明确的指导或监督的情况下。现有的方法通常依赖于少量示例的提示优化(few-shot prompting)或者监督微调,但这些方法需要大量的数据,且效果并不稳定。
LeReT 的核心思想在于把检索查询的生成问题视为一个强化学习的问题。通过不断尝试不同的搜索查询并从中学习,模型逐步优化其生成的搜索查询,从而提高检索到正确文档的概率。LeReT 的整体过程包括以下几个重要步骤:
通过这一系列步骤,LeReT 能够有效提高多跳检索的准确率,显著改善生成结果的质量。
LeReT 的一个关键特点是它的查询生成方式。传统的查询生成通常采用随机采样的方法,以获得尽可能多的不同搜索查询。然而,简单的随机采样往往难以保证查询的质量。LeReT 则采用了一种结合提示优化和多样化采样的新方式。利用DSPy的优化能力,LeReT 使用了一组经过优化的提示(prompt),这些提示来自于系统自身生成的多样化的少量示例,通过这些示例生成不同的查询来确保检索的结果既有多样性也具备质量。
这种提示驱动的多样化查询生成不仅能够保证模型在探索阶段可以接触到足够多不同的可能性,同时还能确保其中一部分查询能够获得较高的检索奖励,这样在后续的学习阶段可以利用这些成功的示例进行强化学习。
在获得了一组搜索查询及其相应的检索结果之后,LeReT 使用偏好学习来进一步优化生成模型。这意味着,对于每一个问题,LeReT 会将不同查询的检索结果进行对比,优先选择那些能够获得更好结果的查询。在这个过程中,模型会逐步调整其生成策略,以增加未来生成优质查询的可能性。
为了实现这一点,LeReT 采用了一种称为“身份政策优化(Identity Policy Optimization, IPO)”的方法。该方法通过直接对偏好的查询进行学习,无需额外的参数化奖励模型,使得训练过程更加简洁和高效。通过这一优化过程,LeReT 可以持续提高模型生成有效查询的能力,从而最终提升检索的整体效果。
LeReT 的一个优势在于,它不仅通过偏好学习来优化生成查询的策略,还通过上下文蒸馏(context distillation)来减少对特定 few-shot prompts 的依赖。探索阶段所用的提示可能无法在实际应用中一直保持,因此,LeReT 使用上下文蒸馏的方法对语言模型进行无提示微调,确保模型在不使用原始提示的情况下也能生成高质量的查询。此外,LeReT 还采用了多轮迭代优化的方式,使得模型可以不断从早期的次优决策中学习并改进,从而提高最终检索的质量和准确性。
在实验中,LeReT 在多个数据集上展示了显著的性能提升。在两个多跳问答数据集(HotpotQA 和 HoVer)上的测试表明,LeReT 在检索质量和最终生成质量方面都显著优于传统的方法。例如,在 HotpotQA 数据集上,LeReT 将检索的召回率提高了9%到22%,而在 HoVer 数据集上,召回率提高了27%到29%。这些改进表明,通过强化学习的方式,LeReT 在解决复杂多跳检索问题上具有明显的优势。
LeReT 的一个重要特性是其可以迭代应用,模型可以在初始训练完成后,通过进一步的迭代学习继续提升性能。实验显示,经过多次迭代后的 LeReT 模型,其检索和生成的效果均得到了进一步的提升。
在提高检索质量的同时,LeReT 还可以适配不同的大语言生成器来生成答案。实验结果表明,生成器的能力越强,它从LeReT优化后的检索中获得的提升越大。尤其是在 GPT-4 这样的高级生成器上,LeReT 带来的检索改进使得生成质量有显著的增加。与较弱的生成器相比,高级生成器能更好地利用检索到的高质量文档,生成出更准确且合理的答案。
在生成多样化的检索查询时,LeReT 特别采用了提示优化而不是单纯的高温度采样来提升查询的质量。高温度采样虽然能够生成更多样的查询,但它往往带来较多低质量的搜索,而通过提示优化生成的查询能够保持多样性和质量之间的平衡。实验结果显示,LeReT 使用的提示驱动采样方法,能够生成更多具有高奖励的查询,这对于后续的学习和优化过程至关重要。
为了验证 LeReT 的通用性,研究者们还将其应用于不同的检索系统中,包括基于 ColBERT 的 Wikipedia 专用检索系统和 Azure AI Search。这些实验结果表明,即使在不同的检索系统中,LeReT 依然能够显著提高检索的准确性和生成结果的质量。尤其是在Azure AI Search这样通用的检索系统中,LeReT通过强化学习有效适应了系统的弱点,使得整体检索效果明显改善。这一结果表明,LeReT 具备与多种不同类型检索系统协同工作的潜力。
LeReT 的提出,为如何让大语言模型生成更好的检索查询提供了一条全新的思路。通过强化学习和提示优化相结合的方法,LeReT 有效地克服了传统方法在处理多跳检索中的局限,显著提高了检索和生成的质量。然而,当前的 LeReT 仍然依赖于直接监督的奖励信号,这意味着需要事先知道检索文档的正确答案。未来的研究可以探索如何利用间接监督信号来进行检索优化,例如通过生成答案的正确性来间接评估检索质量。此外,如果能够进一步优化检索工具本身,例如通过对检索模型的优化训练,相信也能够带来更大的性能提升。
LeReT 是一种通过强化学习提高大语言模型检索能力的创新方法。它通过不断探索不同的搜索查询,并使用基于偏好的优化方法来提高模型生成查询的能力,从而有效改善了复杂问题的多跳检索能力。LeReT 不仅通过上下文蒸馏减少了对原始提示的依赖,还通过多轮迭代优化不断提升模型的性能。实验结果表明,LeReT 不仅能够提高检索的准确性,还能大幅度提高下游生成任务的质量。对于正在开发 AI 产品的 Prompt 工程师们,LeReT 提供了一种新的工具,可以让大语言模型更加智能、高效地获取外部信息,进而生成更准确的回答。这种结合了强化学习与检索优化的新方式,预示着未来智能系统在理解和回答复杂问题上的巨大潜力。
关于《最新认知Prompt,模拟人类认知操作COP来增强LLM问题解决能力 | ICLR2025》中提到的SYSTEM PROMPT我已经放到了群里,希望进一步了解或者需要更多提示,您也可以参照这篇文章《AI修猫Prompt公众号文章赞赏赠与资料分类汇总》对我进行赞赏支持,可以得到更多SYSTEM PROMPT。如果需要更多DSPy已经运行过的代码,或者据提的案例可以看下以下文章。希望这篇文章对您有所帮助!
文章来自于微信公众号 “AI修猫Prompt”,作者“AI修猫Prompt”
【开源免费】graphrag是微软推出的RAG项目,与传统的通过 RAG 方法使用向量相似性作为搜索技术不同,GraphRAG是使用知识图谱在推理复杂信息时大幅提高问答性能。
项目地址:https://github.com/microsoft/graphrag
【开源免费】Dify是最早一批实现RAG,Agent,模型管理等一站式AI开发的工具平台,并且项目方一直持续维护。其中在任务编排方面相对领先对手,可以帮助研发实现像字节扣子那样的功能。
项目地址:https://github.com/langgenius/dify
【开源免费】RAGFlow是和Dify类似的开源项目,该项目在大文件解析方面做的更出色,拓展编排方面相对弱一些。
项目地址:https://github.com/infiniflow/ragflow/tree/main
【开源免费】phidata是一个可以实现将数据转化成向量存储,并通过AI实现RAG功能的项目
项目地址:https://github.com/phidatahq/phidata
【开源免费】TaskingAI 是一个提供RAG,Agent,大模型管理等AI项目开发的工具平台,比LangChain更强大的中间件AI平台工具。
项目地址:https://github.com/TaskingAI/TaskingAI
【开源免费】XTuner 是一个高效、灵活、全能的轻量化大模型微调工具库。它帮助开发者提供一个简单易用的平台,可以对大语言模型(LLM)和多模态图文模型(VLM)进行预训练和轻量级微调。XTuner 支持多种微调算法,如 QLoRA、LoRA 和全量参数微调。
项目地址:https://github.com/InternLM/xtuner
【开源免费】LangGPT 是一个通过结构化和模板化的方法,编写高质量的AI提示词的开源项目。它可以让任何非专业的用户轻松创建高水平的提示词,进而高质量的帮助用户通过AI解决问题。
项目地址:https://github.com/langgptai/LangGPT/blob/main/README_zh.md
在线使用:https://kimi.moonshot.cn/kimiplus/conpg00t7lagbbsfqkq0