一、效果预览
最终展示效果支持用户选择是否开启检索增强功能。在使用检索增强调用(RAG)之后,大模型能根据检索到的上下文进行回答,有效减少幻觉问题。

二、环境搭建
本项目在 Python 3.8.5 版本进行实测,过低的版本可能导致 LangChain 出现兼容性问题。可以使用以下命令安装所需的依赖项。如果因网络问题导致本地安装失败,建议尝试使用清华源。
pip install flask chromadb gradio fastapi langchain FlagEmbedding
# 可选:使用清华源下载依赖包
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple flask
FlagEmbedding 是一个向量模型的依赖包,直接安装后会自动安装 PyTorch、Transformer 等一系列依赖,整体执行时间较长,请耐心等待。
FlagEmbedding 默认安装的是 CPU 版本的 PyTorch,执行代码的时间相对较长。如果有条件,建议先安装 GPU 版本的 PyTorch,然后再安装 FlagEmbedding。GPU 显存在 4G 以上通常都可以正常调用。
三、数据配置
1. 知识库建立
可以使用自己的任意数据集作为知识库,将数据保存成 txt 文件即可。示例数据已包含在项目中,可以参考示例数据进行定义,文件要求使用 UTF-8 编码。
2. 向量模型下载
FlagEmbedding 对应的向量模型是 BGE,目前是效果较好的中文向量模型。原始模型权重需要在 Hugging Face 上下载,需要特定的网络环境。非专业人员可以直接使用预下载的权重模型。
如果想自己下载,需要先安装 Git LFS,然后执行以下命令下载整个模型的权重及相关配置文件。下载完成后,将模型文件夹存放到指定目录。
git lfs install
git clone https://huggingface.co/BAAI/bge-large-zh
四、大模型配置
为了调用方便,我们使用了讯飞星火的 API 作为本次的大模型。在讯飞的官方页面可以申请免费的 Token,足够日常使用和测试。
我们这次只需要使用 2.0 版本的 API 就可以。申请之后可以看到接口服务认证的信息,需要记录下来,后续需要将此处修改为自己的信息。这三个信息是 APPID、APISecret 和 APIKey。

五、代码实现
整个项目的代码结构主要有四个 Python 文件和一个图片构成。下面介绍各个文件的作用以及需要修改的内容。
SparkApi:讯飞星火的 API 调用代码,无需修改SparkGPT:讯飞星火的包装类,需要修改prompt_utils:提示词的包装类,无需修改gradio_demo:主界面的入口,需要修改里面的路径GPT4.png:主界面上 GPT 头像的资源图片,无需修改
1. SparkGPT.py 修改
在 SparkGPT.py 代码中,需要将第 7-9 行的内容进行修改,将你在讯飞星火的控制台中获取的信息填写上去。


