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