1. Tổng quan về LangServe
LangServe là một thư viện giúp các nhà phát triển chạy chương trình và chuỗi của LangChain
dưới dạng REST APIs. Nó tích hợp FastAPI và sử dụng pydantic để kiểm tra dữ liệu.
2. Tính năng
LangServe có những tính năng sau:
- Tự động suy ra chế độ đầu vào và đầu ra từ các đối tượng LangChain và thực hiện việc xác thực cho mỗi lời gọi API, cung cấp thông báo lỗi phong phú
- Trang tài liệu API chứa JSONSchema và Swagger
- Các điểm cuối hiệu quả
/invoke/
,/batch/
, và/stream/
hỗ trợ nhiều yêu cầu đồng thời trên một máy chủ duy nhất - Điểm cuối
/stream_log/
để stream tất cả (hoặc một phần) các bước trung gian của chuỗi/agent -
Tính năng mới từ phiên bản 0.0.40, hỗ trợ
astream_events
để làm cho việc stream dễ dàng hơn mà không cần phân tích kết quả đầu ra củastream_log
- Trang
/playground/
với đầu ra streaming và các bước trung gian - Theo dõi tích hợp tùy chọn đến LangSmith, chỉ cần thêm khóa API của bạn
- Được xây dựng bằng các thư viện Python mã nguồn mở được kiểm chứng trong cuộc chiến như FastAPI, Pydantic, uvloop và asyncio
- Gọi máy chủ LangServe bằng một client SDK giống như việc gọi Runnable đang chạy cục bộ (hoặc gọi trực tiếp API HTTP)
- LangServe Hub
3. Giới hạn
- Chưa hỗ trợ gọi lại từ phía máy khách cho các sự kiện xuất phát từ máy chủ
- Tài liệu OpenAPI không được tạo ra khi sử dụng Pydantic V2. FastAPI không hỗ trợ không gian tên pydantic v1 và v2 kết hợp. Để biết thêm chi tiết, xem phần dưới đây.
4. Cài đặt
Bạn có thể cài đặt LangServe bằng cách sử dụng lệnh sau:
pip install "langserve[all]"
Hoặc cài đặt mã khách bằng pip install "langserve[client]"
, và mã máy chủ bằng pip install "langserve[server]"
.
4. Ứng dụng mẫu
Dưới đây, chúng tôi sẽ thể hiện cách xuất bản các mô hình, chuỗi và agent được định nghĩa trong LangChain dưới dạng REST APIs để các ứng dụng khác gọi. Nếu bạn quen thuộc với FastAPI, đơn giản chỉ cần sử dụng lớp tiện ích được cung cấp bởi langserve
để đăng ký các tuyến đường FastAPI.
Đoạn mã mẫu dưới đây triển khai một mô hình trò chuyện OpenAI, một mô hình trò chuyện Anthropic và một chuỗi sử dụng mô hình Anthropic để kể joke về các chủ đề cụ thể.
Dưới đây là đoạn mã mẫu:
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)
Nếu bạn dự định gọi các điểm cuối từ trình duyệt, bạn cũng cần thiết lập tiêu đề CORS. Bạn có thể đạt được điều này bằng cách sử dụng middleware tích hợp trong FastAPI:
from fastapi.middleware.cors import CORSMiddleware
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
expose_headers=["*"],
)
5. Tài liệu
Sau khi chạy ví dụ ở trên, LangServe
tự động tạo ra tài liệu API cho tất cả các tuyến đường đã đăng ký. Bạn có thể kiểm tra tài liệu OpenAPI đã tạo ra tại địa chỉ sau:
http://localhost:8000/docs
Hãy đảm bảo thêm hậu tố /docs
.
⚠️ Nếu sử dụng pydantic v2, tài liệu sẽ không được tạo ra cho invoke, batch, stream, và stream_log. Đề nghị sử dụng phiên bản pydantic v1.
6. Giới thiệu về các Route của API
Dưới đây là một phần giới thiệu về các giao diện API được tạo ra bởi LangServe
sau khi đăng ký một Route API.
Ví dụ, xét đoạn mã sau:
add_routes(
app,
runnable,
path="/my_runnable",
)
LangServe
sẽ tạo ra các giao diện sau:
-
POST /my_runnable/invoke
- Giao diện để gọi mô hình -
POST /my_runnable/batch
- Giao diện để gọi mô hình theo lô -
POST /my_runnable/stream
- Giao diện để gọi mô hình theo dòng dữ liệu -
POST /my_runnable/stream_log
- Giao diện để gọi mô hình theo dòng dữ liệu với đầu ra log -
POST /my_runnable/astream_events
- Giao diện gọi mô hình theo dòng dữ liệu không đồng bộ với đầu ra sự kiện -
GET /my_runnable/input_schema
- Mô tả tham số giao diện cho việc gọi mô hình -
GET /my_runnable/output_schema
- Mô tả tham số giao diện cho đầu ra mô hình -
GET /my_runnable/config_schema
- Mô tả cấu hình của mô hình
7. Sân chơi
LangServe
cung cấp trang gỡ lỗi UI cho mỗi route đã đăng ký, giúp việc gỡ lỗi cho Chain
, Agent
, và các dịch vụ LangChain khác mà chúng ta định nghĩa trở nên thuận tiện hơn.
Bạn có thể truy cập ví dụ Sân chơi
theo định dạng sau: truy cập /my_runnable/playground/
.