Solon v3.0.9

rag - RAG 相关概念

</> markdown

RAG(Retrieval-Augmented Generation)是一种结合检索技术(Retrieval)与生成式人工智能(Generative AI)的框架,旨在利用外部知识增强生成模型的回答准确性和上下文相关性。它适用于需要高准确性、领域知识支持或动态信息的应用场景。

RAG 的核心是“利用外部知识”,关键则是“结合检索技术”。

1、两种检索方案

  • 常规检索

比如查询 Rdb、Es、MongoDb 等,直接把数据,通过字符串格式化做为提示语的上下文内容。

//上下文只要能转为字符串就行
ChatMessage.ofUser(String.format("%s\n\n context: %s", message, context));
  • 矢量相关性检索

需要借助 EmbeddingModel,把内容生成矢量数据。并使用矢量存储,比如 Milvus、VectoRex、RedisSearch 等

2、统一的检查接口:知识库

solon-ai 使用“知识库”作为检索的统一接口(Repository)。知识库分为:知识库(只检索)、可存储知识库(可检索、可存储)

接口描述备注
Repository知识库只读
RepositoryStorable可存储知识库可读、可写

“常规检索”和“矢量相关性检索”两种方案,都可以包装成知识库。从而实现体验上的统一。

3、solon-ai rag 的三个技术概念与整合效果

  • 嵌入模型(EmbeddingModel)

嵌入模型的作用,是协助 “知识库” 将文档内容转为嵌入矢量数据。

  • 知识库相关
接口(或概念)描述
Document文档(或知识)
DocumentLoader文档加载器(为文档加载提供接口定义。也可以自己随便加载)
DocumentSplitter文档分割器(为文档分割提供接口定义。也可以自己随便分割)
Repository知识库(检索文档)
RepositoryStorable知识库(检索文档 + 存储文档)
  • 聊天模型(ChatModel)

以上内容,就是为了提高聊天模型的回答准确性和上下文相关性。

//构建 embeddingModel
EmbeddingModel  embeddingModel = EmbeddingModel.of(embedding_apiUrl)
        .apiKey(embedding_apiKey)
        .model(embedding_model)
        .build();

//构建 repository (联网搜索的知识库)
WebSearchRepository repository = WebSearchRepository.of(websearch_apiUrl)
        .apiKey(websearch_apkKey)
        .embeddingModel(embeddingModel)
        .build();

//构建 chatModel
ChatModel chatModel = ChatModel.of(chat_apiUrl)
        .apiKey(chat_apkKey)
        .model(chat_model)
        .build();

//应用示例
public void demo(String message ) throws Exception { //接收消息
      //知识库检索
      List<Document> context = repository.search(message);

      //大模型交互
      ChatResponse resp = chatModel
                      .prompt(Prompts.augment(message, context)) //提示语增强(内部为字符串格式化)
                      .call();
}