Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
J
jinchat-server
概览
概览
详情
活动
周期分析
版本库
存储库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
aigc-pioneer
jinchat-server
Commits
6e232530
提交
6e232530
authored
5月 13, 2023
作者:
imClumsyPanda
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update pdf_loader.py and image_loader.py
上级
bbb1c070
显示空白字符变更
内嵌
并排
正在显示
9 个修改的文件
包含
62 行增加
和
37 行删除
+62
-37
.gitignore
.gitignore
+2
-0
README.md
content/samples/README.md
+35
-6
test.jpg
content/samples/test.jpg
+0
-0
test.pdf
content/samples/test.pdf
+0
-0
test.txt
content/samples/test.txt
+0
-0
image_loader.py
loader/image_loader.py
+12
-3
pdf_loader.py
loader/pdf_loader.py
+13
-4
test_image.py
test_image.py
+0
-12
test_pdf.py
test_pdf.py
+0
-12
没有找到文件。
.gitignore
浏览文件 @
6e232530
...
@@ -172,3 +172,4 @@ llm/*
...
@@ -172,3 +172,4 @@ llm/*
embedding/*
embedding/*
pyrightconfig.json
pyrightconfig.json
loader/tmp_files
\ No newline at end of file
content/
langchain-ChatGLM_
README.md
→
content/
samples/
README.md
浏览文件 @
6e232530
...
@@ -32,12 +32,27 @@
...
@@ -32,12 +32,27 @@
-
ChatGLM-6B 模型硬件需求
-
ChatGLM-6B 模型硬件需求
注:如未将模型下载至本地,请执行前检查`$HOME/.cache/huggingface/`文件夹剩余空间,模型文件下载至本地需要 15 GB 存储空间。
模型下载方法可参考 [常见问题](docs/FAQ.md) 中 Q8。
|
**量化等级**
|
**最低 GPU 显存**
(推理) |
**最低 GPU 显存**
(高效参数微调) |
|
**量化等级**
|
**最低 GPU 显存**
(推理) |
**最低 GPU 显存**
(高效参数微调) |
| -------------- | ------------------------- | --------------------------------- |
| -------------- | ------------------------- | --------------------------------- |
| FP16(无量化) | 13 GB | 14 GB |
| FP16(无量化) | 13 GB | 14 GB |
| INT8 | 8 GB | 9 GB |
| INT8 | 8 GB | 9 GB |
| INT4 | 6 GB | 7 GB |
| INT4 | 6 GB | 7 GB |
-
MOSS 模型硬件需求
注:如未将模型下载至本地,请执行前检查
`$HOME/.cache/huggingface/`
文件夹剩余空间,模型文件下载至本地需要 70 GB 存储空间
模型下载方法可参考 [常见问题](docs/FAQ.md) 中 Q8。
| **量化等级** | **最低 GPU 显存**(推理) | **最低 GPU 显存**(高效参数微调) |
|-------------------|-----------------------| --------------------------------- |
| FP16(无量化) | 68 GB | - |
| INT8 | 20 GB | - |
-
Embedding 模型硬件需求
-
Embedding 模型硬件需求
本项目中默认选用的 Embedding 模型 [GanymedeNil/text2vec-large-chinese](https://huggingface.co/GanymedeNil/text2vec-large-chinese/tree/main) 约占用显存 3GB,也可修改为在 CPU 中运行。
本项目中默认选用的 Embedding 模型 [GanymedeNil/text2vec-large-chinese](https://huggingface.co/GanymedeNil/text2vec-large-chinese/tree/main) 约占用显存 3GB,也可修改为在 CPU 中运行。
...
@@ -66,6 +81,7 @@ docker run --gpus all -d --name chatglm -p 7860:7860 -v ~/github/langchain-ChatG
...
@@ -66,6 +81,7 @@ docker run --gpus all -d --name chatglm -p 7860:7860 -v ~/github/langchain-ChatG
本项目已在 Python 3.8 - 3.10,CUDA 11.7 环境下完成测试。已在 Windows、ARM 架构的 macOS、Linux 系统中完成测试。
本项目已在 Python 3.8 - 3.10,CUDA 11.7 环境下完成测试。已在 Windows、ARM 架构的 macOS、Linux 系统中完成测试。
vue前端需要node18环境
### 从本地加载模型
### 从本地加载模型
请参考
[
THUDM/ChatGLM-6B#从本地加载模型
](
https://github.com/THUDM/ChatGLM-6B#从本地加载模型
)
请参考
[
THUDM/ChatGLM-6B#从本地加载模型
](
https://github.com/THUDM/ChatGLM-6B#从本地加载模型
)
...
@@ -97,19 +113,31 @@ $ python webui.py
...
@@ -97,19 +113,31 @@ $ python webui.py
```
shell
```
shell
$
python api.py
$
python api.py
```
```
或成功部署 API 后,执行以下脚本体验基于 VUE 的前端页面
```
shell
$
cd
views
$
pnpm i
注:如未将模型下载至本地,请执行前检查
`$HOME/.cache/huggingface/`
文件夹剩余空间,至少15G。
$
npm run dev
```
执行后效果如下图所示:
执行后效果如下图所示:
![
webui
](
img/webui_0419.png
)
1.
`对话`
Tab 界面
!
[
](img/webui_0510_0.png)
2.
`知识库测试 Beta`
Tab 界面
!
[
](img/webui_0510_1.png)
3.
`模型配置`
Tab 界面
!
[
](img/webui_0510_2.png)
Web UI 可以实现如下功能:
Web UI 可以实现如下功能:
1.
运行前自动读取
`configs/model_config.py`
中
`LLM`
及
`Embedding`
模型枚举及默认模型设置运行模型,如需重新加载模型,可在
`模型配置`
标签页
重新选择后点击
`重新加载模型`
进行模型加载;
1.
运行前自动读取
`configs/model_config.py`
中
`LLM`
及
`Embedding`
模型枚举及默认模型设置运行模型,如需重新加载模型,可在
`模型配置`
Tab
重新选择后点击
`重新加载模型`
进行模型加载;
2.
可手动调节保留对话历史长度、匹配知识库文段数量,可根据显存大小自行调节;
2.
可手动调节保留对话历史长度、匹配知识库文段数量,可根据显存大小自行调节;
3.
具备模式选择功能,可选择
`LLM对话`
与
`知识库问答`
模式进行对话,支持流式对话;
3.
`对话`
Tab
具备模式选择功能,可选择
`LLM对话`
与
`知识库问答`
模式进行对话,支持流式对话;
4.
添加
`配置知识库`
功能,支持选择已有知识库或新建知识库,并可向知识库中
**新增**
上传文件/文件夹,使用文件上传组件选择好文件后点击
`上传文件并加载知识库`
,会将所选上传文档数据加载至知识库中,并基于更新后知识库进行问答;
4.
添加
`配置知识库`
功能,支持选择已有知识库或新建知识库,并可向知识库中
**新增**
上传文件/文件夹,使用文件上传组件选择好文件后点击
`上传文件并加载知识库`
,会将所选上传文档数据加载至知识库中,并基于更新后知识库进行问答;
5.
后续版本中将会增加对知识库的修改或删除,及知识库中已导入文件的查看。
5.
新增
`知识库测试 Beta`
Tab,可用于测试不同文本切分方法与检索相关度阈值设置,暂不支持将测试参数作为
`对话`
Tab 设置参数。
6.
后续版本中将会增加对知识库的修改或删除,及知识库中已导入文件的查看。
### 常见问题
### 常见问题
...
@@ -159,6 +187,7 @@ Web UI 可以实现如下功能:
...
@@ -159,6 +187,7 @@ Web UI 可以实现如下功能:
-
[
x
]
[
THUDM/chatglm-6b-int4
]
(https://huggingface.co/THUDM/chatglm-6b-int4)
-
[
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
]
[
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)
-
[
x
]
[
ClueAI/ChatYuan-large-v2
]
(https://huggingface.co/ClueAI/ChatYuan-large-v2)
-
[
x
]
[
fnlp/moss-moon-003-sft
]
(https://huggingface.co/fnlp/moss-moon-003-sft)
-
[
]
增加更多 Embedding 模型支持
-
[
]
增加更多 Embedding 模型支持
-
[
x
]
[
nghuyong/ernie-3.0-nano-zh
]
(https://huggingface.co/nghuyong/ernie-3.0-nano-zh)
-
[
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
]
[
nghuyong/ernie-3.0-base-zh
]
(https://huggingface.co/nghuyong/ernie-3.0-base-zh)
...
@@ -178,6 +207,6 @@ Web UI 可以实现如下功能:
...
@@ -178,6 +207,6 @@ Web UI 可以实现如下功能:
-
[
]
实现调用 API 的 Web UI Demo
-
[
]
实现调用 API 的 Web UI Demo
## 项目交流群
## 项目交流群
![
二维码
](
img/qr_code_1
4
.jpg
)
![
二维码
](
img/qr_code_1
7
.jpg
)
🎉 langchain-ChatGLM 项目交流群,如果你也对本项目感兴趣,欢迎加入群聊参与讨论交流。
🎉 langchain-ChatGLM 项目交流群,如果你也对本项目感兴趣,欢迎加入群聊参与讨论交流。
img
/test.jpg
→
content/samples
/test.jpg
浏览文件 @
6e232530
File moved
doc
s/test.pdf
→
content/sample
s/test.pdf
浏览文件 @
6e232530
File moved
content/test.txt
→
content/
samples/
test.txt
浏览文件 @
6e232530
File moved
loader/image_loader.py
浏览文件 @
6e232530
...
@@ -11,14 +11,15 @@ class UnstructuredPaddleImageLoader(UnstructuredFileLoader):
...
@@ -11,14 +11,15 @@ class UnstructuredPaddleImageLoader(UnstructuredFileLoader):
def
_get_elements
(
self
)
->
List
:
def
_get_elements
(
self
)
->
List
:
def
image_ocr_txt
(
filepath
,
dir_path
=
"tmp_files"
):
def
image_ocr_txt
(
filepath
,
dir_path
=
"tmp_files"
):
if
not
os
.
path
.
exists
(
dir_path
):
full_dir_path
=
os
.
path
.
join
(
filepath
,
dir_path
)
os
.
makedirs
(
dir_path
)
if
not
os
.
path
.
exists
(
full_dir_path
):
os
.
makedirs
(
full_dir_path
)
filename
=
os
.
path
.
split
(
filepath
)[
-
1
]
filename
=
os
.
path
.
split
(
filepath
)[
-
1
]
ocr
=
PaddleOCR
(
lang
=
"ch"
,
use_gpu
=
False
,
show_log
=
False
)
ocr
=
PaddleOCR
(
lang
=
"ch"
,
use_gpu
=
False
,
show_log
=
False
)
result
=
ocr
.
ocr
(
img
=
filepath
)
result
=
ocr
.
ocr
(
img
=
filepath
)
ocr_result
=
[
i
[
1
][
0
]
for
line
in
result
for
i
in
line
]
ocr_result
=
[
i
[
1
][
0
]
for
line
in
result
for
i
in
line
]
txt_file_path
=
os
.
path
.
join
(
dir_path
,
"
%
s.txt"
%
(
filename
))
txt_file_path
=
os
.
path
.
join
(
full_
dir_path
,
"
%
s.txt"
%
(
filename
))
with
open
(
txt_file_path
,
'w'
,
encoding
=
'utf-8'
)
as
fout
:
with
open
(
txt_file_path
,
'w'
,
encoding
=
'utf-8'
)
as
fout
:
fout
.
write
(
"
\n
"
.
join
(
ocr_result
))
fout
.
write
(
"
\n
"
.
join
(
ocr_result
))
return
txt_file_path
return
txt_file_path
...
@@ -26,3 +27,11 @@ class UnstructuredPaddleImageLoader(UnstructuredFileLoader):
...
@@ -26,3 +27,11 @@ class UnstructuredPaddleImageLoader(UnstructuredFileLoader):
txt_file_path
=
image_ocr_txt
(
self
.
file_path
)
txt_file_path
=
image_ocr_txt
(
self
.
file_path
)
from
unstructured.partition.text
import
partition_text
from
unstructured.partition.text
import
partition_text
return
partition_text
(
filename
=
txt_file_path
,
**
self
.
unstructured_kwargs
)
return
partition_text
(
filename
=
txt_file_path
,
**
self
.
unstructured_kwargs
)
if
__name__
==
"__main__"
:
filepath
=
"../content/samples/test.jpg"
loader
=
UnstructuredPaddleImageLoader
(
filepath
,
mode
=
"elements"
)
docs
=
loader
.
load
()
for
doc
in
docs
:
print
(
doc
)
loader/pdf_loader.py
浏览文件 @
6e232530
...
@@ -12,13 +12,14 @@ class UnstructuredPaddlePDFLoader(UnstructuredFileLoader):
...
@@ -12,13 +12,14 @@ class UnstructuredPaddlePDFLoader(UnstructuredFileLoader):
def
_get_elements
(
self
)
->
List
:
def
_get_elements
(
self
)
->
List
:
def
pdf_ocr_txt
(
filepath
,
dir_path
=
"tmp_files"
):
def
pdf_ocr_txt
(
filepath
,
dir_path
=
"tmp_files"
):
if
not
os
.
path
.
exists
(
dir_path
):
full_dir_path
=
os
.
path
.
join
(
filepath
,
dir_path
)
os
.
makedirs
(
dir_path
)
if
not
os
.
path
.
exists
(
full_dir_path
):
os
.
makedirs
(
full_dir_path
)
filename
=
os
.
path
.
split
(
filepath
)[
-
1
]
filename
=
os
.
path
.
split
(
filepath
)[
-
1
]
ocr
=
PaddleOCR
(
lang
=
"ch"
,
use_gpu
=
False
,
show_log
=
False
)
ocr
=
PaddleOCR
(
lang
=
"ch"
,
use_gpu
=
False
,
show_log
=
False
)
doc
=
fitz
.
open
(
filepath
)
doc
=
fitz
.
open
(
filepath
)
txt_file_path
=
os
.
path
.
join
(
dir_path
,
"
%
s.txt"
%
(
filename
))
txt_file_path
=
os
.
path
.
join
(
full_
dir_path
,
"
%
s.txt"
%
(
filename
))
img_name
=
'./img/.tmp.png'
img_name
=
os
.
path
.
join
(
full_dir_path
,
'tmp.png'
)
with
open
(
txt_file_path
,
'w'
,
encoding
=
'utf-8'
)
as
fout
:
with
open
(
txt_file_path
,
'w'
,
encoding
=
'utf-8'
)
as
fout
:
for
i
in
range
(
doc
.
page_count
):
for
i
in
range
(
doc
.
page_count
):
...
@@ -42,3 +43,10 @@ class UnstructuredPaddlePDFLoader(UnstructuredFileLoader):
...
@@ -42,3 +43,10 @@ class UnstructuredPaddlePDFLoader(UnstructuredFileLoader):
txt_file_path
=
pdf_ocr_txt
(
self
.
file_path
)
txt_file_path
=
pdf_ocr_txt
(
self
.
file_path
)
from
unstructured.partition.text
import
partition_text
from
unstructured.partition.text
import
partition_text
return
partition_text
(
filename
=
txt_file_path
,
**
self
.
unstructured_kwargs
)
return
partition_text
(
filename
=
txt_file_path
,
**
self
.
unstructured_kwargs
)
if
__name__
==
"__main__"
:
filepath
=
"../content/samples/test.pdf"
loader
=
UnstructuredPaddlePDFLoader
(
filepath
,
mode
=
"elements"
)
docs
=
loader
.
load
()
for
doc
in
docs
:
print
(
doc
)
\ No newline at end of file
test_image.py
deleted
100644 → 0
浏览文件 @
bbb1c070
from
configs.model_config
import
*
import
nltk
nltk
.
data
.
path
=
[
NLTK_DATA_PATH
]
+
nltk
.
data
.
path
filepath
=
"./img/test.jpg"
from
loader
import
UnstructuredPaddleImageLoader
loader
=
UnstructuredPaddleImageLoader
(
filepath
,
mode
=
"elements"
)
docs
=
loader
.
load
()
for
doc
in
docs
:
print
(
doc
)
test_pdf.py
deleted
100644 → 0
浏览文件 @
bbb1c070
from
configs.model_config
import
*
import
nltk
nltk
.
data
.
path
=
[
NLTK_DATA_PATH
]
+
nltk
.
data
.
path
filepath
=
"docs/test.pdf"
from
loader
import
UnstructuredPaddlePDFLoader
loader
=
UnstructuredPaddlePDFLoader
(
filepath
,
mode
=
"elements"
)
docs
=
loader
.
load
()
for
doc
in
docs
:
print
(
doc
)
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论