Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
J
jinchat-server
概览
概览
详情
活动
周期分析
版本库
存储库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
aigc-pioneer
jinchat-server
Commits
7d32a890
提交
7d32a890
authored
5月 10, 2023
作者:
fxjhello
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'dev' of
https://github.com/imClumsyPanda/langchain-ChatGLM
into dev
上级
8612b344
b06b711c
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
102 行增加
和
71 行删除
+102
-71
langchain-ChatGLM_README.md
content/langchain-ChatGLM_README.md
+102
-71
没有找到文件。
content/langchain-ChatGLM_README.md
浏览文件 @
7d32a890
...
...
@@ -4,42 +4,34 @@
🌍
[
_READ THIS IN ENGLISH_
](
README_en.md
)
🤖️ 一种利用
[
ChatGLM-6B
](
https://github.com/THUDM/ChatGLM-6B
)
+
[
langchain
](
https://github.com/hwchase17/langchain
)
实现的基于本地知识的 ChatGLM 应用。
🤖️ 一种利用
[
ChatGLM-6B
](
https://github.com/THUDM/ChatGLM-6B
)
+
[
langchain
](
https://github.com/hwchase17/langchain
)
实现的基于本地知识的 ChatGLM 应用。
增加
[
clue-ai/ChatYuan
](
https://github.com/clue-ai/ChatYuan
)
项目的模型
[
ClueAI/ChatYuan-large-v2
](
https://huggingface.co/ClueAI/ChatYuan-large-v2
)
的支持。
💡 受
[
GanymedeNil
](
https://github.com/GanymedeNil
)
的项目
[
document.ai
](
https://github.com/GanymedeNil/document.ai
)
和
[
AlexZhangji
](
https://github.com/AlexZhangji
)
创建的
[
ChatGLM-6B Pull Request
](
https://github.com/THUDM/ChatGLM-6B/pull/216
)
启发,建立了全部基于开源模型实现的本地知识问答应用。
✅ 本项目中 Embedding
选用的是
[
GanymedeNil/text2vec-large-chinese
](
https://huggingface.co/GanymedeNil/text2vec-large-chinese/tree/main
)
,LLM
选用的是
[
ChatGLM-6B
](
https://github.com/THUDM/ChatGLM-6B
)
。依托上述模型,本项目可实现全部使用
**开源**
模型
**离线私有部署**
。
✅ 本项目中 Embedding
默认选用的是
[
GanymedeNil/text2vec-large-chinese
](
https://huggingface.co/GanymedeNil/text2vec-large-chinese/tree/main
)
,LLM 默认
选用的是
[
ChatGLM-6B
](
https://github.com/THUDM/ChatGLM-6B
)
。依托上述模型,本项目可实现全部使用
**开源**
模型
**离线私有部署**
。
⛓️ 本项目实现原理如下图所示,过程包括加载文件 -> 读取文本 -> 文本分割 -> 文本向量化 -> 问句向量化 -> 在文本向量中匹配出与问句向量最相似的
`top k`
个 -> 匹配出的文本作为上下文和问题一起添加到
`prompt`
中 -> 提交给
`LLM`
生成回答。
![
实现原理图
](
img/langchain+chatglm.png
)
从文档处理角度来看,实现流程如下:
![
实现原理图2
](
img/langchain+chatglm2.png
)
🚩 本项目未涉及微调、训练过程,但可利用微调或训练对本项目效果进行优化。
## 更新信息
🌐
[
AutoDL 镜像
](
https://www.codewithgpu.com/i/imClumsyPanda/langchain-ChatGLM/langchain-ChatGLM
)
**[2023/04/07]**
1.
解决加载 ChatGLM 模型时发生显存占用为双倍的问题 (感谢
[
@suc16
](
https://github.com/suc16
)
和
[
@myml
](
https://github.com/myml
)
) ;
2.
新增清理显存机制;
3.
新增
`nghuyong/ernie-3.0-nano-zh`
和
`nghuyong/ernie-3.0-base-zh`
作为 Embedding 模型备选项,相比
`GanymedeNil/text2vec-large-chinese`
占用显存资源更少 (感谢
[
@lastrei
](
https://github.com/lastrei
)
)。
📓
[
ModelWhale 在线运行项目
](
https://www.heywhale.com/mw/project/643977aa446c45f4592a1e59
)
**[2023/04/09]**
1.
使用
`langchain`
中的
`RetrievalQA`
替代之前选用的
`ChatVectorDBChain`
,替换后可以有效减少提问 2-3 次后因显存不足而停止运行的问题;
2.
在
`knowledge_based_chatglm.py`
中增加
`EMBEDDING_MODEL`
、
`VECTOR_SEARCH_TOP_K`
、
`LLM_MODEL`
、
`LLM_HISTORY_LEN`
、
`REPLY_WITH_SOURCE`
参数值设置;
3.
增加 GPU 显存需求更小的
`chatglm-6b-int4`
、
`chatglm-6b-int4-qe`
作为 LLM 模型备选项;
4.
更正
`README.md`
中的代码错误(感谢
[
@calcitem
](
https://github.com/calcitem
)
)。
## 变更日志
**[2023/04/11]**
1.
加入 Web UI V0.1 版本(感谢
[
@liangtongt
](
https://github.com/liangtongt
)
);
2.
`README.md`
中增加常见问题(感谢
[
@calcitem
](
https://github.com/calcitem
)
);
3.
增加 LLM 和 Embedding 模型运行设备是否可用
`cuda`
、
`mps`
、
`cpu`
的自动判断。
4.
在
`knowledge_based_chatglm.py`
中增加对
`filepath`
的判断,在之前支持单个文件导入的基础上,现支持单个文件夹路径作为输入,输入后将会遍历文件夹中各个文件,并在命令行中显示每个文件是否成功加载。
参见
[
变更日志
](
docs/CHANGELOG.md
)
。
##
使用方式
##
硬件需求
### 硬件需求
-
ChatGLM-6B 模型硬件需求
|
**量化等级**
|
**最低 GPU 显存**
(推理) |
**最低 GPU 显存**
(高效参数微调) |
| -------------- | ------------------------- | --------------------------------- |
| FP16(无量化) | 13 GB | 14 GB |
...
...
@@ -49,63 +41,83 @@
-
Embedding 模型硬件需求
本项目中默认选用的 Embedding 模型 [GanymedeNil/text2vec-large-chinese](https://huggingface.co/GanymedeNil/text2vec-large-chinese/tree/main) 约占用显存 3GB,也可修改为在 CPU 中运行。
### 软件需求
本项目已在 python 3.8 环境下完成测试。
### 1. 安装 python 依赖包
```
commandline
pip install -r requirements.txt
```
注:使用 langchain.document_loaders.UnstructuredFileLoader 进行非结构化文件接入时,可能需要依据文档进行其他依赖包的安装,请参考
[
langchain 文档
](
https://python.langchain.com/en/latest/modules/indexes/document_loaders/examples/unstructured_file.html
)
### 2. 执行脚本体验 Web UI 或命令行交互
执行
[
webui.py
](
webui.py
)
脚本体验
**Web 交互**
<img
src=
"https://img.shields.io/badge/Version-0.1-brightgreen"
>
```
commandline
python webui.py
## Docker 部署
为了能让容器使用主机GPU资源,需要在主机上安装
[
NVIDIA Container Toolkit
](
https://github.com/NVIDIA/nvidia-container-toolkit
)
。具体安装步骤如下:
```
shell
sudo
apt-get update
sudo
apt-get install
-y
nvidia-container-toolkit-base
sudo
systemctl daemon-reload
sudo
systemctl restart docker
```
执行后效果如下图所示:
![
webui
](
img/ui1.png
)
Web UI 中提供的 API 接口如下图所示:
![
webui
](
img/ui2.png
)
Web UI 可以实现如下功能:
1.
自动读取
`knowledge_based_chatglm.py`
中
`LLM`
及
`embedding`
模型枚举,选择后点击
`setting`
进行模型加载,可随时切换模型进行测试
2.
可手动调节保留对话历史长度,可根据显存大小自行调节
3.
添加上传文件功能,通过下拉框选择已上传的文件,点击
`loading`
加载文件,过程中可随时更换加载的文件
4.
底部添加
`use via API`
可对接到自己系统
或执行
[
knowledge_based_chatglm.py
](
knowledge_based_chatglm.py
)
脚本体验
**命令行交互**
```
commandline
python knowledge_based_chatglm.py
安装完成后,可以使用以下命令编译镜像和启动容器:
```
docker build -f Dockerfile-cuda -t chatglm-cuda:latest .
docker run --gpus all -d --name chatglm -p 7860:7860 chatglm-cuda:latest
#若要使用离线模型,请配置好模型路径,然后此repo挂载到Container
docker run --gpus all -d --name chatglm -p 7860:7860 -v ~/github/langchain-ChatGLM:/chatGLM chatglm-cuda:latest
```
### 常见问题
Q: 本项目支持哪些文件格式?
## 开发部署
### 软件需求
本项目已在 Python 3.8 - 3.10,CUDA 11.7 环境下完成测试。已在 Windows、ARM 架构的 macOS、Linux 系统中完成测试。
### 从本地加载模型
请参考
[
THUDM/ChatGLM-6B#从本地加载模型
](
https://github.com/THUDM/ChatGLM-6B#从本地加载模型
)
A: 目前已测试支持 txt、docx、md 格式文件,更多文件格式请参考
[
langchain 文档
](
https://python.langchain.com/en/latest/modules/indexes/document_loaders/examples/unstructured_file.html
)
。目前已知文档中若含有特殊字符,可能存在文件无法加载的问题。
### 1. 安装环境
Q: 读取特定格式文件时遇到缺少
`detectron2`
时如何解决?
参见
[
安装指南
](
docs/INSTALL.md
)
。
A: 因该包安装过程中遇到问题较多,且仅部分格式文件需要,所以未加入
`requirements.txt`
。可以通过一下命令安装
### 2. 设置模型默认参数
```
commandline
pip install "detectron2@git+https://github.com/facebookresearch/detectron2.git@v0.6#egg=detectron2"
在开始执行 Web UI 或命令行交互前,请先检查
[
configs/model_config.py
](
configs/model_config.py
)
中的各项模型参数设计是否符合需求。
### 3. 执行脚本体验 Web UI 或命令行交互
> 注:鉴于环境部署过程中可能遇到问题,建议首先测试命令行脚本。建议命令行脚本测试可正常运行后再运行 Web UI。
执行
[
cli_demo.py
](
cli_demo.py
)
脚本体验
**命令行交互**
:
```
shell
$
python cli_demo.py
```
Q:
`Resource punkt not found.`
如何解决?
或执行
[
webui.py
](
webui.py
)
脚本体验
**Web 交互**
A: https://github.com/nltk/nltk_data/raw/gh-pages/packages/tokenizers/punkt.zip 中的
`packages/tokenizers`
解压,放到
`Searched in:`
对应目录下。
```
shell
$
python webui.py
```
Q:
`Resource averaged_perceptron_tagger not found.`
如何解决?
或执行
[
api.py
](
api.py
)
利用 fastapi 部署 API
```
shell
$
python api.py
```
A: 将 https://github.com/nltk/nltk_data/blob/gh-pages/packages/taggers/averaged_perceptron_tagger.zip 下载,解压放到
`Searched in:`
对应目录下。
Q: 本项目可否在 colab 中运行?
注:如未将模型下载至本地,请执行前检查
`$HOME/.cache/huggingface/`
文件夹剩余空间,至少15G。
A: 可以尝试使用 chatglm-6b-int4 模型在 colab 中运行,需要注意的是,如需在 colab 中运行 Web UI,需将
`webui.py`
中
`demo.queue(concurrency_count=3).launch(
server_name='0.0.0.0', share=False, inbrowser=False)`
中参数
`share`
设置为
`True`
。
## DEMO
执行后效果如下图所示:
![
webui
](
img/webui_0419.png
)
Web UI 可以实现如下功能:
以问题
`chatglm-6b 的局限性具体体现在哪里,如何实现改进`
为例
1.
运行前自动读取
`configs/model_config.py`
中
`LLM`
及
`Embedding`
模型枚举及默认模型设置运行模型,如需重新加载模型,可在
`模型配置`
标签页重新选择后点击
`重新加载模型`
进行模型加载;
2.
可手动调节保留对话历史长度、匹配知识库文段数量,可根据显存大小自行调节;
3.
具备模式选择功能,可选择
`LLM对话`
与
`知识库问答`
模式进行对话,支持流式对话;
4.
添加
`配置知识库`
功能,支持选择已有知识库或新建知识库,并可向知识库中
**新增**
上传文件/文件夹,使用文件上传组件选择好文件后点击
`上传文件并加载知识库`
,会将所选上传文档数据加载至知识库中,并基于更新后知识库进行问答;
5.
后续版本中将会增加对知识库的修改或删除,及知识库中已导入文件的查看。
### 常见问题
参见
[
常见问题
](
docs/FAQ.md
)
。
## Demo
以问题
`chatglm-6b 的局限性具体体现在哪里,如何实现改进`
为例:
未使用 langchain 接入本地文档时:
...
...
@@ -134,19 +146,38 @@ A: 可以尝试使用 chatglm-6b-int4 模型在 colab 中运行,需要注意
>5. 改进模型架构:可以改进 ChatGLM-6B 的模型架构,提高模型的性能和表现。例如,可以使用更大的神经网络或者改进的卷积神经网络结构。
## 路线图
-
[
x
]
实现 langchain + ChatGLM-6B 本地知识应用
-
[
x
]
基于 langchain 实现非结构化文件接入
-
[
]
基于 langchain 实现更多类型本地知识文件接入
-
[
]
增加 Web UI DEMO
-
[
]
Langchain 应用
-
[
x
]
接入非结构化文档(已支持 md、pdf、docx、txt 文件格式)
-
[
]
搜索引擎与本地网页接入
-
[
]
结构化数据接入(如 csv、Excel、SQL 等)
-
[
]
知识图谱/图数据库接入
-
[
]
Agent 实现
-
[
]
增加更多 LLM 模型支持
-
[
x
]
[
THUDM/chatglm-6b
]
(https://huggingface.co/THUDM/chatglm-6b)
-
[
x
]
[
THUDM/chatglm-6b-int8
]
(https://huggingface.co/THUDM/chatglm-6b-int8)
-
[
x
]
[
THUDM/chatglm-6b-int4
]
(https://huggingface.co/THUDM/chatglm-6b-int4)
-
[
x
]
[
THUDM/chatglm-6b-int4-qe
]
(https://huggingface.co/THUDM/chatglm-6b-int4-qe)
-
[
x
]
[
ClueAI/ChatYuan-large-v2
]
(https://huggingface.co/ClueAI/ChatYuan-large-v2)
-
[
]
增加更多 Embedding 模型支持
-
[
x
]
[
nghuyong/ernie-3.0-nano-zh
]
(https://huggingface.co/nghuyong/ernie-3.0-nano-zh)
-
[
x
]
[
nghuyong/ernie-3.0-base-zh
]
(https://huggingface.co/nghuyong/ernie-3.0-base-zh)
-
[
x
]
[
shibing624/text2vec-base-chinese
]
(https://huggingface.co/shibing624/text2vec-base-chinese)
-
[
x
]
[
GanymedeNil/text2vec-large-chinese
]
(https://huggingface.co/GanymedeNil/text2vec-large-chinese)
-
[
]
Web UI
-
[
x
]
利用 gradio 实现 Web UI DEMO
-
[
]
添加模型加载进度条
-
[
]
添加输出内容及错误提示
-
[
]
国际化语言切换
-
[
]
引用标注
-
[
]
添加插件系统(可基础lora训练等)
-
[
]
利用 fastapi 实现 API 部署方式,并实现调用 API 的 web ui DEMO
-
[
x
]
添加输出内容及错误提示
-
[
x
]
引用标注
-
[
]
增加知识库管理
-
[
x
]
选择知识库开始问答
-
[
x
]
上传文件/文件夹至知识库
-
[
]
删除知识库中文件
-
[
]
利用 streamlit 实现 Web UI Demo
-
[
]
增加 API 支持
-
[
x
]
利用 fastapi 实现 API 部署方式
-
[
]
实现调用 API 的 Web UI Demo
## 项目交流群
![
二维码
](
img/qr_code.jpg
)
![
二维码
](
img/qr_code
_14
.jpg
)
🎉 langchain-ChatGLM 项目交流群,如果你也对本项目感兴趣,欢迎加入群聊参与讨论交流。
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论