【LangChain】如何本地部署基于chatGPT的实时文档和表格数据的助手,在自己的数据上构建chatGPT
1 相关技术
(1)LangChain
是一个用于自然语言处理的 Python 库,它的目标是尝试简化自然语言处理任务,提高处理效率和准确性。
该库提供了一组易于使用的函数和工具,可以帮助你实现各种自然语言处理任务,例如语句分割、分词、词性标注、命名实体识别、情感分析等。与其它自然语言处理库相比,LangChain
更注重处理速度和准确性,并且支持多种自然语言的处理(包括中文、英文、日文等)。
(2)FAISS
是LangChain工具箱中的一个用于高效相似度搜索的 Python 库,它基于压缩和向量量化的算法实现了非常快速的相似度搜索。它特别适用于处理高维向量集合,例如图像、音频和自然语言处理中的向量表示等。
2 项目原理
首先读取pdf或者csv文件,使用LangChain的方法嵌入和矢量存储起来,称为Vectorstore。当用户提问新问题时,将当前新问题和之前的对话内容(上下文内容)整合成一个新的问题(Stanalone Question),利用chatGPT中查找答案得到文本1,同时使用相似度匹配方法,从Vectorstore中获取相似的文本内容,得到文本2。最终是将文本1和文本2,再用chatGPT总结,得出最终的答案。
3 项目搭建
(1)安装环境
conda create -n chat python=3.9
(2)安装包
pip install streamlit streamlit_chat langchain openai faiss-cpu tiktoken -i https://pypi.tuna.tsinghua.edu.cn/simple
(3)下载源码
(4)安装依赖,如果报错,某个包有依赖问题,请先卸载这个包,重新安装一遍就可以。
cd Robby-chatbot
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
(5)配置OPENAI_API_KEY全局变量(非必要,可以在界面输入,配置后就不需要再界面输入)
Mac os或者LInux环境下,在~./bash_profile配置文件中配置
vim ~/.bash_profile
输入并保存退出,注意,“OPENAI_API_KEY=”中的 字母和等号之间是没有空格的。
export OPENAI_API_KEY= “你的key,从OenAI官网获取”
刷新配置生效
source ~./bash_profile
为了让以上变量永久生效,在~/.zshrc中配置以下内容
vim ~/.zshrc
在最后一行填入:source ~./bash_profile,再刷新文件
source ~/.zshrc
(6)修改源码中的部分代码
打开src/modules/utils.py中的
if os.path.exists(“.env”) and os.environ.get(“OPENAI_API_KEY”) is not None:
改为
if os.environ.get(“OPENAI_API_KEY”) is not None:
(6)运行项目
streamlit run src/robby_chatbot.py
此时加载自己的数据文件,就可以实现对当前数据集的数据进行提问。
目前的体验,相似度算法、token限制等问题,相似度匹配返回的文本再丢给GPT时,这过程中,是一个传统的相似度匹配算法过程,能力有限,并不能有效的去替代真正的用数据训练过的GPT。当提出的问题,在向量库中没有找到相似的内容时,最终的答案是无(有就是有,没有就是没有),不会像原始GPT一样,无论如何都会给出一个答案(甚至编造)。