第一章 Springboot RAG 一站式混合搜索方案
最近在做一个政策类查询的RAG方案,做成一站式可以快速使用的方案。
数据库是PG, PGVector作为向量数据库,采用Hybrid Search方法来同时匹配向量和其他字段。
项目采用Springboot 作为后端;大模型相关的,使用到的API有Chatgpt, moonshot, qwen,讯飞星火等不同厂家的方案。
该方案从产品方面来考虑,可扩展性,可便利性等没有太多考虑;从单个项目来说,算是一个可用的方案。
Spring AI 支持所有主要的模型提供商,如 OpenAI、Microsoft、Amazon、Google 和 Huggingface;国内的大模型还没有支持,国内大模型的API的返回,有几个是兼容OpenAI的,另外一些是不兼容的,需要做不少工作来完全兼容。这是后面可以优化的方向,做成一个统一的接口,便于系统维护和更多人的上手使用。
系统的数据库采用PG, 文本也是放在一个text字段中,用PG自带的全文检索,同时把向量匹配也放到一起过滤,所以向量数据库采用PGVector。
PGVector的安装有很多写的详细的过程,这里略过。
PostgreSQL 全文检索:PostgreSQL 自带的全文检索功能可以使用 tsvector 和 tsquery 数据类型,通过分词和倒排索引来实现语义搜索的基本需求。
Zhparser 分词插件:对于中文文本,可以使用 PostgreSQL 的 Zhparser 插件进行中文分词,结合全文检索功能实现语义搜索。
系统里面使用SpringBoot, MyBatisPlus的方式来,目前MyBatisPlus本身并不支持PGVector。需要增加一个PGVector的方式,
PGVector有项目https://github.com/pgvector/pgvector-java.git, 实现过程中参考该项目来实现PGVector;(也可以参考SpringAI项目对PGVector支持)
MyBatisConfig.java对应修改
PGvectorConfiguration.java
FaguikuMapper.java
FaguikuMapper.xml
embeddings 通过Embedding API去获取,可以通过各个大模型的Embedding API,也可以通过部署Embeddings API, 根据huggingface中的排名来选择中文支持较好的Embedding模型