Os chatbots com IA se tornaram uma ferramenta essencial para empresas e organizações. Mas a maioria das soluções de chatbot depende de modelos baseados em nuvem que introduzem latência, limitações de API e, talvez o mais importante, preocupações com a privacidade. E se você pudesse executar um chatbot de IA inteiramente em sua máquina e ainda manter o histórico de conversas com uma plataforma de dados com todos os recursos?
Nesta postagem, vamos configurar um chatbot de IA auto-hospedado usando o Docker Model Runner, um novo recurso do Docker que permite executar modelos em contêineres localmente para inferência e muito mais, e o Couchbase Capella para armazenar, recuperar e pesquisar conversas. O resultado é um chatbot rápido, privado e flexível que você controla.
Pronto para começar? Vamos lá!
Configuração do Docker Model Runner
Primeiro, vamos garantir que sua versão do Docker Desktop e da CLI esteja atualizada para que você tenha o recurso Model Runner disponível. Para fazer isso, execute Status do modelo da janela de encaixe
em seu terminal. Se for bem-sucedido, você verá uma mensagem de sucesso que diz O Docker Model Runner está em execução
. Se não tiver, você precisará primeiro obter a versão mais recente do Docker e instalá-la. Depois de atualizar o Docker, você pode executar esse comando novamente e ele deverá funcionar.
Depois de fazer isso, você usará o Docker Model Runner para extrair a imagem do contêiner com o modelo Llama 3.2 e disponibilizá-la localmente:
docker model pull ai/llama3.3
Você pode verificar se o download do modelo Llama 3.2 foi bem-sucedido executando lista de modelos da plataforma
e você verá o modelo disponível para uso:
{"object":"list","data":[{"id":"ai/llama3.3","object":"model","created":1741794281,"owned_by":"docker"}]}
Quer testá-lo? Abrir o modelo no modo interativo é muito fácil! Basta executar execução do modelo da plataforma ai/llama3.3
na linha de comando e você entrará no modo interativo:
Modo de bate-papo interativo iniciado. Digite '/bye' para sair.
>
Agora que você fez o download do Llama 3.2 e está pronto para usá-lo, é hora de criar um aplicativo de back-end simples que aproveite o modelo para um chatbot de IA auto-hospedado.
Criação do chatbot
O aplicativo que você criará realizará as seguintes tarefas:
-
- Execute o Llama 3.2 localmente por meio do aplicativo
execução do modelo da plataforma
Comando da CLI - Enviar mensagens do usuário como prompts para o modelo
- Armazenar o histórico de bate-papo no Couchbase Capella
- Recuperar bate-papos anteriores
- Execute o Llama 3.2 localmente por meio do aplicativo
Seu aplicativo terá todos os recursos e estará pronto para ser usado imediatamente a partir do seu console como um robusto chatbot alimentado por IA. O código que criamos juntos aqui fornecerá a base para refatorá-lo de acordo com as necessidades que você tiver. Talvez você queira transformá-lo em um backend para um aplicativo da Web. Algumas modificações serão tudo o que é necessário para tornar isso possível.
O aplicativo requer algumas dependências, portanto, no diretório do projeto, execute npm install couchbase readline-sync
. Usamos o SDK do Couchbase Node.js para interagir com nosso armazenamento de dados do Couchbase Capella, e usamos sincronização de linha de leitura
para que o aplicativo interaja com o usuário a partir do terminal.
Certifique-se de ter configurado um bucket no Capella para armazenar os dados do bate-papo e de ter suas credenciais do Capella em mãos. Como sempre, não salve suas credenciais em nenhum controle de versão. Use variáveis de ambiente para o desenvolvimento local para manter suas credenciais seguras e não em mãos públicas.
Estamos criando quatro funções em nosso aplicativo:
-
askAI
para encapsular o processo de alimentação da mensagem ao nosso modelo de IA executado localmentelojaChat
para enviar o histórico do bate-papo para a CapellafetchChatHistory
para recuperar chats de bate-papoprincipal
para atuar como a interface principal do aplicativo
Vamos começar com o principal
que envolverá todo o resto. Essa função criará um loop do qual o usuário poderá sair a qualquer momento, oferecendo uma experiência de bate-papo contínua:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
assíncrono função principal() { const { agrupamento, coleção } = aguardar connectToCouchbase(); console.registro("Chatbot de IA auto-hospedado (Llama 3.2 + Capella)"); console.registro("Digite sua mensagem abaixo. Digite 'history' para ver os bate-papos anteriores ou 'exit' para sair.\n"); enquanto (verdadeiro) { const userMessage = readlineSync.pergunta("> "); se (userMessage.toLowerCase() === "exit") { console.registro("Adeus!"); quebra; } se (userMessage.toLowerCase() === "história") { const histórico = aguardar fetchChatHistory(agrupamento); console.registro("\n📜 Histórico de bate-papo:"); histórico.forEach((bate-papo) => { console.registro(`🧑 ${bate-papo.usuário}\n🤖 ${bate-papo.resposta}\n`); }); continuar; } console.registro("🤖 Pensando..."); const aiResponse = aguardar askAI(userMessage); console.registro(`🤖 ${aiResponse}\n`); aguardar lojaChat(coleção, userMessage, aiResponse); } } |
Como você pode ver, introduzimos uma funcionalidade construída sobre o armazenamento de dados do Capella, ou seja, a capacidade de recuperar o histórico de bate-papo anterior dentro do próprio bate-papo. Isso pode ser útil para que um usuário recupere o contexto do bate-papo sempre que iniciar uma nova sessão.
Agora que temos o principal
vamos criar as funções de suporte que ela invoca, começando com a função askAI
função:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
assíncrono função askAI(imediato) { retorno novo Promessa((resolver, rejeitar) => { executar( `doca modelo executar ai/lhama3.3 "${prompt}"`, (erro, saída, stderr) => { se (erro) { console.erro(`Erro em execução modelo: ${erro.mensagem}`); rejeitar(erro); } se (stderr) { console.erro(`Docker stderr: ${stderr}`); } resolver(saída.acabamento()); // Retornar resposta de IA } ); }); } |
Em seguida, o lojaChat
função:
1 2 3 4 5 6 7 8 9 |
assíncrono função lojaChat(coleção, userMessage, aiResponse) { const chatDoc = { usuário: userMessage, resposta: aiResponse, carimbo de data/hora: novo Data().toISOString(), }; aguardar coleção.upsert(`chat_${Data.agora()}`, chatDoc); } |
Por fim, o fetchChatHistory
função:
1 2 3 4 5 6 7 8 9 |
assíncrono função fetchChatHistory(agrupamento, limite = 5) { const consulta = ` SELECIONAR usuário, resposta, carimbo de data/hora DE `chatbot` ORDEM BY carimbo de data/hora DESC LIMITE ${limite}; `; const resultado = aguardar agrupamento.consulta(consulta); retorno resultado.linhas; } |
Quando terminar de usar as funções, certifique-se de adicionar exigir
na parte superior do arquivo e para criar uma conexão com o cluster do Couchbase Capella:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
const { executar } = exigir("child_process"); const readlineSync = exigir("readline-sync"); const couchbase = exigir("couchbase"); exigir("dotenv").configuração(); assíncrono função connectToCouchbase() { tentar { const agrupamento = aguardar couchbase.conectar(COUCHBASE_URL, { nome de usuário: NOME DE USUÁRIO DO COUCHBASE, senha: COUCHBASE_PASSWORD, }); const balde = agrupamento.balde("chatbot"); const coleção = balde.defaultCollection(); console.registro("Conectado ao Couchbase Capella"); retorno { agrupamento, coleção }; } captura (erro) { console.erro("Falha ao se conectar ao Couchbase:", erro); processo.saída(1); } } |
Por fim, não se esqueça de adicionar uma linha no final do script que chame a função principal
inserindo a função principal();
na última linha.
Quando terminar, você terá um chatbot de IA totalmente pronto, hospedado em sua própria máquina, mantendo sua privacidade e, ao mesmo tempo, aproveitando o Capella para armazenamento e recuperação.
Usando seu chatbot de IA auto-hospedado
Seu próprio chatbot está pronto para ser usado! Toda consulta que você enviar será processada apenas localmente em sua máquina usando o modelo Llama 3.2. Nada será enviado a nenhum provedor de IA remotamente.
Se você estiver pronto para experimentá-lo, execute o seguinte:
node index.js # ou o nome que você deu ao seu arquivo
Depois de executá-lo, você verá o seguinte:
Conectado ao Couchbase Capella
Chatbot de IA auto-hospedado (Llama 3.2 + Capella)
Digite sua mensagem abaixo. Digite "history" para ver os bate-papos anteriores ou "exit" para sair.
>
Vá em frente e comece a fazer perguntas e a interagir com ele. Aqui está um breve exemplo do que você pode esperar ver:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Conectado para Couchbase Capela 🚀 Autônomo-Hospedado IA Chatbot (Lhama 3.2 + Capela) Tipo seu mensagem abaixo. Tipo 'história' para visualização passado bate-papos ou 'exit' para sair. > Deve I pacote a capa de chuva para Barcelona para a viagem lá em o final de Março? Resposta somente com "sim" ou "não". 🤖 Pensamento... 🤖 Sim. > Contar eu por que I deve pacote a capa de chuva para Barcelona em o final de Março. Limite seu resposta para 15 palavras ou menos. 🤖 Pensamento... 🤖 Você pode necessidade a capa de chuva como Março clima em Barcelona pode ser imprevisível e chuvoso, para cima para 10C. > saída 👋 Adeus! |
Ao usar a escalabilidade e a segurança do Couchbase Capella junto com a abordagem de privacidade do Docker Model Runner para executar modelos de IA localmente, você pode criar aplicativos dinâmicos de IA que priorizam a privacidade do usuário. A execução de modelos em sua própria máquina também oferece inferência mais rápida, controle total sobre a personalização de prompts, a capacidade de armazenar metadados adicionais e a flexibilidade para ajustar o comportamento do seu chatbot, tudo em seu próprio ambiente.
Essa combinação do Capella e do Docker Model Runner oferece velocidade, controle e a privacidade necessária para criar aplicativos de IA sem depender de APIs externas. Seja para criar um chatbot, analisar dados ou executar fluxos de trabalho com tecnologia de IA, essa configuração garante que tudo o que você criar será eficiente, dimensionável e totalmente sob seu controle.
A única pergunta é: o que você vai construir?
-
- Conecte-se com nossa comunidade de desenvolvedores e mostre-nos o que você está construindo!