모노레포 지원

모노레포 지원

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 빌드 과정:

  1. 상대 의존성 경로를 자동으로 감지합니다.
  2. 공유 패키지를 Docker 빌드 컨텍스트로 복사합니다.
  3. 모든 의존성을 올바른 순서로 설치합니다.
  4. 특별한 플래그나 명령이 필요 없습니다.

JavaScript 빌드 과정:

  1. langgraph build를 호출한 디렉터리(여기서는 모노레포 루트)를 빌드 컨텍스트로 사용합니다.
  2. 패키지 매니저(yarn, npm, pnpm, bun)를 자동으로 감지합니다.
  3. 프로젝트 구성에 따라 적절한 설치 흐름을 실행합니다.
  4. langgraph.json을 포함하는 디렉터리를 사용해 빌드되는 앱을 찾습니다.

팁과 모범 사례

  1. 에이전트 구성을 에이전트 디렉터리에 두기: langgraph.json 파일을 모노레포 루트가 아닌 특정 에이전트 디렉터리에 두세요. 이렇게 하면 같은 모노레포에서 여러 에이전트를 지원할 수 있으며, 모두 같은 LangSmith 배포에 배포할 필요가 없습니다.
  2. Python은 상대 경로 사용: Python 모노레포는 dependencies 배열에서 "../../shared-package" 같은 상대 경로를 사용하세요.
  3. JS는 워크스페이스 기능 활용: JavaScript/TypeScript는 패키지 간 의존성 관리를 위해 패키지 매니저의 워크스페이스 기능을 사용하세요.
  4. 먼저 로컬에서 테스트: 배포하기 전에 항상 로컬에서 빌드를 테스트해 모든 의존성이 올바르게 해석되는지 확인하세요.
  5. 환경 변수: 환경별 구성을 위해 환경 파일(.env)을 에이전트 디렉터리에 두세요.

더 알아보기