Distribuzione di applicazioni di chat LLM con Declarai, FastAPI e Streamlit

Distribuzione applicazioni chat LLM con Declarai, FastAPI e Streamlit

Screenshot | Scattata dall'autore | Tutti i diritti riservati

Nell’ottobre 2022, quando ho iniziato a sperimentare con i Large Language Models (LLM), la mia inclinazione iniziale era quella di esplorare completamenti di testo, classificazioni, NER e altre aree legate all’NLP. Sebbene l’esperienza fosse stimolante, ho presto avvertito un cambiamento di paradigma. C’è stato un evidente calo di interesse per i LLM basati su completamenti tradizionali, facendo spazio a modelli di chat come GPT-3.5 e GPT-4 che offrivano un’esperienza di chat coerente.

Questa transizione coincideva con un’enfasi dell’industria sui chatbot. Che si tratti di un assistente chatbot o di uno personalizzato per flussi aziendali, i miei colleghi erano convinti: la chat era la strada da seguire. Il mio percorso è quindi passato alla costruzione di chatbot per vari casi d’uso.

Di recente, abbiamo deciso di condividere questa conoscenza e quindi abbiamo integrato funzionalità di chatbot in Declarai. La nostra visione? Uno strumento open-source così intuitivo che chiunque potrebbe implementare qualsiasi attività correlata a LLM in meno di 5 minuti, personalizzato per il 95% dei casi d’uso standard e ancora in grado di costruire una solida base di produzione intorno ad esso.

Declarai in Azione 🚀

L’etica di Declarai è quella di dare potere agli sviluppatori per dichiarare l’obiettivo che si prefiggono. Per la nostra dimostrazione, creeremo un SQL Chatbot che risponde a query legate a SQL.

Per iniziare, progettiamo la nostra richiesta di sistema – il messaggio guida che stabilisce i limiti delle capacità del nostro chatbot.

Stiamo utilizzando gpt3.5 per creare un SQL Chatbot che ci aiuti con qualsiasi domanda relativa a SQL.

from declarai import Declaraideclarai = Declarai(provider="openai", model="gpt-3.5-turbo")@declarai.experimental.chatclass SQLChat:    """    Sei un assistente SQL. Stai aiutando un utente a scrivere una query SQL.    Dovresti prima sapere quale sintassi SQL l'utente vuole utilizzare. Può essere mysql, postgresql, sqllite, ecc.    Se l'utente dice qualcosa che non è affatto correlato a SQL, dovresti dire "Non capisco. Sono qui per aiutarti a scrivere una query SQL."    Dopo aver fornito all'utente una query, dovresti chiedere all'utente se ha bisogno di qualcos'altro.    """

In Declarai, questo messaggio guida è integrato in modo trasparente all’interno della docstring della classe, garantendo chiarezza e leggibilità. Possiamo anche avviare la chat con un saluto cordiale:

@declarai.experimental.chatclass SQLChat:    """    Sei un assistente SQL. Stai aiutando un utente a scrivere una query SQL.    Dovresti prima sapere quale sintassi SQL l'utente vuole utilizzare. Può essere mysql, postgresql, sqllite, ecc.    Se l'utente dice qualcosa che non è affatto correlato a SQL, dovresti dire "Non capisco. Sono qui per aiutarti a scrivere una query SQL."    Dopo aver fornito all'utente una query, dovresti chiedere all'utente se ha bisogno di qualcos'altro.    """        greeting = "Ciao caro utente SQL. Spero che tu stia bene oggi. Sono qui per aiutarti a scrivere una query SQL. Cominciamo! Quale sintassi SQL vorresti utilizzare? Può essere mysql, postgresql, sqllite, ecc."

Ora, interagiamo con il nostro chatbot:

sql_chat = SQLChat()>>> "Ciao appassionato di SQL! Come posso aiutarti con la tua query SQL oggi? Quale sintassi SQL stai utilizzando: MySQL, PostgreSQL, SQLite o un'altra?"sql_chat.send("Preferirei MySQL."))>>> "Scelta fantastica! Come posso aiutarti con la tua query MySQL?"sql_chat.send("Dalla tabella 'Users', recupera i 5 nomi più comuni.")>>> "Certamente! Ecco una query MySQL che dovrebbe funzionare:>>> SELECT name, COUNT(*) AS count>>> FROM Users>>> GROUP BY name>>> ORDER BY count DESC>>> LIMIT 5;>>> C'è qualcos'altro in cui posso aiutarti?"

