1. LangServe کا جائزہ

langserve ایک لائبریری ہے جو ترقی دینے والوں کو پروگرام اور لینگچین کے چینوں کو REST API کے طور پر چلانے میں مدد فراہم کرتی ہے، جو FastAPI کو انضمام کرتی ہے اور ڈیٹا کی جانچ پڑتال کے لئے pydantic کا استعمال کرتی ہے۔

2. خصوصیات

LangServe کی مندرجہ ذیل خصوصیات ہیں:

  • LangChain اشیاء سے سرور اور خروجی موڈز خود بخود حاصل کرتی ہے اور ہر API کال کی جانچ کرتی ہے، اردگرد کثیر الاختیارات کی تقاضوں کومدد کرنے والے پیغامات فراہم کرتی ہے
  • JSONSchema اور Swagger شامل کرنے والا API دستاویز صفحہ
  • مضبوط /invoke/، /batch/، اور /stream/ ایک پر سرور پر کثیر الاختیارات کی تقاضوں کی درخواستوں کو سپورٹ کرنے والے اختتامات
  • Lang/agent کے درمیانی قدموں کو سٹریم سکرین کرنے کے /stream_log/ اختتام
  • نئی خصوصیت اب ورژن 0.0.40 سے، astream_events کی حمایت ہے جو stream_log کو پارس کرنے کے بغیر ہیئت کو آسان بنانے کیلئے ہے
  • سٹریمنگ اوپٹ اور درمیانہ قدم ساتھ رکھنے والی /playground/ صفحہ
  • LangSmith کے لئے اضافی شاملِ شدہ ٹریسنگ کو فراہم کرتی ہے، بس آپ کا API کی ایڈ کرنا ضروری ہے
  • FastAPI، Pydantic، uvloop، اور asyncio جیسی Battle-tested open-source Python لائبریریوں سے بنائی گئی ہے
  • LangServe سرور کو ایک کلائنٹ ایس ڈی کی کیلئے فون کریں بس ماننا جیسے لوکل مشغول کرنے والے Runnable کو بلا رہے ہیں (یا سیدھے HTTP API کو فون کرنا)

3. محدودیات

  • سرور سے واقع ہونے والے واقعات کے لئے کلائنٹ کال بیک ساپورٹ نہیں کرتی ہے
  • Pydantic V2 استعمال کرتے وقت OpenAPI دستاویزیکریشن وجود میں نہیں ہوتی ہے، FastAPI پیڈانٹک v1 اور v2 نیم اسپیس کی حمایت نہیں کرتی ہے۔ مزید تفصیلات کے لئے نیچے دی گئی سیکشن دیکھیں۔

4. انسٹالیشن

LangServe کو مندرجہ ذیل کمانڈ کا استعمال کر کے انسٹال کیا جا سکتا ہے:

pip install "langserve[all]"

یا client code کو pip install "langserve[client]" سے اور server code کو pip install "langserve[server]" سے انسٹال کیا جا سکتا ہے۔

4. نمونہ کار ایپلیکیشن

نیچے، ہم دکھاتے ہیں کہ كس طرح LangChain میں تعین شدہ ماڈلز، چینز، اور ایجنٹس کو دوسرے ایپلیکیشنز کے لئے REST API کے طور پر شائع کرنا ہے۔ اگر آپ 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="Simple API server using Runnable interface of 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)

اگر آپ انڈینٹ تو سکتے ہیں کہ آپ انڈینٹز کال کرنے والے ختمات کو ایک بروزر سے بھی بلا سکتے ہیں۔ آپ اس بلتی کو FastAPI میں موجود مُخصوص میڈل ویئر کا استعمال کر کے حاصل کر سکتے ہیں:

from fastapi.middleware.cors import CORSMiddleware

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

5. دستاویزیکریشن

اگر آپ بالا کوڈ کو چلاوٹے ہیں، تو LangServe خود بخود تمام رجسٹر شدہ روٹس کے لئے API دستاویز بناتی ہے۔ آپ مندرجہ ذیل پتہ پر بنیادی OpenAPI دستاویزیکریشن دیکھ سکتے ہیں۔

http://localhost:8000/docs

بس یہ یاد رکھیں کہ /docs يمیں مکمل کریں۔

⚠️ اگر پیڈانٹک v2 استعمال کرتے ہیں تو invoke, batch, stream, اور stream_log کے لئے دستاویزیکریشن حاصل نہیں ہوگی۔ پیڈانٹک v1 کا استعمال کرنا تجویز کیا جاتا ہے۔

6. API راستوں کی تعارف

درج ذیل میں LangServe کے ذریعہ API انٹرفیس کی تعریف ہے جو API راستے کو رجسٹر کرنے کے بعد بنائے جاتے ہیں۔

مثال کے طور پر، مندرجہ ذیل کوڈ کو دیکھیں:

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. میدان لار

LangServe ہر رجسٹر شدہ راستے کے لئے یوآئی ڈیبگنگ صفحہ فراہم کرتا ہے، جس سے ہم جو ہمارے Chain، Agent، اور دیگر LangChain سروسز کی تعریف کرتے ہیں، اس کو آسانی سے ڈیبگ کر سکتے ہیں۔

آپ Playground کا مثال مندرجہ ذیل فارمیٹ میں دیکھ سکتے ہیں: /my_runnable/playground/۔