安爸-超级家庭

替换Langchain-Chatchat中的数据库为MySQL

安爸 发布于

Langchain-Chatchat v0.2.8版本中默认使用的SQLite数据库,本文主要介绍将SQLite替换为MySQL数据库。因为在生产环境中,通常还是会用MySQL数据库。

一.新建数据库和修改配置文件

1.新建db为langchain-chatchat

使用mysql数据库来存储知识库,使用MySQL新建db为langchain-chatchat,其中字符集和排序规则分别为utf8mb4 — UTF-8 Unicode和utf8mb4_0900_ai_ci。如下所示:

2.修改kb_config.py配置文件

如果使用其它数据库(非SQLite数据库),直接修改SQLALCHEMY_DATABASE_URI。F:\ConversationSystem\ChatCopilot\Langchain\Langchain-Chatchat-0.2.8\configs\kb_config.py,如下所示:

3.安装pymysql包

需要安装pymysql包,pip install pymysql -i https://pypi.tuna.tsinghua.edu.cn/simple。否则报错,如下所示

4.可能遇到临时文件目录不存在问题

如果Debug时遇到临时文件目录找不到的情况,可以修改BASE_TEMP_DIR目录,如下所示:

5.知识库信息错误

这个时候启动项目python start.py -a会报知识库信息错误,因为这个时候知识库还没有初始化,如下所示:

二.初始化数据库

1.初始化操作

通过命令python init_database.py --recreate-vs初始化知识库/数据库。如下所示:

2.初始化相关命令

python init_database.py --recreate-vs命令具体进行了什么操作呢?查看源码F:\ConversationSystem\ChatCopilot\Langchain\Langchain-Chatchat-0.2.8\init_database.py,如下所示:

相关命令解释,如下所示:

序号 命令 中文解释 英文解释
1 -r, –recreate-vs 重新创建vector存储。如果已将文档文件复制到内容文件夹,但尚未填充vector存储或更改DEFAUL_VS_TYPE/EMBEDDING_MODEL,使用此选项。 recreate vector store. use this option if you have copied document files to the content folder, but vector store has not been populated or DEFAUL_VS_TYPE/EMBEDDING_MODEL changed.
2 –create-tables 创建空表(如果不存在)。 create empty tables if not existed
3 –clear-tables 创建空表,或在重新创建向量存储之前删除数据库表。 create empty tables, or drop the database tables before recreate vector stores
4 –import-db IMPORT_DB 从指定的sqlite数据库导入表。 import tables from specified sqlite database
5 -u, –update-in-db 更新数据库中已存在文件的向量存储。如果想为数据库中已存在的文件重新创建向量,并跳过仅存在于本地文件夹中的文件,使用此选项。假如文件夹为a|b c,数据库为a b,那么更新a b到向量库,即忽略本地文件夹,仅更新数据库中的文件到向量库。 update vector store for files exist in database. use this option if you want to recreate vectors for files exist in db and skip files exist in local folder only.
6 -i, –increament 更新本地文件夹中存在但数据库中不存在的文件的向量存储。如果想增量创建向量,使用此选项。假如文件夹为a|b c,数据库为a b,那么更新c到数据库和向量库。 update vector store for files exist in local folder and not exist in database. use this option if you want to create vectors increamentally.
7 –prune-db 删除数据库中不存在于本地文件夹中的文档。用于用户在文件浏览器中删除某些doc文件后删除数据库文档。假如数据库是a|b c文档,本地是a b文档,那么删除数据库中的c文档。 delete docs in database that not existed in local folder. it is used to delete database docs after user deleted some doc files in file browser
8 –prune-folder 删除数据库中不存在的本地文件夹中的doc文件。用于通过删除未使用的doc文件来释放本地磁盘空间。假如数据库是a|b文档,本地是a b c文档,那么删除本地的c文档。 delete doc files in local folder that not existed in database. is is used to free local disk space by delete unused doc files.
9 -n KB_NAME [KB_NAME …], –kb-name KB_NAME [KB_NAME …] 指定要操作的知识库名称。默认是存在于KB_ROOT_PATH中的所有文件夹。 specify knowledge base names to operate on. default is all folders exist in KB_ROOT_PATH.
10 -e EMBED_MODEL, –embed-model EMBED_MODEL 指定嵌入模型。 specify embeddings model.

3.解释python init_database.py --recreate-vs命令

因为没有指定知识库名字和embedding模型,所以对存在于KB_ROOT_PATH中的所有文件夹(知识库)和默认embedding模型进行操作。默认使用的faiss向量数据库,一方面生成向量库文件,另一方面生成数据库文件。

4.向量库文件

包括index.faiss和index.pkl这2个文件,如下所示:

5.数据库文件

主要是conversation、file_doc、knowledge_base、knowledge_file、message和summary_chunk这几张表,如下所示:

(1)file_doc数据表

(2)knowledge_base数据表

(3)knowledge_file数据表

参考文献

[1] https://github.com/chatchat-space/Langchain-Chatchat/blob/master/init\_database.py
[2] 替换Langchain-Chatchat中的数据库为MySQL:https://z0yrmerhgi8.feishu.cn/wiki/Qdj4wSj9Yiq7yWkeZAecz86UnUd

(文:NLP工程化)

替换Langchain-Chatchat中的数据库为MySQL最先出现在每时AI


扫描二维码,在手机上阅读