Con l’esempio di SQLChat appena presentato, hai intravisto il potere di un modello conversazionale ben strutturato.

Nota 📝: Ricorda, SQLChat è solo un esempio. Puoi facilmente personalizzare il chatbot in base alle tue esigenze specifiche, regolando il messaggio di sistema.

Il prossimo passo è configurare il nostro backend. Utilizzando FastAPI e Streamlit, daremo vita al nostro chatbot e lo renderemo accessibile agli utenti.

Il backend dell’API ⚙️

Per portare il nostro chatbot a un pubblico più ampio, utilizzeremo FastAPI come gateway API RESTful e Streamlit per l’integrazione del frontend.

from fastapi import FastAPI, APIRouterfrom declarai.memory import FileMessageHistoryfrom .chat import SQLChatapp = FastAPI(title="Hey")router = APIRouter()@router.post("/chat/submit/{chat_id}")def submit_chat(chat_id: str, request: str):    chat = SQLChat(chat_history=FileMessageHistory(file_path=chat_id))    response = chat.send(request)    return [email protected]("/chat/history/{chat_id}")def get_chat_history(chat_id: str):    chat = SQLChat(chat_history=FileMessageHistory(file_path=chat_id))    response = chat.conversation    return responseapp.include_router(router, prefix="/api/v1")if __name__ == "__main__":    import uvicorn  # pylint: disable=import-outside-toplevel    uvicorn.run(        "main:app",        host="0.0.0.0",        port=8000,        workers=1,        use_colors=True,    )

La nostra configurazione FastAPI stabilisce due rotte chiave: una per l’invio di nuovi messaggi e un’altra per il recupero della cronologia delle chat. La classe FileMessageHistory di Declarai garantisce continuità nei nostri thread di chat tra le sessioni salvando lo stato della conversazione ad ogni interazione. Se preferisci salvare la cronologia dei messaggi in un database (Postgres/redis/mongo), puoi farlo semplicemente sostituendo la classe FileMessageHistory.

La nostra FastAPI Swagger | Scattata dall'autore | Nessun diritto riservato

L’esperienza del frontend 🎨

La nostra interfaccia utente è una GUI di chat sviluppata utilizzando Streamlit.

Screenshot della chat di Streamlit | Scattato dall'autore | Nessun diritto riservato

Anche la configurazione di Streamlit è abbastanza concisa:

import streamlit as stimport requestsst.write("# Benvenuto in SQLChat Assistant! 👋")st.write(    "Saluti! Sono il tuo assistente sql.\n Insieme possiamo creare qualsiasi query sql che desideri.")session_name = st.text_input("Fornisci un nome per la tua sessione di chat")if session_name:    messages = requests.get(f"http://localhost:8000/api/v1/chat/history/{session_name}").json()    for message in messages:        with st.chat_message(message["role"]):            st.markdown(message["message"])    prompt = st.chat_input("Digita un messaggio...")    if prompt:        with st.chat_message("user"):            st.markdown(prompt)        with st.spinner("..."):            res = requests.post(f"http://localhost:8000/api/v1/chat/submit/{session_name}",                                params={"request": prompt}).json()            with st.chat_message("assistant"):                st.markdown(res)        messages = requests.get(            f"http://localhost:8000/api/v1/chat/history/{session_name}").json()

Una volta fornito un nome per la sessione di chat, gli utenti possono avviare una conversazione. Ogni interazione del messaggio chiama il backend, con uno spinner che fornisce un feedback visivo durante l’elaborazione.

Pronto per distribuire il tuo chatbot 🤖? Approfondisci il codice completo in questo repository —

GitHub – matankley/declarai-chat-fastapi-streamlit: Un esempio su come costruire un chatbot utilizzando declarai…

Un esempio su come costruire un chatbot utilizzando declarai per interagire con il modello di linguaggio, FastAPI come server backend e…

github.com

Rimani in contatto con gli sviluppi di Declarai 💌. Connettiti con noi sulla pagina Linkedin e dacci una stella ⭐️ su GitHub se trovi i nostri strumenti utili!

Approfondisci le capacità di Declarai esplorando la nostra documentazione 📖

Declarai

Declarai, trasforma il codice Python in compiti LLM, facile da usare e pronto per la produzione. Declarai trasforma il tuo codice Python in…

declarai.com