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.
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:
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.
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:
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.
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.
Clicaremos no ícone de download próximo ao campo Modelo de incorporação para fazer o download e instalá-lo.
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.
Aqui estão algumas dicas importantes a serem lembradas:
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.