Costruire un'API LLM ad alte prestazioni e pronta per la produzione con FastAPI: una guida passo passo

2/19/2026
6 min read

Costruire un'API LLM ad alte prestazioni e pronta per la produzione con FastAPI: una guida passo passo

FastAPI, un framework Web Python moderno e ad alte prestazioni, è popolare per la sua facilità d'uso, velocità e documentazione API generata automaticamente. Soprattutto nella costruzione di API backend per applicazioni LLM (Large Language Model), FastAPI mostra potenti vantaggi. Questo articolo ti insegnerà passo dopo passo come utilizzare FastAPI per costruire un'API LLM pronta per la produzione ed esplorerà alcune best practice.

Perché scegliere FastAPI?

Quando si costruisce un'API per applicazioni LLM, FastAPI offre i seguenti vantaggi chiave:

  • Alte prestazioni: basato su ASGI, FastAPI può gestire richieste ad alta concorrenza, il che è fondamentale per le applicazioni LLM che richiedono risposte rapide.
  • Supporto asincrono: FastAPI ha il supporto integrato per le parole chiave async e await, che possono essere utilizzate per gestire facilmente operazioni asincrone, come chiamare l'inferenza LLM, evitando di bloccare il thread principale.
  • Documentazione API automatica: FastAPI utilizza OpenAPI e JSON Schema per generare automaticamente la documentazione API interattiva (Swagger UI), rendendo più facile per gli sviluppatori testare e utilizzare la tua API.
  • Validazione dei dati: FastAPI utilizza Pydantic per la validazione dei dati, garantendo la correttezza dei parametri di richiesta e riducendo gli errori.
  • Dependency Injection: il sistema di dependency injection di FastAPI semplifica la gestione e la condivisione delle risorse, come i modelli LLM.
  • Comunità attiva: FastAPI ha una comunità ampia e attiva, dove puoi ottenere risorse e supporto abbondanti.

Preparativi

  1. Installa Python: assicurati di aver installato Python 3.7 o versioni successive.

  2. Installa FastAPI e Uvicorn: usa pip per installare FastAPI e Uvicorn (server ASGI):

    pip install fastapi uvicorn
    
  3. Scegli un modello LLM: scegli il modello LLM che desideri utilizzare. Può essere un modello OpenAI o un modello open source, come TinyLlama. Se scegli OpenAI, devi ottenere una chiave API OpenAI. Se scegli TinyLlama, devi scaricare il file del modello.

Passaggio 1: crea un'applicazione FastAPI

Crea un file chiamato main.py e aggiungi il seguente codice:

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel

app = FastAPI(title="LLM API", description="Una semplice API per interagire con gli LLM.")

class InputText(BaseModel):
    text: str

class OutputText(BaseModel):
    generated_text: str

Questo codice definisce un'applicazione FastAPI e definisce due modelli Pydantic: InputText viene utilizzato per ricevere il testo di input e OutputText viene utilizzato per restituire il testo generato.

Passaggio 2: aggiungi la logica di inferenza LLM

Aggiungi la logica di inferenza corrispondente in base al modello LLM che hai scelto. Qui prendiamo come esempio l'utilizzo dell'API OpenAI:

import openai
import os

# Ottieni la chiave API OpenAI
openai.api_key = os.environ.get("OPENAI_API_KEY")  # Si consiglia di utilizzare le variabili d'ambiente
```@app.post("/generate", response_model=OutputText)
async def generate_text(input_text: InputText):
    """
    Genera testo basato sul testo di input utilizzando OpenAI.
    """
    try:
        response = openai.Completion.create(
            engine="text-davinci-003", # Scegli il modello
            prompt=input_text.text,
            max_tokens=150,
            n=1,
            stop=None,
            temperature=0.7,
        )
        generated_text = response.choices[0].text.strip()
        return OutputText(generated_text=generated_text)
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

Questo codice definisce una route /generate che riceve un oggetto InputText come input, chiama l'API OpenAI per generare testo e restituisce il testo generato come oggetto OutputText. Nota: sostituisci text-davinci-003 con il modello appropriato che hai scelto.

Se si utilizza un modello locale come TinyLlama, è necessario installare la libreria corrispondente, ad esempio transformers, e caricare il modello in memoria. Ecco un esempio di codice:

from transformers import pipeline
import torch

generator = pipeline('text-generation', model="TinyLlama/TinyLlama-1.1B-Chat-v1.0", torch_dtype=torch.bfloat16, device_map="auto")

@app.post("/generate", response_model=OutputText)
async def generate_text(input_text: InputText):
    """
    Genera testo basato sul testo di input utilizzando TinyLlama.
    """
    try:
        generated_text = generator(input_text.text, max_length=50, do_sample=True, temperature=0.7)[0]['generated_text']
        return OutputText(generated_text=generated_text)
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

Passaggio 3: Esecuzione dell'applicazione FastAPI

Esegui l'applicazione FastAPI utilizzando Uvicorn:

uvicorn main:app --reload
```Questo avvierà un server locale e potrai visualizzare la documentazione API generata automaticamente visitando `http://127.0.0.1:8000/docs` nel tuo browser. Il parametro `--reload` riavvia automaticamente il server dopo le modifiche al codice, facilitando lo sviluppo.

