CMS+AI 落地应用之CMS RAG介绍

 

随着AI大模型能力不断提升,AI的落地应用越来越多,其中最重要的一个场景就是与CMS的整合。

因为AI始终需要内容来源,所以CMS是最重要的一个环节,其二CMS里面的内容需要AI挖掘,这就是CMS与AI的RAG或者AI数据挖掘,其三就是AIGC生成的内容,需要保存,那么落地存储必然是CMS。

所以,就形成了 Content -> AI -> Content 的闭环流程,这也就是为什么CMS在AI的应用中举足轻重。

本文就 CMS+RAG 这部分应用,以及实际项目中的案例,做一个分析和演示。

 

 

 

RAG应用的关键环节

 

RAG,检索增强生成(Retrieval-Augmented Generation),按其字面理解就是通过检索来增强生成,检索是指AI之外的数据检索,生成是指AIGC,也就是AI的生成。

所以,RAG本质上就是通过提前检索,来获取数据,喂给AI,AI根据提供的知识进行回答,从而避免了大模型的幻觉问题,以及大模型对部分专业领域的知识不足问题。

因此RAG的关键环节就是检索,市面上常见的RAG应用大多是基于Langchain的,Langchain默认的检索是向量检索,所以很多时候,我们认为RAG一定要向量化支持,不过这是一个误区。

RAG的Retrieval是可用从任何内容来获取,所以,RAG的关键环节是检索,但是检索的来源可以是任意的检索

RAG检索来源:1. 向量检索 2. 知识图谱检索 3. Solr检索 4. 数据库检索 5. AI检索

所以,RAG的关键就是检索,检索的来源也可以是多样性,甚至检索可以不来自一次检索,也可以多次检索。

 

Drupal CMS AI 的RAG

 

CMS系统跟AI是天然联系在一起的,因为有内容才有AI,AIGC的内容,也要保存到CMS里面,也就是  Content -> AI -> Content 的闭环流程。

基于Drupal的AI我们之前介绍过几篇文章,包括Drupal OpenAI模块、 Drupal Augmentor模块等模块。

那么关于Drupal CMS的RAG,主要包括如下环节:1. Retrieval - 检索 2. AI推理生成

 

 

Solr检索

检索可以选择Drupal的Solr检索,也可以采用向量检索,相比向量检索,Drupal的solr检索比较简单,因为Drupal自带的search api、search api solr等模块,可以快速搭建一套Solr检索以及检索API,然后通过检索的结果,投喂给大模型,进行推理生成。

相关的Search API和Solr的搭建,可以网上的相关教程。

 

向量检索

另外一种就是向量检索,向量检索的关键是内容向量化,向量化之后,就能通过高精度的向量相似度来检索内容

Drupal 的OpenAI模块提供了一个search api ai的集成,默认采用Pinecone/Milvus数据库作为向量库,目前主流的向量库如下:

  • Pinecone, 完全托管的向量数据库
  • Weaviate, 开源向量搜索引擎
  • Redis  用作向量数据库
  • Qdrant, 向量搜索引擎
  • Milvus, 为可扩展的相似性搜索而构建的向量数据库
  • Chroma,一个开源嵌入数据库
  • Typesense,快速开源矢量搜索
  • Zilliz,数据基础设施,由 Milvus 提供支持

但是国内很多SAAS的向量库链接不畅通,所以最好本地搭建,比较简单的有Chroma、Pgvector等,我们采用Pgvector库,因为基于PostgreSQL,管理也比较熟悉,另外基于Table的,还可以存放常规的数据类型。

向量化我们做了一个模块,叫Search API Pgvector,用户通过SearchAPI框架,将所有信息进行向量化,存储到Pgvector里面,然后通过SQL语句进行查询,获取最相近的数据,就可以匹配到用户想要的结果。

 

AI生成

当获取到检索结果,下一步就是AI生成,Drupal已经有了OpenAI模块,OpenAI模块可以直接调用OpenAI的接口,推理生成。

此外,我们也改造了OpenAI模块,使其可以对接其他连接地址,比如微软的Azure、OpenAI的代理服务器(国内访问不到OpenAI,所以需要Proxy)、以及Kimi,因为Kimi和OpenAI的接口100%兼容,所以这些可以统一都用OpenAI模块。

如果需要采用其他大模型,那么就需要对接相应的大模型接口,比如百度的文心一言、阿里的通义千问这些。

 

Prompt

对于AI生成,其中一个重要环节就是Prompt,在代码里面,我们可以多重利用OpenAI的接口,比如将上下文放到System参数里面,而不是直接丢给User参数,这样的好处是User一旦内容太长,后面的问题OpenAI不一定能掌握重点,而放到System里面的问题和指令,一般都是比较重要的。

比如下面的示例:

SYSTEM
Use the provided articles delimited by triple quotes to answer questions. If the answer cannot be found in the articles, write "I could not find an answer."
USER
<insert articles, each delimited by triple quotes> Question: <insert question here>

 

Drupal CMS RAG 演示

 

基于Search API架构,可以将整个网站进行向量化,然后通过向量匹配,找到最接近的内容,投喂大模型,然后进行RAG的增强检索。

依据这个思路,我们对不同的项目进行了向量增强和RAG应用。

 

下面是网站后台和前台的截图:

 

RAG的检索截图

 

 

 

Drupal CMS 向量库配置截图

 

检索接口(包括distance参数,表示向量相近性)

 

经过测试运行,基于Drupal CMS的RAG,可以正常的完整的进行客户AI回答,向量检索后,可以将内容投喂给AI,然后AI可以进行整理回答出用户想要的内容结果。

这里有一个小小的提示,就是向量检索跟传统关键字匹配检索不一样,关键字检索我们一般把搜索较短的词语,比如网站打不开、CA失败、蓝屏,但是向量检索尽量要输入详细的内容,因为太短反而不能正确匹配,或者匹配的distance太远,导致无法精确匹配,所以AI推理的效果就比较差。

 

更多信息可以参考我们CMS的其他解决方案:

 

1、PHP开源CMS Drupal 对接国产数据库之人大金仓实现国产化

2、在线视频教育学习平台介绍

3、如何用开源的系统来构建知识库平台?

4、开源的CMS如何实现问卷调研?

5、如何基于开源系统构建资料库/文档库平台

6、如何建设在线展览和多媒体展览?

7、在线展览和多媒体展示建设方案