一、RAG概述
RAG(Retrieval Augmented Generation)技术,通过检索与用户输入相关的信息片段,并结合外部知识库来生成更准确、更丰富的回答。解决 LLMs 在处理知识密集型任务时可能遇到的挑战, 如幻觉、知识过时和缺乏透明、可追溯的推理过程等。提供更准确的回答、降低推理成本、实现外部记忆。
RAG 能够让基础模型实现非参数知识更新,无需训练就可以掌握新领域的知识
二、环境配置
参考:环境配置
这里以在 Intern Studio 服务器上部署茴香豆为例。
配置Conda环境
复制模型文件
git clone 模型相关代码
三、使用茴香豆搭建 RAG 助手
修改配置文件
指定向量数据库和词嵌入的模型、用于检索的重排序模型及使用的语言模型(internlm2-chat-7b
)地址
创建知识库
创建
使用 InternLM 的 Huixiangdou 文档作为新增知识数据检索来源,在不重新训练的情况下,打造一个 Huixiangdou 技术问答助手
提取知识库特征,创建向量数据库。数据库向量化的过程应用到了 LangChain 的相关模块,默认嵌入和重排序模型调用的网易 BCE 双语模型
除了语料知识的向量数据库,茴香豆建立接受和拒答两个向量数据库,用来在检索的过程中更加精确的判断提问的相关性,这两个数据库的来源分别是:
- 接受问题列表,希望茴香豆助手回答的示例问题
– 存储在 huixiangdou/resource/good_questions.json 中 - 拒绝问题列表,希望茴香豆助手拒答的示例问题
– 存储在 huixiangdou/resource/bad_questions.json 中
其中多为技术无关的主题或闲聊
如:“nihui 是谁”, “具体在哪些位置进行修改?”, “你是谁?”, “1+1”
在确定好语料来源后,运行命令,创建 RAG 检索过程中使用的向量数据库
完成后,Huixiangdou 相关的新增知识就以向量数据库的形式存储在 workdir 文件夹下。
检索过程中,茴香豆会将输入问题与两个列表中的问题在向量空间进行相似性比较,判断该问题是否应该回答,避免群聊过程中的问答泛滥。确定的回答的问题会利用基础模型提取关键词,在知识库中检索 top K 相似的 chunk,综合问题和检索到的 chunk 生成答案。
问答
# 填入问题
sed -i '74s/.*/ queries = ["huixiangdou 是什么?", "茴香豆怎么部署到微信群", "你知道小米SU7吗?"]/' /root/huixiangdou/huixiangdou/main.py
# 运行茴香豆
cd /root/huixiangdou/
python3 -m huixiangdou.main --standalone
回答:
忽略不相关问题: