1. ภาพรวมของ LangServe

LangServe เป็นไลบรารีที่ช่วยให้นักพัฒนาสามารถเรียกใช้โปรแกรมและล๊อคของ LangChain ในรูปแบบของ REST APIs ได้ มันผนวกกับ FastAPI และใช้ pydantic สำหรับการตรวจสอบข้อมูล

2. คุณสมบัติ

LangServe มีคุณสมบัติต่อไปนี้:

  • คาดการณ์โหมดการนำเข้าและการส่งออกโดยอัตโนมัติจากอ็อปเจ็กต์ของ LangChain และดำเนินการตรวจสอบสำหรับแต่ละการเรียก API โดยมีข้อความผิดพลาดที่มีประโยชน์
  • หน้าเอกสาร API ประกอบด้วย JSONSchema และ Swagger
  • เสถียรภาพของ /invoke/, /batch/, และ /stream/ จุดปลายทางที่มีประสิทธิภาพ รองรับคำขอหลายคำขอพร้อมกันบนเซิร์ฟเวอร์เดียว
  • จุดปลายทาง /stream_log/ สำหรับการสตรีมข้อมูลทั้งหมด (หรือส่วน) ขั้นตอนกลางของ chain/agent
  • คุณสมบัติใหม่ เริ่มต้นตั้งแต่เวอร์ชัน 0.0.40 รองรับ astream_events เพื่อทำให้การสตรีมง่ายขึ้นโดยไม่ต้องแยกการแกะเอาเอาผลลัพธ์ของ stream_log
  • หน้าเล่นเสียงเล่นหน้าให้เสียงออกและขั้นตอนกลาง
  • การติดตามทางในงานสร้างภายในไปยัง LangSmith แค่เพิ่ม API key ของคุณมาเท่านั้น
  • นำเสนอด้วยไลบรารี Python ที่ถูกทดสอบแล้วเช่น FastAPI, Pydantic, uvloop, และ asyncio
  • เรียกเซิร์ฟเวอร์ LangServe โดยใช้ SDK ลูกค้าเพียงแค่เรียกดู Runnable ที่ทำงานอยู่ในระบบเดียวกัน (หรือโอนยังผ่าน HTTP API โดยตรง)
  • LangServe Hub

3. ข้อจำกัด

  • ยังไม่รองรับการคืนภาคผลลัพธ์สำหรับเหตุการณ์ที่เกิดขึ้นจากเซิร์ฟเวอร์
  • เอกสาร OpenAPI ไม่ถูกสร้างขึ้นเมื่อใช้ Pydantic V2 FastAPI ไม่รองรับเนมสเปซ pydantic v1 และ v2 ผสมกัน ดูในส่วนด้านล่างสำหรับข้อมูลเพิ่มเติม

4. การติดตั้ง

คุณสามารถติดตั้ง LangServe โดยใช้คำสั่งต่อไปนี้:

pip install "langserve[all]"

หรือติดตั้งรหัสลูกค้าโดยใช้ pip install "langserve[client]", และรหัสเซิร์ฟเวอร์โดยใช้ pip install "langserve[server]".

4. ประยุกต์การตัวอย่าง

ด้านล่างเราแสดงตัวอย่างภาพรวมถึงการเผยแพร่โมเดล, chain, และ agent ที่กำหนดไว้ใน LangChain เป็น REST APIs สำหรับแอปพลิเคชั่นอื่นที่ทำการเรียกใช้ หากคุณคุ้นเคยกับ FastAPI, มันเป็นเรื่องง่ายเพียงแค่ใช้คลาสยูทิลิตีที่ให้ไว้โดย langserve เพื่อลงทะเบียนเส้นทาง FastAPI

ตัวอย่างต่อไปนี้เป็นตัวอย่างของการเรียกใช้โมเดลแชท OpenAI, โมเดลแชท Anthropic, และ chain ที่ใช้โมเดล 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)

หากคุณตั้งใจที่จะเรียกใช้จุดปลายทางจากเบราว์เซอร์ คุณยังต้องการตั้งค่าส่วนผนวก คุณสามารถทำเช่นนี้โดยใช้ middleware ที่ซี่งเข้ามาใน 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

ด้านล่างนี้คือการแนะนำอินเทอร์เฟซ API ที่ถูกสร้างขึ้นโดย 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. พื้นที่เล่นเสื้อผ้า

LangServe มีหน้าต่างการแก้ปัญหา UI สำหรับเส้นทางที่ลงทะเบียนไว้ทุกอัน ทำให้ง่ายต่อการแก้ไขข้อบกพร่องของ Chain, Agent, และบริการ LangChain อื่น ๆ ที่เรากำหนด

คุณสามารถเข้าถึงตัวอย่างของ Playground ในรูปแบบต่อไปนี้: เข้าชม /my_runnable/playground/.