继上一篇文章我们介绍合并检索语料,使用简单Prompt实现LLM RAG的查询后。HuggingFists又增加了对通义千问的会话访问模式(注:这功能需要等下周发版后才能试用了)。如我们在上篇文章中提到的,当文本非常大时,通过简单Prompt处理检索结果回答问题的方案就无法胜任了。在此,我们给出一个会话模式的检索解决方案。下面是多轮会话模式的实现流程:
问题检索流程图
该流程由7个算子组成,比简单Prompt的流程少了一个聚合算子。其前五步与简单Prompt流程一致,在此我们就不赘述了。下面我们着重介绍一下第6、7两步。
6.大文本大语言模型提示: 该算子支持复杂提示模板,能够将输入的数据流分成多段输出到大语言模型。以下是我们预先预置到HuggingFists提示库中的提示模板,见下图:
复杂提示模板
复杂提示模板分成三段,分别是"前置提示"、"提示"与"后置提示"。当算子从输入端口接到第一条记录时,会用记录中的信息替换"前置提示"中的变量,然后将其作为Prompt输出给大语言模型。同时,会继续使用该记录替换"提示"中的变量,并将其输出给大语言模型;随后,其继续读取输入的记录,替换"提示"中的变量,输出到大语言模型;持续以上过程,直到最后一条记录输入时,算子用这条记录替换"后置提示"中的变量,并将其输出。该算子的变量替换方式与配置方式与上篇文章介绍到的"大语言模型提示"算子一致。配置界面如下图:
大文本大语言模型提示
检索结果
流程执行时,流入该算子的检索结果如上图。根据我们描述的算子工作机制,这两条输入信息最终会生成三条Prompt输出到大语言模型。下面我们看看步骤7的算子,如何接收Prompt,并按我们的预期给出问题答案的。
阿里会话大模型
7.阿里会话大模型:该算子支持了通义千问大模型的多轮会话接口,即每次调用接口时,会将会话过程中的交互记录同步传输给大模型,大模型使用这种短期记忆模式回答相关的问题。很明显,该模式会大量的消耗tokens额度,会超越我们的第一个技术方案,因为每次调用接口都会加上前一次的会话内容,使得请求越来越大。但我们也看到业界有一些缩减会话大小的技巧,在此我们不展开讨论,有兴趣的朋友可以自行查阅。其配置界面如上图,一般情况下只要为其设置通义千问访问账号即可,其它参数缺省不用调整。下面我们看一下其结果输出。
提示与回答
API请求参数
如"提示与回答"图所示,流程输出给通义千问三个Prompt,前两个Prompt大模型按照预期没有回答问题,并确认收到信息。在第三个提示输入后,其按照记忆给出了问题的答案,答案与方案一执行时获得的答案一致,回答成功。那么算子是如何提交会话信息,帮助通义千问实现短期记忆的呢?通过"API请求参数"的图片我们能够看到,历史的会话信息按照API接口的约定,每次都通过messages参数传递给了大模型。每次请求都会多一组上一轮的对话信息。
至此,我们基本介绍完了如何使用HuggingFists落地RAG的场景。留下的如何通过外部调用驱动流程执行的坑,我们将在介绍完如何使用HuggingFists实现Agent后再回来填。