Recentemente, recebi um e-mail de um pesquisador talentoso perguntando como o Botpress se conecta com LLMs.
Ele estava escrevendo um artigo sobre como evitar dependência de fornecedores e queria saber se usávamos algum framework como LangChain ou Haystack.
Fiquei muito satisfeito em compartilhar com ele que criamos nossas próprias abstrações que permitem aos criadores do Botpress interagir com LLMs.
Como esse assunto desperta interesse, decidi tornar essa informação pública. Pode ser útil para outros desenvolvedores ou usuários da nossa plataforma. Espero que você ache tão interessante quanto eu achei criar este conteúdo.
Duas formas de o Botpress se conectar com LLMs
O Botpress criou suas próprias abstrações que funcionam de duas maneiras:
1. Integrações
As integrações possuem o conceito de ações com tipos de entrada e saída específicos.
Temos componentes open source na plataforma, então a comunidade pode criar suas próprias integrações, que podem ser privadas ou públicas.
Assim, provedores de LLM – OpenAI, Anthropic, Groq, etc. – têm cada um sua integração. Essa é uma das formas de nossos usuários se conectarem com eles.
2. Interfaces de integração LLM
Além do conceito de integrações, adicionamos as “interfaces”.
Estes são apenas esquemas padrão que as integrações podem estender. Criamos um esquema padrão para LLMs.
Desde que uma integração siga esse esquema, ela é considerada um provedor de LLM. Assim, funciona automaticamente no Botpress.
Aqui estão alguns exemplos de integrações do Botpress para diferentes provedores de LLM:
Temos interfaces semelhantes para text2image, image2text, voice2text, text2voice, etc.
Configurações de modelo
Dentro do Botpress Studio, temos duas configurações gerais: "Melhor Modelo" e "Modelo Rápido". Percebemos que, em geral, a maioria das tarefas se encaixa facilmente em um desses dois modos.


Mas além da simples escolha de modelo, percebemos que os diferentes provedores divergem bastante em chamadas de ferramentas e formatos de mensagem, dificultando trocar um modelo por outro e esperar bons resultados.
O mecanismo de inferência do Botpress
Por isso, desenvolvemos nosso próprio mecanismo de inferência chamado LLMz, que funciona com qualquer modelo sem (ou com pouquíssima) necessidade de alterar o prompt. Além disso, oferece chamadas de ferramentas muito melhores e, frequentemente, desempenho superior em termos de custo de tokens e idas e voltas ao LLM.
Esse mecanismo utiliza tipos do typescript nos bastidores para definição de ferramentas, markdown para formato de saída de mensagens e código, e um sandbox nativo de LLM para inferência.
O LLMz oferece várias otimizações e recursos de depuração necessários para casos avançados, como:
- Compressão de tokens de entrada
- Truncamento inteligente de tokens
- Memória otimizada por tokens para contexto
- Chamadas paralelas e compostas de ferramentas
- Mistura de múltiplas mensagens + chamadas de ferramentas em uma única chamada LLM
- Ferramentas totalmente seguras por tipo (entrada e saída)
- Sessões de longa duração por meio de serialização do sandbox
- Simulação, encapsulamento e rastreamento de ferramentas
- Isolamento total de execução em isolados V8 leves (permite executar milhares de execuções simultâneas de forma rápida e muito barata)
- Iterações automáticas e recuperação de erros
Tudo isso era necessário para nossos casos de uso. Mas seria impossível ou muito difícil com chamadas de ferramentas convencionais.
Por que não usamos modelos roteadores leves
Durante muito tempo, pensamos em criar um modelo roteador leve que ficaria acima dos modelos existentes e escolheria automaticamente o melhor modelo para cada tarefa.
Mas decidimos não seguir por esse caminho por vários motivos:
1. Previsibilidade
A maioria dos nossos clientes – compreensivelmente – busca resultados confiáveis e previsíveis.
Por isso, a ideia de um roteador dinâmico de modelos é um pouco arriscada para agentes de alto nível. Ela adiciona mais uma camada de imprevisibilidade aos LLMs.
2. Velocidade
A latência é muito importante para nossos casos de uso. Para que o roteador seja rápido, o modelo precisa ser bem pequeno (e, provavelmente, menos inteligente) do que os modelos para os quais ele irá direcionar – geralmente um classificador tradicional.
Embora geralmente tenham bom desempenho quando treinados para tarefas específicas, a) seus contextos curtos são um problema para prompts longos e b) não conseguem generalizar para outros prompts além dos que foram treinados.
3. Supremacia ou igualdade dos modelos
Apesar dos benchmarks indicarem o contrário, na prática, raramente vimos modelos superarem o GPT-4o (até agora).
Ainda não está claro se LLMs realmente terão desempenho melhor em tarefa X do que em tarefa Y ao longo do tempo, ou se todos acabarão sendo muito bons em quase tudo. Se for esse o caso, escolher modelo não valerá o esforço.
Preparando os LLMs para o futuro com feedback
LLMs serão uma commodity em alguns anos e a escolha do modelo deixará de ser relevante.
Por esses motivos, decidimos concentrar nossos esforços em oferecer um bom mecanismo para fornecer exemplos aos LLMs.
Assim, criamos um sistema para capturar feedback. Ele armazena "aprendizados" para execuções futuras e fornece dinamicamente os aprendizados mais relevantes no momento do prompt, garantindo melhorias contínuas e confiáveis ao longo do tempo.
À medida que os LLMs alcançam desempenhos cada vez melhores, estamos prontos e animados para aproveitá-los ao máximo para os usuários da nossa plataforma.





.webp)
