一种利用 langchain 思想实现的基于本地知识库的问答应用,目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。
依托于本项目支持的开源 LLM 与 Embedding 模型,本项目可实现全部使用开源模型离线私有部署。与此同时,本项目也支持 OpenAI GPT API 的调用,并将在后续持续扩充对各类模型及模型 API 的接入。
本项目实现原理:过程包括加载文件 -> 读取文本 -> 文本分割 -> 文本向量化 -> 问句向量化 -> 在文本向量中匹配出与问句向量最相似的 top k
个 -> 匹配出的文本作为上下文和问题一起添加到 prompt
中 -> 提交给 LLM
生成回答。
微调、本地知识库和 prompt 是LMM模型调整和优化中的重要概念,它们之间有一定的关系和区别。
- 微调(Finetuning)是一种让预先训练好的模型适应特定任务或数据集的低成本方案。
- 本地知识库(Local Knowledge Base)是一种存储行业特定信息的数据库,它可以为LMM模型提供实时、动态的知识补充。
- Prompt 是一种用于引导模型生成特定类型回答的输入提示。
1. 环境配置
推荐python版本为3.11,使用conda实现
conda create -n langchain python=3.11.7
conda activate langchain
安装项目的依赖
# 拉取仓库
$ git clone https://github.com/chatchat-space/Langchain-Chatchat.git
# 进入目录
$ cd Langchain-Chatchat
# 安装全部依赖
$ pip install -r requirements.txt
$ pip install -r requirements_api.txt
$ pip install -r requirements_webui.txt
# 默认依赖包括基本运行环境(FAISS向量库)。如果要使用 milvus/pg_vector 等向量库,请将 requirements.txt 中相应依赖取消注释再安装。
2.模型下载
如需在本地或离线环境下运行本项目,需要首先将项目所需的模型下载至本地,通常开源 LLM 与 Embedding 模型可以从 HuggingFace 下载。
git lfs install
# 开源 LLM模型
git clone https://huggingface.co/THUDM/chatglm3-6b(下载太慢,选择modelscope下载)
git clone https://www.modelscope.cn/ZhipuAI/chatglm3-6b.git
# Embedding 模型
git clone https://huggingface.co/BAAI/bge-large-zh(下载太慢