LangChain-Chatchat : Création d'une base de connaissances locale sur la privatisation hors ligne basée sur LangChain et ChatGLM2-6B

Si cet article vous intéresse et que vous souhaitez en savoir plus sur les compétences pratiques dans le domaine de l'IA, vous pouvez prêter attention au compte public « Technology Craze AI » . Ici, vous pouvez voir les articles les plus récents et les plus populaires sur les produits secs et les didacticiels de cas dans le domaine AIGC.

Introduction

Depuis la popularité du modèle GPT l'année dernière, il a abaissé le seuil pour de nombreux particuliers et entreprises pour entrer dans le domaine de l'intelligence artificielle. Les grands modèles, en particulier les grands modèles open source, devraient recevoir plus d'attention et d'attentes en Chine. Après tout, des coûts élevés peuvent également bloquer de nombreuses personnes.À l'extérieur de la porte, deuxièmement, tout le monde espère intégrer la capacité du LLM dans le produit, intégrer l'entreprise pour mettre en œuvre une application intelligente et améliorer la compétitivité du produit.L'application la plus directe est de construire un base de connaissances.

Ce qui suit est un résumé des articles et vidéos présentés précédemment liés à la création d'une base de connaissances, y compris une variété de solutions open source et fermées. Du point de vue de l'utilisation, car ce sont tous des produits open source, en termes de architecture et intégrité fonctionnelle Il n'est peut-être pas assez complet, car il y a eu un processus itératif continu. Du point de vue d'une petite et moyenne entreprise, sélectionner un produit qui correspond davantage aux besoins des entreprises pour construire une base de connaissances pour l'évaluation. À partir de la mise en œuvre actuelle des produits open source présentés ci-dessous Du point de vue des effets et des objectifs de planification futurs, je pense personnellement que Quivr est plus conforme aux exigences de l'application en termes de conception. Le principe est d'augmenter la capacité de la bibliothèque de documents et la base de données existantes de l'entreprise doivent être incluses dans la base de connaissances, étendre les fonctions améliorées par Answer et améliorer et enrichir l'open source ou la source fermée. Le support du modèle (support temporairement faible) est particulièrement destiné aux modèles nationaux avec un bon support chinois, comme ChatGLM2. Une autre solution est que LangChain-Chatchat introduit aujourd'hui peut simplement compléter Quivr. La prise en charge des attributs du côté commercial est faible et ne prend en charge qu'un seul utilisateur et une seule base de connaissances, et ne peut pas établir plusieurs bases de connaissances à isoler via des autorisations .

Bien entendu, il n'est pas exclu qu'il existe d'autres solutions plus adaptées. Au moins, les produits open source sont plus ou moins difficiles à utiliser directement comme applications de production et un deuxième développement est nécessaire pour les améliorer. Les produits open source matures sont essentiellement la plupart d'entre eux empruntant la voie commerciale, ou open source via des frais de service, tels que la formation au réglage fin des modèles, la construction de grands modèles pour des applications industrielles spécifiques et la fourniture de capacités d'API de modèle au monde extérieur.

Il existe de nombreuses solutions et produits parmi lesquels choisir lorsqu'il s'agit de créer une base de connaissances à l'échelle de l'entreprise, à la fois open source et fermée. La technologie de base de ces solutions est basée sur LangChain, comme Quivr combiné avec Supabase, PrivateGPT et ChatGLM 6B, etc. Dans le même temps, il existe également une plate-forme sans code Flowise, qui fournit une multitude de composants intégrés basés sur LangChain.js pour aider les utilisateurs à créer rapidement des applications telles que des chatbots, des clients intelligents et des questions de connaissances.

Afin de résoudre le problème de l'extension et de la maintenance du modèle, Stan Girard a développé Genoss pour découpler complètement la capacité d'extension du modèle en créant une API simple. De plus, Danswer est un projet open source présentant l'avantage des connecteurs, qui peuvent facilement ajouter des documents à la base de données vectorielles pour l'indexation.

