런타임 구성을 위한 HTTP 헤더 사용하기
런타임 구성을 위한 HTTP 헤더 사용하기
LangGraph에서는 런타임 구성을 통해 에이전트의 동작과 권한을 동적으로 바꿀 수 있어요. LangSmith Deployment를 사용할 때 이 구성을 요청 본문(config)이나 특정 요청 헤더로 전달할 수 있답니다. 사용자 신원이나 요청 내용에 따라 동작을 조정할 때 유용해요.
출처: 문서
본문
LangGraph는 런타임 구성으로 에이전트 동작과 권한을 동적으로 수정할 수 있게 해줍니다. LangSmith Deployment를 사용할 때, 이 구성을 요청 본문(config) 또는 특정 요청 헤더로 전달할 수 있습니다. 이를 통해 사용자 신원이나 다른 요청에 기반해 조정을 할 수 있습니다.
개인정보 보호를 위해 langgraph.json 파일의 http.configurable_headers 섹션을 통해 어느 헤더가 런타임 구성으로 전달되는지를 제어합니다.
포함/제외할 헤더를 커스터마이즈하는 방법은 다음과 같습니다:
{
"http": {
"configurable_headers": {
"includes": ["x-user-id", "x-organization-id", "my-prefix-*"],
"excludes": ["authorization", "x-api-key"]
}
}
}
includes와 excludes 목록은 정확한 헤더 이름 또는 *를 사용해 임의 개수의 문자를 매칭하는 패턴을 허용합니다. 보안을 위해 다른 regex 패턴은 지원되지 않습니다.
그래프 안에서 사용하기
그래프에서는 아무 노드의 config 인자를 사용해 포함된 헤더에 접근할 수 있습니다.
def my_node(state, config):
organization_id = config["configurable"].get("x-organization-id")
...
또는 컨텍스트에서 가져올 수도 있습니다 (tools 및 기타 중첩 함수에서 유용합니다).
from langgraph.config import get_config
def search_everything(query: str):
organization_id = get_config()["configurable"].get("x-organization-id")
...
이를 사용해 그래프를 동적으로 컴파일할 수도 있습니다.
# my_graph.py.
import contextlib
@contextlib.asynccontextmanager
async def generate_agent(config):
organization_id = config["configurable"].get("x-organization-id")
if organization_id == "org1":
graph = ...
yield graph
else:
graph = ...
yield graph
{
"graphs": {"agent": "my_grph.py:generate_agent"}
}
configurable 헤더 선택 해제 (Opt-out)
configurable 헤더를 사용하지 않으려면, excludes 목록에 와일드카드 패턴을 설정하면 됩니다:
{
"http": {
"configurable_headers": {
"excludes": ["*"]
}
}
}
이렇게 하면 모든 헤더가 런의 구성에 추가되지 않습니다.
제외(excludes)가 포함(includes)보다 우선한다는 점에 유의하세요.
더 알아보기
langgraph.json구성 파일에 대한 자세한 내용은 Application structure 문서를 참고하세요.- 배포된 에이전트에서 트레이싱 커스터마이즈에 대한 예시는 Customize tracing in deployed agents 문서를 확인해 보세요.