Solon v3.2.0

rag - RAG 相关概念

</> markdown

讲到大模型与外部结合,Function Call 是一种。再有就是 RAG(Retrieval-Augmented Generation)。

  • Function Call,可以让大模型在生成时,“按需”调用外部的函数
    • 用于构建互动系统
  • RAG,则在提交大模型之前,检索数据并增强用户消息(或提示语)。让大模型在生成内容时,有上下文可参考。
    • 提高生成内容的准备性和相关性

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

1、两种检索方案

  • 常规检索

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

//上下文只要能转为字符串就行
ChatMessage.augment(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(ChatMessage.augment(message, context)) //提示语增强(内部为字符串格式化)
                      .call();
}