Vai al contenuto principale

Servire un'applicazione LLM come endpoint API con FastAPI in Python

Sblocca la potenza dei Large Language Models (LLM) nelle tue applicazioni con il nostro ultimo blog "Servire un'applicazione LLM come endpoint API usando FastAPI in Python". LLM come GPT, Claude e LLaMA stanno rivoluzionando chatbot, creazione di contenuti e molti altri casi d'uso. Scopri come le API agiscono da ponti cruciali, consentendo un'integrazione senza attriti di funzioni avanzate di comprensione e generazione del linguaggio nei tuoi progetti.

Scopri con l'IA

Introduzione

I Large Language Models (LLM) sono in prima linea nell'IA generativa, trasformando il modo in cui le macchine comprendono e generano testo simile a quello umano. Modelli LLM come GPT, Claude, LLaMA, Mistral, ecc. guidano innovazioni in chatbot, creazione di contenuti e oltre, offrendo capacità senza precedenti nell'elaborazione e generazione del linguaggio naturale.

Tuttavia, la vera utilità degli LLM va oltre la loro pura potenza computazionale; l'accessibilità è fondamentale. Le API, o Application Programming Interface, fungono da ponti che consentono a diverse applicazioni di attingere alla potenza degli LLM. Permettono agli sviluppatori di integrare funzionalità sofisticate di comprensione e generazione del linguaggio nelle loro applicazioni, dal semplice text analysis a sistemi di dialogo complessi.

In questo tutorial costruiremo una semplice applicazione Python utilizzando il modello OpenAI GPT e la esporremo con un endpoint API sviluppato con il framework FastAPI in Python.

Large Language Models

I Large Language Models (LLM) sono sistemi avanzati di intelligenza artificiale progettati per comprendere e generare testo simile a quello umano. Questi modelli sono addestrati su enormi quantità di dati, il che consente loro di cogliere schemi complessi, comprendere le sfumature del linguaggio e generare risposte coerenti.

Gli LLM sono in grado di svolgere vari compiti linguistici, tra cui traduzione, completamento del testo, sintesi e persino interazioni conversazionali. GPT è un esempio di LLM.

In questo post, costruiremo una semplice applicazione Python utilizzando le API di GPT di OpenAI e poi creeremo un endpoint REST per la nostra applicazione usando il framework FastAPI in Python.

Un LLM è un tipo di IA generativa. Se vuoi saperne di più sull'IA generativa e su come può stimolare la tua creatività, dai un'occhiata ai nostri post sul blog Usare l'IA generativa per aumentare la tua creatività e al nostro podcast, Dentro la rivoluzione dell'IA generativa.

Puoi anche iscriverti al nostro prossimo corso su Concetti sui Large Language Models.

Che cos'è un'API?

L'Application Programming Interface (API) è la spina dorsale della comunicazione software, consentendo a sistemi, applicazioni e dispositivi diversi di interagire e condividere dati senza soluzione di continuità. Agisce come un insieme di regole e protocolli che permettono agli enti software di comunicare, offrendo un modo predefinito perché un'applicazione sfrutti le capacità o i dati di un'altra senza doverne capire il funzionamento interno.

Le API sono onnipresenti nell'ecosistema digitale di oggi: alimentano servizi web, app mobili e cloud computing, facilitando la comunicazione tra applicazioni e l'integrazione di servizi di terze parti. Semplificano lo sviluppo fornendo mattoncini riutilizzabili che gli sviluppatori possono usare per accelerare la creazione di nuovo software, migliorando funzionalità ed esperienza utente senza partire da zero.

Attraverso le API, gli sviluppatori possono estendere le loro applicazioni in modi che altrimenti sarebbero complessi o impossibili, rendendole un componente fondamentale nello sviluppo moderno del software.

Screenshot che mostra come funziona un'API

Fonte immagine

Se ti interessa l'ingegneria legata alla messa in produzione di modelli di machine learning nel mondo reale, consulta questa guida completa su Machine Learning, pipeline, deployment e MLOps. Puoi anche dare un'occhiata al corso gratuito Introduzione alle API su Datacamp.

FastAPI

FastAPI è un framework Python progettato per creare API ad alte prestazioni. La sua ascesa è sostenuta da velocità, facilità d'uso e compatibilità con la programmazione asincrona. FastAPI aiuta gli sviluppatori a esporre le funzionalità degli LLM come endpoint API, semplificando il deploy, la gestione e la scalabilità di servizi alimentati dall'IA.

FastAPI si distingue per prestazioni ed efficienza, sfruttando funzionalità moderne di Python come i type hint e la programmazione asincrona per offrire miglioramenti di velocità paragonabili a NodeJS e persino a Go.

Questo vantaggio prestazionale è cruciale per applicazioni che richiedono elaborazione dati in tempo reale e gestione di richieste concorrenti, come quelle che interagiscono con gli LLM. La sua capacità di validare automaticamente i dati in ingresso e serializzare le risposte riduce il boilerplate, rendendo lo sviluppo di API più pulito e lineare.

La documentazione automatica, che utilizza standard come OpenAPI, fornisce a sviluppatori e utenti una documentazione chiara e interattiva delle API, semplificando ulteriormente integrazione e test.

Esempio di creazione di un'API:

from typing import Union

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}

Questo codice crea un semplice server web usando FastAPI. Il server risponde a due tipi di richieste web: una che saluta l'utente con "Hello World" quando visita la home page ("/"), e un'altra che mostra l'ID di un elemento e un parametro di query opzionale "q" quando l'utente visita una pagina specifica dell'elemento ("/items/{item_id}"). L'ID dell'elemento è obbligatorio e deve essere un intero, mentre il parametro di query "q" è facoltativo e può essere una stringa o mancare.

