1. Panoramica di LangServe

LangServe è una libreria che aiuta gli sviluppatori a eseguire programmi e catene di LangChain come API REST. Integra FastAPI e utilizza pydantic per la validazione dei dati.

2. Funzionalità

LangServe ha le seguenti funzionalità:

  • Inferisce automaticamente le modalità di input e output dagli oggetti LangChain e esegue la validazione per ciascuna chiamata API, fornendo ricchi messaggi di errore
  • Pagina di documentazione dell'API contenente JSONSchema e Swagger
  • Endpoint /invoke/, /batch/, e /stream/ efficienti che supportano molte richieste concorrenti su un singolo server
  • Endpoint /stream_log/ per lo streaming di tutti (o parte) dei passaggi intermedi della catena/agent
  • Nuova funzionalità dalla versione 0.0.40, supporta astream_events per semplificare lo streaming senza analizzare l'output di stream_log
  • Pagina /playground/ con output in streaming e passaggi intermedi
  • Tracciamento integrato opzionale verso LangSmith, semplicemente aggiungendo la tua chiave API
  • Realizzato con librerie Python open-source consolidate come FastAPI, Pydantic, uvloop e asyncio
  • Invoca il server LangServe utilizzando un SDK client proprio come se stessi chiamando un Runnable in esecuzione in locale (o chiamando direttamente l'API HTTP)
  • LangServe Hub

3. Limitazioni

  • I callback del client per gli eventi provenienti dal server non sono ancora supportati
  • La documentazione OpenAPI non viene generata quando si utilizza Pydantic V2. FastAPI non supporta spazi dei nomi misti pydantic v1 e v2. Consultare la sezione sottostante per ulteriori dettagli.

4. Installazione

Puoi installare LangServe utilizzando il seguente comando:

pip install "langserve[all]"

Oppure installare il codice client utilizzando pip install "langserve[client]", e il codice server utilizzando pip install "langserve[server]".

4. Applicazione di Esempio

Di seguito, mostriamo come pubblicare modelli, catene e agenti definiti in LangChain come API REST per altre applicazioni. Se sei familiare con FastAPI, è semplice, basta utilizzare la classe di utilità fornita da langserve per registrare percorsi FastAPI.

Nell'esempio seguente, viene distribuito un modello di chat OpenAI, un modello di chat Anthropic e una catena che utilizza il modello Anthropic per raccontare barzellette su argomenti specifici.

Ecco il codice di esempio:

from fastapi import FastAPI
from langchain.prompts import ChatPromptTemplate
from langchain.chat_models import ChatAnthropic, ChatOpenAI
from langserve import add_routes

app = FastAPI(
    title="LangChain Server",
    version="1.0",
    description="Server API semplice utilizzando l'interfaccia Runnable di LangChain",
)

add_routes(
    app,
    ChatOpenAI(),
    path="/openai",
)

add_routes(
    app,
    ChatAnthropic(),
    path="/anthropic",
)

model = ChatAnthropic()
prompt = ChatPromptTemplate.from_template("raccontami una barzelletta su {topic}")
add_routes(
    app,
    prompt | model,
    path="/joke",
)

if __name__ == "__main__":
    import uvicorn

    uvicorn.run(app, host="localhost", port=8000)

Se hai intenzione di chiamare gli endpoint da un browser, è anche necessario impostare gli header CORS. Puoi farlo utilizzando il middleware incorporato in FastAPI:

from fastapi.middleware.cors import CORSMiddleware

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
    expose_headers=["*"],
)

5. Documentazione

Dopo aver eseguito l'esempio sopra, LangServe genera automaticamente la documentazione API per tutti i percorsi registrati. Puoi controllare la documentazione OpenAPI generata all'indirizzo seguente:

http://localhost:8000/docs

Assicurati di aggiungere il suffisso /docs.

⚠️ Se utilizzi pydantic v2, la documentazione non verrà generata per invoke, batch, stream e stream_log. Si consiglia di utilizzare la versione pydantic v1.

6. Introduzione alle API Routes

Di seguito è riportata un'introduzione alle interfacce API generate da LangServe dopo aver registrato una route API.

Ad esempio, considera il seguente codice:

add_routes(
    app,
    runnable,
    path="/my_runnable",
)

LangServe genererà le seguenti interfacce:

  • POST /my_runnable/invoke - Interfaccia per l'invocazione del modello
  • POST /my_runnable/batch - Interfaccia per l'invocazione batch del modello
  • POST /my_runnable/stream - Interfaccia per l'invocazione streaming del modello
  • POST /my_runnable/stream_log - Interfaccia per l'invocazione streaming del modello con output di log
  • POST /my_runnable/astream_events - Invocazione asincrona streaming del modello con output di eventi
  • GET /my_runnable/input_schema - Descrizione dei parametri dell'interfaccia per l'invocazione del modello
  • GET /my_runnable/output_schema - Descrizione dei parametri dell'interfaccia per l'output del modello
  • GET /my_runnable/config_schema - Descrizione della configurazione del modello

7. Playground

LangServe fornisce una pagina di debug UI per ciascuna route registrata, rendendo comodo il debug dei servizi Chain, Agent e altri servizi LangChain che definiamo.

Puoi accedere all'esempio Playground nel seguente formato: visita /my_runnable/playground/.