Inglês | 简体中文
HuixiangDou é um assistente de conhecimento profissional baseado em LLM.
Vantagens:
chat_in_group
lida com o cenário de bate-papo em grupo , responde às perguntas dos usuários sem inundação de mensagens, consulte 2401.08772, 2405.02817, Relatório de recuperação e precisão híbridachat_with_repo
para bate-papo por streaming em tempo realConfira as cenas em que HuixiangDou está correndo e junte-se ao Grupo WeChat para experimentar o assistente de IA.
Se isso te ajudar, por favor dê uma estrela
Nossa versão Web foi lançada no OpenXLab, onde você pode criar uma base de conhecimento, atualizar exemplos positivos e negativos, ativar a pesquisa na web, testar chat e integrar-se a grupos Feishu/WeChat. Veja BiliBili e YouTube!
A API da versão Web para Android também oferece suporte a outros dispositivos. Consulte código de amostra Python.
langchain
?? | LoRA-Qwen1.5-14B | LoRA-Qwen1.5-32B | dados de alpaca | arXiv |
LLM | Formato de arquivo | Método de recuperação | Integração | Pré-processamento |
|
|
|
|
|
A seguir estão os requisitos de memória da GPU para diferentes recursos, a diferença está apenas em se as opções estão ativadas .
Exemplo de configuração | Requisitos de memória GPU | Descrição | Verificado no Linux |
---|---|---|---|
config-cpu.ini | - | Use a API Siliconcloud apenas para texto | |
config-2G.ini | 2 GB | Use API openai (como kimi, deepseek e stepfun para pesquisar apenas texto | |
config-multimodal.ini | 10 GB | Use API openai para LLM, recuperação de imagens e texto | |
[Edição Padrão] config.ini | 19 GB | Implantação local de LLM, modalidade única | |
config-advanced.ini | 80 GB | LLM local, resolução de anáfora, modalidade única, prático para grupo WeChat |
Tomamos a edição padrão (LLM de execução local, recuperação de texto) como exemplo de introdução. Outras versões são apenas diferentes nas opções de configuração.
Clique para concordar com o acordo modelo BCE, faça login huggingface
huggingface-cli login
Instalar dependências
# 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
Use documentos mmpose para construir a base de conhecimento mmpose e filtrar perguntas. Se você tiver seus próprios documentos, basta colocá-los em repodir
.
Copie e execute todos os comandos a seguir (incluindo o 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
Após a execução, teste com python3 -m huixiangdou.main --standalone
. Neste momento, responda às perguntas relacionadas ao mmpose (relacionadas à base de conhecimento), sem responder às perguntas meteorológicas.
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:
..
Observação
Execute também uma UI Web simples com gradio
:
python3 -m huixiangdou.gradio_ui
Ou execute um servidor para escutar 23333, o pipeline padrão é 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": ""} '
Atualize os documentos repodir
, good_questions e bad_questions, e experimente seu próprio conhecimento de domínio (médico, financeiro, poder, etc.).
Fornecemos código-fonte de front-end typescript
e back-end python
:
Igual ao OpenXlab APP, leia o documento de implantação da web.
Se não houver GPU disponível, a inferência do modelo poderá ser concluída usando a API Siliconcloud.
Tomando docker miniconda+Python3.11 como exemplo, instale as dependências da CPU e execute:
# 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
Se você achar a instalação muito lenta, uma imagem pré-instalada será fornecida no Docker Hub. Basta substituí-lo ao iniciar a janela de encaixe.
Se a sua memória GPU exceder 1,8 G, ou você busca economia. Esta configuração descarta o LLM local e usa o LLM remoto, que é igual à edição padrão.
Tomemos como exemplo siliconcloud
, preencha o API TOKEN aplicado do site oficial em 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 "
Observação
Execute o seguinte para obter os resultados das perguntas e respostas
python3 -m huixiangdou.main --standalone --config-path config-2G.ini # Start all services at once
Se você tiver memória GPU 10G, poderá oferecer suporte adicional à recuperação de imagens e texto. Basta modificar o modelo usado no 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 "
Observação:
bpe_simple_vocab_16e6.txt.gz
Execute gradio para testar, veja o resultado da recuperação de imagem e texto aqui.
python3 tests/test_query_gradio.py
O "HuiXiangDou" no grupo de experiência WeChat habilitou todos os recursos:
Por favor, leia os seguintes tópicos:
Os colaboradores forneceram ferramentas Android para interagir com o WeChat. A solução é baseada em APIs de nível de sistema e, em princípio, pode controlar qualquer UI (não se limitando a software de comunicação).
E se o robô estiver muito frio/falador?
resource/good_questions.json
e preencha as que devem ser rejeitadas em resource/bad_questions.json
.repodir
para garantir que os documentos markdown na biblioteca principal não contenham conteúdo irrelevante. Execute novamente feature_store
para atualizar limites e bibliotecas de recursos.
reject_throttle
em config.ini. De modo geral, 0,5 é um valor alto; 0,2 é muito baixo.
A inicialização é normal, mas fica sem memória durante a execução?
O texto longo do LLM baseado na estrutura dos transformadores requer mais memória. Neste momento, a quantização do cache kv precisa ser feita no modelo, como a descrição da quantização lmdeploy. Em seguida, use o docker para implantar de forma independente o serviço Hybrid LLM.
Como acessar outro LLM local / Após o acesso o efeito não é o ideal?
E se a resposta for muito lenta/a solicitação sempre falhar?
E se a memória da GPU estiver muito baixa?
No momento, é impossível executar o LLM local e apenas o LLM remoto pode ser usado em conjunto com text2vec para executar o pipeline. Certifique-se de que config.ini
use apenas LLM remoto e desative o 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},
}