paint-brush
Vamos construir um chatbot de suporte ao cliente usando RAG e a documentação da sua empresa em OpenWebUIpor@hostkey
1,363 leituras
1,363 leituras

Vamos construir um chatbot de suporte ao cliente usando RAG e a documentação da sua empresa em OpenWebUI

por Hostkey.com8m2024/07/09
Read on Terminal Reader

Muito longo; Para ler

OpenWebUI oferece uma oportunidade única de construir chatbots fascinantes e úteis, mesmo sem uma vasta experiência em codificação. Neste artigo, compartilharemos nossa jornada na criação de um chatbot de suporte técnico projetado para auxiliar nossa equipe de linha de frente respondendo às perguntas dos usuários. Aqui está um resumo passo a passo de suas ações.
featured image - Vamos construir um chatbot de suporte ao cliente usando RAG e a documentação da sua empresa em OpenWebUI
Hostkey.com HackerNoon profile picture
0-item

OpenWebUI é uma plataforma de mídia abrangente que apresenta um conjunto de ferramentas de IA: OpenAI, Ollama, Automatic1111, ComfyUI, Whisper API, treinamento de modelo personalizado, RAG baseado em Langchain com ChromaDB, pesquisa híbrida BM25/web e muito mais.


Embora tudo isso esteja disponível há algum tempo, documentado e implementável com conhecimento de programação Python, o OpenWebUI oferece uma oportunidade única de construir chatbots fascinantes e úteis, mesmo sem uma vasta experiência em codificação.


Neste artigo, compartilharemos nossa jornada de criação de um chatbot de suporte técnico projetado para auxiliar nossa equipe de linha de frente, respondendo às perguntas dos usuários (e, eventualmente, tornando-se parte de nossa própria equipe).


Alugue servidores GPU com implantação instantânea ou um servidor com configuração personalizada com placas NVIDIA Tesla A100/H100 80Gb ou A5000/A4000 de nível profissional. Servidores GPU com placas de jogos RTX4090 também estão disponíveis.


Ponto de partida

Temos documentação do usuário criada usando Material for MkDocs. Isso resulta em uma estrutura de diretórios contendo arquivos .md com formatação Markdown. Também temos uma configuração OpenWebUI e Ollama implantada com o modelo llama3-8b-instruct carregado.


Metas do projeto:


  1. Desenvolva um chatbot personalizado: Este chatbot irá interagir com os usuários e fornecer informações com base em nossa documentação.
  2. Converter a documentação em um formato adequado para LLMs: Precisamos transformar nossa documentação Markdown em um formato que possa ser processado de forma eficiente por LLMs para Retrieval Augmented Generation (RAG).
  3. Habilitar atualizações e adições de dados: O sistema deve permitir atualizações e adições contínuas ao banco de dados de vetores que contém nossa documentação.
  4. Concentre-se na resposta a perguntas: O chatbot deve funcionar principalmente como um sistema de resposta a perguntas e evitar o envolvimento em conversas não relacionadas a TI.
  5. Forneça links de fontes: sempre que possível, o chatbot deve vincular às fontes de documentação originais para obter as informações fornecidas.
  6. Implementar filtragem de perguntas: Precisamos da capacidade de configurar restrições de perguntas para o chatbot. Por exemplo, podemos querer evitar que ele responda a perguntas com base na localização geográfica.

Implementação ingênua

Nossa tentativa inicial foi simplesmente carregar nossa documentação existente em seu formato Markdown original e usar o modelo llama3 sem quaisquer modificações. Os resultados, para dizer o mínimo, foram decepcionantes:


Primeiro: nossos arquivos Markdown contêm vários elementos como tags de imagem, notas de rodapé, blocos de código, formatação em negrito e itálico, links internos e externos, ícones e até construções " ** " para botões. Todo esse “ruído” extra cria problemas ao dividir a documentação em pedaços para processamento.


Segundo: O modelo de transformadores de sentença/all-MiniLM-L6-v2, que OpenWebUI usa por padrão para representar sentenças e parágrafos em um espaço vetorial de 384 dimensões (essencial para tarefas RAG como clustering e pesquisa semântica), é treinado principalmente em inglês . Gostaríamos que nosso bot também suportasse outros idiomas.


Terceiro: embora llama3 seja um modelo de instrução, ele ainda pode ser direcionado para discussões fora do tópico, em vez de se concentrar em responder às dúvidas dos usuários. Um modelo 70b pode ser mais adequado, mas requer uma GPU com 40 GB de memória de vídeo, enquanto o llama3-8b pode rodar em uma GPU com apenas 8 GB.

