From f23b806a7e412d27c8e64b826dd0c261b5a5ad32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=98=8E=E6=AC=A3?= <96062212+ymx10086@users.noreply.github.com> Date: Sat, 23 Sep 2023 01:39:17 +0800 Subject: [PATCH 1/3] oepkgs-talk-robot --- doc/oepkgs-talk-robot-README.md | 123 + ...6\350\256\241\346\226\207\346\241\243.pdf" | Bin 0 -> 911809 bytes tools/oepkgs-talk-robot/.gitignore | 170 + tools/oepkgs-talk-robot/CONTRIBUTING.md | 22 + tools/oepkgs-talk-robot/Dockerfile | 36 + tools/oepkgs-talk-robot/Dockerfile-cuda | 13 + tools/oepkgs-talk-robot/LICENSE | 201 + tools/oepkgs-talk-robot/README.md | 123 + tools/oepkgs-talk-robot/agent/__init__.py | 1 + .../oepkgs-talk-robot/chains/local_doc_qa.py | 237 + .../chains/modules/embeddings.py | 34 + .../chains/modules/vectorstores.py | 121 + tools/oepkgs-talk-robot/chains/text_load.py | 52 + tools/oepkgs-talk-robot/cli_demo.py | 43 + .../oepkgs-talk-robot/configs/model_config.py | 45 + .../content/langchain-ChatGLM_README.md | 152 + ...06\346\224\257\347\256\241\347\220\206.md" | 51 + ...72\344\273\223\346\265\201\347\250\213.md" | 216 + tools/oepkgs-talk-robot/content/test.txt | 835 + .../content/\344\270\212\344\274\240.md" | 5 + .../content/\344\270\252\344\272\272.md" | 22 + .../content/\345\210\235\345\247\213.md" | 71 + ...46\347\273\206\346\214\207\345\257\274.md" | 150 + .../content/\346\200\273\344\273\223.md" | 123 + .../content/\346\265\213\350\257\225.md" | 17 + .../content/\347\274\226\350\257\221.md" | 23 + .../content/\350\203\214\346\231\257.md" | 3 + tools/oepkgs-talk-robot/docs/CHANGELOG.md | 32 + tools/oepkgs-talk-robot/docs/FAQ.md | 121 + tools/oepkgs-talk-robot/docs/INSTALL.md | 32 + ...stalling-Packages-Using-pip-in-Anaconda.md | 114 + ...40\346\225\210\351\227\256\351\242\230.md" | 125 + .../img/langchain+chatglm.png | Bin 0 -> 1120970 bytes tools/oepkgs-talk-robot/img/qr_code_9.jpg | Bin 0 -> 280475 bytes tools/oepkgs-talk-robot/img/webui_0419.png | Bin 0 -> 922131 bytes tools/oepkgs-talk-robot/img/wps5359.tmp.jpg | Bin 0 -> 54910 bytes tools/oepkgs-talk-robot/img/wps535A.tmp.jpg | Bin 0 -> 98109 bytes tools/oepkgs-talk-robot/img/wps535B.tmp.jpg | Bin 0 -> 31949 bytes tools/oepkgs-talk-robot/img/wps535C.tmp.jpg | Bin 0 -> 36425 bytes tools/oepkgs-talk-robot/img/wps535D.tmp.jpg | Bin 0 -> 40424 bytes tools/oepkgs-talk-robot/img/wps535E.tmp.jpg | Bin 0 -> 45855 bytes tools/oepkgs-talk-robot/img/wps535F.tmp.jpg | Bin 0 -> 33221 bytes tools/oepkgs-talk-robot/img/wpsE069.tmp.jpg | Bin 0 -> 41605 bytes .../models/.chatglm_llm.py.swp | Bin 0 -> 12288 bytes tools/oepkgs-talk-robot/models/__init__.py | 2 + tools/oepkgs-talk-robot/models/chatglm_llm.py | 194 + .../nltk_data/corpora/cmudict/README | 76 + .../nltk_data/corpora/cmudict/cmudict | 133737 ++++++++ .../averaged_perceptron_tagger.pickle | Bin 0 -> 6138625 bytes .../nltk_data/tokenizers/punkt/PY3/README | 98 + .../tokenizers/punkt/PY3/czech.pickle | Bin 0 -> 1119050 bytes .../tokenizers/punkt/PY3/danish.pickle | Bin 0 -> 1191710 bytes .../tokenizers/punkt/PY3/dutch.pickle | Bin 0 -> 693759 bytes .../tokenizers/punkt/PY3/english.pickle | Bin 0 -> 406697 bytes .../tokenizers/punkt/PY3/estonian.pickle | Bin 0 -> 1499502 bytes .../tokenizers/punkt/PY3/finnish.pickle | Bin 0 -> 1852226 bytes .../tokenizers/punkt/PY3/french.pickle | Bin 0 -> 553575 bytes .../tokenizers/punkt/PY3/german.pickle | Bin 0 -> 1463575 bytes .../tokenizers/punkt/PY3/greek.pickle | Bin 0 -> 876006 bytes .../tokenizers/punkt/PY3/italian.pickle | Bin 0 -> 615089 bytes .../tokenizers/punkt/PY3/malayalam.pickle | Bin 0 -> 221207 bytes .../tokenizers/punkt/PY3/norwegian.pickle | Bin 0 -> 1181271 bytes .../tokenizers/punkt/PY3/polish.pickle | Bin 0 -> 1738386 bytes .../tokenizers/punkt/PY3/portuguese.pickle | Bin 0 -> 611919 bytes .../tokenizers/punkt/PY3/russian.pickle | Bin 0 -> 33020 bytes .../tokenizers/punkt/PY3/slovene.pickle | Bin 0 -> 734444 bytes .../tokenizers/punkt/PY3/spanish.pickle | Bin 0 -> 562337 bytes .../tokenizers/punkt/PY3/swedish.pickle | Bin 0 -> 979681 bytes .../tokenizers/punkt/PY3/turkish.pickle | Bin 0 -> 1017038 bytes .../nltk_data/tokenizers/punkt/README | 98 + .../nltk_data/tokenizers/punkt/czech.pickle | 159140 ++++++++++ .../nltk_data/tokenizers/punkt/danish.pickle | 162767 ++++++++++ .../nltk_data/tokenizers/punkt/dutch.pickle | 97138 ++++++ .../nltk_data/tokenizers/punkt/english.pickle | 61702 ++++ .../tokenizers/punkt/estonian.pickle | 206369 ++++++++++++ .../nltk_data/tokenizers/punkt/finnish.pickle | 240379 ++++++++++++++ .../nltk_data/tokenizers/punkt/french.pickle | 80529 +++++ .../nltk_data/tokenizers/punkt/german.pickle | 181299 +++++++++++ .../nltk_data/tokenizers/punkt/greek.pickle | 89257 ++++++ .../nltk_data/tokenizers/punkt/italian.pickle | 90202 ++++++ .../tokenizers/punkt/malayalam.pickle | Bin 0 -> 221207 bytes .../tokenizers/punkt/norwegian.pickle | 162978 ++++++++++ .../nltk_data/tokenizers/punkt/polish.pickle | 245172 +++++++++++++++ .../tokenizers/punkt/portuguese.pickle | 90795 ++++++ .../nltk_data/tokenizers/punkt/russian.pickle | Bin 0 -> 33027 bytes .../nltk_data/tokenizers/punkt/slovene.pickle | 106925 +++++++ .../nltk_data/tokenizers/punkt/spanish.pickle | 82636 +++++ .../nltk_data/tokenizers/punkt/swedish.pickle | 133719 ++++++++ .../nltk_data/tokenizers/punkt/turkish.pickle | 138187 ++++++++ tools/oepkgs-talk-robot/ptuning-v2/readme.md | 5 + tools/oepkgs-talk-robot/release.py | 50 + tools/oepkgs-talk-robot/requirements.txt | 13 + .../textsplitter/__init__.py | 2 + .../textsplitter/chinese_text_splitter.py | 25 + tools/oepkgs-talk-robot/txt/cal_sim.py | 38 + tools/oepkgs-talk-robot/txt/llm/id_1.txt | 4 + tools/oepkgs-talk-robot/txt/llm/id_10.txt | 4 + tools/oepkgs-talk-robot/txt/llm/id_11.txt | 15 + tools/oepkgs-talk-robot/txt/llm/id_12.txt | 16 + tools/oepkgs-talk-robot/txt/llm/id_13.txt | 36 + tools/oepkgs-talk-robot/txt/llm/id_14.txt | 6 + tools/oepkgs-talk-robot/txt/llm/id_15.txt | 77 + tools/oepkgs-talk-robot/txt/llm/id_16.txt | 11 + tools/oepkgs-talk-robot/txt/llm/id_17.txt | 7 + tools/oepkgs-talk-robot/txt/llm/id_18.txt | 26 + tools/oepkgs-talk-robot/txt/llm/id_19.txt | 1 + tools/oepkgs-talk-robot/txt/llm/id_2.txt | 12 + tools/oepkgs-talk-robot/txt/llm/id_20.txt | 4 + tools/oepkgs-talk-robot/txt/llm/id_21.txt | 19 + tools/oepkgs-talk-robot/txt/llm/id_22.txt | 3 + tools/oepkgs-talk-robot/txt/llm/id_23.txt | 0 tools/oepkgs-talk-robot/txt/llm/id_24.txt | 6 + tools/oepkgs-talk-robot/txt/llm/id_25.txt | 2 + tools/oepkgs-talk-robot/txt/llm/id_26.txt | 3 + tools/oepkgs-talk-robot/txt/llm/id_27.txt | 3 + tools/oepkgs-talk-robot/txt/llm/id_3.txt | 56 + tools/oepkgs-talk-robot/txt/llm/id_4.txt | 11 + tools/oepkgs-talk-robot/txt/llm/id_5.txt | 8 + tools/oepkgs-talk-robot/txt/llm/id_6.txt | 2 + tools/oepkgs-talk-robot/txt/llm/id_7.txt | 13 + tools/oepkgs-talk-robot/txt/llm/id_8.txt | 3 + tools/oepkgs-talk-robot/txt/llm/id_9.txt | 7 + tools/oepkgs-talk-robot/txt/main.py | 21 + tools/oepkgs-talk-robot/txt/md_read.py | 104 + tools/oepkgs-talk-robot/txt/que_ans.json | 140 + tools/oepkgs-talk-robot/webui.py | 318 + 126 files changed, 2467783 insertions(+) create mode 100644 doc/oepkgs-talk-robot-README.md create mode 100644 "doc/oepkgs-talk-robot-\350\257\246\347\273\206\350\256\276\350\256\241\346\226\207\346\241\243.pdf" create mode 100644 tools/oepkgs-talk-robot/.gitignore create mode 100644 tools/oepkgs-talk-robot/CONTRIBUTING.md create mode 100644 tools/oepkgs-talk-robot/Dockerfile create mode 100644 tools/oepkgs-talk-robot/Dockerfile-cuda create mode 100644 tools/oepkgs-talk-robot/LICENSE create mode 100644 tools/oepkgs-talk-robot/README.md create mode 100644 tools/oepkgs-talk-robot/agent/__init__.py create mode 100644 tools/oepkgs-talk-robot/chains/local_doc_qa.py create mode 100644 tools/oepkgs-talk-robot/chains/modules/embeddings.py create mode 100644 tools/oepkgs-talk-robot/chains/modules/vectorstores.py create mode 100644 tools/oepkgs-talk-robot/chains/text_load.py create mode 100644 tools/oepkgs-talk-robot/cli_demo.py create mode 100644 tools/oepkgs-talk-robot/configs/model_config.py create mode 100644 tools/oepkgs-talk-robot/content/langchain-ChatGLM_README.md create mode 100644 "tools/oepkgs-talk-robot/content/oepkgs\345\210\206\346\224\257\347\256\241\347\220\206.md" create mode 100644 "tools/oepkgs-talk-robot/content/rpm\346\236\204\345\273\272\344\273\245\345\217\212\345\273\272\344\273\223\346\265\201\347\250\213.md" create mode 100644 tools/oepkgs-talk-robot/content/test.txt create mode 100644 "tools/oepkgs-talk-robot/content/\344\270\212\344\274\240.md" create mode 100644 "tools/oepkgs-talk-robot/content/\344\270\252\344\272\272.md" create mode 100644 "tools/oepkgs-talk-robot/content/\345\210\235\345\247\213.md" create mode 100644 "tools/oepkgs-talk-robot/content/\345\214\227\345\220\221\345\274\200\346\272\220\350\275\257\344\273\266\345\214\205\351\200\202\351\205\215\350\277\201\347\247\273\350\257\246\347\273\206\346\214\207\345\257\274.md" create mode 100644 "tools/oepkgs-talk-robot/content/\346\200\273\344\273\223.md" create mode 100644 "tools/oepkgs-talk-robot/content/\346\265\213\350\257\225.md" create mode 100644 "tools/oepkgs-talk-robot/content/\347\274\226\350\257\221.md" create mode 100644 "tools/oepkgs-talk-robot/content/\350\203\214\346\231\257.md" create mode 100644 tools/oepkgs-talk-robot/docs/CHANGELOG.md create mode 100644 tools/oepkgs-talk-robot/docs/FAQ.md create mode 100644 tools/oepkgs-talk-robot/docs/INSTALL.md create mode 100644 tools/oepkgs-talk-robot/docs/Issue-with-Installing-Packages-Using-pip-in-Anaconda.md create mode 100644 "tools/oepkgs-talk-robot/docs/\345\234\250Anaconda\344\270\255\344\275\277\347\224\250pip\345\256\211\350\243\205\345\214\205\346\227\240\346\225\210\351\227\256\351\242\230.md" create mode 100644 tools/oepkgs-talk-robot/img/langchain+chatglm.png create mode 100644 tools/oepkgs-talk-robot/img/qr_code_9.jpg create mode 100644 tools/oepkgs-talk-robot/img/webui_0419.png create mode 100644 tools/oepkgs-talk-robot/img/wps5359.tmp.jpg create mode 100644 tools/oepkgs-talk-robot/img/wps535A.tmp.jpg create mode 100644 tools/oepkgs-talk-robot/img/wps535B.tmp.jpg create mode 100644 tools/oepkgs-talk-robot/img/wps535C.tmp.jpg create mode 100644 tools/oepkgs-talk-robot/img/wps535D.tmp.jpg create mode 100644 tools/oepkgs-talk-robot/img/wps535E.tmp.jpg create mode 100644 tools/oepkgs-talk-robot/img/wps535F.tmp.jpg create mode 100644 tools/oepkgs-talk-robot/img/wpsE069.tmp.jpg create mode 100644 tools/oepkgs-talk-robot/models/.chatglm_llm.py.swp create mode 100644 tools/oepkgs-talk-robot/models/__init__.py create mode 100644 tools/oepkgs-talk-robot/models/chatglm_llm.py create mode 100644 tools/oepkgs-talk-robot/nltk_data/corpora/cmudict/README create mode 100644 tools/oepkgs-talk-robot/nltk_data/corpora/cmudict/cmudict create mode 100644 tools/oepkgs-talk-robot/nltk_data/taggers/averaged_perceptron_tagger/averaged_perceptron_tagger.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/PY3/README create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/PY3/czech.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/PY3/danish.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/PY3/dutch.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/PY3/english.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/PY3/estonian.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/PY3/finnish.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/PY3/french.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/PY3/german.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/PY3/greek.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/PY3/italian.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/PY3/malayalam.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/PY3/norwegian.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/PY3/polish.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/PY3/portuguese.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/PY3/russian.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/PY3/slovene.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/PY3/spanish.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/PY3/swedish.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/PY3/turkish.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/README create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/czech.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/danish.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/dutch.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/english.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/estonian.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/finnish.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/french.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/german.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/greek.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/italian.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/malayalam.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/norwegian.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/polish.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/portuguese.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/russian.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/slovene.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/spanish.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/swedish.pickle create mode 100644 tools/oepkgs-talk-robot/nltk_data/tokenizers/punkt/turkish.pickle create mode 100644 tools/oepkgs-talk-robot/ptuning-v2/readme.md create mode 100644 tools/oepkgs-talk-robot/release.py create mode 100644 tools/oepkgs-talk-robot/requirements.txt create mode 100644 tools/oepkgs-talk-robot/textsplitter/__init__.py create mode 100644 tools/oepkgs-talk-robot/textsplitter/chinese_text_splitter.py create mode 100644 tools/oepkgs-talk-robot/txt/cal_sim.py create mode 100644 tools/oepkgs-talk-robot/txt/llm/id_1.txt create mode 100644 tools/oepkgs-talk-robot/txt/llm/id_10.txt create mode 100644 tools/oepkgs-talk-robot/txt/llm/id_11.txt create mode 100644 tools/oepkgs-talk-robot/txt/llm/id_12.txt create mode 100644 tools/oepkgs-talk-robot/txt/llm/id_13.txt create mode 100644 tools/oepkgs-talk-robot/txt/llm/id_14.txt create mode 100644 tools/oepkgs-talk-robot/txt/llm/id_15.txt create mode 100644 tools/oepkgs-talk-robot/txt/llm/id_16.txt create mode 100644 tools/oepkgs-talk-robot/txt/llm/id_17.txt create mode 100644 tools/oepkgs-talk-robot/txt/llm/id_18.txt create mode 100644 tools/oepkgs-talk-robot/txt/llm/id_19.txt create mode 100644 tools/oepkgs-talk-robot/txt/llm/id_2.txt create mode 100644 tools/oepkgs-talk-robot/txt/llm/id_20.txt create mode 100644 tools/oepkgs-talk-robot/txt/llm/id_21.txt create mode 100644 tools/oepkgs-talk-robot/txt/llm/id_22.txt create mode 100644 tools/oepkgs-talk-robot/txt/llm/id_23.txt create mode 100644 tools/oepkgs-talk-robot/txt/llm/id_24.txt create mode 100644 tools/oepkgs-talk-robot/txt/llm/id_25.txt create mode 100644 tools/oepkgs-talk-robot/txt/llm/id_26.txt create mode 100644 tools/oepkgs-talk-robot/txt/llm/id_27.txt create mode 100644 tools/oepkgs-talk-robot/txt/llm/id_3.txt create mode 100644 tools/oepkgs-talk-robot/txt/llm/id_4.txt create mode 100644 tools/oepkgs-talk-robot/txt/llm/id_5.txt create mode 100644 tools/oepkgs-talk-robot/txt/llm/id_6.txt create mode 100644 tools/oepkgs-talk-robot/txt/llm/id_7.txt create mode 100644 tools/oepkgs-talk-robot/txt/llm/id_8.txt create mode 100644 tools/oepkgs-talk-robot/txt/llm/id_9.txt create mode 100644 tools/oepkgs-talk-robot/txt/main.py create mode 100644 tools/oepkgs-talk-robot/txt/md_read.py create mode 100644 tools/oepkgs-talk-robot/txt/que_ans.json create mode 100644 tools/oepkgs-talk-robot/webui.py diff --git a/doc/oepkgs-talk-robot-README.md b/doc/oepkgs-talk-robot-README.md new file mode 100644 index 0000000..8b15159 --- /dev/null +++ b/doc/oepkgs-talk-robot-README.md @@ -0,0 +1,123 @@ +# OpenEuler智能问答系统 + +## 系统简介 + +基于openEuler平台完成了一个文本机器人服务,该服务利用大模型技术和Chatbot技术,能够在对话中收集关键信息,也可以针对现有知识库对于相关问题进行回答,同时对于准确度要求较高的问题,同时融合了对话和信息检索的技术 + +## 原理介绍 + +ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 [General Language Model (GLM)](https://github.com/THUDM/GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。 ChatGLM-6B 使用了和 ChatGPT 相似的技术,针对中文问答和对话进行了优化。经过约 1T 标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62 亿参数的 ChatGLM-6B 已经能生成相当符合人类偏好的回答。 + +基于知识库项目参考一种利用 [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)。依托上述模型,本项目可实现全部使用**开源**模型**离线私有部署**。 + +本模块实现原理如下图所示,过程包括加载文件 -> 读取文本 -> 文本分割 -> 文本向量化 -> 问句向量化 -> 在文本向量中匹配出与问句向量最相似的`top k`个 -> 匹配出的文本作为上下文和问题一起添加到`prompt`中 -> 提交给`LLM`生成回答。 + +![实现原理图](img/langchain+chatglm.png) + +基于信息检索的模块则是通过构建检索对,对于专业领域的问题进行询问,使得回复关键问题的时候答案准确、全面、具体,可操作性强。 + +🚩 本项目未涉及微调、训练过程,但可利用微调或训练对本项目效果进行优化。 + +## 硬件需求 + +- ChatGLM-6B 模型硬件需求 + + | **量化等级** | **最低 GPU 显存**(推理) | **最低 GPU 显存**(高效参数微调) | + | -------------- | ------------------------- | --------------------------------- | + | FP16(无量化) | 13 GB | 14 GB | + | INT8 | 8 GB | 9 GB | + | INT4 | 6 GB | 7 GB | + +- Embedding 模型硬件需求 + + 本项目中默认选用的 Embedding 模型 [GanymedeNil/text2vec-large-chinese](https://huggingface.co/GanymedeNil/text2vec-large-chinese/tree/main) 约占用显存 3GB,也可修改为在 CPU 中运行。 + + +## 开发部署 + +### 软件需求 + +本项目已在 Python 3.8 - 3.10,CUDA 11.7 环境下完成测试。已在 Windows、ARM 架构的 macOS、Linux 系统中完成测试。 + +### 从本地加载模型 + +请参考 [THUDM/ChatGLM-6B#从本地加载模型](https://github.com/THUDM/ChatGLM-6B#从本地加载模型) + +### 1. 安装环境 + +参见 [安装指南](docs/INSTALL.md)。 + +### 2. 设置模型默认参数 + +在开始执行 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 +``` + +或执行 [webui.py](webui.py) 脚本体验 **Web 交互** + +```shell +$ python webui.py +``` + +注:如未将模型下载至本地,请执行前检查`$HOME/.cache/huggingface/`文件夹剩余空间,至少15G。 + +执行后效果如下图所示: +![](img\wps535A.tmp.jpg) +Web UI 可以实现如下功能: + +1. 运行前自动读取`configs/model_config.py`中`LLM`及`Embedding`模型枚举及默认模型设置运行模型,如需重新加载模型,可在 `模型配置` 标签页重新选择后点击 `重新加载模型` 进行模型加载; +2. 可手动调节保留对话历史长度、匹配知识库文段数量,可根据显存大小自行调节; +3. 具备模式选择功能,可选择 `LLM对话` 、 `知识库问答`和`信息检索` 模式进行对话,支持流式对话; +4. 添加 `配置知识库` 功能,支持选择已有知识库或新建知识库,并可向知识库中**新增**上传文件/文件夹,使用文件上传组件选择好文件后点击 `上传文件并加载知识库`,会将所选上传文档数据加载至知识库中,并基于更新后知识库进行问答; +5. 添加`信息检索`功能,支持对于内置问题实现检索访问,具体通过md文档增量式构建检索对的方式见文档。 + +## 用户交互 + +#### 页面1——LLM对话页面 + +支持直接与大模型进行对话,实现简单问答和功能询问等。 + +![img](img\wps5359.tmp.jpg) + +该页面主要为对话框和右侧导航栏。左侧对话框展示了系统的一些基本信息和说明情况,同时包含对话框,支持用户进行文本框的输入,对模型进行提问,同时模型会进行推理,在文本框上进行回答,类似于聊天界面。右侧导航栏显示当前模式,为“LLM对话”,支持直接与系统助手进行对话,回答一些基本问题。文本框栏主要包括文本的输入,进行提问,同时会类似于聊天的形式给出回答。 + +#### 页面2——知识库问答界面 + +支持新建知识库,选择知识库名称后,即可开始问答,如有需要可以在选择知识库名称后上传文件/文件夹至知识库。 + +![img](img\wps535A.tmp.jpg) + +该页面主要为对话框和右侧导航栏。左侧对话框展示了系统的一些基本信息和说明情况,同时包含对话框,支持用户进行文本框的输入,对模型进行提问,同时模型会进行推理,在文本框上进行回答,类似于聊天界面。右侧导航栏显示当前模式,为“知识库问答”,可以通过新建知识库或者进行知识库的选择,实现文件上传,对于知识库的相关信息进行提问。支持新建知识库 + +支持文件上传。 + +![img](img\wps535C.tmp.jpg) + +支持文件夹上传。 + +![img](img\wps535D.tmp.jpg) + +#### 页面3——信息检索 + +支持针对一系列的问题进行问答,输入"当前可检索问题"即可查看相应所有问题,同时支持追问。 + +![](img\wps535E.tmp.jpg) + +该页面主要为对话框和右侧导航栏。左侧对话框展示了系统的一些基本信息和说明情况,同时包含对话框,支持用户进行文本框的输入,对模型进行提问,同时模型会进行推理,在文本框上进行回答,类似于聊天界面。右侧导航栏显示当前模式,为“信息检索”,针对一系列的问题进行问答,输入"当前可检索问题"即可查看相应所有问题,同时支持追问。 + +支持查看可检索问题。 + +![img](img\wps535F.tmp.jpg) + +### 常见问题 + +参见 [常见问题](docs/FAQ.md)。 diff --git "a/doc/oepkgs-talk-robot-\350\257\246\347\273\206\350\256\276\350\256\241\346\226\207\346\241\243.pdf" "b/doc/oepkgs-talk-robot-\350\257\246\347\273\206\350\256\276\350\256\241\346\226\207\346\241\243.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..26ec37e01b7b46ab48e3714436515c8d62ff0eff GIT binary patch literal 911809 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 z�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