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/.
