rag - 文档向量知识库(Repository)
文档知识库,一般是基于向量数据库封装的并提供文档存储与相似搜索的接口(所以也叫,文档向量知识库)。其实,不基于向量数据库封装也行,比如基于本文搜索。
1、内置的适配(可以根据业务,按需定制)
知识库 | 所在插件 | 描述 |
---|---|---|
InMemoryRepository | solon-ai | 内存知识库(数据在 map 里) |
WebSearchRepository | solon-ai | 联网搜索知识库 |
ChromaRepository | solon-ai-repo-chroma | Chroma 矢量存储知识库 |
DashVectorRepository | solon-ai-repo-dashvector | DashVector 矢量存储知识库 |
ElasticsearchRepository | solon-ai-repo-elasticsearch | ElasticSearch 矢量存储知识库 |
MilvusRepository | solon-ai-repo-milvus | Milvus 矢量存储知识库 |
QdrantRepository | solon-ai-repo-qdrant | Qdrant 矢量存储知识库 |
RedisRepository | solon-ai-repo-redis | Redis Search 矢量存储知识库 |
TcVectorDbRepository | solon-ai-repo-tcvectordb | TcVectorDb 腾讯云矢量存储知识库 |
相关配置,参考具体插件介绍。
2、Repository 接口
只读知识库接口。比如封装网络搜索,只读接口即可
public interface Repository {
//检索
default List<Document> search(String query) throws IOException {
return search(new QueryCondition(query));
}
//检索
List<Document> search(QueryCondition condition) throws IOException;
}
可写知识库接口(可读,可写)
public interface RepositoryStorable extends Repository {
//插入
void insert(List<Document> documents) throws IOException;
//删除
void delete(String... ids) throws IOException;
//是否存在
boolean exists(String id) throws IOException;
}
3、简单示例
private void load(RepositoryStorable repository, String file) throws IOException {
//加载器
HtmlSimpleLoader loader = new HtmlSimpleLoader(new File(file));
//加载后再分割(按需)
List<Document> documents = new SplitterPipeline()
.next(new RegexTextSplitter("\n\n"))
.next(new TokenSizeTextSplitter(500))
.split(loader.load());
//入库
repository.insert(documents);
}