1. LangServe Übersicht

LangServe ist eine Bibliothek, die Entwicklern dabei hilft, Programme und Ketten von LangChain als REST-APIs auszuführen. Es integriert FastAPI und verwendet pydantic zur Datenvalidierung.

2. Eigenschaften

LangServe bietet folgende Eigenschaften:

  • Ermittelt automatisch Eingabe- und Ausgabemodi aus LangChain-Objekten und führt für jeden API-Aufruf eine Validierung durch, wodurch aussagekräftige Fehlermeldungen bereitgestellt werden
  • API-Dokumentationsseite mit JSONSchema und Swagger
  • Effiziente Endpunkte /invoke/, /batch/ und /stream/, die viele gleichzeitige Anfragen auf einem einzigen Server unterstützen
  • Endpunkt /stream_log/ zum Streamen aller (oder eines Teils) der Zwischenschritte der Kette/des Agenten
  • Neues Feature ab Version 0.0.40: Unterstützung von astream_events zur vereinfachten Datenübertragung, ohne die Ausgabe von stream_log parsen zu müssen
  • Seite /playground/ mit Streaming-Ausgabe und Zwischenschritten
  • Optionales integriertes Tracing zu LangSmith, einfach durch Hinzufügen des API-Schlüssels
  • Aufgebaut mit bewährten Open-Source-Python-Bibliotheken wie FastAPI, Pydantic, uvloop und asyncio
  • Aufruf des LangServe-Servers mithilfe eines Client-SDKs wie der Aufruf eines lokal ausgeführten Runnable (oder direkter Aufruf der HTTP-API)
  • LangServe Hub

3. Einschränkungen

  • Client-Rückrufe für Ereignisse, die vom Server ausgehen, werden noch nicht unterstützt
  • Die OpenAPI-Dokumentation wird nicht generiert, wenn Pydantic V2 verwendet wird. FastAPI unterstützt keine gemischten Namespaces von Pydantic v1 und v2. Weitere Details finden Sie im folgenden Abschnitt.

4. Installation

Sie können LangServe mit dem folgenden Befehl installieren:

pip install "langserve[all]"

Oder die Client-Code mit pip install "langserve[client]" und den Server-Code mit pip install "langserve[server]" installieren.

4. Beispielanwendung

Im Folgenden zeigen wir, wie Modelle, Ketten und Agenten, die in LangChain definiert sind, als REST-APIs für andere Anwendungen veröffentlicht werden können. Wenn Sie mit FastAPI vertraut sind, ist es ganz einfach: Verwenden Sie einfach die bereitgestellte Hilfsklasse von langserve, um FastAPI-Routen zu registrieren.

Das folgende Beispiel stellt ein OpenAI-Chat-Modell, ein Anthropic-Chat-Modell und eine Kette vor, die das Anthropic-Modell verwendet, um Witze zu bestimmten Themen zu erzählen.

Hier ist der Beispielscode:

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="Einfacher API-Server, der die Runnable-Schnittstelle von LangChain verwendet",
)

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

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

model = ChatAnthropic()
prompt = ChatPromptTemplate.from_template("erzähl mir einen Witz über {topic}")
add_routes(
    app,
    prompt | model,
    path="/joke",
)

if __name__ == "__main__":
    import uvicorn

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

Wenn Sie die Endpunkte aus einem Browser aufrufen möchten, müssen Sie auch CORS-Header setzen. Dies kann mithilfe des integrierten Middleware in FastAPI erreicht werden:

from fastapi.middleware.cors import CORSMiddleware

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

5. Dokumentation

Nach Ausführung des obigen Beispiels generiert LangServe automatisch die API-Dokumentation für alle registrierten Routen. Sie können die generierte OpenAPI-Dokumentation unter der folgenden Adresse überprüfen:

http://localhost:8000/docs

Stellen Sie sicher, dass Sie den Suffix /docs anhängen.

⚠️ Bei Verwendung von pydantic v2 wird die Dokumentation für invoke, batch, stream und stream_log nicht generiert. Es wird empfohlen, die Version pydantic v1 zu verwenden.

6. Einführung in API-Routen

Im Folgenden finden Sie eine Einführung in die von LangServe generierten API-Schnittstellen nach der Registrierung eines API-Routen.

Zum Beispiel betrachten Sie den folgenden Code:

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

LangServe generiert die folgenden Schnittstellen:

  • POST /my_runnable/invoke - Schnittstelle für die Modellaufruf
  • POST /my_runnable/batch - Schnittstelle für Stapel-Modellaufruf
  • POST /my_runnable/stream - Schnittstelle für Streaming-Modellaufruf
  • POST /my_runnable/stream_log - Schnittstelle für Streaming-Modellaufruf mit Protokollausgabe
  • POST /my_runnable/astream_events - Asynchroner Streaming-Modellaufruf mit Ereignisausgabe
  • GET /my_runnable/input_schema - Schnittstellenparameterbeschreibung für Modellaufruf
  • GET /my_runnable/output_schema - Schnittstellenparameterbeschreibung für Modellausgabe
  • GET /my_runnable/config_schema - Konfigurationsbeschreibung des Modells

7. Playground

LangServe stellt für jede registrierte Route eine UI-Debugging-Seite bereit, um das Debuggen der von uns definierten Dienste Chain, Agent und anderer LangChain-Dienste zu vereinfachen.

Sie können auf das Playground-Beispiel im folgenden Format zugreifen: Besuchen Sie /my_runnable/playground/.