Kernel Memory 入门系列: RAG 简介
Kernel Memory 入门系列: RAG 简介
开一个新坑,Semantic Kernel系列会在 Release 1.0 之后陆续更新。
当我们有了一定的产品资料或者知识内容之后,自然想着提供一个更加方便的方式让用户能够快速地找到自己想要的信息,或者得到一个更加智能的答案。
以往的时候可能需要通过一些搜索引擎或者问答系统来实现,但是这些系统往往需要极高的维护成本,而且对于用户来说也不是很友好。很多时候仍然需要用户自己去思考问题的表达方式,然后再去搜索或者提问,可以说是费事费力。
如今有了大语言模型,我们就可以考虑通过它来实现一个更加智能的问答系统,为用户提供一个更加友好的交互方式。
从对话开始
当我们直接接入大语言的模型的时候,往往会遇到一个很常见的问题,就是它对于我们私有的数据,小众领域的信息或者较新的知识并不知道。
这源自于大语言模型的训练数据集的限制,它的数据往往来自于大众的语料库,所以对于公开的信息了解的就比较多,但是对于私有的数据,小众领域的信息都不在它的知识范围内,而且由于训练成本和时间的限制,它也不可能实时地去更新模型本身的知识。
这个时候得到“不知道”的答案反而是一个好事儿,起码看得出来这个模型是有一定的智能的,它知道自己不知道,而不是随便瞎猜。毕竟处理大模型的幻觉也是很大的一个问题。
补充上下文
那么这个时候如果想要让模型能够为我们所用的,就需要上一点技术手段了。
最简单的方法就是在与大模型沟通的时候,增加一些上下文的信息。
那这里的上下文就是我们所能够提供给模型的,用于回答用户问题的信息了。
那么接下来的问题就是,这个上下文信息是怎么来的?
RAG
我们需要从整个流程来回溯一下:
- 首先用户提出问题,这个问题从始至终不会发生变化
- 然后我们需要理解用户的问题,知道用户提问的意图和方向
- 接下来就是我们需要根据用户的问题,去检索我们的知识库,找到与用户问题相关的信息,查找出与之相关的的文档或者文本内容
- 最后我们需要将这些文档或者文本内容进行整合,组成一个完整的提示词,提供给大语言模型用于生成
- 最后通过大语言模型生成相对精确的答案,返回给用户
这个过程就被称为 RAG(Retrieval Augmented Generation),也就是检索增强生成。