커스텀 라우트 추가하기

커스텀 라우트 추가하기

LangSmith Deployment에 에이전트를 배포하면 서버가 런 및 스레드 생성, 장기 메모리 스토어와의 상호작용, 구성 가능한 어시스턴트 관리 및 기타 핵심 기능을 위한 라우트를 자동으로 노출해요 (모든 기본 API 엔드포인트 보기).

자체 앱 객체를 제공하고 langgraph.json에 그 경로를 전달해 커스텀 라우트를 추가할 수 있어요 (예: Python의 Starlette 앱 또는 TypeScript의 Hono 앱).

커스텀 앱 객체를 정의하면 원하는 라우트를 추가할 수 있어서, /login 엔드포인트 추가부터 완전한 풀스택 웹앱 작성까지 모두 단일 Agent Server에 배포할 수 있어요.

아래는 Python과 TypeScript 예시예요.

출처: 문서

본문

앱 만들기

기존 LangSmith 애플리케이션에서 시작해서 앱 파일에 다음 커스텀 라우트 코드를 추가하세요. 처음부터 시작한다면 CLI를 사용해 템플릿에서 새 앱을 만들 수 있어요.

Python:

langgraph new --template=new-langgraph-project-python my_new_project

LangGraph 프로젝트가 있으면 다음 앱 코드를 추가하세요:

# ./src/agent/webapp.py
from fastapi import FastAPI

app = FastAPI()


@app.get("/hello")
def read_root():
    return {"Hello": "World"}

TypeScript:

yarn create langgraph
npm install hono

LangGraph 프로젝트가 있으면 다음 앱 코드를 추가하세요:

// ./src/custom-routes.ts
import { Hono } from "hono";

export const app = new Hono()
  .get("/custom/hello", (c) => {
    return c.json({ hello: "world" });
  })
  .post("/custom/webhook", async (c) => {
    const body = await c.req.json();
    return c.json({ received: true, payload: body });
  });

hono 패키지는 프로젝트 의존성에 있어야 해요.

langgraph.json 구성하기

langgraph.json 구성 파일에 다음을 추가하세요. 경로가 이전 섹션에서 만든 앱 인스턴스를 가리키도록 하세요.

Python:

{
  "dependencies": ["."],
  "graphs": {
    "agent": "./src/agent/graph.py:graph"
  },
  "env": ".env",
  "http": {
    "app": "./src/agent/webapp.py:app"
  }
  // Other configuration options like auth, store, etc.
}

TypeScript:

{
  "node_version": "20",
  "dependencies": ["."],
  "graphs": { "agent": "./src/agent.ts:graph" },
  "http": { "app": "./src/custom-routes.ts:app" },
  "env": ".env"
}

서버 시작

서버를 로컬에서 테스트하세요:

Python:

langgraph dev --no-browser

TypeScript:

npx @langchain/langgraph-cli@latest dev --no-browser

브라우저에서 localhost:2024/hello로 이동하면(2024는 기본 개발 포트) /hello 엔드포인트가 JSON 응답을 반환하는 것을 볼 수 있어요. TypeScript 예시는 localhost:2024/custom/hello로 이동하세요.

TypeScript http.app 구성은 langgraph dev를 사용한 로컬 개발과 langgraph up을 사용한 Docker 모두에서 작동해요.

기본 엔드포인트 섀도잉 앱에서 만든 라우트는 시스템 기본값보다 우선하므로, 어떤 기본 엔드포인트의 동작이든 섀도잉하고 재정의할 수 있어요.

배포

이 앱을 그대로 LangSmith나 셀프 호스팅 플랫폼에 배포할 수 있어요.

다음 단계

이제 배포에 커스텀 라우트를 추가했습니다. 커스텀 미들웨어커스텀 수명 주기 이벤트를 정의해서 서버 동작을 더 커스터마이즈하는 데에도 이 동일한 기법을 사용할 수 있어요.

더 알아보기 (Learn more)