Anglais | 简体中文
HuixiangDou est un assistant de connaissances professionnelles basé sur le LLM.
Avantages :
chat_in_group
gère le scénario de discussion de groupe , répond aux questions des utilisateurs sans inondation de messages, voir 2401.08772, 2405.02817, récupération hybride et rapport de précisionchat_with_repo
pour le chat en streaming en temps réelDécouvrez les scènes dans lesquelles HuixiangDou s'exécute et rejoignez le groupe WeChat pour essayer l'assistant IA à l'intérieur.
Si cela vous aide, donnez-lui une étoile
Notre version Web a été publiée sur OpenXLab, où vous pouvez créer une base de connaissances, mettre à jour des exemples positifs et négatifs, activer la recherche sur le Web, tester le chat et intégrer des groupes Feishu/WeChat. Voir BiliBili et YouTube !
L'API de la version Web pour Android prend également en charge d'autres appareils. Voir exemple de code Python.
langchain
?? | LoRA-Qwen1.5-14B | LoRA-Qwen1.5-32B | données sur l'alpaga | arXiv |
LLM | Format de fichier | Méthode de récupération | Intégration | Prétraitement |
|
|
|
|
|
Voici les exigences en matière de mémoire GPU pour différentes fonctionnalités, la différence réside uniquement dans l' activation ou non des options .
Exemple de configuration | Exigences de mémoire GPU | Description | Vérifié sur Linux |
---|---|---|---|
config-cpu.ini | - | Utiliser l'API Siliconcloud pour le texte uniquement | |
config-2G.ini | 2 Go | Utilisez l'API openai (telle que kimi, deepseek et stepfun pour rechercher du texte uniquement | |
config-multimodal.ini | 10 Go | Utilisez l'API openai pour la récupération LLM, d'images et de texte | |
[Édition Standard] config.ini | 19 Go | Déploiement local du LLM, modalité unique | |
config-advanced.ini | 80 Go | LLM local, résolution d'anaphore, modalité unique, pratique pour le groupe WeChat |
Nous prenons l'édition standard (exécution locale LLM, récupération de texte) comme exemple d'introduction. Les autres versions sont simplement différentes dans les options de configuration.
Cliquez pour accepter le modèle d'accord BCE, connectez-vous
huggingface-cli login
Installer les dépendances
# parsing `word` format requirements
apt update
apt install python-dev libxml2-dev libxslt1-dev antiword unrtf poppler-utils pstotext tesseract-ocr flac ffmpeg lame libmad0 libsox-fmt-mp3 sox libjpeg-dev swig libpulse-dev
# python requirements
pip install -r requirements.txt
# For python3.8, install faiss-gpu instead of faiss
Utilisez les documents mmpose pour créer la base de connaissances mmpose et filtrer les questions. Si vous avez vos propres documents, placez-les simplement sous repodir
.
Copiez et exécutez toutes les commandes suivantes (y compris le symbole « # »).
# Download the knowledge base, we only take the documents of mmpose as an example. You can put any of your own documents under `repodir`
cd HuixiangDou
mkdir repodir
git clone https://github.com/open-mmlab/mmpose --depth=1 repodir/mmpose
# Save the features of repodir to workdir, and update the positive and negative example thresholds into `config.ini`
mkdir workdir
python3 -m huixiangdou.service.feature_store
Après l'exécution, testez avec python3 -m huixiangdou.main --standalone
. À ce stade, répondez aux questions connexes (liées à la base de connaissances), sans répondre aux questions météorologiques.
python3 -m huixiangdou.main --standalone
+---------------------------+---------+----------------------------+-----------------+
| Query | State | Reply | References |
+===========================+=========+============================+=================+
| How to install mmpose ? | success | To install mmpose, plea.. | installation.md |
--------------------------------------------------------------------------------------
| How is the weather today ? | unrelated.. | .. | |
+-----------------------+---------+--------------------------------+-----------------+
? Input your question here, type ` bye ` for exit:
..
Note
Exécutez également une interface Web simple avec gradio
:
python3 -m huixiangdou.gradio_ui
Ou exécutez un serveur pour écouter 23333, le pipeline par défaut est chat_with_repo
:
python3 -m huixiangdou.server
# test async API
curl -X POST http://127.0.0.1:23333/huixiangdou_stream -H " Content-Type: application/json " -d ' {"text": "how to install mmpose","image": ""} '
# cURL sync API
curl -X POST http://127.0.0.1:23333/huixiangdou_inference -H " Content-Type: application/json " -d ' {"text": "how to install mmpose","image": ""} '
Veuillez mettre à jour les documents repodir
, good_questions et bad_questions, et essayer vos propres connaissances dans le domaine (médical, financier, énergétique, etc.).
Nous fournissons le code source typescript
front-end et python
back-end :
Identique à l'application OpenXlab, veuillez lire le document de déploiement Web.
Si aucun GPU n'est disponible, l'inférence de modèle peut être effectuée à l'aide de l'API Siliconcloud.
En prenant docker miniconda+Python3.11 comme exemple, installez les dépendances du processeur et exécutez :
# Start container
docker run -v /path/to/huixiangdou:/huixiangdou -p 7860:7860 -p 23333:23333 -it continuumio/miniconda3 /bin/bash
# Install dependencies
apt update
apt install python-dev libxml2-dev libxslt1-dev antiword unrtf poppler-utils pstotext tesseract-ocr flac ffmpeg lame libmad0 libsox-fmt-mp3 sox libjpeg-dev swig libpulse-dev
python3 -m pip install -r requirements-cpu.txt
# Establish knowledge base
python3 -m huixiangdou.service.feature_store --config_path config-cpu.ini
# Q&A test
python3 -m huixiangdou.main --standalone --config_path config-cpu.ini
# gradio UI
python3 -m huixiangdou.gradio_ui --config_path config-cpu.ini
Si vous trouvez l'installation trop lente, une image préinstallée est fournie dans Docker Hub. Remplacez-le simplement lors du démarrage du docker.
Si votre mémoire GPU dépasse 1,8G ou si vous recherchez la rentabilité. Cette configuration ignore le LLM local et utilise à la place le LLM distant, qui est identique à l'édition standard.
Prenez siliconcloud
comme exemple, remplissez le TOKEN API appliqué depuis le site officiel dans config-2G.ini
# config-2G.ini
[ llm ]
enable_local = 0 # Turn off local LLM
enable_remote = 1 # Only use remote
..
remote_type = " siliconcloud " # Choose siliconcloud
remote_api_key = " YOUR-API-KEY-HERE " # Your API key
remote_llm_model = " alibaba/Qwen1.5-110B-Chat "
Note
Exécutez ce qui suit pour obtenir les résultats des questions-réponses
python3 -m huixiangdou.main --standalone --config-path config-2G.ini # Start all services at once
Si vous disposez d'une mémoire GPU 10G, vous pouvez prendre en charge davantage la récupération d'images et de texte. Modifiez simplement le modèle utilisé dans config.ini.
# config-multimodal.ini
# !!! Download `https://huggingface.co/BAAI/bge-visualized/blob/main/Visualized_m3.pth` to `bge-m3` folder !!!
embedding_model_path = " BAAI/bge-m3 "
reranker_model_path = " BAAI/bge-reranker-v2-minicpm-layerwise "
Note:
bpe_simple_vocab_16e6.txt.gz
Exécutez gradio pour tester, voyez le résultat de la récupération de l'image et du texte ici.
python3 tests/test_query_gradio.py
Le « HuiXiangDou » du groupe d'expérience WeChat a activé toutes les fonctionnalités :
Veuillez lire les sujets suivants :
Les contributeurs ont fourni des outils Android pour interagir avec WeChat. La solution est basée sur des API au niveau du système et, en principe, elle peut contrôler n'importe quelle interface utilisateur (sans se limiter aux logiciels de communication).
Que faire si le robot a trop froid/trop bavard ?
resource/good_questions.json
et celles qui doivent être rejetées dans resource/bad_questions.json
.repodir
pour garantir que les documents markdown de la bibliothèque principale ne contiennent pas de contenu non pertinent. Réexécutez feature_store
pour mettre à jour les seuils et les bibliothèques de fonctionnalités.
reject_throttle
dans config.ini. De manière générale, 0,5 est une valeur élevée ; 0,2 est trop faible.
Le lancement est normal, mais vous manquez de mémoire pendant l'exécution ?
Le texte long LLM basé sur la structure des transformateurs nécessite plus de mémoire. À ce stade, la quantification du cache kv doit être effectuée sur le modèle, comme la description de la quantification lmdeploy. Utilisez ensuite Docker pour déployer indépendamment le service Hybrid LLM.
Comment accéder aux autres LLM locaux / Après accès, l'effet n'est pas idéal ?
Que se passe-t-il si la réponse est trop lente/la requête échoue toujours ?
Que faire si la mémoire GPU est trop faible ?
Pour le moment, il est impossible d'exécuter un LLM local et seul un LLM distant peut être utilisé conjointement avec text2vec pour exécuter le pipeline. Veuillez vous assurer que config.ini
utilise uniquement le LLM distant et désactivez le LLM local.
@misc{kong2024huixiangdou,
title={HuiXiangDou: Overcoming Group Chat Scenarios with LLM-based Technical Assistance},
author={Huanjun Kong and Songyang Zhang and Jiaying Li and Min Xiao and Jun Xu and Kai Chen},
year={2024},
eprint={2401.08772},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
@misc{kong2024labelingsupervisedfinetuningdata,
title={Labeling supervised fine-tuning data with the scaling law},
author={Huanjun Kong},
year={2024},
eprint={2405.02817},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2405.02817},
}