rag - RAG 相关概念
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();
}