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
'ı destekleyerekstream_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/
.