1. نظرة عامة على LangServe
LangServe هو مكتبة تساعد المطورين في تشغيل البرامج وسلاسل LangChain
كواجهات برمجة التطبيقات (REST APIs). إنها تدمج FastAPI وتستخدم pydantic للتحقق من صحة البيانات.
2. الميزات
LangServe تحتوي على الميزات التالية:
- تستنتج تلقائيًا أوضاع الإدخال والإخراج من كائنات LangChain وتنفذ التحقق لكل استدعاء API، وتوفر رسائل خطأ غنية
- صفحة وثائق API تحتوي على JSONSchema و Swagger
- نقاط نهاية فعالة
/invoke/
,/batch/
, و/stream/
تدعم العديد من الطلبات المتزامنة على خادم واحد - نقطة نهاية
/stream_log/
لبث جميع (أو جزء) الخطوات الوسيطة للسلسلة/الوكيل -
ميزة جديدة ابتداءً من الإصدار 0.0.40، تدعم
astream_events
لتسهيل البث دون معالجة إخراجstream_log
- صفحة
/playground/
مع بيانات الإخراج الوسيط والخطوات الوسيطة - تتيح تتبع اختياري مدمج إلى LangSmith، فقط بإضافة مفتاح API الخاص بك
- بنيت باستخدام مكتبات Python مفتوحة المصدر تم اختبارها في المعركة مثل FastAPI و Pydantic و uvloop و asyncio
- يمكن استدعاء خادم LangServe باستخدام SDK العميل تمامًا كما لو كنت تستدعي Runnable يعمل محليًا (أو باستدعاء واجهة برمجة التطبيقات HTTP مباشرة)
- لانج سيرف هب
3. القيود
- لا يتم دعم عمليات الاستدعاء العميل للأحداث المنبثقة من الخادم بعد
- لا يتم إنشاء وثائق OpenAPI عند استخدام Pydantic V2. FastAPI لا يدعم فضاءات الأسماء المختلطة بين Pydantic v1 و v2. راجع القسم أدناه لمزيد من التفاصيل.
4. التثبيت
يمكنك تثبيت LangServe باستخدام الأمر التالي:
pip install "langserve[all]"
أو قم بتثبيت الكود الخاص بالعميل باستخدام pip install "langserve[client]"
, والكود الخاص بالخادم باستخدام pip install "langserve[server]"
.
4. تطبيق مثالي
فيما يلي، نقدم كيفية نشر النماذج والسلاسل والوكلاء المعرفة في LangChain كواجهات برمجة التطبيقات (REST APIs) للتطبيقات الأخرى لاستدعائها. إذا كنت ملمًا بـ 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)
إذا كنت تنوي استدعاء النقاط النهائية من متصفح، ستحتاج أيضًا إلى ضبط رؤوس CORS. يمكنك تحقيق ذلك باستخدام الوسيطة المدمجة في 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
.
⚠️ إذا كنت تستخدم pydantic v2، فإن الوثائق لن تُولد لـ invoke, batch, stream, و stream_log. يُوصى باستخدام إصدار pydantic v1.
6. مقدمة لطرق واجهة برمجة التطبيقات (API Routes)
فيما يلي مقدمة للواجهات البرمجية التي تم إنشاؤها بواسطة LangServe
بعد تسجيل طريق 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. الساحة (Playground)
يوفر LangServe
صفحة تصحيح واجهة مستخدم (UI) لكل طريق مسجل، مما يجعل من السهل تصحيح خدمات Chain
و Agent
وغيرها من خدمات LangChain التي نحددها.
يمكنك الوصول إلى مثال الـ Playground
بالشكل التالي: زيارة /my_runnable/playground/
.