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 por dentro.
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 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},
}