1. LangServe Genel Bakış

LangServe, geliştiricilere programları ve LangChain zincirlerini REST API'ları olarak çalıştırmalarına yardımcı olan bir kütüphanedir. FastAPI entegrasyonu ve veri doğrulaması için pydantic kullanmaktadır.

2. Özellikler

LangServe'un aşağıdaki özellikleri bulunmaktadır:

  • Giriş ve çıkış modlarını otomatik olarak çıkarır ve her API çağrısı için doğrulama yapar, zengin hata mesajları sağlar
  • JSONSchema ve Swagger içeren API belgelendirme sayfası
  • Tek sunucuda birçok eşzamanlı isteği destekleyen verimli /invoke/, /batch/ ve /stream/ uç noktaları
  • Zincir/agentin ara aşamalarının tümünü (veya bir kısmını) yayınlamak için /stream_log/ uç noktası
  • Sürüm 0.0.40'tan itibaren Yeni özellik: astream_events'ı destekleyerek stream_log çıktısını ayrıştırma gereksinimi olmadan yayınlamasını yapar
  • Akış çıktısı ve ara aşamaları içeren /playground/ sayfası
  • Sadece API anahtarını ekleyerek isteğe bağlı yerleşik izleme için LangSmith desteği
  • FastAPI, Pydantic, uvloop ve asyncio gibi test edilmiş açık kaynaklı Python kütüphaneleri ile oluşturulmuştur
  • LangServe sunucusunu, yerel olarak çalışan Runnable'ı çağırmak gibi, istemci SDK'sını kullanarak çağırabilirsiniz (veya doğrudan HTTP API'sini çağırarak)
  • LangServe Hub

3. Sınırlamalar

  • Sunucudan kaynaklanan olaylar için istemci geri çağrıları henüz desteklenmemektedir
  • Pydantic V2 kullanıldığında OpenAPI belgelendirmesi oluşturulmaz. FastAPI, karışık pydantic v1 ve v2 ad alanlarını desteklemez. Daha fazla ayrıntı için aşağıdaki bölüme bakınız.

4. Kurulum

LangServe'u aşağıdaki komutu kullanarak kurabilirsiniz:

pip install "langserve[all]"

Veya istemci kodunu pip install "langserve[client]", sunucu kodunu ise pip install "langserve[server]" ile kurabilirsiniz.

4. Örnek Uygulama

Aşağıda, LangChain'de tanımlanan modelleri, zincirleri ve ajanları diğer uygulamaların çağırabileceği REST API'ları olarak nasıl yayınladığımızı gösteriyoruz. FastAPI ile tanıdıysanız, basittir, sadece langserve tarafından sağlanan yardımcı sınıfı kullanarak FastAPI rotalarını kaydedin.

Aşağıdaki örnek, bir OpenAI sohbet modeli, bir Anthropic sohbet modeli ve belirli konular hakkında şaka yapan Anthropic modelini kullanan bir zinciri dağıtır.

İşte örnek kod:

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 Sunucusu",
    version="1.0",
    description="LangChain'in Runnable arabirimini kullanan basit bir API sunucusu",
)

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

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

model = ChatAnthropic()
prompt = ChatPromptTemplate.from_template("bana {konu} hakkında bir şaka anlat")
add_routes(
    app,
    prompt | model,
    path="/joke",
)

if __name__ == "__main__":
    import uvicorn

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

Eğer uç noktalara bir tarayıcıdan çağrı yapmayı düşünüyorsanız, CORS başlıklarını da ayarlamanız gerekir. Bu işlemi FastAPI'de bulunan yerleşik ara yazılımı kullanarak başarabilirsiniz:

from fastapi.middleware.cors import CORSMiddleware

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

5. Belgeleme

Yukarıdaki örneği çalıştırdıktan sonra LangServe, kaydedilmiş tüm rotalar için otomatik olarak API belgeleri oluşturur. Oluşturulmuş OpenAPI belgelendirmesini aşağıdaki adresten kontrol edebilirsiniz:

http://localhost:8000/docs

Mutlaka /docs ekini ekleyin.

⚠️ Pydantic v2 kullanılıyorsa, belgeleme invoke, batch, stream ve stream_log için oluşturulmayacaktır. Pydantic v1 sürümünü kullanmanız önerilir.

6. API Rotalarına Giriş

Aşağıda, LangServe tarafından bir API rotası kaydedildikten sonra oluşturulan API arayüzlerine ilişkin bir giriş bulunmaktadır.

Örneğin, aşağıdaki kodu düşünelim:

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

LangServe, aşağıdaki arayüzleri oluşturacaktır:

  • POST /my_runnable/invoke - Model çağrısı için arayüz
  • POST /my_runnable/batch - Toplu model çağrısı için arayüz
  • POST /my_runnable/stream - Akış model çağrısı için arayüz
  • POST /my_runnable/stream_log - Günlük çıktılı akış model çağrısı için arayüz
  • POST /my_runnable/astream_events - Olay çıktılı asenkron akış model çağrısı
  • GET /my_runnable/input_schema - Model çağrısı için arayüz parametre açıklaması
  • GET /my_runnable/output_schema - Model çıkışı için arayüz parametre açıklaması
  • GET /my_runnable/config_schema - Modelin yapılandırma açıklaması

7. Oyun Alanı

LangServe, her kayıtlı rota için bir UI hata ayıklama sayfası sağlar, bu sayede tanımladığımız Chain, Agent ve diğer LangChain hizmetlerini hızlıca hata ayıklamamızı sağlar.

Aşağıdaki formatta Playground örneğine erişebilirsiniz: /my_runnable/playground/.