巧妇难为无米之炊。
模型要完成一项任务,既需要指令,也需要足够的信息。
每个快速发展的领域都会出现很多新概念,新概念源于新方案,而新方案来自新需求。
在使用AI的时候,模型和提示词是最常见的,但如果仅靠一问一答无法高效地达成目标呢?
RAG和智能体,就是得力的帮手。
RAG
RAG是一种通过从外部记忆源检索相关信息来增强模型生成能力的技术。
简单讲,就是除了手动输入提示词之外的辅助性数据,数据的来源可以是内部数据库、用户的聊天记录或互联网。
术语RAG最早出现在论文"Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks"(2020)中。
该论文提出将RAG作为知识密集型任务 的解决方案,原因就是,在这类任务中无法将所有可用知识直接输入模型。
那么RAG系统是怎么工作的呢?
检索与生成
一个RAG系统包含两个部分:从外部记忆源检索信息的检索器 (retriever),基于检索信息生成响应的生成器(generator)。
RAG系统的成败取决于检索器的质量。检索器有两个主要功能:索引 和查询。
索引是对数据进行处理,以便之后能够快速检索。查询是指根据输入的问题检索出与之相关的数据。
举个例子,假设外部记忆源是一个文档数据库,可能包含10个token,也可能是100万个,如果直接检索整个文档,可能会导致上下文长度过度膨胀。为了避免这种情况,可以将每个文档拆分成更易处理的块(chunk)。对于每个查询,我们的目标是检索与该查询最相关的数据块。
将检索到的数据块与用户的输入组合起来,生成最终的提示词,再将提示词输入生成式模型,就是一个最简的RAG工作流程。
运用RAG,只有与查询最相关的信息才会被提取并输入模型。
这样以来,不仅减少了token消耗,还可以帮助模型生成更详细的响应,减少幻觉现象,提升模型的性能。
智能体
业界普遍认为智能体是AI的终极形态。那么智能体是什么?
早在90年代,Stuart Russell和Peter Norvig在经典著作《Artificial Intelligence: A Modern Approach》中,将AI研究定义为"对理性智能体的研究与设计"。
当时看来,那还是个宏伟且难以想象的目标。今天,基础模型所展现的前所未有的能力使其逐渐成为现实。
智能体,是任何能够感知其环境并作用于环境的事物。
这意味着,它不是某个具体的物品,也不是某个特定的软件,而是一类能够应对不同场景,解决不同问题的程序的统称。
很像"人"?没错,面对一项任务,人怎么做,它就要怎么做:接收信息,规划动作,接收反馈,判断任务是否完成。
说白了,智能体的职责就是替人做事,而且不需要手把手教,一步步跟。
既然如此,它就不能"两手空空",要有做事的工具 ,且具备一定的规划能力。
工具
就模型本身而言,通常只能执行单一类型的动作,要么生成文本,要么生成图像,这会使模型的能力受限,外部工具则可以极大拓展智能体的能力边界。
常见的工具有三类:
知识增强:如联网搜索。网页浏览是最早被集成到ChatGPT等聊天机器人中的功能之一,可以防止模型信息过时。
能力扩展:如数学插件。众所周知,基于预测的工作机制,AI模型在数学计算方面表现不佳,如果模型能使用计算器,问题迎刃而解。
写入动作:如辅助编程。关于模型的讨论,最多的是信息的读取和查询,但借助工具它也可以执行写入动作,从而修改授权范围内的数据源,这是一种更加强大且能明显提效的能力。
规划
复杂任务通常需要规划,有效的规划要求模型理解任务、考虑不同方案,并从中选择最好的。
那么你的系统就需要:生成计划,验证计划,执行计划。这三种能力。
规划的核心是搜索。你需要在通往目标的不同路径之间进行搜索,预测每条路径的结果,并选择最有希望的路径。
因此,搜索通常需要回溯。回溯的意思是,允许走回头路。
假设你有A、B两个选择,在执行A后,发现结果不理想,这时需要回到之前的状态,转而选择B。
怎样知道A的结果不理想呢?这就要求系统不仅要了解可用的动作,还要知道每个动作可能产生的结果。
模型的海量训练数据对这一需求提供了支撑,但仍难免出现不理想的情况,这个时候,提示词优化和模型微调就派上了用场。
反思
即使是最好的计划,也需要不断评估和调整,以提升成功的可能性。
反思在任务执行的多个环节都很有用。
- 收到查询后,评估请求是否可行。
- 计划生成后,评估计划是否合理。
- 每一步执行后,评估当前执行是否处于正确的轨道。
- 整个计划执行完毕后,判断任务是否真正完成。
反思与错误修正是两种相辅相成的机制:反思产生洞见,有助于发现需要纠正的错误。
一旦智能体未能完成任务,你可以提示它进行反思,并给出改进思路,从而实现"从错误中学习"。
记忆
记忆是指模型保留和利用信息的机制。
如果你正在进行一个复杂的任务,和AI进行多轮次对话,它却做了后面忘了前面,将是灾难性的。
记忆机制主要有三种:
内部知识:来自模型自身,除非模型更新,否则不会改变。
短期记忆:模型的上下文。对话中的历史消息可被添加到模型的上下文中供后续使用。
长期记忆:模型通过检索访问的外部数据源(例如RAG系统)。
选择哪种机制,取决于数据的使用频率,这就涉及到记忆的管理策略。
这和开发者熟知的"缓存"如出一辙,人们总会在需要处理大量数据的场景下尽可能的利用"记忆"去提升检索的质量和效率。
最简单的策略是FIFO(first in first out,先进先出)。 这种策略假设早期的消息与当前的讨论相关性较低,但它不总是对的,尤其在长对话过程中,最早的消息往往包含最关键的目标信息,这时候就需要转而选择其他更合适的策略。
结语
综上所述,使用RAG和智能体的过程可能耗费大量的时间和金钱。也有一定门槛,但正所谓"磨刀不误砍柴工",如果做一些额外的工作能够显著增强模型的能力,且可以自主运行,就能节省大量的人力时间,物有所值。
权衡的艺术再次得到体现。
更多好文第一时间收到,欢迎关注公众号:"前端说书匠"。