런타임 구성을 위한 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"]
    }
  }
}

includesexcludes 목록은 정확한 헤더 이름 또는 *를 사용해 임의 개수의 문자를 매칭하는 패턴을 허용합니다. 보안을 위해 다른 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)보다 우선한다는 점에 유의하세요.

더 알아보기