Recebi recentemente uma mensagem de correio eletrónico de um académico talentoso a perguntar como é que Botpress interage com LLMs.
Ele estava a escrever um artigo sobre como evitar o vendor lock-in e queria saber se talvez usássemos uma estrutura como a LangChain ou a Haystack.
Fiquei mais do que satisfeito por partilhar com ele que criámos as nossas próprias abstracções que permitem aos construtores de Botpress interagir com LLMs.
Dado o interesse alargado no assunto, quis tornar esta informação pública. Pode ser útil para outros programadores ou para os utilizadores da nossa plataforma. Espero que a ache tão interessante como eu achei a sua criação.
Duas formas de interface do Botpress com LLMs
Botpress criou as suas próprias abstracções que funcionam de duas formas:
1. Integrações
As integrações têm o conceito de acções que têm tipos específicos de entrada e saída.
Temos componentes de código aberto na plataforma, pelo que a comunidade pode criar as suas próprias integrações, que podem ser privadas ou estar disponíveis para utilização pública.
Assim, os fornecedores de LLM - OpenAI, Anthropic, Groq, etc. - cada um tem uma integração. Esta é uma forma de os nossos utilizadores interagirem com eles.
2. LLM interfaces de integração
Para além do conceito de integrações, acrescentámos "interfaces".
Estas são simplesmente definições de esquemas padrão que as integrações podem alargar. Criámos um esquema padrão para LLMs.
Desde que uma integração estenda este esquema, a integração é considerada um fornecedor LLM . Por isso, funciona de imediato em Botpress.
Eis alguns exemplos das integrações de Botpress para diferentes fornecedores de LLM :
Dispomos de interfaces semelhantes para text2image, image2text, voice2text, text2voice, etc.
Configurações do modelo
No Botpress Studio, temos duas configurações gerais: o "Melhor modelo" e o "Modelo rápido". Descobrimos que, em geral, a maioria das tarefas se adapta facilmente a um destes dois modos.
Mas, para além da seleção pura e simples do modelo, verificámos que os diferentes fornecedores divergiam demasiado no que diz respeito à chamada de ferramentas e aos formatos de mensagens para que fosse possível trocar facilmente um modelo por outro e esperar bons desempenhos.
O motor de inferência Botpress
Por isso, criámos o nosso próprio motor de inferência, chamado LLMz, que funciona com qualquer modelo sem necessidade de qualquer alteração (ou com uma alteração mínima). E proporciona uma chamada de ferramenta muito melhor e, muitas vezes, um desempenho muito melhor em termos de custo de token e LLM viagens de ida e volta.
Este motor funciona com tipos typescript nos bastidores para as definições da ferramenta, markdown para o formato de saída da mensagem e do código e uma sandbox de execução nativa LLM para inferência.
O LLMz fornece muitas optimizações e funcionalidades de depuração que são necessárias para casos de utilização avançados, tais como:
- Compressão de tokens de entrada
- Truncagem inteligente de fichas
- Memória-para-contexto optimizada por token
- Chamada de ferramentas paralelas e compostas
- Mistura de várias mensagens + chamadas de ferramentas numa única chamada para LLM
- Ferramentas totalmente seguras (entrada e saída)
- Sessões de longa duração através da serialização de sandbox
- Moldagem, acondicionamento e traçagem de ferramentas
- Isolamento total da 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
Todas estas coisas eram necessárias para os nossos casos de utilização. Mas eram impossíveis ou muito difíceis de fazer com a chamada de ferramentas normais.
O caso dos modelos de routers leves
Há muito tempo que pensávamos em criar um modelo de router leve que se apoiasse nos modelos existentes e escolhesse automaticamente o modelo certo para a tarefa em causa.
Mas decidimos não o fazer por várias razões:
1. Previsibilidade
A maioria dos nossos clientes - o que é compreensível - quer resultados fiáveis e previsíveis.
Assim, a ideia de um router de modelo dinâmico é um pouco assustadora para os agentes de alto nível. Traz outra camada de imprevisibilidade para LLMs.
2. Velocidade
A latência é muito importante para os nossos casos de utilização. Para que o router seja rápido, o modelo tem de ser muito pequeno (e indiscutivelmente mais burro) do que os modelos para os quais vai encaminhar - provavelmente um classificador tradicional.
Embora estes geralmente tenham um bom desempenho quando são treinados em tarefas específicas, a) os seus tamanhos de contexto curtos são um problema para prompts longos e b) não conseguem generalizar para outros prompts fora daqueles em que foram treinados.
3. Supremacia do modelo ou igualdade do modelo
Embora os parâmetros de referência possam dizer o contrário, na natureza, raramente vimos modelos com desempenho superior a GPT-4o (até agora).
Ainda não é claro se LLMs terá realmente um melhor desempenho na tarefa X do que na tarefa Y ao longo do tempo, ou se todos os LLMs acabarão por ser extremamente bons na maioria das coisas. Neste último caso, a seleção de modelos não valerá o esforço.
Preparar LLMs para o futuro com feedback
LLMs será um bem de consumo dentro de alguns anos e a seleção de modelos deixará de existir.
Por estas razões, decidimos investir o nosso esforço na criação de um bom mecanismo para fornecer exemplos a LLMs .
Por isso, criámos um sistema para captar feedback. Este armazena "aprendizagens" para futuras execuções. E fornece dinamicamente as aprendizagens mais relevantes em tempo útil para futuras execuções, de modo a garantir melhorias fiáveis e contínuas ao longo do tempo.
À medida que o LLMs se desenvolve em direção a um desempenho cada vez mais elevado, estamos prontos e entusiasmados para tirar o máximo partido dele para os utilizadores da nossa plataforma.
Índice
Mantenha-se atualizado com as últimas novidades sobre agentes de IA
Partilhar isto em: