LIRE CECI EN ANGLAIS
LangChain-Chatchat (anciennement Langchain-ChatGLM)
Basé sur de grands modèles de langage tels que ChatGLM et des frameworks d'application tels que Langchain, il s'agit d'un projet d'application open source RAG et Agent qui peut être déployé hors ligne.
Aperçu
Présentation de la fonction
Présentation des fonctionnalités de la version 0.3.x
Cadres et modèles d'inférence de modèles pris en charge
Commencez rapidement
installation et déploiement de pip
Installation et déploiement du code source/développement
Déploiement Docker
Jalons du projet
Contactez-nous
?️ Une application de questions-réponses basée sur une base de connaissances locale mise en œuvre à l'aide des idées de Langchain. L'objectif est de créer une solution de questions-réponses de base de connaissances compatible avec les scénarios chinois et les modèles open source et pouvant s'exécuter hors ligne.
? Inspirée par le projet document.ai de GanymedeNil et la demande d'extraction ChatGLM-6B créée par Alex Zhangji, une application de questions-réponses de base de connaissances locale qui peut être implémentée à l'aide de modèles open source tout au long du processus a été créée. Dans la dernière version de ce projet, des frameworks tels que Xinference et Ollama peuvent être utilisés pour accéder à des modèles tels que GLM-4-Chat, Qwen2-Instruct, Llama3, etc., en s'appuyant sur le framework langchain pour prendre en charge les services d'appel via des API fournies basées sur sur FastAPI, ou en utilisant le WebUI basé sur Streamlit.
✅ Ce projet prend en charge le LLM open source grand public, les modèles d'intégration et les bases de données vectorielles sur le marché, et peut réaliser un déploiement privé hors ligne de tous les modèles open source . Dans le même temps, ce projet prend également en charge l'appel de l'API OpenAI GPT et continuera d'élargir 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 top k
du vecteur de texte le plus similaire au vecteur de question top k
-> Le texte correspondant est ajouté à prompt
en tant que contexte et question -> Soumis à LLM
pour générer une réponse.
?Vidéo d'introduction au principe
Du point de vue du traitement des documents, le processus de mise en œuvre est le suivant :
? Ce projet n'implique pas de processus de réglage ou de formation, mais le réglage ou la formation peuvent être utilisés pour optimiser l'effet de ce projet.
? Le code utilisé dans la version 0.3.0
de l'image AutoDL a été mis à jour vers la version v0.3.0
de ce projet.
? L'image Docker sera mise à jour dans un avenir proche.
?? Si vous souhaitez contribuer à ce projet, veuillez consulter le guide de développement pour obtenir plus d'informations sur le développement et le déploiement.
Fonction | 0.2.x | 0.3.x |
---|---|---|
Accès au modèle | Local : chat rapide En ligne : XXXModelWorker | Local : model_provider, prend en charge la plupart des frameworks de chargement de modèles courants. En ligne : oneapi Tous les accès aux modèles sont compatibles avec openai sdk |
Agent | ❌Instable | ✅Optimisées pour ChatGLM3 et Qwen, les capacités des agents sont considérablement améliorées |
Conversation LLM | ✅ | ✅ |
Conversation sur la base de connaissances | ✅ | ✅ |
conversation sur les moteurs de recherche | ✅ | ✅ |
conversation de fichier | ✅Récupération de vecteurs uniquement | ✅Unifié dans la fonction File RAG, prenant en charge plusieurs méthodes de recherche telles que BM25+KNN |
Dialogue de base de données | ❌ | ✅ |
Dialogue d'images multimodal | ❌ | ✅ Il est recommandé d'utiliser qwen-vl-chat |
Dialogue littéraire ARXIV | ❌ | ✅ |
Conversation sur Wolfram | ❌ | ✅ |
Image vincentienne | ❌ | ✅ |
Gestion de la base de connaissances locale | ✅ | ✅ |
WEBUI | ✅ | ✅Meilleure prise en charge multi-sessions, mots d'invite du système personnalisés... |
Les fonctions principales de la version 0.3.x sont implémentées par l'Agent, mais les utilisateurs peuvent également implémenter manuellement des appels d'outils :
Mode de fonctionnement | Fonctions implémentées | Scénarios applicables |
---|---|---|
Cochez "Activer l'agent" et sélectionnez plusieurs outils | Appel automatique d'outil par LLM | Utilisez des modèles avec des fonctionnalités d'agent telles que ChatGLM3/Qwen ou une API en ligne |
Cochez "Activer l'agent" et sélectionnez un seul outil | LLM analyse uniquement les paramètres de l'outil | L'agent modèle utilisé a des capacités moyennes et ne peut pas très bien sélectionner les outils. Je souhaite sélectionner les fonctions manuellement. |
Décochez "Activer l'agent" et sélectionnez un seul outil | Sans utiliser la fonction Agent, renseignez manuellement les paramètres pour appeler l'outil. | Le modèle utilisé n'a pas de capacités d'agent |
Décochez n’importe quel outil et téléchargez une image | Conversation en images | Utilisez des modèles multimodaux tels que qwen-vl-chat |
Pour plus de fonctionnalités et de mises à jour, veuillez expérimenter le déploiement réel.
Ce projet prend déjà en charge les récents modèles de langage open source et les modèles d'intégration qui sont courants sur le marché, tels que GLM-4-Chat et Qwen2-Instruct. Ces modèles nécessitent que les utilisateurs démarrent eux-mêmes le cadre de déploiement du modèle et accèdent au projet en modifiant le fichier. informations de configuration. Ce projet Les frameworks de déploiement de modèles locaux pris en charge sont les suivants :
Cadre de déploiement de modèles | Xinférence | IA locale | Ollama | Chat rapide |
---|---|---|---|---|
Alignement de l'interface API OpenAI | ✅ | ✅ | ✅ | ✅ |
Accélérez les moteurs d’inférence | GPTQ, GGML, vLLM, TensorRT, mlx | GPTQ, GGML, vLLM, TensorRT | GGUF, GGML | vLLM |
Type de modèle d'accès | LLM, intégration, reclassement, texte-image, vision, audio | LLM, intégration, reclassement, texte-image, vision, audio | LLM, texte-image, vision | LLM, Vision |
Appel de fonction | ✅ | ✅ | ✅ | / |
Plus de support de plate-forme (CPU, Metal) | ✅ | ✅ | ✅ | ✅ |
Hétérogène | ✅ | ✅ | / | / |
grappe | ✅ | ✅ | / | / |
Lien vers le document opérationnel | Documentation | Documentation LocalAI | Documentation Ollama | Documentation FastChat |
Modèles disponibles | Xinference prend déjà en charge les modèles | LocalAI prend déjà en charge les modèles | Ollama supporte déjà les modèles | FastChat prend déjà en charge les modèles |
En plus du cadre de chargement de modèles local mentionné ci-dessus, le projet prend également en charge l'accès au cadre One API aux API en ligne, notamment OpenAI ChatGPT, Azure OpenAI API, Anthropic Claude, Zhipu Qingyan, Baichuan et d'autres API en ligne couramment utilisées. utiliser.
Note
À propos du chargement des modèles locaux par Xinference : les modèles intégrés de Xinference seront automatiquement téléchargés. Si vous souhaitez qu'il charge le modèle téléchargé localement, vous pouvez exécuter l' streamlit run xinference_manager.py
dans le répertoire tools/model_loaders du projet après avoir démarré le service Xinference. invites de la page : spécifiez simplement le modèle pour définir le chemin local.
? En termes de logiciel, ce projet a pris en charge l'utilisation dans l'environnement Python 3.8-3.11 et a été testé sur les systèmes d'exploitation Windows, macOS et Linux.
? En termes de matériel, puisque la version 0.3.0 a été modifiée pour prendre en charge l'accès à différents cadres de déploiement de modèles, elle peut être utilisée dans différentes conditions matérielles telles que CPU, GPU, NPU, MPS, etc.
A partir de la version 0.3.0, Langchain-Chachat propose une méthode d'installation sous la forme d'une bibliothèque Python. Pour une installation spécifique, veuillez exécuter :
pip installe langchain-chatchat -U
Important
Pour s'assurer que la bibliothèque Python utilisée est la dernière version, il est recommandé d'utiliser la source officielle Pypi ou la source Tsinghua.
Note
Étant donné que le framework de déploiement de modèles Xinference nécessite une installation supplémentaire de la bibliothèque de dépendances Python correspondante lors de la connexion à Langchain-Chachat, il est recommandé d'utiliser la méthode d'installation suivante lors de son utilisation avec le framework Xinference :
pip install "langchain-chatchat[xinference]" -U
À partir de la version 0.3.0, Langchain-Chatchat ne charge plus les modèles directement en fonction du chemin de modèle local saisi par l'utilisateur. Les types de modèles impliqués incluent les modèles LLM, Embedding, Reranker et multimodaux qui seront pris en charge à l'avenir. etc., ont été modifiés pour prendre en charge l'accès aux principaux cadres d'inférence de modèles couramment disponibles sur le marché, tels que Xinference, Ollama, LocalAI, FastChat, One API, etc.
Par conséquent, assurez-vous qu'avant de démarrer le projet Langchain-Chachat, exécutez d'abord le cadre d'inférence de modèle et chargez le modèle requis.
Ici, nous prenons Xinference comme exemple. Veuillez vous référer à la documentation Xinference pour le déploiement du framework et le chargement du modèle.
Avertissement
Pour éviter les conflits de dépendances, veuillez placer Langchain-Chachat et les frameworks de déploiement de modèles tels que Xinference dans différents environnements virtuels Python, tels que conda, venv, virtualenv, etc.
À partir de la version 0.3.1, Langchain-Chachat utilise des fichiers yaml
locaux pour la configuration. Les utilisateurs peuvent directement visualiser et modifier le contenu, et le serveur sera automatiquement mis à jour sans redémarrer.
Définir le répertoire racine dans lequel Chatchat stocke les fichiers de configuration et les fichiers de données (facultatif)
# sous Linux ou macosexport CHATCHAT_ROOT=/path/to/chatchat_data # sur windowsset CHATCHAT_ROOT=/path/to/chatchat_data
Si cette variable d'environnement n'est pas définie, le répertoire courant sera automatiquement utilisé.
Effectuer l'initialisation
initialisation du chatchat
Cette commande effectue les opérations suivantes :
Créez tous les répertoires de données requis
Copier les exemples de contenu de la base de connaissances
Générer le fichier de configuration yaml
par défaut
Modifier le fichier de configuration
Configurer le modèle (model_settings.yaml)
Vous devez effectuer la configuration de l'accès au modèle en fonction du cadre d'inférence de modèle sélectionné à l'étape 2. Modèle d'inférence et charger le modèle et le modèle chargé. Pour plus de détails, reportez-vous aux commentaires dans model_settings.yaml
. Modifiez principalement le contenu suivant :
# Le nom LLM par défaut DEFAULT_LLM_MODEL : qwen1.5-chat # Le nom d'intégration par défaut DEFAULT_EMBEDDING_MODEL : bge-large-zh-v1.5 # Remplacez les clés de `llm_model, action_model` dans `LLM_MODEL_CONFIG` par le modèle LLM correspondant# existe Modifiez les informations de plate-forme de modèle correspondantes dans `MODEL_PLATFORMS`
Configurer le chemin de la base de connaissances (basic_settings.yaml) (facultatif)
La base de connaissances par défaut se trouve dans CHATCHAT_ROOT/data/knowledge_base
. Si vous souhaitez placer la base de connaissances dans un emplacement différent ou si vous souhaitez vous connecter à une base de connaissances existante, vous pouvez modifier le répertoire correspondant ici.
# Chemin de stockage par défaut de la base de connaissances KB_ROOT_PATH : D:chatchat-testdataknowledge_base # Chemin de stockage par défaut de la base de données. Si vous utilisez SQLite, vous pouvez modifier directement DB_ROOT_PATH ; si vous utilisez d'autres bases de données, veuillez modifier directement SQLALCHEMY_DATABASE_URI. DB_ROOT_PATH : D:chatchat-testdataknowledge_baseinfo.db # URI de connexion à la base de données d'informations de la base de connaissances SQLALCHEMY_DATABASE_URI : sqlite:///D:chatchat-testdataknowledge_baseinfo.db
Configurer la base de connaissances (kb_settings.yaml) (facultatif)
La base de connaissances FAISS
est utilisée par défaut. Si vous souhaitez vous connecter à d'autres types de bases de connaissances, vous pouvez modifier DEFAULT_VS_TYPE
et kbs_config
.
Avertissement
Avant d'initialiser la base de connaissances, veuillez vous assurer que le cadre d'inférence de modèle et le modèle embedding
correspondant ont été démarrés et que la configuration de l'accès au modèle a été effectuée conformément à l'étape 3 ci-dessus.
chatchat ko -r
Pour plus de fonctions, voir chatchat kb --help
Le journal suivant apparaît indiquant le succès :
----------------------------------------------------------------------------------------------------
知识库名称 :samples
知识库类型 :faiss
向量模型: :bge-large-zh-v1.5
知识库路径 :/root/anaconda3/envs/chatchat/lib/python3.11/site-packages/chatchat/data/knowledge_base/samples
文件总数量 :47
入库文件数 :42
知识条目数 :740
用时 :0:02:29.701002
----------------------------------------------------------------------------------------------------
总计用时 :0:02:33.414425
Note
Foire aux questions sur l'initialisation de la base de connaissances
Ce problème se produit souvent dans les environnements virtuels nouvellement créés et peut être confirmé par :
from unstructured.partition.auto import partition
Si l'instruction est bloquée et ne peut pas être exécutée, vous pouvez exécuter la commande suivante :
pip uninstall python-magic-bin# vérifie la version du package désinstallé pip install 'python-magic-bin=={version}'
Suivez ensuite les instructions de cette section pour recréer la base de connaissances.
chatchat démarrer -a
Lorsque l'interface suivante apparaît, le démarrage est réussi :
Avertissement
Étant donné que l'adresse d'écoute par défaut DEFAULT_BIND_HOST
configurée par chatchat est 127.0.0.1, elle n'est pas accessible via d'autres IP.
Si vous devez accéder via l'adresse IP de la machine (comme le système Linux), vous devez modifier l'adresse d'écoute en 0.0.0.0 dans basic_settings.yaml
.
Pour la configuration des conversations de base de données, veuillez consulter ici les instructions de configuration des conversations de base de données.
Veuillez vous référer au guide de développement pour l'installation et le déploiement du code source.
docker pull chatimage/chatchat:0.3.1.3-93e2c87-20240829 docker pull ccr.ccs.tencentyun.com/langchain-chatchat/chatchat:0.3.1.3-93e2c87-20240829 # Miroir domestique
Important
Fortement recommandé : utilisez le déploiement docker-compose, veuillez vous référer à README_docker pour plus de détails
La structure de 0.3.x a beaucoup changé, et il est fortement recommandé de redéployer conformément à la documentation. Le guide suivant ne garantit pas une compatibilité et un succès à 100 %. Pensez à sauvegarder les données importantes à l'avance !
Suivez d'abord les étapes安装部署
pour configurer l'environnement d'exploitation et modifier le fichier de configuration.
Copiez le répertoire knowledge_base du projet 0.2.x dans le répertoire DATA
configuré
2023年4月
: Langchain-ChatGLM 0.1.0
est sorti, prenant en charge les questions et réponses de la base de connaissances locale basées sur le modèle ChatGLM-6B.
2023年8月
: Langchain-ChatGLM
a été renommé Langchain-Chatchat
, la version 0.2.0
a été publiée, utilisant fastchat
comme solution de chargement de modèle, prenant en charge davantage de modèles et de bases de données.
2023年10月
: Langchain-Chatchat 0.2.5
est sorti, lançant le contenu Agent, et le projet open source remporte le troisième prix du hackathon organisé par Founder Park & Zhipu AI & Zilliz
.
2023年12月
: Langchain-Chatchat
a reçu plus de 20K étoiles.
2024年6月
: Sortie de Langchain-Chatchat 0.3.0
, apportant une nouvelle structure de projet.
? Attendons avec impatience la future histoire de Chatchat...
Le code de ce projet suit le protocole Apache-2.0.
? Groupe de communication WeChat du projet Langchain-Chachat Si vous êtes également intéressé par ce projet, vous êtes invités à rejoindre le chat de groupe pour participer à la discussion et à l'échange.
? Compte public officiel du projet Langchain-Chachat, bienvenue pour scanner le code QR à suivre.
Si ce projet est utile à vos recherches, merci de nous citer :
@software{langchain_chatchat, title = {{langchain-chatchat}}, author = {Liu, Qian and Song, Jinke, and Huang, Zhiguo, and Zhang, Yuxuan, and glide-the, and liunux4odoo}, year = 2024, journal = {GitHub repository}, publisher = {GitHub}, howpublished = {url{https://github.com/chatchat-space/Langchain-Chatchat}} }