10 本地知识库
使用 langchain-chatchat 构建本地知识库。
- 使用线上的 embeding 模型和 LLM(ChatGPT)。
要在 Langchain-Chatchat 中使用在线的嵌入和ChatGPT服务,您可以按照以下步骤进行配置和实现:
10.1 安装部署
10.1.1 软硬件要求
💡 软件方面,本项目已支持在 Python 3.8-3.11 环境中进行使用,并已在 Windows、macOS、Linux 操作系统中进行测试。
💻 硬件方面,因 0.3.0 版本已修改为支持不同模型部署框架接入,因此可在 CPU、GPU、NPU、MPS 等不同硬件条件下使用。
10.1.2 安装步骤
10.1.2.1 安装 Langchain-Chatchat
从 0.3.0 版本起,Langchain-Chatchat 提供以 Python 库形式的安装方式,具体安装请执行:
pip install langchain-chatchat -U
10.1.2.2 模型推理框架并加载模型
如果使用在线服务的话,这一步不需要做。
从 0.3.0 版本起,Langchain-Chatchat 不再根据用户输入的本地模型路径直接进行模型加载,涉及到的模型种类包括 LLM、Embedding、Reranker 及后续会提供支持的多模态模型等,均改为支持市面常见的各大模型推理框架接入,如 Xinference、Ollama、LocalAI、FastChat、One API 等。
因此,请确认在启动 Langchain-Chatchat 项目前,首先进行模型推理框架的运行,并加载所需使用的模型。
10.1.2.3 安装知识库工具
安装搜索模块
安装 duckduckgo 搜索模块。
pip install -U duckduckgo-search
安装文档处理模块
nltk
是 Python 中的自然语言处理 (NLP) 库,全称为 Natural Language Toolkit。它提供了大量的工具和资源来帮助处理和分析文本数据,涵盖了分词、词性标注、句法分析等任务。punkt
是 NLTK 的一个分词器,它用于将文本分成句子和单词。punkt_tab
应该是用来处理或扩展punkt
的一些预定义标注数据(可能是分句表或者分词数据表)。- 分词(Tokenization)是 NLP 的基本任务之一,它将连续的文本字符串切分成较小的部分,如单词或句子。
averaged_perceptron_tagger
是一种用于词性标注的算法,它会根据上下文为句子中的每个单词分配一个词性标签(如名词、动词、形容词等)。此模型基于英语的词性标注,因此在文件名中有eng
。- 词性标注(POS tagging)是文本分析的重要任务,可以帮助 NLP 系统理解单词的语法作用。
import nltk # 下载分词器所需的预定义标注表 'punkt_tab') nltk.download( # 下载词性标注器的预训练模型,支持对英文文本进行词性标注 'averaged_perceptron_tagger_eng') nltk.download(
10.1.3 初始化
从 0.3.1 版本起,Langchain-Chatchat 使用本地 yaml
文件的方式进行配置,用户可以直接查看并修改其中的内容,服务器会自动更新无需重启。
10.1.3.1 初始化工作目录
设置 Chatchat 存储配置文件和数据文件的根目录(可选)
# on linux or macos
export CHATCHAT_ROOT=/path/to/chatchat_data
# on windows
set CHATCHAT_ROOT=/path/to/chatchat_data
10.1.3.2 执行初始化
chatchat init
该命令会执行以下操作:
- 创建所有需要的数据目录
- 复制 samples 知识库内容
- 生成默认
yaml
配置文件
10.1.4 配置模型和工具
修改配置文件
10.1.4.1 配置模型(model_settings.yaml)
具体参考 model_settings.yaml
中的注释。主要修改以下内容:
# 默认选用的 LLM 名称
DEFAULT_LLM_MODEL: "gpt-4o-mini"
# 默认选用的 Embedding 名称
DEFAULT_EMBEDDING_MODEL: "text-embedding-ada-002"
# # 平台名称
platform_name: chatanywhere
MODEL_PLATFORMS:
- platform_name: chatanywhere
platform_type: openai
api_base_url: https://api.chatanywhere.tech/v1
api_key: sk-J3LQR******************
api_proxy: ''
api_concurrencies: 5
auto_detect_model: false
llm_models:
- gpt-4o-mini
- gpt-4o-ca
- gpt-4-ca
embed_models:
- text-embedding-3-small
- text-embedding-3-large
- text-embedding-ada-002
text2image_models: []
image2text_models: []
rerank_models: []
speech2text_models: []
text2speech_models: []
10.1.4.2 配置知识库路径(basic_settings.yaml
)(可选)
默认知识库位于 CHATCHAT_ROOT/data/knowledge_base
,如果你想把知识库放在不同的位置,或者想连接现有的知识库,可以在这里修改对应目录即可。
# 知识库默认存储路径
KB_ROOT_PATH: D:\chatchat-test\data\knowledge_base
# 数据库默认存储路径。如果使用sqlite,可以直接修改DB_ROOT_PATH;如果使用其它数据库,请直接修改SQLALCHEMY_DATABASE_URI。
DB_ROOT_PATH: D:\chatchat-test\data\knowledge_base\info.db
# 知识库信息数据库连接URI
SQLALCHEMY_DATABASE_URI: sqlite:///D:\chatchat-test\data\knowledge_base\info.db
10.1.4.3 配置知识库(kb_settings.yaml
)(可选)
默认使用 FAISS
知识库,如果想连接其它类型的知识库,可以修改 DEFAULT_VS_TYPE
和 kbs_config
。
10.1.4.4 配置搜索引擎(tool_settings.yml
)
# 搜索引擎工具配置项。推荐自己部署 searx 搜索引擎,国内使用最方便。
search_internet:
use: true
search_engine_name: duckduckgo
search_engine_config:
bing:
bing_search_url: https://api.bing.microsoft.com/v7.0/search
bing_key: '6f4f35****'
10.1.5 启动服务
10.1.5.1 初始化知识库
运行下面命令初始化。
chatchat kb -r
更多功能可以查看 chatchat kb --help
10.1.5.2 启动项目
chatchat start -a
出现网页界面即为启动成功。