Recentemente ho ricevuto un'email da un brillante studioso che mi chiedeva come Botpress si interfaccia con gli LLM.
Stava scrivendo un articolo su come evitare il lock-in del fornitore e voleva sapere se magari utilizzassimo un framework come LangChain o Haystack.
Sono stato molto felice di condividere con lui che abbiamo creato delle nostre astrazioni che permettono ai creatori di Botpress di interfacciarsi con gli LLM.
Dato il grande interesse sull’argomento, ho voluto rendere pubbliche queste informazioni. Potrebbero essere utili ad altri sviluppatori o agli utenti della nostra piattaforma. Spero che le troviate interessanti quanto è stato interessante crearle.
Due modi in cui Botpress si interfaccia con i LLM
Botpress ha creato proprie astrazioni che funzionano in due modi:
1. Integrazioni
Le integrazioni prevedono azioni con tipi di input e output specifici.
Abbiamo componenti open source sulla piattaforma, così la community può creare le proprie integrazioni che possono essere private o disponibili per l’uso pubblico.
Quindi i provider di LLM – OpenAI, Anthropic, Groq, ecc. – hanno ciascuno un’integrazione. È uno dei modi in cui i nostri utenti possono interagire con loro.
2. Interfacce di integrazione LLM
Oltre al concetto di integrazioni, abbiamo aggiunto le “interfacce”.
Queste sono semplicemente definizioni di schema standard che le integrazioni possono estendere. Abbiamo creato uno schema standard per gli LLM.
Finché un'integrazione estende questo schema, viene considerata un provider LLM. Quindi funziona immediatamente in Botpress.
Ecco alcuni esempi di integrazioni Botpress per diversi fornitori di LLM:
Abbiamo interfacce simili per text2image, image2text, voice2text, text2voice, ecc.
Configurazioni del modello
All’interno di Botpress Studio, abbiamo due configurazioni generali: il "Best Model" e il "Fast Model". Abbiamo riscontrato che, in generale, la maggior parte dei compiti si adatta facilmente a una di queste due modalità.


Ma oltre alla semplice selezione del modello, abbiamo riscontrato che i diversi provider differivano troppo nella chiamata degli strumenti e nei formati dei messaggi per poter sostituire facilmente un modello con un altro e aspettarsi buone prestazioni.
Il motore di inferenza di Botpress
Per questo motivo, abbiamo sviluppato un nostro motore di inferenza chiamato LLMz, che funziona con qualsiasi modello senza (o con minime) modifiche ai prompt. Inoltre, offre una gestione degli strumenti molto migliore e spesso prestazioni superiori in termini di costo dei token e roundtrip con l'LLM.
Questo motore lavora con tipi typescript dietro le quinte per la definizione degli strumenti, markdown per il formato dei messaggi e del codice, e una sandbox di esecuzione nativa LLM per l’inferenza.
LLMz offre molte ottimizzazioni e funzionalità di debug necessarie per casi d’uso avanzati come:
- Compressione dei token di input
- Troncamento intelligente dei token
- Memoria ottimizzata per i token e per il contesto
- Chiamata parallela e composita di strumenti
- Mix di più messaggi + chiamate a strumenti in una singola chiamata LLM
- Strumenti completamente type safe (input & output)
- Sessioni di lunga durata tramite serializzazione sandbox
- Simulazione, incapsulamento e tracciamento degli strumenti
- Isolamento completo delle esecuzioni in V8 isolates leggeri (consente di eseguire migliaia di processi concorrenti in modo rapido ed economico)
- Iterazioni automatiche e recupero dagli errori</sty0>
Tutte queste cose erano necessarie per i nostri casi d’uso. Ma erano impossibili o molto difficili da realizzare con le normali chiamate agli strumenti.
Il caso contro i modelli router leggeri
Abbiamo a lungo pensato di costruire un modello di router leggero che si posizionasse sopra i modelli esistenti e selezionasse automaticamente il modello giusto per il compito richiesto.
Ma abbiamo deciso di non farlo per diversi motivi:
1. Prevedibilità
La maggior parte dei nostri clienti – comprensibilmente – desidera risultati affidabili e prevedibili.
Quindi l’idea di un router di modelli dinamico è un po’ rischiosa per agenti di alto livello. Aggiunge un ulteriore livello di imprevedibilità agli LLM.
2. Velocità
La latenza è molto importante per i nostri casi d'uso. Affinché il router sia veloce, il modello deve essere molto piccolo (e probabilmente meno intelligente) rispetto ai modelli a cui indirizzerà – probabilmente un classificatore tradizionale.
Anche se generalmente funzionano bene quando sono addestrati su compiti specifici, a) la loro capacità di gestire contesti lunghi è limitata e b) non riescono a generalizzare su richieste diverse da quelle su cui sono stati addestrati.
3. Supremazia del modello o parità tra modelli
Anche se i benchmark possono suggerire il contrario, nella pratica abbiamo raramente visto modelli superare GPT-4o (finora).
Non è ancora chiaro se gli LLM saranno davvero migliori nel tempo su un compito X rispetto a uno Y, o se tutti gli LLM finiranno per essere estremamente bravi in quasi tutto. In quest’ultimo caso, la scelta del modello non varrà la pena dello sforzo.
Rendere i LLM a prova di futuro con il feedback
Gli LLM diventeranno una commodity tra qualche anno e la scelta del modello non sarà più un problema.
Per questi motivi, abbiamo deciso di concentrare i nostri sforzi nel fornire un buon meccanismo per dare esempi agli LLM.
Abbiamo quindi creato un sistema per raccogliere feedback. Memorizza le "conoscenze" per le esecuzioni future. E fornisce dinamicamente le conoscenze più rilevanti al momento del prompt per le esecuzioni future, al fine di garantire miglioramenti affidabili e continui nel tempo.
Man mano che gli LLM raggiungono prestazioni sempre più elevate, siamo pronti ed entusiasti di sfruttarli al massimo per gli utenti della nostra piattaforma.





.webp)
