1. مرور اجمالی‌ی LangServe

LangServe یک کتابخانه است که به توسعه دهندگان کمک می‌کند تا برنامه‌ها و زنجیره‌های LangChain را به عنوان رابط‌های برنامه نویسی REST اجرا کنند. این کتابخانه از FastAPI و از pydantic برای اعتبار سنجی داده‌ها استفاده می‌کند.

2. ویژگی‌ها

LangServe دارای ویژگی‌های زیر است:

  • به صورت خودکار از شیوه‌های ورودی و خروجی از اشیاء LangChain نتیجه می‌گیرد و برای هر فراخوانی API اعتبار سنجی انجام داده و پیام‌های خطا را ارائه می‌دهد
  • صفحه مستندات API که شامل JSONSchema و Swagger است
  • پایین آورهوم /invoke/، /batch/، و /stream/ که پشتیبانی از درخواست‌های همزمان زیاد را بر روی یک سرور تکی فراهم می‌کند
  • پایین آورهوم /stream_log/ برای استریم کردن همه (یا بخش) از مراحل واسط زنجیره/عامل
  • ویژگی جدید از نسخه 0.0.40، astream_events را پشتیبانی می‌کند تا استریم کردن راحت‌تر شود بدون تجزیه خروجی stream_log
  • صفحه /playground/ با خروجی استریم و مرحله‌های واسط
  • پیگیری اختیاری به LangSmith را فقط با اضافه کردن کلید API خودتان
  • ساخته شده با کتابخانه‌های پایتون منبع باز که از تعیین دستآمده‌اند مانند FastAPI، Pydantic، uvloop و asyncio
  • فرا خوانی سرور LangServe با استفاده از یک SDK مشتری دقیقا مانند فراخوانی یک Runnable در حال اجرا به صورت محلی (یا به طور مستقیم فراخوانی کردن API HTTP)
  • لانگ سرو هاب

3. محدودیت‌ها

  • فراخوانی‌های مشتری برای رویدادهای ناشی از سرور هنوز پشتیبانی نشده است
  • مستندات OpenAPI تولید نمی‌شود هنگام استفاده از Pydantic V2. FastAPI از فضانامه‌های مختلط pydantic v1 و v2 پشتیبانی نمی‌کند. برای اطلاعات بیشتر به بخش زیر مراجعه کنید.

4. نصب

می‌توانید LangServe را با استفاده از دستور زیر نصب کنید:

pip install "langserve[all]"

یا کد مشتری را با pip install "langserve[client]" نصب کرده و کد سرور را با pip install "langserve[server]" نصب کنید.

5. نمونه برنامه

در زیر، نحوه انتشار مدل‌ها، زنجیره‌ها و عوامل تعریف شده در LangChain به عنوان رابط‌های برنامه REST برای فراخوانی توسط برنامه‌های دیگر نشان داده شده است. اگر با FastAPI آشنایی دارید، ساده است، فقط از کلاس ابزار ارائه شده توسط langserve برای ثبت مسیرهای FastAPI استفاده کنید.

مثال زیر یک مدل گفت‌وگوی OpenAI، یک مدل گفت‌وگوی Anthropic و یک زنجیره با استفاده از مدل Anthropic برای گفتن لطیفه‌ها درباره موضوعات خاص را نشان می‌دهد.

کد نمونه:

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="سرور API ساده به کمک رابط قابل اجرای LangChain",
)

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

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

model = ChatAnthropic()
prompt = ChatPromptTemplate.from_template("tell me a joke about {topic}")
add_routes(
    app,
    prompt | model,
    path="/joke",
)

if __name__ == "__main__":
    import uvicorn

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

اگر قصد دارید که از مرورگر فراخوانی کنید، نیاز دارید تا هدرهای CORS را نیز تنظیم کنید. می‌توانید از middleware داخلی در FastAPI برای این کار استفاده کنید:

from fastapi.middleware.cors import CORSMiddleware

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

6. مستندات

پس از اجرای مثال بالا، LangServe به صورت خودکار مستندات API را برای همه مسیرهای ثبت شده ایجاد می‌کند. شما می‌توانید مستندات تولید شده OpenAPI را در آدرس زیر بررسی کنید:

http://localhost:8000/docs

حتماً پسوند /docs را الحاق کنید.

⚠️ اگر از pydantic v2 استفاده کنید، مستندات برای invoke، batch، stream و stream_log تولید نمی‌شود. توصیه می‌شود از نسخه pydantic v1 استفاده کنید.

6. معرفی راه‌های واسط برنامه نویسی کاربردی (API)

در زیر، معرفی شده است که پس از ثبت یک راه‌های API توسط LangServe، رابط‌های مرتبط را ایجاد می‌کند.

به عنوان مثال، کد زیر را در نظر بگیرید:

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

LangServe رابط‌های زیر را ایجاد می‌کند:

  • POST /my_runnable/invoke - رابط برای فراخوانی مدل
  • POST /my_runnable/batch - رابط برای فراخوانی دسته‌ای مدل
  • POST /my_runnable/stream - رابط برای فراخوانی پخش مدل
  • POST /my_runnable/stream_log - رابط برای فراخوانی پخش مدل با خروجی ورودی
  • POST /my_runnable/astream_events - فراخوانی پخش مدل ناهمزمان با خروجی رویداد
  • GET /my_runnable/input_schema - توضیح پارامترهای رابط برای فراخوانی مدل
  • GET /my_runnable/output_schema - توضیح پارامترهای خروجی رابط برای فراخوانی مدل
  • GET /my_runnable/config_schema - توضیح پارامترهای پیکربندی مدل

7. زمین بازی (Playground)

LangServe یک صفحه اشکال‌زدایی رابط کاربری (UI) برای هر مسیر ثبت شده فراهم کرده است، که اجازه می‌دهد تا سرویس‌های Chain، Agent و سایر خدمات LangChain را که تعریف می‌کنیم، به راحتی را اشکال‌زدایی کنیم.

می‌توانید به عنوان مثال به نمونه زمین بازی به فرمت زیر دسترسی پیدا کنید: به /my_runnable/playground/ مراجعه کنید.