1. Visão geral do LangServe
LangServe é uma biblioteca que ajuda os desenvolvedores a executar programas e cadeias de LangChain como APIs REST. Ela integra o FastAPI e utiliza o pydantic para validação de dados.
2. Funcionalidades
LangServe possui as seguintes funcionalidades:
- Inferir automaticamente os modos de entrada e saída a partir de objetos LangChain e realizar validação para cada chamada de API, fornecendo mensagens de erro detalhadas
- Página de documentação da API contendo JSONSchema e Swagger
- Eficientes endpoints
/invoke/,/batch/e/stream/que suportam muitas requisições simultâneas em um único servidor - Endpoint
/stream_log/para transmitir todos (ou parte) dos passos intermediários da cadeia/agente -
Nova funcionalidade a partir da versão 0.0.40, suporta
astream_eventspara facilitar a transmissão sem analisar a saída destream_log - Página
/playground/com saída de transmissão e passos intermediários - Rastreamento embutido opcional para o LangSmith, apenas adicionando sua chave de API
- Construído com bibliotecas Python de código aberto comprovadas em batalha, como FastAPI, Pydantic, uvloop e asyncio
- Invocar o servidor LangServe usando um SDK de cliente, como chamar um Runnable em execução localmente (ou chamar diretamente a API HTTP)
- LangServe Hub
3. Limitações
- Callbacks do cliente para eventos originados do servidor ainda não são suportados
- A documentação do OpenAPI não é gerada ao usar o Pydantic V2. O FastAPI não suporta namespaces mistos pydantic v1 e v2. Consulte a seção abaixo para mais detalhes.
4. Instalação
Você pode instalar o LangServe usando o seguinte comando:
pip install "langserve[all]"
Ou instalar o código do cliente usando pip install "langserve[client]", e o código do servidor usando pip install "langserve[server]".
4. Aplicação de Exemplo
Abaixo, demonstramos como publicar modelos, cadeias e agentes definidos em LangChain como APIs REST para outras aplicações chamarem. Se você estiver familiarizado com o FastAPI, é simples, basta usar a classe utilitária fornecida pelo langserve para registrar rotas do FastAPI.
O exemplo a seguir implementa um modelo de chat da OpenAI, um modelo de chat Anthropic e uma cadeia que utiliza o modelo Anthropic para contar piadas sobre tópicos específicos.
Aqui está o código de exemplo:
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 LangChain",
version="1.0",
description="Servidor de API simples usando a interface Runnable do LangChain",
)
add_routes(
app,
ChatOpenAI(),
path="/openai",
)
add_routes(
app,
ChatAnthropic(),
path="/anthropic",
)
modelo = ChatAnthropic()
prompt = ChatPromptTemplate.from_template("conte-me uma piada sobre {tópico}")
add_routes(
app,
prompt | modelo,
path="/piada",
)
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="localhost", port=8000)
Se você pretende chamar os endpoints de um navegador, também precisa configurar cabeçalhos CORS. Você pode fazer isso usando o middleware incorporado no FastAPI:
from fastapi.middleware.cors import CORSMiddleware
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
expose_headers=["*"],
)
5. Documentação
Após executar o exemplo acima, o LangServe gera automaticamente a documentação da API para todas as rotas registradas. Você pode verificar a documentação do OpenAPI gerada no seguinte endereço:
http://localhost:8000/docs
Certifique-se de acrescentar o sufixo /docs.
⚠️ Se estiver usando o pydantic v2, a documentação não será gerada para invoke, batch, stream e stream_log. É recomendado usar a versão pydantic v1.
6. Introdução às Rotas da API
Abaixo está uma introdução às interfaces da API geradas pelo LangServe após registrar uma rota da API.
Por exemplo, considere o seguinte código:
add_routes(
app,
runnable,
path="/my_runnable",
)
O LangServe irá gerar as seguintes interfaces:
-
POST /my_runnable/invoke- Interface para invocação do modelo -
POST /my_runnable/batch- Interface para invocação em lote do modelo -
POST /my_runnable/stream- Interface para invocação de modelo em streaming -
POST /my_runnable/stream_log- Interface para invocação de modelo em streaming com saída de log -
POST /my_runnable/astream_events- Invocação de modelo em streaming assíncrono com saída de eventos -
GET /my_runnable/input_schema- Descrição dos parâmetros da interface para invocação do modelo -
GET /my_runnable/output_schema- Descrição dos parâmetros da interface para a saída do modelo -
GET /my_runnable/config_schema- Descrição da configuração do modelo
7. Playground
O LangServe fornece uma página de depuração de interface de usuário para cada rota registrada, facilitando a depuração dos serviços Chain, Agent e outros serviços LangChain que definirmos.
Você pode acessar o exemplo de Playground no seguinte formato: visite /my_runnable/playground/.
