애플리케이션 구조
애플리케이션 구조
LangSmith에 배포하려면 애플리케이션이 하나 이상의 그래프, 구성 파일(langgraph.json), 의존성을 지정하는 파일, 그리고 선택적으로 환경 변수를 지정하는 .env 파일로 구성되어야 해요. 이 페이지에서 LangSmith 애플리케이션이 어떻게 구성되는지, 배포에 필요한 설정 정보를 어떻게 제공하는지 설명드릴게요.
출처: 문서
본문
LangSmith에 배포하려면 애플리케이션이 하나 이상의 그래프, 구성 파일(langgraph.json), 의존성을 지정하는 파일, 그리고 선택적으로 환경 변수를 지정하는 .env 파일로 구성되어야 합니다.
이 페이지는 LangSmith 애플리케이션이 어떻게 구성되는지, 그리고 배포에 필요한 구성 세부 정보를 제공하는 방법을 설명합니다.
핵심 개념
LangSmith를 사용해 배포하려면 다음 정보를 제공하세요:
- 애플리케이션에 사용할 의존성, 그래프, 환경 변수를 지정하는 구성 파일(
langgraph.json). - 애플리케이션의 로직을 구현하는 그래프.
- 애플리케이션 실행에 필요한 의존성을 지정하는 파일.
- 애플리케이션 실행에 필요한 환경 변수.
팁: 프레임워크에 구애받지 않음
LangSmith Deployment는 LangGraph 그래프 배포를 지원합니다. 그러나 그래프의 노드 구현은 임의의 코드를 담을 수 있습니다. 즉 어떤 프레임워크든 노드 안에 구현해 LangSmith Deployment에 배포할 수 있습니다. 이렇게 하면 추가 LangGraph OSS API를 사용하지 않고도 핵심 애플리케이션 로직을 구현하면서, 배포, 스케일링, 관측성을 위해 LangSmith를 계속 사용할 수 있습니다. 자세한 내용은 LangSmith Deployment와 함께 모든 프레임워크 사용하기를 참고하세요.
파일 구조
Python 및 JavaScript 애플리케이션의 디렉터리 구조 예시는 다음과 같습니다:
Python (requirements.txt)
my-app/
├── my_agent # all project code lies within here
│ ├── utils # utilities for your graph
│ │ ├── __init__.py
│ │ ├── tools.py # tools for your graph
│ │ ├── nodes.py # node functions for your graph
│ │ └── state.py # state definition of your graph
│ ├── __init__.py
│ └── agent.py # code for constructing your graph
├── .env # environment variables
├── requirements.txt # package dependencies
└── langgraph.json # configuration file for LangGraph
Python (pyproject.toml)
my-app/
├── my_agent # all project code lies within here
│ ├── utils # utilities for your graph
│ │ ├── __init__.py
│ │ ├── tools.py # tools for your graph
│ │ ├── nodes.py # node functions for your graph
│ │ └── state.py # state definition of your graph
│ ├── __init__.py
│ └── agent.py # code for constructing your graph
├── .env # environment variables
├── langgraph.json # configuration file for LangGraph
└── pyproject.toml # dependencies for your project
JS (package.json)
my-app/
├── src # all project code lies within here
│ ├── utils # optional utilities for your graph
│ │ ├── tools.ts # tools for your graph
│ │ ├── nodes.ts # node functions for your graph
│ │ └── state.ts # state definition of your graph
│ └── agent.ts # code for constructing your graph
├── package.json # package dependencies
├── .env # environment variables
└── langgraph.json # configuration file for LangGraph
참고: 애플리케이션의 디렉터리 구조는 프로그래밍 언어와 사용하는 패키지 관리자에 따라 달라질 수 있습니다.
구성 파일
langgraph.json 파일은 애플리케이션 배포에 필요한 의존성, 그래프, 환경 변수 및 기타 설정을 지정하는 JSON 파일입니다.
JSON 파일에서 지원되는 모든 키에 대한 자세한 내용은 LangGraph 구성 파일 레퍼런스를 참고하세요.
팁: LangGraph CLI는 기본적으로 현재 디렉터리의
langgraph.json구성 파일을 사용합니다.
예시
Python
- 의존성에는 커스텀 로컬 패키지와
langchain_openai패키지가 포함됩니다. ./your_package/your_file.py파일에서agent변수가 있는 단일 그래프가 로드됩니다.- 환경 변수는
.env파일에서 로드됩니다.
{
"dependencies": [
"langchain_openai",
"./your_package"
],
"graphs": {
"my_agent": "./your_package/your_file.py:agent"
},
"env": "./.env"
}
JavaScript
- 의존성은 로컬 디렉터리의 의존성 파일(예:
package.json)에서 로드됩니다. ./your_package/your_file.js파일에서agent함수가 있는 단일 그래프가 로드됩니다.OPENAI_API_KEY환경 변수가 인라인으로 설정됩니다.
{
"dependencies": [
"."
],
"graphs": {
"my_agent": "./your_package/your_file.js:agent"
},
"env": {
"OPENAI_API_KEY": "secret-key"
}
}
의존성
애플리케이션은 (애플리케이션이 작성된 프로그래밍 언어에 따라) 다른 Python 패키지 또는 JavaScript 라이브러리에 의존할 수 있습니다.
의존성을 올바르게 설정하려면 일반적으로 다음 정보를 지정해야 합니다:
- 의존성을 지정하는 디렉터리의 파일(예:
requirements.txt,pyproject.toml또는package.json). - 애플리케이션 실행에 필요한 의존성을 지정하는 구성 파일의
dependencies키. - 추가 바이너리나 시스템 라이브러리는 LangGraph 구성 파일의
dockerfile_lines키를 사용해 지정할 수 있습니다.
그래프
구성 파일의 graphs 키를 사용해 배포된 애플리케이션에서 사용 가능한 그래프를 지정합니다.
구성 파일에 하나 이상의 그래프를 지정할 수 있습니다. 각 그래프는 고유한 이름과 (1) 컴파일된 그래프 또는 (2) 그래프를 정의하는 함수 중 하나에 대한 경로로 식별됩니다.
LangSmith Deployment와 함께 모든 프레임워크 사용하기
LangSmith Deployment는 애플리케이션이 LangGraph 그래프로 구성되도록 요구하지만, 해당 그래프의 개별 노드는 임의의 코드를 담을 수 있습니다. 즉 LangSmith의 배포 인프라의 이점을 누리면서 노드 안에서 어떤 프레임워크나 라이브러리든 사용할 수 있습니다.
그래프 구조는 배포 인터페이스 역할을 하지만, 핵심 애플리케이션 로직은 필요에 가장 잘 맞는 도구와 프레임워크를 사용할 수 있습니다.
LangSmith로 배포하려면 다음이 필요합니다:
Python
- LangGraph 그래프 구조:
StateGraph에add_node와add_edge로 그래프를 정의합니다. - 임의 로직을 가진 노드 함수: 노드 함수는 어떤 프레임워크나 라이브러리든 호출할 수 있습니다.
- 컴파일된 그래프: 그래프를 컴파일해 배포 가능한 애플리케이션을 만듭니다.
다음 예시는 기존 애플리케이션 로직을 최소한의 LangGraph 구조로 감싸는 방법을 보여줍니다:
from langgraph.graph import StateGraph, START, END
from typing import TypedDict
# Your existing application logic using any framework
from app_logic import process_data
from app_logic import fetch_data
class State(TypedDict):
input: str
result: str
def my_app_node(state: State) -> State:
"""Node containing arbitrary framework code."""
# Use any framework or library here
raw_data = fetch_data(state["input"])
processed = process_data(raw_data)
return {"result": processed}
# Define the graph structure
graph = StateGraph(State)
graph.add_node("process", my_app_node) # Add node with your logic
graph.add_edge(START, "process") # Connect start to your node
graph.add_edge("process", END) # Connect your node to end
# Compile for deployment
app = graph.compile()
JavaScript
- LangGraph 그래프 구조:
StateGraph에addNode와addEdge로 그래프를 정의합니다. - 임의 로직을 가진 노드 함수: 노드 함수는 어떤 프레임워크나 라이브러리든 호출할 수 있습니다.
- 컴파일된 그래프: 그래프를 컴파일해 배포 가능한 애플리케이션을 만듭니다.
다음 예시는 기존 애플리케이션 로직을 최소한의 LangGraph 구조로 감싸는 방법을 보여줍니다:
import { StateGraph, START, END } from "@langchain/langgraph";
import { Annotation } from "@langchain/langgraph";
// Your existing application logic using any framework
import { processData } from "./app-logic";
import { fetchData } from "./app-logic";
const State = Annotation.Root({
input: Annotation<string>,
result: Annotation<string>
});
async function myAppNode(state: typeof State.State) {
// Use any framework or library here
const rawData = await fetchData(state.input);
const processed = await processData(rawData);
return { result: processed };
}
// Define the graph structure
const graph = new StateGraph(State)
.addNode("process", myAppNode) // Add node with your logic
.addEdge(START, "process") // Connect start to your node
.addEdge("process", END); // Connect your node to end
// Compile for deployment
export const app = graph.compile();
이 예시에서 노드 함수(Python의 my_app_node, JavaScript의 myAppNode)는 어떤 프레임워크나 라이브러리든 호출할 수 있는 코드를 담을 수 있습니다. LangGraph 구조는 단순히 배포 인터페이스와 오케스트레이션 계층을 제공합니다.
엔드투엔드 예시는 Google ADK와 Claude Agent SDK, Strands, CrewAI, 그리고 AutoGen 배포 가이드를 참고하세요. LangSmith는 deployments-wrap-sdk를 통해 Google ADK 지원을 추가했는데, 이는 에이전트 SDK를 감싸 LangSmith Deployment에서 실행할 수 있게 하는 확장 가능한 패키지입니다.
환경 변수
배포된 LangGraph 애플리케이션을 로컬에서 작업한다면, 구성 파일의 env 키에서 환경 변수를 구성할 수 있습니다.
프로덕션 배포에서는 일반적으로 배포 환경에서 환경 변수를 구성하고 싶을 것입니다.
더 알아보기
langgraph.json의 모든 키에 대한 자세한 내용은 LangGraph configuration file reference 문서를 참고하세요.- 다른 프레임워크를 LangSmith Deployment와 함께 사용하는 방법은 Use any framework with LangSmith Deployment 문서를 확인해 보세요.