Lors du choix d'un modèle de privatisation local, le modèle open source ChatGPT-6B de l'Université Tsinghua est compatible avec le support chinois et peut fonctionner sur des cartes graphiques grand public. Le développement de grands modèles de langage facilite des scénarios tels que le service client intelligent, la récupération de documents et la recherche de code, et améliore la productivité. Coral, un assistant de base de connaissances en IA, se consacre à résoudre les problèmes des entreprises et à redéfinir la productivité.

En conclusion, il existe plusieurs solutions parmi lesquelles choisir lors de la création d’une base de connaissances au niveau de l’entreprise. Choisissez la solution appropriée en fonction des besoins et des scénarios réels et utilisez les avantages techniques du grand modèle de langage pour améliorer la productivité et l'efficacité de l'entreprise.

2. Présentation

2.1、ChatGLM2-6B

ChatGLM 2-6B est la version de deuxième génération du modèle de dialogue bilingue chinois-anglais open source ChatGLM-6B . Sur la base de la conservation de nombreuses excellentes fonctionnalités du modèle de première génération, telles qu'un dialogue fluide et un faible seuil de déploiement, ChatGLM 2 - 6B introduit les nouvelles fonctionnalités suivantes :

  1. Performances plus puissantes : sur la base de l'expérience de développement du modèle de première génération de ChatGLM, nous avons entièrement mis à niveau le modèle de base de ChatGLM2-6B. ChatGLM2-6B utilise la fonction objectif mixte de GLM et a subi une pré-formation d'identifiants chinois-anglais 1,4T et une formation à l'alignement des préférences humaines. Les résultats de l'évaluation montrent que par rapport au modèle original, ChatGLM2-6B est meilleur en MMLU (+ 23%), CEval (+33%), GSM8K (+571%), BBH (+60%) et d'autres ensembles de données ont obtenu une amélioration substantielle de leurs performances et ont une forte compétitivité dans les modèles open source de même taille.

  2. Contexte plus long : sur la base de la technologie FlashAttention , nous avons étendu la longueur du contexte (Longueur du contexte) du modèle de piédestal de 2K de ChatGLM-6B à 32K, et utilisé une formation de longueur de contexte de 8K dans la phase de dialogue. Pour un contexte plus long, nous publions le modèle ChatGLM2-6B-32K . Les résultats de l'évaluation LongBench montrent que parmi les modèles open source de même ampleur, ChatGLM2-6B-32K présente un avantage concurrentiel plus évident.

  3. Raisonnement plus efficace : basé sur la technologie Multi-Query Attention , ChatGLM2-6B a une vitesse de raisonnement plus efficace et une utilisation moindre de la mémoire vidéo : sous la mise en œuvre du modèle officiel, la vitesse de raisonnement est 42 % supérieure à celle de la première génération. Sous la quantification INT4, 6G La longueur des dialogues prise en charge par la mémoire vidéo a été augmentée de 1K à 8K.

  4. Protocole plus ouvert : les poids ChatGLM2-6B sont totalement ouverts à la recherche académique , et une utilisation commerciale gratuite est également autorisée après avoir rempli le questionnaire d'inscription .

2.2 Introduction de LangChain-Chatchat

LangChain-Chatchat (anciennement Langchain-ChatGLM) : une base de connaissances locale répondant aux questions de mise en œuvre d'applications basées sur de grands modèles de langage tels que Langchain et ChatGLM. Une application de questions-réponses basée sur la base de connaissances locale réalisée en utilisant l'idée de LangChain. Son objectif est d'établir une solution de questions-réponses de base de connaissances qui soit conviviale pour les scènes chinoises et les modèles open source et puisse fonctionner hors ligne.

