1. LangServe 개요

LangServe는 개발자가 프로그램 및 LangChain 체인을 REST API로 실행하는 데 도움을 주는 라이브러리입니다. FastAPI를 통합하며 데이터 유효성 검사에 pydantic을 사용합니다.

2. 특징

LangServe에는 다음과 같은 기능이 있습니다:

  • LangChain 객체에서 입력 및 출력 모드를 자동으로 추론하고 각 API 호출에 대한 유효성 검사를 수행하여 풍부한 오류 메시지 제공
  • JSONSchema 및 Swagger가 포함된 API 문서 페이지
  • 단일 서버에서 많은 동시 요청을 지원하는 효율적인 /invoke/, /batch/, /stream/ 엔드포인트
  • 체인/에이전트의 중간 단계를 모두 (또는 일부) 스트리밍하는 /stream_log/ 엔드포인트
  • 버전 0.0.40부터 지원되는 새로운 기능으로 astream_events를 지원하여 stream_log의 출력을 구문 분석하지 않고 스트리밍하는 것을 용이하게 함
  • 스트리밍 출력 및 중간 단계가 포함된 /playground/ 페이지
  • 옵션으로 내장된 LangSmith 트레이싱을 지원하며 API 키를 추가하는 것만으로 가능
  • FastAPI, Pydantic, uvloop 및 asyncio와 같은 검증된 오픈 소스 Python 라이브러리로 구축됨
  • 로컬에서 실행 중인 Runnable 호출과 동일하게 클라이언트 SDK를 사용하여 LangServe 서버를 호출하거나 직접 HTTP API를 호출할 수 있음
  • LangServe Hub

3. 제한 사항

  • 서버에서 발생한 이벤트에 대한 클라이언트 콜백은 아직 지원되지 않음
  • Pydantic V2를 사용할 때 OpenAPI 문서가 생성되지 않음. 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 Server",
    version="1.0",
    description="LangChain의 Runnable 인터페이스를 사용하는 간단한 API 서버",
)

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

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

model = ChatAnthropic()
prompt = ChatPromptTemplate.from_template("tell me a joke about {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 Routes 소개

아래는 LangServe가 API 경로를 등록한 후 생성하는 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는 각 등록된 경로에 대한 UI 디버깅 페이지를 제공하여 우리가 정의한 Chain, Agent 및 다른 LangChain 서비스를 편리하게 디버깅할 수 있습니다.

다음 형식으로 Playground 예제에 액세스할 수 있습니다: /my_runnable/playground/.