Embora o terceiro problema possa ser potencialmente resolvido com a criação de um modelo personalizado (agente na terminologia OpenAI), os dois primeiros exigem soluções alternativas mais significativas. Aqui está o que descobrimos até agora.

Passo a passo: configurando o chatbot de suporte técnico no OpenWebUI

Primeiro, converteremos a documentação em um formato adequado para carregamento em nosso sistema RAG (Retrieval Augmented Generation). Criamos um poderoso script bash chamado ai_text_generator para automatizar esse processo.


O script percorre todos os diretórios de documentação e usa expressões regulares em sed, awk e perl para remover e substituir a marcação Markdown que não é necessária ao RAG. Por fim, adiciona um link para a documentação original hospedada em https://hostkey.com/documentation no final de cada documento.



Este script prepara meticulosamente sua documentação para uso com um sistema RAG em OpenWebUI. Aqui está um resumo passo a passo de suas ações:


  • Geração de URL: Gera uma URL completa para cada arquivo de documentação.
  • Remoção de marcação de imagem: remove todas as marcações Markdown relacionadas às imagens.
  • Exclusão de anotação: remove todas as anotações do texto. Formatação de botão: transforma a sintaxe ** e ** do Markdown em [ ], formatando-os efetivamente como botões.
  • Remoção de título: exclui linhas que começam com ">", que provavelmente são usadas para criar um esboço ou índice analítico.
  • Remoção de ícones: remove qualquer marcação ou código Markdown que represente ícones.
  • Formatação de texto em negrito: remove a formatação de texto em negrito do Markdown.
  • Modificação de link: exclui links internos enquanto preserva links externos.
  • Formatação de link de e-mail: reformata links para endereços de e-mail.
  • Normalização de espaços em branco: Remove espaços extras no início de cada linha até o primeiro caractere.
  • Conversão de final de linha: converte CRLF (terminações de linha do Windows) para o formato UNIX (LF).
  • Redução de linhas vazias: Elimina linhas vazias consecutivas superiores a uma.
  • Anexação de URL: acrescenta a URL gerada ao final de cada arquivo processado.


Após executar o script, o diretório ai_data conterá um conjunto de arquivos prontos para serem carregados no sistema RAG do OpenWebUI.



