10  本地知识库

使用 langchain-chatchat 构建本地知识库。

要在 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 及后续会提供支持的多模态模型等,均改为支持市面常见的各大模型推理框架接入,如 XinferenceOllamaLocalAIFastChatOne 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
    
    # 下载分词器所需的预定义标注表
    nltk.download('punkt_tab')
    
    # 下载词性标注器的预训练模型,支持对英文文本进行词性标注
    nltk.download('averaged_perceptron_tagger_eng')

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_TYPEkbs_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

出现网页界面即为启动成功。

10.2 更新知识库