从中秋到国庆,RAGFlow 连续发布了 2 个版本,0.11 和 0.12,逐步解决一些易用性相关的问题。在 0.12 版本中,我们对社区长期反馈的 Docker 镜像过大的问题进行了修正。新版本的 RAGFlow 分为 2 个镜像,一个是原来的All In One镜像,里边包含了本地可运行的 Embedding 模型和 Reranker 模型。由于这些模型推理,需要依赖完整的模型推理,因此导致 Docker 镜像过大,对于国内用户的下载非常不友好。另一个是裁剪后的 Slim 版本镜像,该镜像拿掉了本地运行的 Embedding 模型和 Reranker 模型,因此尺寸大大降低到只有 1 G,当然在使用该镜像的时候,一切依赖于模型推理的服务,都需要在外部配置。例如可以用 Ollama 或者 Xinference 启动 本地Embedding 模型和 Reranker 模型,也可以直接配置采用其他的 SaaS 服务。而大家关心的文档解析模型 DeepDoc,由于它可以只依赖 CPU 运行,因此两个版本内置都包含。在后续的版本中,除了功能和对话效果上的迭代之外,我们还将持续改进 RAGFlow 的易用性和稳定性。
从 RAGFlow 0.11 版本开始,RAGFlow 将功能分为三大区域:对话/ AI 搜索/ Agent。AI 搜索上升到跟对话和 Agent 平级,代表三个不同的场景,它们将分别按照各自路线不断演进。AI 搜索致力于提供针对企业的 Perplexity AI 类服务,它的功能区域如下所示,共包含三个区域:答案生成区;原始结果展示区;思维导图区。从目前的 RAGFlow AI 搜索来看,它的功能展现跟目前大家看到的 Perplexity 等面向 C 端的 AI 搜索略有不同,它保留了传统搜索的结果展示这部分,这主要是因为在企业场景,结果可信是更加重要的。
在答案生成阶段,当前版本的 AI 搜索,是直接让 LLM 生成答案,这跟当前的对话/ RAG 更加相似,为了得到更理想的答案,可以从两方面进行改进:其一是在预处理阶段增加更多的信息抽取,给文本添加更多的上下文标签。这样,搜索结果不仅更加满足查询意图,而且结果还包含更多的知识导航结构,这些可以方便 LLM 生成更好的答案。近期比较火热的 Anthropic 的 Contextual Retrieval,也是类似的技术,就是在索引前先借助 LLM 给文本 Chunk 生成一些标签类信息,它们可以提供更多的上下文信息,因此可以提供更好的召回质量。当然,这跟知识图谱构建一样,都需要消耗大量的 Token,以及增加数据入库的延迟,因此,低成本的方案,同样离不开专用信息抽取小模型。其二,是在答案生成阶段,引入一些 Reasoning 的步骤,例如思维链,因此,答案生成是一个多次查询改写和搜索的过程,这在同时搜索用户创建的多个知识库时更加必要。
RAGFlow 0.11 和 0.12 ,分别给 Agent 模块增加了一些 Tools 和算子,这样基于 Agent ,可以实现更多的功能。例如金融行业,新增的智能投顾,这其实是一个多源搜索融合的答案生成,它向问财发起检索,既包括选股的结果,还有资讯相关内容,然后由 LLM 生成最终的答案,下图是一个对话示意:
下边是一个医疗问诊助手样例,它基于 PubMed 的数百万英文医疗论文,以及一些其他数据集,涵盖多个不同领域具有代表性的专业医疗数据,借助于 Agent 机制,提供中文问诊对话服务。这些数据我们已经上传到 Huggingface,感兴趣的同学可以自行下载,借助 RAGFlow 搭建自己的内部医疗问诊助手。
https://huggingface.co/datasets/InfiniFlow/medical_QA
对话效果如下所示:
随着更多的 Tools 被加入到 Agent ,就可以实现更加复杂和通用的场景。下图是一个通用对话机器人,可以从 Agent 模板中直接选择。
这个通用模板,把目前 RAGFlow Agent 支持的工具做了汇总,提供涵盖金融、医疗、天气等领域的对话能力,对于不在这些范围的对话,则直接向 Web 搜索引擎发起请求。当用户提问意图分别涵盖如上场景时,会调用对应场景的工具或者算子进行检索,得到答案之后汇总到 LLM 。当然,也可以在此基础之上添加企业自己的知识库。从 0.11 版本开始, RAGFlow 也为输出增加了语音合成输出功能,这借助于当前的一些 TTS 服务,例如 OpenAI,通义,FishAudio,讯飞等。如果再接入语音识别 API,即可完成端到端的语音交互。
下图是基于以上通用模板的对话效果:
针对社区伙伴反馈的 Agent 不易用的问题,在后续版本中会逐步得到改善。RAGFlow 一直在快速迭代,社区的反馈是我们前进的最大动力。祝大家国庆节快乐!