1. Gambaran LangServe

LangServe adalah sebuah perpustakaan (library) yang membantu para pengembang menjalankan program dan rantai LangChain sebagai API REST. LangServe mengintegrasikan FastAPI dan menggunakan pydantic untuk validasi data.

2. Fitur

LangServe memiliki fitur-fitur berikut:

  • Secara otomatis menyimpulkan mode masukan dan keluaran dari objek LangChain dan melakukan validasi untuk setiap panggilan API, memberikan pesan error yang kaya
  • Halaman dokumentasi API yang berisi JSONSchema dan Swagger
  • Titik akhir /invoke/, /batch/, dan /stream/ yang efisien mendukung banyak permintaan bersamaan pada satu server
  • Titik akhir /stream_log/ untuk melakukan streaming semua (atau sebagian) langkah-langkah intermediate dari rantai/agen
  • Fitur baru sejak versi 0.0.40, mendukung astream_events untuk membuat streaming lebih mudah tanpa mengurai keluaran dari stream_log
  • Halaman /playground/ dengan keluaran streaming dan langkah-langkah intermediate
  • Pelacakan bawaan opsional ke LangSmith, hanya dengan menambahkan kunci API Anda
  • Dibangun dengan perpustakaan Python sumber terbuka yang telah diuji dalam pertempuran seperti FastAPI, Pydantic, uvloop, dan asyncio
  • Memanggil server LangServe menggunakan SDK klien seperti memanggil Runnable lokal (atau langsung memanggil API HTTP)
  • LangServe Hub

3. Batasan

  • Pemanggilan klien untuk peristiwa yang berasal dari server belum didukung
  • Dokumentasi OpenAPI tidak dihasilkan saat menggunakan Pydantic V2. FastAPI tidak mendukung namespace campuran pydantic v1 dan v2. Lihat bagian di bawah untuk lebih jelasnya.

4. Instalasi

Anda dapat menginstal LangServe menggunakan perintah berikut:

pip install "langserve[all]"

Atau instal kode klien menggunakan pip install "langserve[client]", dan kode server menggunakan pip install "langserve[server]".

4. Contoh Aplikasi

Di bawah ini, kami menunjukkan bagaimana mempublikasikan model, rantai, dan agen yang didefinisikan dalam LangChain sebagai API REST untuk aplikasi lain yang akan memanggilnya. Jika Anda sudah familiar dengan FastAPI, caranya sederhana, cukup menggunakan kelas utilitas yang disediakan oleh langserve untuk mendaftarkan rute FastAPI.

Berikut contoh kode:

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 sederhana menggunakan antarmuka Runnable dari LangChain",
)

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

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

model = ChatAnthropic()
prompt = ChatPromptTemplate.from_template("ceritakan lelucon tentang {topik}")
add_routes(
    app,
    prompt | model,
    path="/joke",
)

if __name__ == "__main__":
    import uvicorn

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

Jika Anda berniat memanggil titik akhir dari browser, Anda juga perlu mengatur header CORS. Anda dapat melakukannya dengan menggunakan middleware bawaan dalam FastAPI:

from fastapi.middleware.cors import CORSMiddleware

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

5. Dokumentasi

Setelah menjalankan contoh di atas, LangServe secara otomatis menghasilkan dokumentasi API untuk semua rute yang terdaftar. Anda dapat memeriksa dokumentasi OpenAPI yang dihasilkan pada alamat berikut:

http://localhost:8000/docs

Pastikan untuk menambahkan sufiks /docs.

⚠️ Jika menggunakan pydantic v2, dokumentasi tidak akan dihasilkan untuk invoke, batch, stream, dan stream_log. Disarankan untuk menggunakan versi pydantic v1.

6. Pengenalan tentang Rute API

Berikut adalah pengenalan terhadap antarmuka API yang dihasilkan oleh LangServe setelah mendaftarkan rute API.

Sebagai contoh, pertimbangkan kode berikut:

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

LangServe akan menghasilkan antarmuka berikut:

  • POST /my_runnable/invoke - Antarmuka untuk pemanggilan model
  • POST /my_runnable/batch - Antarmuka untuk pemanggilan model secara batch
  • POST /my_runnable/stream - Antarmuka untuk pemanggilan model secara streaming
  • POST /my_runnable/stream_log - Antarmuka untuk pemanggilan model secara streaming dengan output log
  • POST /my_runnable/astream_events - Pemanggilan model streaming asinkron dengan output acara
  • GET /my_runnable/input_schema - Deskripsi parameter antarmuka untuk pemanggilan model
  • GET /my_runnable/output_schema - Deskripsi parameter antarmuka untuk output model
  • GET /my_runnable/config_schema - Deskripsi konfigurasi model

7. Playground

LangServe menyediakan halaman debug UI untuk setiap rute yang terdaftar, sehingga memudahkan untuk mendepan Chain, Agent, dan layanan LangChain lainnya yang kita definisikan.

Anda dapat mengakses contoh Playground dalam format berikut: kunjungi /my_runnable/playground/.