【ChatGLM】基于 ChatGLM-6B + langchain 实现本地化知识库检索与智能答案生成: 中文 LangChain 项目的实现开源工作
目录
【ChatGLM】基于 ChatGLM-6B + langchain 实现本地化知识库检索与智能答案生成: 中文 LangChain 项目的实现开源工作
1.克隆源代码:
2.安装前置依赖:pip3 install pdf2image
3.安装项目依赖:pip3 install -r requirements.txt
4.定制端口号:默认8888, 可以到 main.py 源代码中修改:
5.启动运行:python3 main.py
本地知识库机器人问答本地实测记录
模型直接问答:陈光剑是谁?
ChatGLM-6B 模型直接回答(这个答案明显是瞎编的):
嵌入知识库:
知识库内容:SourceURL:file:///home/me/Documents/陈光剑简介.docx
切换:知识库问答,然后,加载知识库:
《ClickHouse入门、实战与进阶》作者是谁?
《Kotlin 极简教程》作者是谁?
《ClickHouse入门、实战与进阶》作者是谁?
陈光剑是谁?
LangChain-ChatGLM-Webui部署文档
直接安装
环境准备
启动程序
【ChatGLM】基于 ChatGLM-6B + langchain 实现本地化知识库检索与智能答案生成: 中文 LangChain 项目的实现开源工作
LangChain 的资料准备
ChatGLM-6B
LLama
LangChain 的工作流程
LangChain 的问答实现路径
LangChain 的资料库向量化
在不同的环境中安装 LangChain 环境
Chinese-LangChain 安装部署过程
相关工作
1.克隆源代码:
GitHub - yanqiangmiffy/Chinese-LangChain: 中文langchain项目|小必应,Q.Talk,强聊,QiangTalk
git clone/yanqiangmiffy/Chinese-LangChain
2.安装前置依赖:pip3 install pdf2image
3.安装项目依赖:pip3 install -r requirements.txt
4.定制端口号:默认8888, 可以到 main.py 源代码中修改:
demo.queue(concurrency_count=2).launch(server_name='0.0.0.0',server_port=8765,share=False,show_error=True,debug=True,enable_queue=True,inbrowser=True,)
5.启动运行:python3 main.py
Explicitly passing a `revision` is encouraged when loading a model with custom code to ensure no malicious code has been contributed in a newer revision.Explicitly passing a `revision` is encouraged when loading a configuration with custom code to ensure no malicious code has been contributed in a newer revision.Explicitly passing a `revision` is encouraged when loading a model with custom code to ensure no malicious code has been contributed in a newer revision.No compiled kernel piling kernels : /home/me/.cache/huggingface/modules/transformers_modules/THUDM/chatglm-6b-int4-qe/977d9df4cfae6b7a756e07698483872c5c070eee/ompiling gcc -O3 -fPIC -pthread -fopenmp -std=c99 /home/me/.cache/huggingface/modules/transformers_modules/THUDM/chatglm-6b-int4-qe/977d9df4cfae6b7a756e07698483872c5c070eee/quantization_kernels_parallel.c -shared -o /home/me/.cache/huggingface/modules/transformers_modules/THUDM/chatglm-6b-int4-qe/977d9df4cfae6b7a756e07698483872c5c070eee/quantization_kernels_parallel.soKernels compiled : /home/me/.cache/huggingface/modules/transformers_modules/THUDM/chatglm-6b-int4-qe/977d9df4cfae6b7a756e07698483872c5c070eee/quantization_kernels_parallel.soLoad kernel : /home/me/.cache/huggingface/modules/transformers_modules/THUDM/chatglm-6b-int4-qe/977d9df4cfae6b7a756e07698483872c5c070eee/quantization_kernels_parallel.soSetting CPU quantization kernel threads to 12Using quantization cacheApplying quantization to glm layers-05-21 14:49:35,980 [INFO] [modeling_chatglm.py:1415] Applying quantization to embeddings-05-21 14:49:48,265 [INFO] [SentenceTransformer.py:66] Load pretrained SentenceTransformer: GanymedeNil/text2vec-large-chinese-05-21 14:49:55,393 [WARNING] [SentenceTransformer.py:805] No sentence-transformers model found with name /home/me/.cache/torch/sentence_transformers/GanymedeNil_text2vec-large-chinese. Creating a new one with MEAN pooling.-05-21 14:49:59,191 [INFO] [SentenceTransformer.py:105] Use pytorch device: cuda王治郅.txt姚明.txt科比.txtBatches: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:01<00:00, 1.34s/it]-05-21 14:50:01,480 [INFO] [loader.py:54] Loading faiss with AVX2 support.-05-21 14:50:01,499 [INFO] [loader.py:56] Successfully loaded faiss with AVX2 support.Running on local URL: http://0.0.0.0:8765To create a public link, set `share=True` in `launch()`.陈光剑是谁?
本地知识库机器人问答本地实测记录
模型直接问答:陈光剑是谁?
ChatGLM-6B 模型直接回答(这个答案明显是瞎编的):
陈光剑(Hua Guangqi)是一位在中国拥有广泛影响力的名字,他是一位计算机科学家和创业家,目前担任清华大学计算机系教授,同时也是中国人工智能协会的创始人之一。
陈光剑出生于1968年,曾在北京大学获得计算机科学学士和硕士学位,之后在斯坦福大学获得计算机科学博士学位。他的研究领域包括机器学习、人工智能和计算机视觉等。
陈光剑在计算机科学领域做出了许多贡献,他发明了“光剑”(Visual Language Modeling,VLM)语言模型,这是一种能够自然语言交互的计算机模型,被广泛应用于自然语言处理和对话系统领域。他还提出了一种名为“全局搜索”的算法,该算法可以在大规模数据集上实现高效的搜索,被广泛应用于计算机视觉和图像识别领域。
除了在学术界的贡献,陈光剑还是一位成功的创业家,他创办了一家名为“AI 语言模型”的公司,该公司专注于开发自然语言处理和对话系统的技术。目前,AI 语言模型已经成为该公司的主要业务之一,并在业界获得了广泛的认可和应用。
陈光剑在计算机科学和人工智能领域都有着重要的贡献和影响,他的成就和贡献对中国计算机科学和人工智能的发展产生了深远的影响。
嵌入知识库:
知识库内容:SourceURL:file:///home/me/Documents/陈光剑简介.docx
陈光剑简介:著有《ClickHouse入门、实战与进阶》(即将上架)《Kotlin 极简教程》《Spring Boot开发实战》《Kotlin从入门到进阶实战》等技术书籍。资深程序员、大数据与后端技术专家、架构师,拥有超过的技术研发和管理经验。现就职于字节跳动,曾就职于阿里巴巴,主要从事企业智能数字化经营管理、电商智能数字化运营等系统架构设计和研发工作。在大数据和企业级系统架构领域有非常深厚的积累,擅长大数据系统架构和分布式系统架构设计开发。同时在微服务架构和编程语言领域有非常丰富的实践经验,对函数式编程、领域建模和Kotlin、Go编程语言等技术有深入的理解和实践,热衷于新技术的学习和技术分享。
切换:知识库问答,然后,加载知识库:
问智能机器人问题:
《ClickHouse入门、实战与进阶》作者是谁?
《ClickHouse入门、实战与进阶》这本书的作者是中国计算机科学家和大数据技术专家陈光剑。他拥有超过的技术研发和管理经验,是ClickHouse开源项目的创始人之一,也是ClickHouse的中文版译者。在ClickHouse的开源项目中,陈光剑担任了项目经理和开发者的角色,对ClickHouse的技术实现和用户体验有着深入的理解和经验。
《Kotlin 极简教程》作者是谁?
《Kotlin 极简教程》这本书的作者是中国计算机科学家和大数据技术专家陈光剑。他拥有超过的技术研发和管理经验,是ClickHouse开源项目的创始人之一,也是ClickHouse的中文版译者。在Kotlin编程语言的学习和实践方面,陈光剑也有丰富的经验,并编写了《Kotlin 极简教程》这本书来介绍Kotlin的基础知识和实践技巧。
《ClickHouse入门、实战与进阶》作者是谁?
《ClickHouse入门、实战与进阶》这本书的作者是中国计算机科学家和大数据技术专家陈光剑。他拥有超过的技术研发和管理经验,是ClickHouse开源项目的创始人之一,也是ClickHouse的中文版译者。在ClickHouse的开源项目中,陈光剑担任了项目经理和开发者的角色,对ClickHouse的技术实现和用户体验有着深入的理解和经验。
陈光剑是谁?
陈光剑是一位中国计算机科学家和大数据技术专家,拥有超过的技术研发和管理经验。他是中国ClickHouse开源项目的创始人之一,也是项目的中文版译者。在ClickHouse的开源项目中,陈光剑担任了项目经理和开发者的角色,对ClickHouse的技术实现和用户体验有着深入的理解和经验。除了ClickHouse方面的经验,陈光剑还拥有多项技术领域的专家资格,包括数据挖掘、机器学习、人工智能、大数据处理等。
LangChain-ChatGLM-Webui
部署文档
直接安装
环境准备
项目需要Python>=3.8.1, 默认已安装torch
git clone本项目, 您可以在自己的terminal中执行:git clone /thomas-yanxin/LangChain-ChatGLM-Webui.git
若国内用户访问Github存在网络问题, 也可以执行:https://openi./Learning-Develop-Union/LangChain-ChatGLM-Webui.git
进入本项目目录:cd LangChain-ChatGLM-Webui
安装依赖包:pip install -r requirements.txt
, 国内用户可设置清华源加速下载.
另: 若您想要安装测试ModelScope版本, 需要额外安装ModelScope包:pip install modelscope==1.4.3 -f https://modelscope.oss-cn-/releases/repo.html
OpenI启智社区部署推荐的Docker镜像:dockerhub.:5000/user-images/openi:LangChain_ChatLLM
启动程序
Huggingface版本在terminal中执行命令:python3 app.py
ModelScope版本 进入modelscope文件目录:cd modelscope
执行命令:python3 app.py
【ChatGLM】基于 ChatGLM-6B + langchain 实现本地化知识库检索与智能答案生成: 中文 LangChain 项目的实现开源工作
Chinese-LangChain 是 yanqiangmiffy 同学的开源项目https://hf.co/spaces/ChallengeHub/Chinese-LangChain
/yanqiangmiffy/Chinese-LangChain
中文 langchain 项目,基于 ChatGLM-6b + langchain 实现本地化知识库检索与智能答案生成。
LangChain 的资料准备
海量的知识库,知识库是由一段一段的文本构成的。
LangChain 中用到的功能性语言模型
基于问题搜索知识库中的文本的问题搜索知识文本功能性语言模型
基于问题与问题相关的知识库文本进行问答的对话式语言模型
对话式大参数量语言模型有:
chatglm
LLama
Bloom
基于中文预训练、问答训练、文档问答训练、多轮问答训练、人工强化反馈学习的对话式大参数语言模型有:
ChatGLM-6B
ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。ChatGLM-6B 使用了和 ChatGPT 相似的技术,针对中文问答和对话进行了优化。经过约 1T 标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62 亿参数的 ChatGLM-6B 已经能生成相当符合人类偏好的回答,更多信息请参考 ChatGLM-6B 的 博客。
ChatGLM-6B:
/THUDM/ChatGLM-6BChatGLM
博客:/blog
为了方便下游开发者针对自己的应用场景定制模型,THUDM 同时实现了基于 P-Tuning v2 的高效参数微调方法 (使用指南),INT4 量化级别下最低只需 7GB 显存即可启动微调。
THUDM:
/THUDMP-Tuning
v2:
/THUDM/P-tuning-v2
使用指南:
/THUDM/ChatGLM-6B/blob/main/ptuning/README.md
LLama
Huatuo-Llama-Med-Chinese:
/SCIR-HI/Huatuo-Llama-Med-Chinese
SCIR-HI 训练的医疗领域 Llama 对话式大参数语言模型
开源了经过中文医学指令精调/指令微调 (Instruct-tuning) 的 LLaMA-7B 模型。SCIR-HI 通过医学知识图谱和 GPT3.5 API 构建了中文医学指令数据集,并在此基础上对 LLaMA 进行了指令微调,提高了 LLaMA 在医疗领域的问答效果。
SCIR-HI:/SCIR-HIChinese-LLaMA-Alpaca
开源仓库:/ymcui/Chinese-LLaMA-Alpaca
为了促进大模型在中文 NLP 社区的开放研究,Chinese-LLaMA-Alpaca 开源了中文 LLaMA 模型和指令精调的 Alpaca 大模型。这些模型在原版 LLaMA 的基础上扩充了中文词表并使用了中文数据进行二次预训练,进一步提升了中文基础语义理解能力。同时,中文 Alpaca 模型进一步使用了中文指令数据进行精调,显著提升了模型对指令的理解和执行能力。详细内容请参考技术报告 (Cui, Yang, and Yao, )。
报告地址: /abs/2304.08177
Chinese-LLaMA-Alpaca 主要内容:
🚀 针对原版 LLaMA 模型扩充了中文词表,提升了中文编解码效率
🚀 Chinese-LLaMA-Alpaca 开源了使用中文文本数据预训练的中文 LLaMA 以及经过指令精调的中文 Alpaca(7B、13B)
🚀 快速使用笔记本电脑(个人 PC)的 CPU/GPU 本地量化和部署体验大模型
HF 推理代码
/ymcui/Chinese-LLaMA-Alpaca/blob/main/scripts/inference_hf.py
HF 推理代码
/ymcui/Chinese-LLaMA-Alpaca/blob/main/scripts/inference_hf.py
LangChain 的工作流程
在没有知识库的情况下:直接将问题输入对话式大语言模型作为当前问题的答案。
在有知识库的情况下:首先用输入的问题,基于文本相似度表征模型获取到输入的表征。依靠表征寻找到相似的知识段落文本。第二将相似知识段落文本拼接上问题输入对话式语言模型获取当前问题的文档问答结果。
LangChain 的问答实现路径
基于纯粹的大语言模型的对话能力
基于相似度检索相关文档以及基于对话大参数预训练语言模型的阅读理解能力
LangChain 的资料库向量化
如何提升 LangChain 的性能:
训练垂直领域问题与文档相似度模型,提升问题寻找知识文档的精度。
训练垂直领域问题+知识文档的对话式大语言模型,优化返回结果。
在不同的环境中安装 LangChain 环境
安装 pytorch 1.13.1
#ROCM5.2(Linuxonly)pip3installtorchtorchvisiontorchaudio--extra-index-urlpipinstalltorch==1.13.1+rocm5.2torchvision==0.14.1+rocm5.2torchaudio==0.13.1--extra-index-url/whl/rocm5.2#CUDA11.6pipinstalltorch==1.13.1+cu116torchvision==0.14.1+cu116torchaudio==0.13.1--extra-index-url/whl/cu116#CUDA11.7pipinstalltorch==1.13.1+cu117torchvision==0.14.1+cu117torchaudio==0.13.1--extra-index-url/whl/cu117#CPUonlypipinstalltorch==1.13.1+cputorchvision==0.14.1+cputorchaudio==0.13.1--extra-index-url/whl/cpu
安装 pytorch 2.0.0、cuda 11.7
pip3installtorchtorchvisiontorchaudio--index-url/whl/cu117
安装 pytorch 2.0.0、cuda 11.8
pip3installtorchtorchvisiontorchaudio--index-url/whl/cu118
LangChain 项目地址:/hwchase17/langchain
很多中文的 LangChain 都是基于这个项目进行二次开发的。
安装 LangChain 的两次尝试
LangChain 可在 PyPi 上使用,因此可以轻松安装:
pipinstalllangchain
这将安装 LangChain 的最低要求。当 LangChain 与各种模型提供程序、数据存储等集成时,它的很多价值就来了。默认情况下,不安装执行此操作所需的依赖项。然而,还有另外两种安装 LangChain 的方法确实引入了这些依赖关系。
要安装通用 LLM 提供程序所需的模块,请运行:
pipinstalllangchain[llms]
要安装所有集成所需的所有模块,请运行:
pipinstalllangchain[all]
请注意,如果您使用的是 zsh,则在将方括号作为参数传递给命令时需要引用方括号,例如:
pipinstall'langchain[all]'
基于源码安装 LangChain
gitclone/hwchase17/langchain.gitcdlangchainpipinstall-e.
Chinese-LangChain 安装部署过程
24pipinstall-rrequirements.txt26pipinstall'httpx[socks]'27pythonmain.py44 发现导入pdf失败,提示缺失一下的包以下异常并没有引起程序中断。45*pipinstall'unstructured[local-inference]'
Chinese-LangChain 构建自己知识库的文档与问题相似度表征,这一步一定要准备好足够的内存。
importosfromlangchain.embeddings.huggingfaceimportHuggingFaceEmbeddingsfromlangchain.schemaimportDocumentfromlangchain.vectorstoresimportFAISSfromtqdmimporttqdm#中文 Wikipedia 数据导入示例:embedding_model_name='GanymedeNil/text2vec-large-chinese'docs_path='/root/work/Chinese-LangChain/docs'embeddings=HuggingFaceEmbeddings(model_name=embedding_model_name)docs=[]d=[]doc_files=os.listdir("./docs")fordoc_oneindoc_files:ifnot"txt"indoc_one:continuewithopen(os.path.join("./docs",doc_one),'r',encoding='utf-8')asf:foridx,lineintqdm(enumerate(f.read().split("。"))):d.append(line)d=list(set(d))foridx,d_oneintqdm(enumerate(d)):metadata={"source":f'doc_id_{idx}'}docs.append(Document(page_content=line.strip()+"。",metadata=metadata))vector_store=FAISS.from_documents(docs,embeddings)vector_store.save_local('cache/annoy/')
相对有限的内存资源来说,可以尝试把知识库文本段向量化做成一个批式处理流程:
importosimportpandasaspdfromlangchain.schemaimportDocumentfromlangchain.document_loadersimportUnstructuredFileLoaderfromlangchain.embeddings.huggingfaceimportHuggingFaceEmbeddingsfromlangchain.vectorstoresimportFAISSfromtqdmimporttqdm#中文 Wikipedia 数据导入示例:embedding_model_name='GanymedeNil/text2vec-large-chinese'embeddings=HuggingFaceEmbeddings(model_name=embedding_model_name)d=[]doc_files=os.listdir("./")fordoc_oneindoc_files:ifnot"txt"indoc_one:continuewithopen(os.path.join("./",doc_one),'r',encoding='utf-8')asf:foridx,lineintqdm(enumerate(f.read().split("。"))):d.append(line)d=list(set(d))foriinrange(len(d)//100000):docs=[]foridx,d_oneintqdm(enumerate(d[100000*i:100000*(i+1)])):metadata={"source":f'doc_id_{idx}'}docs.append(Document(page_content=line.strip()+"。",metadata=metadata))vector_store=FAISS.from_documents(docs,embeddings)vector_store.save_local('cache/annoy'+str(i)+'/')
100 万句子分成了 10 批次 10 万次句子生成了 10 个 faiss 向量数据文件。获取向量的过程也是需要显卡参与计算的。
从 0 到 3 是我生成的 faiss 向量数据文件。据说还可以合并成一个大的向量文件。
在 Chinese-LangChain 中加入自己的知识库的文档与问题相似度表征
classLangChainCFG:llm_model_name='THUDM/chatglm-6b-int4-qe'#本地模型文件orhuggingface远程仓库embedding_model_name='GanymedeNil/text2vec-large-chinese'#检索模型文件orhuggingface远程仓库vector_store_path='./cache'docs_path='./docs'kg_vector_stores={'企业年报':'./cache/annoy/',}#可以替换成自己的知识库,如果没有需要设置为None#kg_vector_stores=Nonepatterns=['模型问答','知识库问答']#
训练垂直领域问题 + 知识文档的对话式大语言模型的几种方式,(按照资源由小到大的排序方式)
ptuning v2 & finetune chatglm 的官方支持了对下游文本生成任务进行 ptuning 和全参数量 finetune 的实现 chatglm ptuning & finetune:/THUDM/ChatGLM-6B/tree/main/ptuning
lora 开源社区的志愿者小伙伴,为了提升多卡的并行训练方法,实现了一套基于 lora 训练策略的多卡并行训练实现。
pretrain 根据 ymcui 的实现的 Chinese-LLaMA-Alpaca 项目,可以知道通过 transformers 的原生代码进行 clm 的 pretrain 可以提升 LLaMA 语言模型的生成效果。在 LLaMA 的预训练过程中采用的是先扩充词表,再进行中文数据集预训练的过程。
相关工作
transformers language-modeling:
/huggingface/transformers/tree/main/examples/pytorch/language-modeling
全参数量 finetune 目前看起来效果是非常不错的。效果提升非常明显。
【ChatGLM】基于 ChatGLM-6B + langchain 实现本地化知识库检索与智能答案生成: 中文 LangChain 项目的实现开源工作