LLM-RAGFlow

# AI
# LLM

前段时间,对于 LLM-RAGFlow 的介绍引起了我的兴趣,今天就来试试。

但是,实际上它并没有提供我想要的功能。尽管使用了Rag,ai仍然无法将文本中的内容当作自己的知识来使用,而是将其作为外部的文本信息来处理。

它其实类似于给 LLM 提供了 MCP Server 的功能,允许 LLM 直接访问外部知识库。它的基本运作逻辑如下:

  1. RAGFlow 事先读取知识库中的所有文本,并将其转换为向量存储在数据库中。
  2. 当 LLM 需要回答问题时,它会先将问题转换为向量,并在数据库中查找与之相似的文本。
  3. 找到相似文本后,LLM 会将这些文本作为上下文信息传递给自己,并生成回答。
  4. 生成的回答会结合上下文信息和LLM自身的知识。
  5. 最终,LLM 会将回答返回给用户。

所以说实际上,对于ai而言,RagFlow 只是一个知识库的接口,它并没有改变 LLM 的工作方式,仅仅是为ai提供了一个能够访问知识库的途径。

就像人能够使用百度搜索引擎一样,人能够通过搜索引擎来获取信息,但这并不意味着人能够将搜索引擎中的信息当作自己的知识来使用。

一个伟大的想法

ragflow 存在的问题

其实我在想,现有的rag的实现方式依赖于 向量化文本 来实现,它能够很好的将文本进行聚类处理,聚类后的文本就像是拥有了无数个tag,每个tag意味着它与某个知识关联。

比如说,我有3篇文章与ai绘画相关,那么在向量化后,它们就会被聚类到一起,当检索到与ai绘画相关的内容时,ragflow 就会将这3篇文章作为上下文信息传递给 LLM。

但是这样存在的最大的问题就是,人类的知识是融汇贯通的,而向量化后的文本是孤立的,尽管它们能通过聚类关联在一起,但是并不能确认它们之间的准确关系:

1
2
3
4
5
6
7
8
9
10
文档1:

学习好累,我不想学习

文档2:

学习好累,我想去玩

文档3:
学习真的好快乐啊,学习到了很多新知识

这3篇文章的向量化后,会被聚类到一起,当检索学习相关的内容时,ragflow 就会将这3篇文章作为上下文信息传递给 LLM。 但是实际上,这3篇文章之间并没有任何关联,它们只是因为包含了“学习”这个词而被聚类到了一起,而对于学习的态度,则是截然相反的。

对于学习的态度,其实更大可能是和最近发生的事情相关联,而非简单的点到点的关系。而rag无法捕获到这一点,将错误的内容作为信息传递给 LLM 后,LLM同样无法确认它们之间的关系,只会将其理解为类似于日志的内容。

于是我就想有没有可能尝试这样一种ai的实现方式:

实现方式

1. 预处理

  1. 通过向量化文本,将文本进行聚类处理,聚类后的文本就像是拥有了无数个tag,每个tag意味着它与某个知识关联。
  2. 将有关联的文本,通过一个特殊的ai进行处理,将处理后的文章也加入向量化文本的数据库中。

2. 检索

  1. 当 LLM 需要回答问题时,它会先将问题转换为向量,并在数据库中查找与之相似的文本。
  2. 当检索到与某个知识相关的内容时,原始的文本和处理后的文本都会被传递给 LLM,其中原始文本的提示词影响力权重会降低,而处理后的文本的提示词影响力权重会提高。从而期望ai能够捕捉到文本之间深层次的关联。
  3. 生成的回答会结合上下文信息和LLM自身的知识。
  4. 最终,LLM 会将回答返回给用户。

特殊的ai核心有两个功能: 1. 对于单个文件,思考前后文的语义连贯性以及合理性 2. 对于多个文件,思考它们之间的关联性

这样的话,ai或许能够将文本中的内容当作自己的知识来使用,而不是将其作为外部的文本信息来处理。

实际上这种做法类似于人类的思维方式,人类在学习知识时,往往会将不同的知识进行关联,从而形成一个完整的知识体系。而ragflow则是将知识孤立开来,无法形成一个完整的知识体系。

更进一步……自学习功能

如果上述功能的效果很好的话,那么我们可以尝试加入自学习的功能,主要使用两个特性: 1. 自我评估和反馈 2. 自我学习和改进

1. 自我评估和反馈

当 LLM 生成回答后,可以通过一个特殊的 ai 对回答进行评估,判断回答的正确性和合理性,并给出反馈。这个反馈可以是一个评分,也可以是一个文本描述。 这个反馈会被存储在数据库中,并与原始文本和处理后的文本进行关联。

2. 自我学习和改进

要求特殊的ai在处理文本时,能够生成“疑问”,并将这些疑问存储在数据库中。

LLM 在合适的时间可以对这些疑问进行检索,并尝试回答这些疑问。这个过程可以看作是一个自我学习的过程。同时它也可以将问题询问人类,并将获取到的答案存储在数据库中。

这样的话,LLM 就可以不断地进行自我学习和改进,从而提高自己的知识水平和回答能力。

遗忘和精炼

在上述的机制下,rag存储的文本会越来越多,此时需要引入遗忘和精炼的机制。

  1. 遗忘:当文本经由ai处理后,原始文本的权重乘以k(k<1)存储到数据库中。这样的话,随着时间的推移,原始文本的权重会越来越低,当权重低于Kmin时,就可以将其删除。
  2. 精炼:当文本经由ai处理后,生成出来的文本的权重为1,存储到数据库中,从而形成一个新的知识体系。

通过上述的机制,知识库的信息熵能够越来越低,从而形成一个完整的知识体系。但是同时,其连接数和广度也会越来越高,从而形成一个完整的知识网络。


Reference