Inglés | 简体中文
HuixiangDou es un asistente de conocimiento profesional basado en LLM.
Ventajas:
chat_in_group
hace frente al escenario de chat grupal , responde las preguntas de los usuarios sin inundar los mensajes, consulte 2401.08772, 2405.02817, Informe de precisión y recuperación híbridachat_with_repo
para chat en tiempo realMire las escenas en las que se ejecuta HuixiangDou y únase al grupo WeChat para probar el asistente de IA interno.
Si esto te ayuda, por favor dale una estrella.
Nuestra versión web se lanzó en OpenXLab, donde puede crear una base de conocimientos, actualizar ejemplos positivos y negativos, activar la búsqueda web, probar el chat e integrarse en grupos Feishu/WeChat. ¡Mira BiliBili y YouTube!
La API de la versión web para Android también es compatible con otros dispositivos. Consulte el código de muestra de Python.
langchain
?? | LoRA-Qwen1.5-14B | LoRA-Qwen1.5-32B | datos de alpaca | arXiv |
LLM | Formato de archivo | Método de recuperación | Integración | Preprocesamiento |
|
|
|
|
|
Los siguientes son los requisitos de memoria de la GPU para diferentes funciones, la diferencia radica únicamente en si las opciones están activadas .
Ejemplo de configuración | Requisitos de memoria GPU | Descripción | Verificado en Linux |
---|---|---|---|
config-cpu.ini | - | Utilice la API de SiliconCloud solo para texto | |
config-2G.ini | 2GB | Utilice la API openai (como kimi, deepseek y stepfun para buscar solo texto | |
config-multimodal.ini | 10GB | Utilice la API openai para LLM, recuperación de imágenes y texto | |
[Edición estándar] config.ini | 19GB | Despliegue local de LLM, modalidad única | |
config-avanzado.ini | 80GB | LLM local, resolución de anáfora, modalidad única, práctico para grupo WeChat |
Tomamos la edición estándar (LLM en ejecución local, recuperación de texto) como ejemplo de introducción. Otras versiones son simplemente diferentes en las opciones de configuración.
Haga clic para aceptar el modelo de acuerdo BCE, inicie sesión en hugingface
huggingface-cli login
Instalar dependencias
# 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
Utilice documentos de mmpose para crear la base de conocimientos de mmpose y filtrar preguntas. Si tiene sus propios documentos, simplemente colóquelos en repodir
.
Copie y ejecute todos los siguientes comandos (incluido el símbolo '#').
# 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
Después de ejecutar, pruebe con python3 -m huixiangdou.main --standalone
. En este momento, responda a las preguntas relacionadas con mmpose (relacionadas con la base de conocimientos), sin responder a las preguntas sobre el clima.
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:
..
Nota
Ejecute también una interfaz de usuario web sencilla con gradio
:
python3 -m huixiangdou.gradio_ui
O ejecute un servidor para escuchar 23333, la canalización predeterminada es 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": ""} '
Actualice los documentos repodir
, good_questions y bad_questions, y pruebe sus propios conocimientos de dominio (médico, financiero, energético, etc.).
Proporcionamos código fuente typescript
de front-end y back-end python
:
Igual que la aplicación OpenXlab, lea el documento de implementación web.
Si no hay una GPU disponible, la inferencia del modelo se puede completar utilizando la API de SiliconCloud.
Tomando como ejemplo Docker Miniconda+Python3.11, instale las dependencias de la CPU y ejecute:
# 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 encuentra que la instalación es demasiado lenta, se proporciona una imagen preinstalada en Docker Hub. Simplemente reemplácelo al iniciar la ventana acoplable.
Si la memoria de su GPU supera los 1,8 G o busca rentabilidad. Esta configuración descarta el LLM local y utiliza en su lugar el LLM remoto, que es igual que la edición estándar.
Tome siliconcloud
como ejemplo y complete el API TOKEN aplicado desde el sitio web oficial en 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 "
Nota
Ejecute lo siguiente para obtener los resultados de las preguntas y respuestas.
python3 -m huixiangdou.main --standalone --config-path config-2G.ini # Start all services at once
Si tiene una memoria GPU de 10G, puede admitir aún más la recuperación de imágenes y texto. Simplemente modifique el modelo utilizado en 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 "
Nota:
bpe_simple_vocab_16e6.txt.gz
Ejecute gradio para probar, vea el resultado de la recuperación de imágenes y texto aquí.
python3 tests/test_query_gradio.py
"HuiXiangDou" en el grupo de experiencia WeChat ha habilitado todas las funciones:
Por favor lea los siguientes temas:
Los contribuyentes han proporcionado herramientas de Android para interactuar con WeChat. La solución se basa en API a nivel de sistema y, en principio, puede controlar cualquier interfaz de usuario (no limitada al software de comunicación).
¿Qué pasa si el robot tiene demasiado frío o habla demasiado?
resource/good_questions.json
y complete las que deben rechazarse en resource/bad_questions.json
.repodir
para garantizar que los documentos de rebajas en la biblioteca principal no contengan contenido irrelevante. Vuelva a ejecutar feature_store
para actualizar los umbrales y las bibliotecas de funciones.
reject_throttle
en config.ini. En términos generales, 0,5 es un valor alto; 0,2 es demasiado bajo.
El inicio es normal, pero ¿no hay memoria durante el tiempo de ejecución?
El texto largo de LLM basado en la estructura de transformadores requiere más memoria. En este momento, es necesario realizar la cuantificación de caché de kv en el modelo, como la descripción de cuantificación de lmdeploy. Luego use Docker para implementar de forma independiente el servicio Hybrid LLM.
¿Cómo acceder a otro LLM local? Después del acceso, ¿el efecto no es ideal?
¿Qué pasa si la respuesta es demasiado lenta o la solicitud siempre falla?
¿Qué pasa si la memoria de la GPU es demasiado baja?
En este momento, es imposible ejecutar LLM local y solo se puede usar LLM remoto junto con text2vec para ejecutar la canalización. Asegúrese de que config.ini
solo use LLM remoto y desactive el 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},
}