1. Descripción de LangServe

LangServe es una librería que ayuda a los desarrolladores a ejecutar programas y cadenas de LangChain como APIs REST. Integra FastAPI y utiliza pydantic para la validación de datos.

2. Características

LangServe cuenta con las siguientes características:

  • Infiere automáticamente los modos de entrada y salida de objetos LangChain y realiza validaciones para cada llamada a la API, proporcionando mensajes de error detallados
  • Página de documentación de la API que contiene JSONSchema y Swagger
  • Eficientes endpoints /invoke/, /batch/, y /stream/ que admiten muchas solicitudes concurrentes en un solo servidor
  • Endpoint /stream_log/ para transmitir todos (o parte) de los pasos intermedios de la cadena/agente
  • Nueva característica a partir de la versión 0.0.40, compatible con astream_events para facilitar la transmisión sin analizar la salida de stream_log
  • Página /playground/ con salida de transmisión y pasos intermedios
  • Tracing opcional integrado a LangSmith, solo agregando tu clave de API
  • Creado con librerías de Python de código abierto ampliamente probadas como FastAPI, Pydantic, uvloop y asyncio
  • Invoca el servidor LangServe usando un SDK de cliente, similar a llamar a un Runnable que se ejecuta localmente (o llamando directamente a la API HTTP)
  • LangServe Hub

3. Limitaciones

  • Las devoluciones de llamada del cliente para eventos originados desde el servidor aún no son compatibles
  • La documentación de OpenAPI no se genera al usar Pydantic V2. FastAPI no admite espacios de nombres mixtos de pydantic v1 y v2. Consulta la sección a continuación para obtener más detalles.

4. Instalación

Puedes instalar LangServe usando el siguiente comando:

pip install "langserve[all]"

O instala el código del cliente usando pip install "langserve[client]", y el código del servidor usando pip install "langserve[server]".

4. Aplicación de ejemplo

A continuación, demostramos cómo publicar modelos, cadenas y agentes definidos en LangChain como APIs REST para que otras aplicaciones los llamen. Si estás familiarizado con FastAPI, es simple, solo utiliza la clase de utilidad proporcionada por langserve para registrar rutas de FastAPI.

El siguiente ejemplo implementa un modelo de chat de OpenAI, un modelo de chat de Anthropic y una cadena que utiliza el modelo de Anthropic para contar chistes sobre temas específicos.

Aquí está el código de ejemplo:

from fastapi import FastAPI
from langchain.prompts import ChatPromptTemplate
from langchain.chat_models import ChatAnthropic, ChatOpenAI
from langserve import add_routes

app = FastAPI(
    title="Servidor de LangChain",
    version="1.0",
    description="Servidor de API simple usando la interfaz Runnable de LangChain",
)

add_routes(
    app,
    ChatOpenAI(),
    path="/openai",
)

add_routes(
    app,
    ChatAnthropic(),
    path="/anthropic",
)

modelo = ChatAnthropic()
indicación = ChatPromptTemplate.from_template("cuéntame un chiste sobre {tema}")
add_routes(
    app,
    indicación | modelo,
    path="/chiste",
)

if __name__ == "__main__":
    import uvicorn

    uvicorn.run(app, host="localhost", port=8000)

Si tienes la intención de llamar a los endpoints desde un navegador, también necesitarás configurar encabezados CORS. Puedes lograr esto utilizando el middleware incorporado en FastAPI:

from fastapi.middleware.cors import CORSMiddleware

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
    expose_headers=["*"],
)

5. Documentación

Después de ejecutar el ejemplo anterior, LangServe genera automáticamente la documentación de la API para todas las rutas registradas. Puedes consultar la documentación generada de OpenAPI en la siguiente dirección:

http://localhost:8000/docs

Asegúrate de añadir el sufijo /docs.

⚠️ Si estás utilizando pydantic v2, la documentación no se generará para invoke, batch, stream y stream_log. Se recomienda utilizar la versión pydantic v1.

6. Introducción a las rutas de API

A continuación se presenta una introducción a las interfaces de API generadas por LangServe después de registrar una ruta de API.

Por ejemplo, considere el siguiente código:

add_routes(
    app,
    runnable,
    path="/my_runnable",
)

LangServe generará las siguientes interfaces:

  • POST /my_runnable/invoke - Interfaz para invocación de modelo
  • POST /my_runnable/batch - Interfaz para invocación de modelo por lotes
  • POST /my_runnable/stream - Interfaz para invocación de modelo en flujo
  • POST /my_runnable/stream_log - Interfaz para invocación de modelo en flujo con salida de registro
  • POST /my_runnable/astream_events - Invocación de modelo en flujo asincrónica con salida de evento
  • GET /my_runnable/input_schema - Descripción de parámetros de interfaz para invocación de modelo
  • GET /my_runnable/output_schema - Descripción de parámetros de interfaz para salida de modelo
  • GET /my_runnable/config_schema - Descripción de configuración del modelo

7. Área de pruebas

LangServe proporciona una página de depuración de interfaz gráfica para cada ruta registrada, lo que facilita la depuración de los servicios Chain, Agent y otros servicios de LangChain que definamos.

Puede acceder al ejemplo del Área de pruebas en el siguiente formato: visite /my_runnable/playground/.