1. Обзор LangServe
LangServe - это библиотека, которая помогает разработчикам запускать программы и цепочки LangChain
в качестве REST API. Она интегрируется с 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 клиента, как если бы вы вызывали локально запущенный подгоняемый объект (или прямой вызов 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. Пример приложения
Ниже показано, как опубликовать модели, цепочки и агенты, определенные в 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",
version="1.0",
description="Простой API-сервер, использующий интерфейс Runnable в LangChain",
)
add_routes(
app,
ChatOpenAI(),
path="/openai",
)
add_routes(
app,
ChatAnthropic(),
path="/anthropic",
)
model = ChatAnthropic()
prompt = ChatPromptTemplate.from_template("расскажи мне шутку про {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-маршруты
Ниже приведено введение в 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
предоставляет интерфейс отладки пользовательского интерфейса для каждого зарегистрированного маршрута, что облегчает отладку определенных нами служб Chain
, Agent
и других сервисов LangChain.
Вы можете получить доступ к примеру песочницы в следующем формате: посетите /my_runnable/playground/
.