## Passaggio 4: Testare l'API

Utilizza la documentazione API o strumenti come curl per testare la tua API. Ad esempio, utilizza curl per inviare una richiesta POST:

```bash
curl -X POST -H "Content-Type: application/json" -d '{"text": "Tell me a joke about cats."}' http://127.0.0.1:8000/generate

Dovresti ricevere una risposta JSON contenente il testo generato.

Passaggio 5: Distribuzione in produzione

Distribuisci la tua applicazione FastAPI in un ambiente di produzione, ad esempio:

  • Docker: Utilizza Docker per containerizzare la tua applicazione, facilitando la distribuzione e la gestione.
  • Piattaforma cloud: Distribuisci su una piattaforma cloud, come AWS, Google Cloud Platform o Azure. Azure Cosmos DB e Azure Functions menzionati nell'articolo possono essere utilizzati per creare API serverless. Modal può essere utilizzato anche per distribuire applicazioni FastAPI con scalabilità automatica.
  • Server: Distribuisci sul tuo server.

Best practice

  • Utilizza variabili d'ambiente per archiviare informazioni sensibili: Non codificare informazioni sensibili come le chiavi API direttamente nel codice, ma utilizza invece le variabili d'ambiente.
  • Aggiungi la registrazione dei log: Utilizza il modulo di registrazione dei log per registrare lo stato di esecuzione dell'API, facilitando il debug e il monitoraggio.
  • Aggiungi la gestione degli errori: Utilizza i blocchi try...except per gestire le eccezioni che potrebbero verificarsi e restituire messaggi di errore appropriati.
  • Limitazione della frequenza: Utilizza un limitatore di frequenza per impedire l'uso improprio dell'API. Sono disponibili alcune librerie di limitazione della frequenza pronte all'uso per FastAPI.
  • Cache: Per le richieste ripetute, puoi utilizzare la cache per migliorare le prestazioni.
  • Monitoraggio: Utilizza strumenti di monitoraggio per monitorare le prestazioni e la disponibilità dell'API.

Suggerimenti avanzati

  • Elaborazione asincrona: Per l'inferenza LLM che richiede tempo, utilizza le parole chiave async e await per l'elaborazione asincrona, evitando di bloccare il thread principale.
  • Risposta in streaming: L'utilizzo di una risposta in streaming (StreamingResponse) può restituire il testo generato in tempo reale, migliorando l'esperienza dell'utente.
  • Multithreading/Multiprocessing: Per l'inferenza LLM ad alta intensità di CPU, è possibile utilizzare il multithreading o il multiprocessing per migliorare le prestazioni.
  • Accelerazione GPU: Se il tuo modello LLM supporta l'accelerazione GPU, puoi utilizzare CUDA o altre librerie di accelerazione GPU per aumentare la velocità di inferenza.

ConclusioneFastAPI è uno strumento potente per costruire API LLM ad alte prestazioni e pronte per la produzione. Attraverso questa guida, puoi rapidamente configurare un'API LLM ed espanderla e ottimizzarla in base alle tue esigenze. Ricorda, l'apprendimento continuo e la pratica sono fondamentali per diventare un eccellente sviluppatore di applicazioni LLM. Hornbeam, menzionato nell'articolo, è anche un server ASGI degno di nota, che afferma di essere più veloce e stabile di Gunicorn e può essere utilizzato per distribuire applicazioni FastAPI.

Published in Technology

You Might Also Like