RAG SDK的完整开发流程如所示。用户可参见以下步骤完成接口调用。
运行阶段请使用普通用户HwHiAiUser执行相关用例。
知识库构建和在线问答支持并发,具体参见对应Demo。
图 1 RAG SDK开发流程[object Object][object Object]
构建知识库。
上传领域文档,加载和切分。初始化文档处理器,用户可以根据上传的文件类型注册相应的文档解析器(参见、或基于langchain自定义)和文档切分器(参见或基于langchain自定义),支持的文档类型包括Docx、Excel、Pdf、PowerPoint等。用户可以根据需要加载相应的解析和切分功能,输出为文档切分后的文本chunks。
文本向量化。加载embedding模型(参见),根据模型具体路径进行配置。文档切分后的文本chunks向量化后存入知识库管理中的向量数据库。
初始化知识库管理,参见,包括初始化关系数据库和向量数据库(参见和)。
切分后的文本chunks会存入关系数据库,chunks向量化后数据会存入向量数据库,一一对应。
在线问答。
- 初始化缓存(参见,可选),RAG SDK支持配置缓存和近似搜索,当用户问答时优先从缓存中搜索答案,问题命中则直接返回缓存中的回答,未配置缓存或问题未命中缓存则继续以下推理过程。
- 初始化大模型Chain(参见),通过Chain串联大语言模型,检索和精排模块进行问答,用户可以选择文生文、文生图、图生图等Chain,支持多轮对话、检索推理并行等方式。
- 初始化检索方式(参见),用户可以定义近似检索、查询改写检索等方式。问题经过embedding模型向量化后,通过检索在知识库中找到上下文context,进行下一步处理。
- 对检索到的上下文context通过reranker进行精排(参见,可选),提高检索质量。
- 最后将用户问题和上下文context组装成prompt,传入大语言模型(参见)进行推理并获得回答返回给用户。如果有配置缓存,问答完成后会将问答对刷新到缓存中,再次问答命中时将缩短问答耗时。
样例介绍[object Object][object Object]
本章节介绍基于Atlas 800I A2 推理服务器,使用RAG SDK Python接口开发基于知识库的问答系统。RAG SDK运行框架如所示,其运行步骤分为“构建知识库”和“检索问答”。
本样例是一个文生文场景,检索方法为距离检索“FLAT:L2”方法,其中框架图中每个步骤的“[xxx]”表示可选的方法类。推理大模型使用Llama3-8B-Chinese-Chat,embedding模型使用模型bge-large-zh-v1.5,reranker(可选)模型使用bge-reranker-large。
图 1 基于知识库的问答流程[object Object][object Object]
前提条件[object Object][object Object]
- 已经在MindIE容器中下载和运行Llama3-8B-Chinese-Chat大模型,模型下载链接:[object Object]链接[object Object]。
- 已经基于《MindIE安装指南》中的“安装MindIE > 方式三:容器安装方式”章节完成在宿主机上的容器化部署,并参考《MindIE Motor开发指南》中的“快速入门 > 启动服务”章节启动服务。
- 已经完成。
- 已经下载嵌入模型“bge-large-zh-v1.5”和reranker模型“bge-reranker-large”,并放在中运行容器时配置的模型存放目录下。模型下载链接:
- bge-large-zh-v1.5模型:[object Object]链接[object Object]
- bge-reranker-large模型:[object Object]链接[object Object]
TEI服务化说明[object Object][object Object]
Embedding模型和Reranker模型可以支持服务化运行,如果选择TEI服务化方式,请完成Embedding服务运行和Reranker服务运行,请参见[object Object]链接[object Object]。
操作步骤[object Object][object Object]
编译检索算子,以实现检索功能。
[object Object][object Object]
创建领域知识文档。
在/home/HwHiAiUser目录下创建文档gaokao.txt,编码格式为utf-8,内容如下:
[object Object][object Object]
构建领域知识库。
参考并运行中rag_demo_knowledge.py样例代码,请根据实际情况修改代码中的文件路径、模型路径等默认参数,详细参数设置请参见readme.md文件。
[object Object]运行程序获取结果。
样例代码能打印出上传的文件名列表,则表示构建知识库成功。
[object Object]
操作步骤[object Object][object Object]
执行在线问答样例。参考并运行中rag_demo_query.py代码文件,请根据实际情况修改代码中的模型路径、mindie服务IP和port等默认参数,详细参数设置请参见readme.md文件。
[object Object]运行程序获取结果。
[object Object]
[object Object]
样例介绍[object Object][object Object]
本样例基于和增加MxRAGCache缓存和生成QA的功能,自动生成QA功能支持解析markdown文档,并存入MxRAGCache缓存功能。使用memory cache和similarity cache作为缓存使用。
图 1 基于Cache缓存的RAG SDK问答流程[object Object][object Object]
前提条件[object Object][object Object]
已经在MindIE容器中下载和运行Llama3-8B-Chinese-Chat大模型,模型下载链接:[object Object]链接[object Object]。
RAG SDK的容器内能够访问Llama3-8B-Chinese-Chat大模型的路径下的config.json和tokenizer.json,用于计算文本token大小。
已经基于《MindIE安装指南》中的“安装MindIE > 方式三:容器安装方式”章节完成在宿主机上的容器化部署,并参考《MindIE Motor开发指南》中的“快速入门 > 启动服务”章节启动服务。
已经下载嵌入模型“bge-large-zh-v1.5”和“bge-reranker-large”,并放在中运行容器时配置的模型存放目录下。模型下载链接:
- bge-large-zh-v1.5模型:[object Object]链接[object Object]
- bge-reranker-large模型:[object Object]链接[object Object]
操作步骤[object Object][object Object]
编译检索算子,以实现检索功能。
[object Object][object Object]
创建领域知识文档。
在/home/HwHiAiUser目录下创建文档gaokao.md,编码格式为utf-8,内容如下:
[object Object][object Object]
参见并运行中rag_demo_cache_qa.py代码文件,请根据实际情况修改代码中的文件路径、模型路径和大模型IP和port等默认参数,详细参数设置请参见readme.md文件。
执行样例代码。
[object Object]运行两次样例代码,获取结果。
[object Object]
本章节将指导用户使用RAG SDK根据文本搜索图片样例。
前提条件[object Object][object Object]
样例流程介绍[object Object][object Object]
操作步骤[object Object][object Object]
本章节将指导用户使用LangChain来使用多轮对话功能。
前提条件[object Object][object Object]
操作步骤[object Object][object Object]
在容器内任意目录执行vim命令创建demo.py代码文件,文件内容如下:
[object Object]运行样例代码,请求大模型中带有历史信息,prompt拼接结果如下:
[object Object]