Esegui il server FastAPI con:

Screenshot della bash che mostra come avviare il server FastAPI. comando: uvicorn main:app --reload

Crea un'applicazione end-to-end in Python

Lo scopo principale di questo blog è mostrare come puoi creare rapidamente endpoint REST API per le tue applicazioni LLM. Creeremo una semplice applicazione Python (una sola funzione) che usa le API di OpenAI GPT-4 e traduce testo inglese in francese. Questa applicazione ha una sola funzione, translate_text:

from openai import OpenAI
import os

os.environ["OPENAI_API_KEY"] = "..."

# Initialize OpenAI client with your API key
client = OpenAI()

def translate_text(input_str):
    completion = client.chat.completions.create(
        model="gpt-4-0125-preview",
        messages=[
            {
                "role": "system",
                "content": "You are an expert translator who translates text from english to french and only return translated text",
            },
            {"role": "user", "content": input_str},
        ],
    )

    return completion.choices[0].message.content

Questa funzione prende un input dall'utente e lo passa semplicemente al modello OpenAI GPT-4. Ha un prompt di sistema per definire il contesto e il prompt dell'utente è il testo che riceviamo dall'utente in input_str.

Puoi testare questa funzione eseguendo quanto segue. Dovresti ottenere il testo in francese come risultato.

# test the function
translate_text("this is a test string to translate")

Se stai pensando di condividere questa applicazione con altri, inviare semplicemente il file Python da eseguire sulla loro riga di comando potrebbe funzionare per alcuni utenti, specialmente per chi ha familiarità con Python e gli strumenti da riga di comando.

Tuttavia, questo approccio ha dei limiti. Non tutti gli utenti si sentono a loro agio con la riga di comando e, anche per chi lo è, eseguire uno script Python richiede un ambiente Python configurato con tutte le dipendenze necessarie. Questo può essere macchinoso e creare una barriera all'accesso alle funzionalità della tua applicazione di traduzione.

È qui che incapsulare la tua applicazione in una FastAPI per esporla come endpoint REST API diventa una soluzione potente. In questo modo, crei un'interfaccia accessibile alla tua applicazione raggiungibile via Internet senza che gli utenti debbano eseguire script Python. Possono interagire con la tua applicazione tramite semplici richieste web, effettuabili da una grande varietà di piattaforme e linguaggi di programmazione, non solo Python.

Creare una REST API con FastAPI automatizza il processo di ricezione delle richieste di traduzione e l'invio delle traduzioni. Gli utenti possono inviare il testo da tradurre attraverso un'interfaccia web o una chiamata API programmatica, rendendo il tutto molto più semplice e flessibile per diversi casi d'uso.

Per convertire questa semplice funzione in un endpoint API usando FastAPI, modificheremo il nostro codice:

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import os


os.environ["OPENAI_API_KEY"] = "..."


# Initialize OpenAI client with your API key
client = OpenAI()


# Initialize FastAPI client
app = FastAPI()


# Create class with pydantic BaseModel
class TranslationRequest(BaseModel):
    input_str: str


def translate_text(input_str):
    completion = client.chat.completions.create(
        model="gpt-4-0125-preview",
        messages=[
            {
                "role": "system",
                "content": "You are an expert translator who translates text from english to french and only return translated text",
            },
            {"role": "user", "content": input_str},
        ],
    )


    return completion.choices[0].message.content


@app.post("/translate/")  # This line decorates 'translate' as a POST endpoint
async def translate(request: TranslationRequest):
    try:
        # Call your translation function
        translated_text = translate_text(request.input_str)
        return {"translated_text": translated_text}
    except Exception as e:
        # Handle exceptions or errors during translation
        raise HTTPException(status_code=500, detail=str(e))

Per eseguire e testare questa API in locale, esegui semplicemente il seguente comando:

uvicorn main:app --reload

Qui, main.py si riferisce al file che contiene il tuo codice. Il termine app punta all'istanza dell'applicazione FastAPI, che nel tuo codice è identificata da app = FastAPI().

Vai su localhost:8000/docs per vedere un'interfaccia UI che dovrebbe apparire così:

Uno screenshot della pagina di documentazione degli endpoint FastAPI

Clicca su POST, poi su Try it out, inserisci la tua stringa di testo e premi Execute.

Screenshot dell'interfaccia UI di FastAPI

Dovresti vedere un comando curl inviato all'API, l'URL della richiesta che in questo momento è il tuo localhost e la risposta del server. Il codice 200 indica successo; accanto puoi vedere la traduzione in francese.

Screenshot dell'interfaccia UI di FastAPI

Conclusione

Questo blog ha illustrato la configurazione di un endpoint API usando FastAPI per servire applicazioni alimentate da Large Language Models come GPT. FastAPI, con le sue prestazioni e facilità d'uso, offre un modo semplice per creare API ad alte prestazioni, rendendolo una scelta ideale per gli sviluppatori che vogliono integrare LLM nei loro progetti.

Se vuoi scoprire tutto il potenziale degli LLM con un corso concettuale unico che copre applicazioni, metodologie di training, considerazioni etiche e le ricerche più recenti, dai un'occhiata a questo corso gratuito su Mastering Large Language Models (LLMs) su Datacamp.

Vuoi ampliare il tuo set di competenze e strumenti? Scopri le 21 tool essenziali di Python per sviluppo software, web scraping e development, analisi e visualizzazione dei dati e machine learning.

Moez Ali

Autore

Moez Ali

Data Scientist, fondatore e creatore di PyCaret

Argomenti

Correlato