LangSmith에 에이전트를 배포할 때 서버에 커스텀 미들웨어를 추가하여 요청 메트릭 로깅, 헤더 주입 또는 확인, 보안 정책 시행과 같은 문제를 핵심 서버 로직을 수정하지 않고 처리할 수 있습니다. 이는 커스텀 라우트 추가와 동일한 방식으로 작동합니다. FastAPI, FastHTML 및 기타 호환 가능한 앱을 포함한 자체 Starlette 앱을 제공하기만 하면 됩니다.
미들웨어를 추가하면 커스텀 엔드포인트를 대상으로 하든 내장 LangSmith API를 대상으로 하든 배포 전체에서 요청과 응답을 전역적으로 가로채고 수정할 수 있습니다.
다음은 FastAPI를 사용하는 예제입니다.
“Python 전용”
현재 langgraph-api>=0.0.26이 있는 Python 배포에서만 커스텀 미들웨어를 지원합니다.
앱 생성
기존 LangSmith 애플리케이션에서 시작하여 webapp.py 파일에 다음 미들웨어 코드를 추가합니다. 처음부터 시작하는 경우 CLI를 사용하여 템플릿에서 새 앱을 만들 수 있습니다.
langgraph new --template=new-langgraph-project-python my_new_project
LangGraph 프로젝트가 있으면 다음 앱 코드를 추가합니다:
# ./src/agent/webapp.py
from fastapi import FastAPI, Request
from starlette.middleware.base import BaseHTTPMiddleware
app = FastAPI()
class CustomHeaderMiddleware(BaseHTTPMiddleware):
async def dispatch(self, request: Request, call_next):
response = await call_next(request)
response.headers['X-Custom-Header'] = 'Hello from middleware!'
return response
# Add the middleware to the app
app.add_middleware(CustomHeaderMiddleware)
langgraph.json 구성
langgraph.json 구성 파일에 다음을 추가합니다. 경로가 위에서 만든 webapp.py 파일을 가리키는지 확인하세요.
{
"dependencies": ["."],
"graphs": {
"agent": "./src/agent/graph.py:graph"
},
"env": ".env",
"http": {
"app": "./src/agent/webapp.py:app"
}
// Other configuration options like auth, store, etc.
}
미들웨어 순서 커스터마이징
기본적으로 커스텀 미들웨어는 인증 로직보다 먼저 실행됩니다. 커스텀 미들웨어를 인증 _이후_에 실행하려면 http 구성에서 middleware_order를 auth_first로 설정하세요. (이 커스터마이징은 API 서버 v0.4.35 이상에서 지원됩니다.)
{
"dependencies": ["."],
"graphs": {
"agent": "./src/agent/graph.py:graph"
},
"env": ".env",
"http": {
"app": "./src/agent/webapp.py:app",
"middleware_order": "auth_first"
},
"auth": {
"path": "./auth.py:my_auth"
}
}
서버 시작
로컬에서 서버를 테스트하세요:
langgraph dev --no-browser
이제 서버에 대한 모든 요청은 응답에 커스텀 헤더 X-Custom-Header를 포함합니다.
이 앱을 그대로 클라우드 또는 셀프 호스팅 플랫폼에 배포할 수 있습니다.
다음 단계
배포에 커스텀 미들웨어를 추가했으니 유사한 기술을 사용하여 커스텀 라우트를 추가하거나 커스텀 lifespan 이벤트를 정의하여 서버의 동작을 더욱 커스터마이징할 수 있습니다.