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 distream_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/
.