Son idée principale est d'utiliser FastChat pour accéder à des modèles tels que Vicuna, Alpaca, LLaMA, Koala, RWKV, etc., puis de s'appuyer sur le framework LangChain pour prendre en charge les services d'appel via des API basées sur FastAPI , ou d'utiliser l'interface Web basée sur Streamlit pour les opérations. .

S'appuyant sur les modèles open source LLM et Embedding pris en charge par ce projet, tous peuvent être implémentés à l'aide du modèle open source de déploiement privé hors ligne . Dans le même temps, ce projet prend également en charge l'appel de l'API OpenAI GPT et continuera d'étendre l'accès à divers modèles et API de modèles à l'avenir.

Le principe de mise en œuvre de ce projet est illustré dans la figure ci-dessous. Le processus comprend le chargement de fichiers -> la lecture du texte -> la segmentation du texte -> la vectorisation du texte -> la vectorisation des questions -> la correspondance la plus similaire au vecteur de questions dans le vecteur de texte- > Le texte correspondant est ajouté comme contexte à la question -> soumise pour générer une réponse .top kpromptLLM

3. Prise en charge du modèle

Le modèle LLM par défaut utilisé par LangChain-Chatchat est THUDM/chatglm2-6b , et le modèle d'intégration par défaut utilisé est moka-ai/m3e-base à titre d'exemple.

3.1, prise en charge du modèle LLM

À l'heure actuelle, la dernière version est basée sur FastChat pour l'accès local aux modèles LLM. À l'heure actuelle, plus de 30 modèles ont été officiellement consultés et pris en charge . La liste spécifique est la suivante :

La liste des modèles pris en charge ci-dessus peut être continuellement mise à jour avec les mises à jour de FastChat , veuillez vous référer à la liste des modèles pris en charge par FastChat .

En plus du modèle local, ce projet prend également en charge l'accès direct à l'API OpenAI. Pour des paramètres spécifiques, veuillez vous référer aux informations de configuration configs/model_configs.py.exampledans .llm_model_dictopenai-chatgpt-3.5

3.2, Prise en charge du modèle d'intégration

Pour le modèle de construction de vecteurs de texte, le modèle d'intégration dans HuggingFace est actuellement pris en charge. Actuellement, les modèles d'intégration pris en charge atteignent plus de 15. La liste de support spécifique est la suivante :

4. Déploiement du projet

4.1. Description environnementale

Ici, le serveur GPU étranger d'Alibaba Cloud est utilisé pour démontrer comment déployer une base de connaissances locale basée sur ChatGLM2-6B. Les informations de configuration de base du serveur sont les suivantes :

  • CPU : 8 noyaux (vCPU)

  • Mémoire : 30 Gio

  • GPU : Mémoire NVIDIA A10 24 Go

4.2. Installer Conda

  • S'il s'agit d'un tout nouveau serveur, vous devez installer Conda pour la première fois. Dans le terminal, utilisez la commande suivante pour télécharger le script d'installation de Miniconda :
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
  • Exécutez le script d'installation avec la commande suivante :
bash Miniconda3-latest-Linux-x86_64.sh
  • Suivez les invites du programme d'installation pour installer. Vous pouvez choisir des options telles que l'emplacement d'installation et les paramètres des variables d'environnement.

  • Une fois l'installation terminée, fermez le terminal et rouvrez-en un nouveau. Dans le nouveau terminal, utilisez la commande suivante pour activer l'environnement conda :

 source ~/.bashrc
  • Vérifiez que conda a été installé avec succès avec la commande suivante :
conda --version

Si conda est installé avec succès, vous verrez le numéro de version de conda, j'ai installé conda 23.5.2 ici.

4.3. Installer Python

Tout d’abord, assurez-vous que Python 3.8 - 3.11 est installé sur votre machine

python --version 
Python 3.8.17

S'il n'est pas installé ou est inférieur à cette version, vous pouvez utiliser l'environnement d'installation conda

conda create -p /opt/langchain-chatchat/pyenv python=3.8
激活Python虚拟环境
conda activate /opt/langchain-chatchat/pyenv

