모노레포 지원
모노레포 지원
LangSmith가 에이전트 코드가 저장소의 다른 곳에 있는 공유 패키지에 의존하는 모노레포 설정에서 에이전트 배포를 지원하는 방법을 알려드릴게요.
이 가이드는 모노레포를 구성하고 공유 의존성과 함께 동작하도록 langgraph.json 파일을 설정하는 방법을 보여줍니다.
출처: 문서
본문
저장소 구조
완전한 작동 예제는 다음을 참고하세요:
my-monorepo/
├── shared-utils/ # Shared Python package
│ ├── __init__.py
│ ├── common.py
│ └── pyproject.toml # Or setup.py
├── agents/
│ └── customer-support/ # Agent directory
│ ├── agent/
│ │ ├── __init__.py
│ │ └── graph.py
│ ├── langgraph.json # Config file in agent directory
│ ├── .env
│ └── pyproject.toml # Agent dependencies
└── other-service/
└── ...
my-monorepo/
├── package.json # Root package.json with workspaces
├── shared-utils/ # Shared TypeScript package
│ ├── package.json
│ ├── src/
│ │ └── index.ts
│ └── tsconfig.json
├── agents/
│ └── customer-support/ # Agent directory
│ ├── src/
│ │ └── agent.ts
│ ├── langgraph.json # Config file in agent directory
│ ├── package.json # Agent dependencies
│ ├── .env
│ └── tsconfig.json
└── other-service/
└── ...
LangGraph.json 구성
langgraph.json 파일을 에이전트 디렉터리(모노레포 루트가 아닌)에 두세요. 파일이 필요한 구조를 따르는지 확인하세요:
{
"dependencies": [
".", # Current agent package
"../../shared-utils" # Relative path to shared package
],
"graphs": {
"customer_support": "./agent/graph.py:graph"
},
"env": ".env"
}
{
"node_version": "20",
"graphs": {
"customer_support": "./src/agent.ts:graph"
},
"env": ".env"
}
Python 구현은 다음을 통해 부모 디렉터리의 패키지를 자동으로 처리합니다:
"."로 시작하는 상대 경로 감지.- 필요에 따라 Docker 빌드 컨텍스트에 부모 디렉터리 추가.
- 실제 패키지(
pyproject.toml/setup.py포함)와 단순 Python 모듈 모두 지원.
JavaScript 모노레포의 경우:
- 공유 워크스페이스 의존성은 패키지 매니저가 자동으로 해석합니다.
package.json은 워크스페이스 문법을 사용해 공유 패키지를 참조해야 합니다.
에이전트 디렉터리의 package.json 예제:
{
"name": "customer-support-agent",
"dependencies": {
"@company/shared-utils": "workspace:*",
"@langchain/langgraph": "^0.2.0"
}
}
애플리케이션 빌드하기
langgraph build를 실행합니다:
cd agents/customer-support
langgraph build -t my-customer-support-agent
# Run from the root of the monorepo
langgraph build -t my-customer-support-agent -c agents/customer-support/langgraph.json
Python 빌드 과정:
- 상대 의존성 경로를 자동으로 감지합니다.
- 공유 패키지를 Docker 빌드 컨텍스트로 복사합니다.
- 모든 의존성을 올바른 순서로 설치합니다.
- 특별한 플래그나 명령이 필요 없습니다.
JavaScript 빌드 과정:
langgraph build를 호출한 디렉터리(여기서는 모노레포 루트)를 빌드 컨텍스트로 사용합니다.- 패키지 매니저(yarn, npm, pnpm, bun)를 자동으로 감지합니다.
- 프로젝트 구성에 따라 적절한 설치 흐름을 실행합니다.
langgraph.json을 포함하는 디렉터리를 사용해 빌드되는 앱을 찾습니다.
팁과 모범 사례
- 에이전트 구성을 에이전트 디렉터리에 두기:
langgraph.json파일을 모노레포 루트가 아닌 특정 에이전트 디렉터리에 두세요. 이렇게 하면 같은 모노레포에서 여러 에이전트를 지원할 수 있으며, 모두 같은 LangSmith 배포에 배포할 필요가 없습니다. - Python은 상대 경로 사용: Python 모노레포는
dependencies배열에서"../../shared-package"같은 상대 경로를 사용하세요. - JS는 워크스페이스 기능 활용: JavaScript/TypeScript는 패키지 간 의존성 관리를 위해 패키지 매니저의 워크스페이스 기능을 사용하세요.
- 먼저 로컬에서 테스트: 배포하기 전에 항상 로컬에서 빌드를 테스트해 모든 의존성이 올바르게 해석되는지 확인하세요.
- 환경 변수: 환경별 구성을 위해 환경 파일(
.env)을 에이전트 디렉터리에 두세요.
더 알아보기
- Python 모노레포 예제 — 완전한 예제.
- JS 모노레포 예제 — 완전한 예제.