Em seguida, precisamos adicionar um novo modelo ao OpenWebUI para trabalhar com nosso banco de dados de vetores de documentos e o Ollama LLM. Este modelo deve suportar um tom mais casual, 'você' (ты), não apenas em inglês. Estamos planejando adicionar suporte para outros idiomas, como o turco, no futuro.


  1. Para começar, iremos ao Painel de administração - Configurações - Documentos . No campo Modelo de incorporação , selecionaremos sentença-transformers/all-MiniLM-L12-v2 . Testamos todos os modelos recomendados desta lista (https://www.sbert.net/docs/sentence_transformer/pretrained_models.html) e descobrimos que este é o mais adequado.

  2. Clicaremos no ícone de download próximo ao campo Modelo de incorporação para fazer o download e instalá-lo.

  3. Imediatamente, configuraremos os parâmetros RAG:

    • Top K = 10: Isso significa que o sistema considerará os 10 documentos mais relevantes ao gerar uma resposta.

    • Tamanho do bloco = 1.024: os documentos serão divididos em blocos de 1.024 tokens para processamento.

    • Sobreposição de pedaços = 100: Haverá uma sobreposição de 100 tokens entre pedaços consecutivos.



Depois disso, você pode ir para a seção Workspace - Documentos e fazer upload de nossa documentação. É uma boa ideia fornecer uma tag de coleção específica (no nosso caso, hostkey_en) para facilitar a conexão ao modelo ou às solicitações de API posteriormente.



A seguir, criaremos um modelo personalizado para nosso chatbot. Para fazer isso, voltaremos ao Workspace - Models e clicaremos no ícone de adição.


Daremos um nome ao nosso chatbot e selecionaremos o modelo base (no nosso caso, llama3-latest).


Em seguida, definiremos o Prompt do Sistema. É isso que diz ao chatbot como se ver e se comportar. Ele descreve seu papel, limitações e nossos resultados desejados.


Aqui está o prompt do sistema que criamos para nosso chatbot de suporte técnico:


You are HOSTKEY an IT Support Assistant Bot, focused on providing users with IT support based on the content from knowledge base. Stay in character and maintain your focus on IT support, avoiding unrelated activities such as creative writing or engaging in non-IT discussions.


If you cannot find relevant information in the knowledge base or if the user asks non-related questions that are not part of the knowledge base, do not attempt to answer and inform the user that you are unable to assist and print text "Visit https://hostkey.com/documentation for more information" at the end.


Provide short step-by-step instructions and external links


Provide a link to relevant doc page about user question started with 'See more information here:'Add text "Visit https://hostkey.com/documentation for more information" at the end.


Example of answer: " User: How can I cancel my server?


Bot:


You can cancel your server at any time. To do this, you need to access the Invapi control panel and follow these steps:

- Go to the "Billing" tab in the specific server management menu.

- Click the [Cancel service] button.

- Describe the reason for the cancellation and select its type.

- Click the [Confirm termination] button.


Please note that for immediate cancellation, we will not refund the hours of actual server usage, including the time to provision the server itself, order software, and process the cancellation request (up to 12 hours). The unused balance will be returned to your credit balance. Withdrawal of funds from the credit balance will be made in accordance with our refund policy.


You can cancel the service cancellation request in the Billing tab using the [Revoke] button.

Additionally, if you need to cancel a service that includes an OS/software license or has a customized/non-standard configuration, please contact us via a ticketing system for manual refund processing.


See more information here: https://hostkey.com/documentation/billing/services_cancellation/ "


A seguir, conectaremos a coleção de documentos necessária. Na seção Conhecimento , clicaremos no botão Selecionar Documentos e escolheremos a coleção que precisamos com base em sua tag.


Alugue servidores GPU com implantação instantânea ou um servidor com configuração personalizada com placas NVIDIA Tesla A100/H100 80Gb ou A5000/A4000 de nível profissional. Servidores GPU com placas de jogos RTX4090 também estão disponíveis.



Também precisamos configurar alguns parâmetros adicionais ocultos na guia Parâmetros avançados . Clicar em Mostrar revelará essas configurações. Definiremos a temperatura como 0,3 e o comprimento do contexto como 4089.



Por fim, clicamos em Salvar e atualizar para criar nosso modelo personalizado de chatbot de suporte técnico.


E aí está! Nosso chatbot está pronto para funcionar e atender às solicitações dos usuários. É educado, paciente e disponível 24 horas por dia, 7 dias por semana.

Dicas para trabalhar com RAG no OpenWebUI

Aqui estão algumas dicas importantes a serem lembradas:

  1. Se você estiver trabalhando com um grande número de documentos no RAG, é altamente recomendável instalar o OpenWebUI com suporte a GPU (branch open-webui:cuda).
  2. Quaisquer modificações no modelo de incorporação (troca, carregamento, etc.) exigirão que você reindexe seus documentos no banco de dados vetorial. A alteração dos parâmetros RAG não exige isso.
  3. Ao adicionar ou remover documentos, sempre acesse seu modelo personalizado, exclua a coleção desses documentos e adicione-os novamente. Caso contrário, sua pesquisa poderá não funcionar corretamente ou será significativamente menos eficaz. Se o seu bot estiver fornecendo respostas incorretas, mas a documentação com as informações necessárias aparecer na lista na parte inferior, provavelmente esse é o problema.
  4. Embora o OpenWebUI reconheça vários formatos para criação de RAG (pdf, csv, rst, xml, md, epub, doc, docx, xls, xlsx, ppt, ppt, txt), é uma prática recomendada fazer upload de documentos como texto simples para obter desempenho ideal.
  5. Embora a pesquisa híbrida possa melhorar os resultados, ela consome muitos recursos e pode aumentar significativamente os tempos de resposta (20-30-40 segundos ou mais), mesmo em uma GPU poderosa. Este é um problema conhecido dos desenvolvedores que trabalham em uma solução.



Agora que testamos o chatbot, o próximo passo é integrá-lo ao sistema de chat existente da nossa empresa. OpenWebUI oferece uma API e pode funcionar como proxy para Ollama, adicionando seus próprios recursos exclusivos. No entanto, ainda falta documentação, o que torna a integração um desafio.


Ao examinar o código e o histórico de commits, obtivemos alguns insights sobre como estruturar solicitações de API, mas ainda não está funcionando como esperado. Conseguimos chamar o modelo customizado, mas sem a funcionalidade RAG.

Estamos aguardando ansiosamente os recursos prometidos pelos desenvolvedores nos próximos lançamentos, incluindo RAG, pesquisa na web e exemplos e descrições detalhadas.


O processo de teste também revelou algumas inconsistências e redundâncias na nossa documentação. Isto representa uma oportunidade para melhorar o desempenho do chatbot e melhorar a clareza e precisão geral da nossa documentação.


Alugue servidores GPU com implantação instantânea ou um servidor com configuração personalizada com placas NVIDIA Tesla A100/H100 80Gb ou A5000/A4000 de nível profissional. Servidores GPU com placas de jogos RTX4090 também estão disponíveis.