关闭环境
conda deactivate /opt/langchain-chatchat/pyenv

# 删除环境
conda env remove -p /opt/langchain-chatchat/pyenv

Le chemin ici peut être ajusté en fonction de votre situation réelle.

root@iZ6we7hvjs7veky0zq7at1Z:/opt/langchain-chatchat# conda activate /opt/langchain-chatchat/pyenv
(/opt/langchain-chatchat/pyenv) root@iZ6we7hvjs7veky0zq7at1Z:/opt/langchain-chatchat# python --version
Python 3.8.17
(/opt/langchain-chatchat/pyenv) root@iZ6we7hvjs7veky0zq7at1Z:/opt/langchain-chatchat# 

Mettre à jour la bibliothèque py

pip3 install --upgrade pip

4.4. Dépendances du projet

# 拉取仓库
$ git clone https://github.com/chatchat-space/Langchain-Chatchat.git

# 进入目录
$ cd Langchain-Chatchat

Utilisez la source pypi pour installer toutes les dépendances (les dépendances par défaut incluent l'environnement d'exploitation de base (bibliothèque vectorielle FAISS). Si vous souhaitez utiliser des bibliothèques vectorielles telles que milvus/pg_vector, veuillez décommenter les dépendances correspondantes dans Requirements.txt avant l'installation)

pip install -r requirements.txt -i https://pypi.python.org/simple

Remarque : L'installation par défaut ne spécifie pas de miroir [pip install -r conditions.txt] Il peut y avoir des dépendances ou d'autres erreurs étranges pendant le processus d'installation. Il est recommandé de spécifier une source miroir pour le téléchargement. Les serveurs étrangers utilisent des miroirs pypi, et les serveurs nationaux peuvent utiliser la source Aliyuan ou l'Université Tsinghua.

# 使用阿里源
$ pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/

# 使用清华源
$ pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/

Lors de l'installation des dépendances, les erreurs suivantes peuvent se produire :

Impossible de trouver une version qui satisfait à l'exigence setuptools_scm (à partir des versions : aucune)

Cette erreur apparaît généralement en cas de problème lors de l'installation ou de la configuration setuptools_scmd'un package. Il suffit de réinstaller setuptools_scm.

pip install --index-url https://pypi.org/simple/ setuptools_scm

4.5. Télécharger le modèle

Étant donné que le fichier de modèle est généralement relativement volumineux (le fichier de poids du modèle de ChatGLM2-6B fait presque 12 Go), vous devez d'abord installer Git LFS.

# 添加Git LFS的APT存储库。运行以下命令将Git LFS的APT存储库添加到您的系统中:
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash

# 安装Git LFS。运行以下命令来安装Git LFS:
sudo apt-get install git-lfs

# 安装完成后,您可以运行以下命令来验证Git LFS是否已成功安装:
git lfs version

# 如果成功安装,您将看到Git LFS的版本信息。
git-lfs/3.4.0 (GitHub; linux amd64; go 1.20.6)

Téléchargez le modèle dans le répertoire de fichiers spécifié

# 下载 LLM 模型
$ git clone https://huggingface.co/THUDM/chatglm2-6b /your_path/chatglm-6b

# 下载 Embedding 模型
$ git clone https://huggingface.co/GanymedeNil/text2vec-large-chinese /your_path/text2vec

# 模型需要更新时,可打开模型所在文件夹后拉取最新模型文件/代码
$ git pull

Remplacez simplement your_path par le chemin de téléchargement réel de votre modèle. Ici, je mets le modèle dans /opt/langchain-chatchat/modelsle répertoire.

$ git clone https://huggingface.co/THUDM/chatglm2-6b /opt/langchain-chatchat/models/chatglm-6b

$ git clone https://huggingface.co/moka-ai/m3e-base /opt/langchain-chatchat/models/m3e-base

4.6. Définition des éléments de configuration

Copiez le fichier de modèle de configuration des paramètres liés au modèle configs/model_config.py.example et stockez-le sous le chemin du projet ./configset renommez-le en model_config.py.

cp model_config.py.example model_config.py

Copiez le fichier de modèle de configuration des paramètres liés au service configs/server_config.py.example dans le ./configschemin sous le chemin du projet et renommez-le en server_config.py.

cp server_config.py.example server_config.py

Avant de commencer à exécuter l'interface utilisateur Web ou l'interaction en ligne de commande, veuillez vérifier si la conception de chaque paramètre du modèle configs/model_config.pyrépond aux exigences :configs/server_config.py

  • Veuillez confirmer que le chemin de stockage local du modèle LLM téléchargé est écrit dans l'attribut llm_model_dictdu modèle correspondant local_model_path, tel que :
llm_model_dict={
    "chatglm2-6b": {
            "local_model_path": "/opt/langchain-chatchat/models/chatglm-6b",
            "api_base_url": "http://localhost:8888/v1",  # "name"修改为 FastChat 服务中的"api_base_url"
            "api_key": "EMPTY"
     }
}
  • Veuillez confirmer que le chemin de stockage local du modèle d'intégration qui a été téléchargé en local est écrit à l' embedding_model_dictemplacement du modèle correspondant, tel que :
embedding_model_dict = {
     "m3e-base": "/opt/langchain-chatchat/models/m3e-base",
}

Si vous choisissez d'utiliser le modèle d'intégration d'OpenAI, veuillez keyécrire le modèle embedding_model_dict. Pour utiliser ce modèle, vous devez pouvoir accéder à l'API officielle d'OpenAI ou configurer un proxy.

4.7. Initialisation de la base de connaissances

Les informations de la base de connaissances du projet en cours sont stockées dans la base de données, veuillez initialiser la base de données avant de lancer officiellement le projet (nous vous recommandons fortement de sauvegarder vos fichiers de connaissances avant d'effectuer des opérations).

  • Si vous êtes 0.1.xun utilisateur qui a effectué une mise à niveau à partir de la version, pour la base de connaissances établie, veuillez confirmer que le type de bibliothèque vectorielle et le modèle d'intégration de la base de connaissances sont cohérents configs/model_config.pyavec les paramètres par défaut dans , s'il n'y a aucun changement, il vous suffit de ajoutez les informations de la base de connaissances existante à la base de données avec la commande suivante. Vous pouvez :
$ python init_database.py
  • Si vous exécutez ce projet pour la première fois, que la base de connaissances n'a pas été établie, ou que le type de base de connaissances et le modèle intégré dans le fichier de configuration ont changé, ou que la bibliothèque vectorielle précédente n'a pas été ouverte, vous avez besoin de la commande suivante pour initialiser ou reconstruire la base de connaissances normalize_L2:
$ python init_database.py --recreate-vs

4.8. Démarrez le service LLM

Si vous devez utiliser le modèle open source pour le déploiement local, vous devez d'abord démarrer le service LLM. Si vous démarrez le service API en ligne (tel que l'interface API d'OPENAI), vous n'avez pas besoin de démarrer le service LLM.

Ici, nous choisissons de démarrer le service LLM basé sur le script multi-processus llm api.py. Dans le répertoire racine du projet, exécutez le script server/llm api.py pour démarrer le service de modèle LLM :

$ python server/llm_api.py

Si le serveur de déploiement dispose d'une ou plusieurs cartes graphiques GPU, il vous suffit de modifier les trois paramètres suivants dans la fonction de création d'application de travail de modèle dans llm api.py :

gpus=None, 
num_gpus=1, 
max_gpu_memory="20GiB"

Parmi eux, gpuscontrôlez l'ID de la carte graphique utilisée, si "0,1" ; num_gpuscontrôlez le nombre de cartes utilisées ; max_gpu_memorycontrôlez la capacité mémoire utilisée par chaque carte.

4.9. Démarrez le service API

Lorsque vous appelez le service API en ligne, exécutez directement le script server/api.py pour démarrer le service API ;

python server/api.py

Après avoir démarré le service API, vous pouvez visiter localhost:7861la {API 所在服务器 IP}:7861documentation générée automatiquement par FastAPI pour visualiser et tester l'interface.

  • Interface de documentation FastAPI

4.9. Démarrez le service de l'interface utilisateur Web

Utilisez la couleur du thème Langchain-Chatchat pour démarrer le service Web UI (le port est utilisé par défaut 8501)

$ streamlit run webui.py --theme.base "light" --theme.primaryColor "#165dff" --theme.secondaryBackgroundColor "#f5f5f5" --theme.textColor "#000000"
  • Interface de dialogue de l'interface utilisateur Web :

  • Page de gestion de la base de connaissances de l'interface utilisateur Web :

说明:安装过程中如果遇到其它的问题,建议先去官方GitHub的FAQ中看看,大部分问题已经有解决方案了。 https://github.com/chatchat-space/Langchain-Chatchat/blob/master/docs/FAQ.md

5. Déploiement de l'environnement Docker

Si vous souhaitez déployer rapidement les produits LangChain-Chatchat , vous pouvez choisir la méthode de déploiement Docker en un clic, qui est relativement simple. Il vous suffit d'installer d'abord le conteneur Docker. Comment installer Docker et Docker Compose dans l'environnement Ubuntu , vous pouvez vous référer à l'article « Quivr est basé sur GPT et open source Section 3.2 dans » . Je n'entrerai pas dans les détails ici. L'installation de Docker sur Windows est plus simple.

La version utilisée par l'image Docker est généralement légèrement en retard. Si vous souhaitez découvrir rapidement la dernière version, il est plus approprié de la déployer selon le mode de développement précédent.

L'adresse de l'image Docker utilisée par le projet LangChain-Chatchat est :

registry.cn-beijing.aliyuncs.com/chatchat/chatchat:0.2.0

docker run -d --gpus all -p 80:8501 registry.cn-beijing.aliyuncs.com/chatchat/chatchat:0.2.0
  • La taille de l'image de cette version 33.9GB, en utilisant v0.2.0, nvidia/cuda:12.1.1-cudnn8-devel-ubuntu22.04comme image de base

  • embeddingCette version possède un modèle intégré : m3e-large, intégréchatglm2-6b-32k

  • Le but de cette version est de faciliter le déploiement en un clic, assurez-vous d'avoir installé le pilote NVIDIA sur la distribution Linux

  • NVIDIA DriverNotez que vous n'avez pas besoin d'installer la boîte à outils CUDA sur le système hôte, mais elle doit également être installée NVIDIA Container Toolkit, veuillez vous référer au guide d'installation.

  • Il faut un certain temps pour tirer et démarrer pour la première fois. Veuillez vous référer à la figure suivante pour l'utiliser lors du premier démarrage. docker logs -f <container id>Voir le journal

  • Si le processus de démarrage est bloqué dans Waiting..l'étape, il est recommandé d'utiliser pour docker exec -it <container id> bashentrer dans /logs/le répertoire pour afficher le journal de l'étape correspondante

6. Références

ChatGLM2-6B

https://github.com/THUDM/ChatGLM2-6B

LangChain-Chatchat

https://github.com/chatchat-space/Langchain-Chatchat


Si cet article vous intéresse et que vous souhaitez en savoir plus sur les compétences pratiques dans le domaine de l'IA, vous pouvez prêter attention au compte public « Technology Craze AI » . Ici, vous pouvez voir les articles les plus récents et les plus populaires sur les produits secs et les didacticiels de cas dans le domaine AIGC.

おすすめ

転載: blog.csdn.net/FrenzyTechAI/article/details/132528670