1. Przegląd LangServe

LangServe to biblioteka, która pomaga programistom uruchamiać programy i łańcuchy LangChain jako interfejsy API REST. Integruje FastAPI i wykorzystuje pydantic do walidacji danych.

2. Funkcje

LangServe ma następujące funkcje:

  • Automatyczne wnioskowanie trybów wejścia i wyjścia z obiektów LangChain oraz walidacja dla każdego wywołania API, zapewniająca bogate komunikaty o błędach
  • Strona dokumentacji API zawierająca JSONSchema i Swagger
  • Wydajne punkty końcowe /invoke/, /batch/ i /stream/ obsługujące wiele równoczesnych żądań na jednym serwerze
  • Punkt końcowy /stream_log/ do przesyłania wszystkich (lub części) pośrednich kroków łańcucha/agenta
  • Nowa funkcja od wersji 0.0.40, obsługuje astream_events, aby ułatwić przesyłanie bez analizowania wyników z stream_log
  • Strona /playground/ z przesyłanym wyjściem i pośrednimi krokami
  • Opcjonalne wbudowane śledzenie do LangSmith, wystarczy dodać swój klucz API
  • Zbudowane przy użyciu przetestowanych w boju bibliotek open-source języka Python, takich jak FastAPI, Pydantic, uvloop i asyncio
  • Wywoływanie serwera LangServe za pomocą SDK klienta tak samo jak wywołanie lokalnie uruchamianego Runnable (lub bezpośrednie wywołanie interfejsu API HTTP)
  • LangServe Hub

3. Ograniczenia

  • Wywołania zwrotne klienta dla zdarzeń pochodzących z serwera nie są jeszcze obsługiwane
  • Dokumentacja OpenAPI nie jest generowana przy użyciu Pydantic V2. FastAPI nie obsługuje mieszanych przestrzeni nazw pydantic v1 i v2. Zobacz poniższy rozdział, aby uzyskać więcej szczegółów.

4. Instalacja

Możesz zainstalować LangServe za pomocą poniższej komendy:

pip install "langserve[all]"

Lub zainstaluj kod klienta za pomocą pip install "langserve[client]", a kod serwera za pomocą pip install "langserve[server]".

5. Przykładowa Aplikacja

Poniżej przedstawiamy, jak opublikować modele, łańcuchy i agentów zdefiniowane w LangChain jako interfejsy API REST, aby inne aplikacje mogły je wywołać. Jeśli znasz FastAPI, jest to proste - wystarczy skorzystać z klasy narzędziowej dostarczanej przez langserve, aby zarejestrować trasy FastAPI.

Poniższy przykład wdraża model rozmowy OpenAI, model rozmowy Anthropic i łańcuch z użyciem modelu Anthropic do opowiadania dowcipów na określone tematy.

Oto kod przykładowy:

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="Prosty serwer API, wykorzystujący interfejs Runnable z LangChain",
)

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

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

model = ChatAnthropic()
prompt = ChatPromptTemplate.from_template("powiedz mi żart na temat {topic}")
add_routes(
    app,
    prompt | model,
    path="/joke",
)

if __name__ == "__main__":
    import uvicorn

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

Jeśli zamierzasz wywołać punkty końcowe z przeglądarki, musisz również ustawić nagłówki CORS. Można to osiągnąć za pomocą wbudowanego oprogramowania pośredniego w FastAPI:

from fastapi.middleware.cors import CORSMiddleware

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

6. Dokumentacja

Po uruchomieniu powyższego przykładu, LangServe automatycznie generuje dokumentację API dla wszystkich zarejestrowanych tras. Możesz sprawdzić wygenerowaną dokumentację OpenAPI pod następującym adresem:

http://localhost:8000/docs

Upewnij się, że dodasz przyrostek /docs.

⚠️ Jeśli używasz pydantic v2, dokumentacja nie zostanie wygenerowana dla invoke, batch, stream i stream_log. Zaleca się używanie wersji pydantic v1.

6. Wprowadzenie do tras interfejsu API

Poniżej znajduje się wprowadzenie do interfejsów API wygenerowanych przez LangServe po zarejestrowaniu trasy interfejsu API.

Na przykład, rozważmy poniższy kod:

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

LangServe wygeneruje następujące interfejsy:

  • POST /my_runnable/invoke - Interfejs do wywoływania modelu
  • POST /my_runnable/batch - Interfejs do zbiorowego wywoływania modelu
  • POST /my_runnable/stream - Interfejs do strumieniowego wywoływania modelu
  • POST /my_runnable/stream_log - Interfejs do strumieniowego wywoływania modelu z logowaniem
  • POST /my_runnable/astream_events - Asynchroniczne strumieniowe wywoływanie modelu z wyjściem zdarzeń
  • GET /my_runnable/input_schema - Opis parametrów interfejsu do wywoływania modelu
  • GET /my_runnable/output_schema - Opis parametrów interfejsu dla wyników modelu
  • GET /my_runnable/config_schema - Opis konfiguracji modelu

7. Plac zabaw

LangServe udostępnia stronę do debugowania interfejsu UI dla każdej zarejestrowanej trasy, co ułatwia debugowanie zdefiniowanych przez nas usług Chain, Agent oraz innych usług LangChain.

Możesz uzyskać dostęp do przykładowego Placu zabaw w następującym formacie: odwiedź /my_runnable/playground/.