콘텐츠로 이동

어드바이저 도구 (Advisor Tool)

혼자서 긴 작업을 돌리는 에이전트를 만들다 보면, 어느 순간 '이 방향이 맞나?' 싶은 지점이 꼭 생겨요. 그때마다 더 똑똑한 모델에게 처음부터 다시 맡기면 비용이 커지고, 그냥 내려가자니 전략이 아쉽죠. 어드바이저 도구(Advisor Tool)는 이 중간 지점을 노린 기능이에요.

어드바이저 도구가 하는 일

더 빠르고 저렴한 실행 모델(executor model)이 생성 도중에, 더 뛰어난 지능을 가진 어드바이저 모델(advisor model)에게 전략적 조언을 받을 수 있게 해 주는 도구예요. 어드바이저는 대화 전체를 읽고 계획이나 방향 수정안을 만들어 주고, 실행 모델은 그 조언을 바탕으로 작업을 계속 진행해요.

이 구조는 긴 시간이 걸리는 에이전트 작업에 잘 맞아요. 코딩 에이전트, 컴퓨터 사용(computer use), 여러 단계를 거치는 연구 파이프라인 같은 작업이 대표적이죠. 이런 작업은 대부분의 턴이 기계적이면서도, 좋은 계획이 있는 게 결정적이거든요. 실행 모델이 대부분의 토큰을 생성하면서도 결과 품질은 어드바이저 혼자 했을 때에 가깝게 얻을 수 있어요. 실행 모델의 능력이 어드바이저에 가까워질수록 이득이 줄어드는 걸 포함한 측정 결과는 Optimizing for cost and intelligence 문서에서 확인할 수 있어요.

흐름을 그림으로 보면 이렇게 돼요.

sequenceDiagram
  participant U as Your application
  participant E as Executor model
  participant A as Advisor model

  U->>E: Request with advisor tool
  note over E: Executor begins the task
  E->>A: server_tool_use (server-side)
  note over A: Reads the full transcript,<br/>returns strategic guidance
  A-->>E: advisor_tool_result
  note over E: Executor continues,<br/>informed by the advice
  E-->>U: Response

이 기능에 제로 데이터 보존(ZDR)이 어떻게 적용되는지는 API and data retention 문서를 참고해요.

언제 쓰면 좋을까

어드바이저는 이런 구성을 쓸 때 잘 맞아요.

  • 현재 복잡한 작업에 Sonnet을 쓰고 있다면: 더 높은 등급의 어드바이저를 추가해요. Opus면 총비용을 비슷하거나 더 낮게 유지할 수 있고, Claude Fable 5.1이면 품질 향상 폭을 최대로 끌어올려요.
  • Haiku를 쓰는데 지능 한 단계 올리고 싶다면: Opus나 Fable 어드바이저를 추가해요. Haiku 단독보다는 비용이 오르지만, 실행 모델을 더 큰 모델로 바꾸는 것보다는 저렴해요.

다만 결과는 작업마다 달라요. 반드시 자기 작업에서 직접 평가해 봐야 해요.

반대로 어드바이저가 약한 쪽은 이렇습니다. 계획할 게 없는 단발성 질의응답, 사용자가 이미 비용·품질 트레이드오프를 고르는 순수 통과형(pass-through) 모델 선택기, 그리고 매 턴마다 정말 어드바이저 모델의 전체 능력이 필요한 작업이에요.

빠른 시작

어드바이저 도구는 현재 베타 단계예요. 요청에 베타 헤더 advisor-tool-2026-03-01을 넣어야 해요.

curl https://api.anthropic.com/v1/messages \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "anthropic-beta: advisor-tool-2026-03-01" \
  -H "content-type: application/json" \
  -d '{
    "model": "claude-sonnet-5",
    "max_tokens": 4096,
    "tools": [
      {
        "type": "advisor_20260301",
        "name": "advisor",
        "model": "claude-opus-5"
      }
    ],
    "messages": [{
      "role": "user",
      "content": "Build a concurrent worker pool in Go with graceful shutdown."
    }]
  }'

ant CLI로는 이렇게 써요.

ant beta:messages create --beta advisor-tool-2026-03-01 <<'YAML'
model: claude-sonnet-5
max_tokens: 4096
tools:
  - type: advisor_20260301
    name: advisor
    model: claude-opus-5
messages:
  - role: user
    content: Build a concurrent worker pool in Go with graceful shutdown.
YAML

Python SDK 기준 빠른 시작은 이렇게 돼요. 도구 정의에 실행 모델(model), 어드바이저 모델(model), 그리고 어드바이저가 몇 번까지 조언할지 결정하는 typename을 지정해요.

client = anthropic.Anthropic()

response = client.beta.messages.create(
    model="claude-sonnet-5",
    max_tokens=4096,
    betas=["advisor-tool-2026-03-01"],
    tools=[
        {
            "type": "advisor_20260301",
            "name": "advisor",
            "model": "claude-opus-5",
        }
    ],
    messages=[
        {
            "role": "user",
            "content": "Build a concurrent worker pool in Go with graceful shutdown.",
        }
    ],
)

print(response)

응답의 content에는 어드바이저의 조언을 담은 advisor_tool_result 블록이 들어와요. 이 빠른 시작처럼 claude-opus-5를 어드바이저로 쓰면, 그 블록의 content 필드는 advisor_redacted_result 형태가 돼요. 이건 암호화된 형태라 실행 모델은 서버 쪽에서 읽지만, 내 클라이언트에서는 읽을 수 없어요. 조언 텍스트를 응답에서 직접 보려면 어드바이저 모델로 claude-opus-4-8을 쓰면 돼요. 이때는 일반 텍스트인 advisor_result 형태로 돌아와요. 두 형태를 나란히 비교한 내용은 결과 형태에서, 어떤 어드바이저 모델이 어떤 결과를 주는지 전체 목록은 모델 호환성에서 확인할 수 있어요.

동작 방식

tools 배열에 어드바이저 도구를 추가하면, 실행 모델은 다른 도구처럼 언제 호출할지 스스로 결정해요. 실행 모델이 어드바이저를 호출할 때 일어나는 일은 순서대로 이래요.

  1. 실행 모델이 server_tool_use 블록을 내보내요. name"advisor", input은 빈 값이에요. 실행 모델이 시점을 알려주고, 서버가 문맥을 채워 넣어요.
  2. Anthropic이 어드바이저 모델에서 별도의 추론 패스(inference pass)를 서버 쪽에서 돌려요. 어드바이저는 Anthropic이 제공하는 자체 시스템 프롬프트 아래에서, 실행 모델의 전체 기록(전사본)을 인용된 문맥으로 입력받아요. 그 기록에는 시스템 프롬프트, 도구 정의, 이전 턴들과 도구 결과, 그리고 이번 턴에서 실행 모델이 지금까지 만들어 낸 텍스트가 모두 포함돼요.
  3. 어드바이저의 응답이 advisor_tool_result 블록으로 실행 모델에게 돌아와요.
  4. 실행 모델이 조언을 반영해 생성을 이어가요.

이 모든 과정은 하나의 /v1/messages 요청 안에서 일어나요. 내 쪽에서는 추가 왕복이 없어요. 예외는 호출 도중에 턴이 멈추는 경우인데, 이건 뒤따르는 요청으로 재개해요(멈춘 턴 재개 참고).

어드바이저는 도구 없이, 문맥 관리 없이 돌아가요. 어드바이저의 thinking 블록은 결과가 돌아오기 전에 버려지고, 오직 조언 텍스트만 실행 모델에게 도달해요.

도구 파라미터

파라미터 타입 기본값 설명
type string 필수 "advisor_20260301"이어야 해요.
name string 필수 "advisor"여야 해요.
model string 필수 어드바이저 모델 ID예요. 예를 들어 claude-opus-5. 이 모델의 요금으로 서브-추론이 청구돼요.
max_uses integer 무제한 한 요청 안에서 허용되는 어드바이저 호출 최대 횟수예요. 실행 모델이 이 한도에 도달하면 이후 호출은 error_code: "max_uses_exceeded"advisor_tool_result_error를 돌려주고, 실행 모델은 더 조언 없이 계속 진행해요. 이건 대화 단위가 아니라 요청 단위 한도예요. 대화 수준 한도는 비용 관리를 참고해요.
max_tokens integer 어드바이저 모델의 출력 상한 어드바이저의 총 출력(thinking 포함)을 호출당 제한해요. 최소값은 1024예요. 어드바이저 출력 상한을 참고해요.
caching object | null null (꺼짐) 대화 내 호출 간에 어드바이저 자신의 전사본에 프롬프트 캐싱을 사용할지 정해요. 어드바이저 프롬프트 캐싱을 참고해요.

caching 객체의 형태는 {"type": "ephemeral", "ttl": "5m" | "1h"}예요. 콘텐츠 블록의 cache_control과 달리 이건 중단점(breakpoint) 표시가 아니라 단순한 켜기/끄기 스위치예요. 캐시 경계를 어디에 둘지는 서버가 정해요.

어드바이저 도구는 어떤 도구 정의에도 쓸 수 있는 일반 속성도 받아요: cache_control, allowed_callers, defer_loading, strict(이는 구조화된 출력에서 다뤄요). 각 속성의 의미는 Tool reference에서 확인할 수 있어요.

응답 구조

성공적인 어드바이저 호출

어드바이저가 호출되면 어시스턴트의 contentserver_tool_use 블록에 이어 advisor_tool_result 블록이 생겨요. 아래 예시는 Claude Opus 4.8 어드바이저가 돌려주는 일반 텍스트 advisor_result 형태예요. 빠른 시작에서는 Claude Opus 5를 써서 암호화된 advisor_redacted_result 형태가 나오는데, 두 형태의 나란한 비교는 결과 형태에서 볼 수 있어요.

{
  "role": "assistant",
  "content": [
    {
      "type": "text",
      "text": "Let me consult the advisor on this."
    },
    {
      "type": "server_tool_use",
      "id": "srvtoolu_abc123",
      "name": "advisor",
      "input": {}
    },
    {
      "type": "advisor_tool_result",
      "tool_use_id": "srvtoolu_abc123",
      "content": {
        "type": "advisor_result",
        "text": "Use a channel-based coordination pattern. The tricky part is draining in-flight work during shutdown: close the input channel first, then wait on a WaitGroup..."
      }
    },
    {
      "type": "text",
      "text": "Here's the implementation. I'm using a channel-based coordination pattern to avoid writer starvation..."
    }
  ]
}

server_tool_use.input은 항상 비어 있어요. 서버가 전체 기록에서 어드바이저의 뷰를 자동으로 구성하거든요. 실행 모델이 input에 뭘 넣어도 어드바이저에게는 전달되지 않아요.

결과 형태

advisor_tool_result.content 필드는 판별 유니온(discriminated union)이에요. 성공적인 호출에서 형태는 어드바이저 모델에 따라 달라져요.

형태 필드 언제 돌아오나
advisor_result text, stop_reason 어드바이저 모델이 일반 텍스트를 돌려줄 때 (예: Claude Opus 4.8).
advisor_redacted_result encrypted_content, stop_reason 어드바이저 모델이 암호화된 출력을 돌려줄 때.

같은 요청을 어드바이저 model만 바꿔 두 번 보내면, 두 형태를 모두 볼 수 있어요.

"model": "claude-opus-4-8"이면 조언이 일반 텍스트로 와요.

{
  "type": "advisor_tool_result",
  "tool_use_id": "srvtoolu_abc123",
  "content": {
    "type": "advisor_result",
    "text": "Use a channel-based coordination pattern. The tricky part is draining in-flight work during shutdown: close the input channel first, then wait on a WaitGroup..."
  }
}

"model": "claude-opus-5"이면 조언이 암호화돼 와요.

{
  "type": "advisor_tool_result",
  "tool_use_id": "srvtoolu_abc123",
  "content": {
    "type": "advisor_redacted_result",
    "encrypted_content": "EqQBCkYIBRgCIiQ5ZjE0N2M2OC0yYWIxLTRkZTktYjA3ZC1hZTUyMzkxYjhkMmU..."
  }
}

두 결과 형태 모두, 도구 정의에 max_tokens를 설정하면 stop_reason 필드가 붙고, 설정하지 않으면 빠져요. 이 필드는 어드바이저 서브-호출의 중단 이유를 담아요. 보통은 "end_turn"이고, 상한에 걸리면 "max_tokens"예요. 값은 최상위 Messages API의 stop_reason과 일치해요.

advisor_result에서는 text 필드에 읽을 수 있는 조언이 들어 있어요. advisor_redacted_result에서는 encrypted_content 필드에 읽을 수 없는 불투명한 blob이 들어 있어요. 다음 턴에 서버가 이를 복호화해 일반 텍스트를 실행 모델의 프롬프트로 렌더링해요.

두 경우 모두, 이후 턴에서는 이 콘텐츠를 그대로(verbatim) 왕복시켜야 해요. 대화 도중에 어드바이저 모델을 바꾼다면 content.type으로 분기해서 두 형태를 모두 처리해요.

오류 결과

어드바이저 호출이 실패하면 결과에 오류가 실려 와요.

{
  "type": "advisor_tool_result",
  "tool_use_id": "srvtoolu_abc123",
  "content": {
    "type": "advisor_tool_result_error",
    "error_code": "overloaded"
  }
}

실행 모델은 이 오류를 보고 더 조언 없이 계속 진행해요. 요청 자체는 실패하지 않아요.

error_code 의미
max_uses_exceeded 요청이 도구 정의에 설정된 max_uses 상한에 도달했어요. 같은 요청에서 이후 어드바이저 호출은 이 오류를 돌려줘요.
too_many_requests 어드바이저 서브-추론이 rate limit에 걸렸어요.
overloaded 어드바이저 서브-추론이 용량 한도에 부딪혔어요.
prompt_too_long 전사본이 어드바이저 모델의 문맥 창을 초과했어요.
execution_time_exceeded 어드바이저 서브-추론이 타임아웃됐어요.
model_not_found 설정한 어드바이저 모델을 사용할 수 없어요.
unavailable 기타 모든 어드바이저 실패.

어드바이저의 rate limit은 어드바이저 모델에 대한 직접 호출과 같은 모델별 버킷을 사용해요. 어드바이저에 걸린 rate limit은 도구 결과 안에서 too_many_requests로 나타나고, 실행 모델에 걸린 rate limit은 요청 전체를 HTTP 429로 실패시켜요.

멀티 턴 대화

이후 턴에서 API에 전체 어시스턴트 콘텐츠를, advisor_tool_result 블록까지 포함해 다시 전달해요. 결과 블록은 그대로(verbatim) 왕복시켜요. Claude Opus 5 어드바이저면 결과 블록의 콘텐츠가 암호화된 advisor_redacted_result 형태이고, 서버가 복호화해 다음 턴에 조언을 실헹 모델 프롬프트로 렌더링해요(결과 형태 참고). 어떤 어드바이저 모델이든 방식은 동일해요.

client = anthropic.Anthropic()

tools = [
    {
        "type": "advisor_20260301",
        "name": "advisor",
        "model": "claude-opus-5",
    }
]

messages = [
    {
        "role": "user",
        "content": "Build a concurrent worker pool in Go with graceful shutdown.",
    }
]

response = client.beta.messages.create(
    model="claude-sonnet-5",
    max_tokens=1024,
    betas=["advisor-tool-2026-03-01"],
    tools=tools,
    messages=messages,
)

# Append the full response content, including any advisor_tool_result blocks
messages.append({"role": "assistant", "content": response.content})

# Continue the conversation
messages.append({"role": "user", "content": "Now add a max-in-flight limit of 10."})

response = client.beta.messages.create(
    model="claude-sonnet-5",
    max_tokens=1024,
    betas=["advisor-tool-2026-03-01"],
    tools=tools,
    messages=messages,
)

뒤따르는 턴에서 tools에서 어드바이저 도구를 뺄 수도 있어요. 메시지 기록에 advisor_tool_result 블록이 남아 있어도 괜찮아요. 요청은 받아들여지고 과거 블록은 보존되지만, 그 턴에서 모델은 어드바이저를 호출할 수 없어요. 단, 그 과거 블록이 받아들여지려면 여전히 advisor-tool-2026-03-01 베타 헤더를 보내야 해요.

멈춘 턴 재개

어드바이저 호출이 아직 처리 중인데 응답이 stop_reason: "pause_turn"으로 끝날 수 있어요. 그 경우 응답에는 해당 어드바이저의 server_tool_use 블록이 있고 advisor_tool_result는 없어요. 재개하려면 그 어시스턴트 메시지를 콘텐츠 그대로 messages에 붙이고 server_tool_use 블록을 유지한 채, 같은 어드바이저 도구와 베타 헤더로 요청을 다시 보내면 돼요. user 메시지나 tool_result 블록을 추가할 필요는 없어요. API가 대기 중인 어드바이저 호출을 실행하고 새 응답에서 실행 모델의 턴을 계속 이어가요. 재개한 턴이 다시 멈출 수도 있는데, 그러면 같은 과정을 반복하면 돼요.

재개 요청에서 어드바이저 도구를 빼면 400 invalid_request_error가 나와요. 대기 중인 server_tool_use 블록에 실행할 도구 정의가 없기 때문이에요. 호출이 대기 중일 때는 반드시 도구를 포함하세요. 만약 같은 턴에서 실행 모델이 내 도구 중 하나를 호출했다면, 어드바이저 호출이 아직 대기 중인 채로 응답이 stop_reason: "tool_use"로 끝나요. 이 경우엔 평소처럼 tool_result 블록을 보내면, 그 다음 요청의 시작에서 대기 중인 어드바이저 호출이 실행돼요. 자세한 내용은 한 턴에서 서버 도구와 클라이언트 도구 섞기를 참고해요.

호출을 아끼는 실행 모델을 위한 중간 알림

Haiku 실행 모델이 첫 어시스턴트 턴에서 어드바이저를 호출하지 않았으면, 두 번째 어시스턴트 턴 전에 추가 user 메시지로 짧은 알림을 붙여 넣을 수 있어요. Anthropic 내부 행동 평가에서 Haiku 실행 모델의 작업 통과율이 약 7퍼센트포인트 올랐어요. Sonnet 실행 모델에서는 이 일반 텍스트 알림이 Anthropic 테스트에서 측정 가능한 효과가 없었어요. 아래 나오는 호출 시점 고려 사항은 특히 Sonnet에 관련돼요. Opus 실행 모델에는 이 알림을 적용하지 마세요. Opus에서는 오히려 통과율이 살짝 낮아졌어요.

기본 NUDGE_TURN이 2라면, 이 알림은 보통 모델이 작업을 파악한 뒤지만 접근 방식을 정하기 전에 도착해요.

client = anthropic.Anthropic()

NUDGE_TURN = 2  # inject before this assistant turn if no advisor call yet
NUDGE_TEXT = (
    "You have not consulted the advisor yet. If the task has a non-obvious "
    "design decision or a failure mode you haven't ruled out, call advisor "
    "now before committing to an approach."
)
MAX_TURNS = 10  # agent loop cap

def run_your_tools(content):
    # Replace with your tool dispatch. Returns one tool_result block per tool_use block.
    return [
        {
            "type": "tool_result",
            "tool_use_id": block.id,
            "content": "Replace with your tool output.",
        }
        for block in content
        if block.type == "tool_use"
    ]

tools = [
    {"type": "advisor_20260301", "name": "advisor", "model": "claude-opus-5"},
    # ... your other tools
]
task = "Build a concurrent worker pool in Go with graceful shutdown."
messages = [{"role": "user", "content": task}]
advisor_called = False

for turn in range(1, MAX_TURNS + 1):
    response = client.beta.messages.create(
        model="claude-haiku-4-5",
        max_tokens=4096,
        betas=["advisor-tool-2026-03-01"],
        tools=tools,
        messages=messages,
    )
    messages.append({"role": "assistant", "content": response.content})
    advisor_called = advisor_called or any(
        block.type == "server_tool_use" and block.name == "advisor"
        for block in response.content
    )
    if response.stop_reason == "end_turn":
        break
    if response.stop_reason == "pause_turn":
        continue  # server tool pending; re-send to let the API complete it

    results = run_your_tools(response.content)  # list of tool_result blocks
    if results:
        messages.append({"role": "user", "content": results})
    # Skip this if your system prompt already tells the model to call sparingly.
    if turn == NUDGE_TURN - 1 and not advisor_called:
        messages.append({"role": "user", "content": NUDGE_TEXT})

알림은 같은 메시지의 형제 블록으로 붙이는 대신, 도구 결과 뒤에 별도의 user 메시지로 붙여 넣어요. 연속된 user 메시지는 유효해요. Anthropic 테스트에서 Haiku와 Sonnet 실행 모델에서는 형제 블록과 동등하게 동작했어요. 별도 메시지로 두는 게 알림이 도구 출력과 분명히 구분되게 해 주기도 해요.

트레이드오프: 알림은 호출 빈도를 높여서, 사소하게 간단한 작업까지 불필요한 컨설트로 밀어 넣을 수 있어요. 작업이 단순·복잡이 섞여 있다면 NUDGE_TURN을 3으로 올려 두 턴짜리 작업이 알림 전에 끝나게 하거나, 이미 계산 중인 작업 복잡도 신호에 알림을 묶는 걸 고려해 봐요. 시스템 프롬프트에 이미 절제 문구("진짜 불확실한 때만 어드바이저를 써라")가 있다면 알림을 아예 쓰지 마세요. 두 지시가 충돌하거든요.

이 일반 텍스트 알림은 Haiku와 Sonnet 실행 모델에서 아주 잘 먹혀요. Anthropic 테스트에서 알림을 받은 시도 중 74퍼센트(Sonnet)에서 98퍼센트(Haiku)가 2턴째에 즉시 어드바이저를 호출했어요. 그게 실행 모델이 문제를 읽거나 문맥을 모으기 전에 떨어지면, 결과물인 어드바이저 호출은 문맥이 부족해지고 더 좋은 타이밍의 나중 호출을 밀어낼 수 있어요. 알림을 추가하기 전에 실행 모델의 첫 호출 턴 기준선을 먼저 측정하세요. 실행 모델이 이미 안정적으로 호출하고 첫 호출이 보통 턴 N에 온다면 NUDGE_TURN을 N보다 크게 설정해요. Anthropic 테스트에서 첫 호출이 보통 7턴 이후인 작업에 2턴 알림을 넣으면 작업 성과가 3~4퍼센트포인트 떨어지는 것과 상관관계가 있었어요. 반대로 호출률 기준선이 86퍼센트이던 브라우즈 작업에서는 같은 알림이 성과 손실 없이 참여만 올렸어요.

알림 대신 특정 요청에 컨설트를 강제하려면 tool_choice{"type": "tool", "name": "advisor"}로 설정하면 돼요. 단, 도구 사용 강제의 제약을 따라야 해요. 도구 사용 강제는 수동 확장 사고(thinking: {type: "enabled"})와는 함께 쓸 수 없어요. 둘 다 켜면 API가 400 invalid_request_error를 돌려줘요. 적응형 사고(adaptive thinking)는 도구 사용 강제를 지원해요. Claude Fable 5.1과 Claude Mythos 5.1 실행 모델은 toolany 타입의 tool_choice를 거부하므로, 그 모델에서는 프롬프트 알림을 쓰세요.

스트리밍

어드바이저 서브-추론은 스트리밍되지 않아요. 실행 모델의 스트림은 어드바이저가 도는 동안 멈췄다가, 전체 결과가 단일 이벤트로 한 번에 도착해요.

name: "advisor"server_tool_use 블록이 어드바이저 호출 시작을 알려요. 멈춤은 그 블록이 닫히는 순간(content_block_stop) 시작돼요. 멈춤 동안 스트림은 조용한데, 표준 SSE ping keepalive만 약 30초마다 나와요. 짧은 어드바이저 호출은 ping이 안 보일 수도 있어요.

어드바이저가 끝나면 advisor_tool_result가 완전한 형태로 단일 content_block_start 이벤트로 도착해요(델타 없음). 그다음 실행 모델 출력이 다시 스트리밍돼요.

그 뒤 message_delta 이벤트가 어드바이저의 토큰 수를 반영한 업데이트된 usage.iterations 배열을 갖고 와요.

사용량과 청구

어드바이저 호출은 어드바이저 모델의 요금으로 청구되는 별도의 서브-추론으로 돌아가요. 사용량은 usage.iterations[] 배열에 보고돼요.

{
  "usage": {
    "input_tokens": 1760,
    "cache_read_input_tokens": 412,
    "cache_creation_input_tokens": 0,
    "output_tokens": 531,
    "iterations": [
      {
        "type": "message",
        "input_tokens": 412,
        "cache_read_input_tokens": 0,
        "cache_creation_input_tokens": 0,
        "output_tokens": 89
      },
      {
        "type": "advisor_message",
        "model": "claude-opus-5",
        "input_tokens": 823,
        "cache_read_input_tokens": 0,
        "cache_creation_input_tokens": 0,
        "output_tokens": 1612
      },
      {
        "type": "message",
        "input_tokens": 1348,
        "cache_read_input_tokens": 412,
        "cache_creation_input_tokens": 0,
        "output_tokens": 442
      }
    ]
  }
}

최상위 usage 필드는 실행 모델 토큰만 반영해요. 어드바이저 토큰은 다른 요금으로 청구되기 때문에 최상위 합계에 합산되지 않아요. type: "advisor_message"인 이터레이션은 어드바이저 모델 요금으로, type: "message"인 이터레이션은 실행 모델 요금으로 청구돼요.

최상위 usage 필드 각각은 모든 실행 이터레이션에서 그 필드의 합이에요. input_tokens, output_tokens, cache_read_input_tokens 모두 포함돼요. 각 실행 이터레이션은 커지는 대화를 다시 보내기 때문에, 나중 이터레이션의 입력은 앞선 이터레이션의 출력을 포함해요. 그래서 합산된 input_tokens는 어떤 단일 프롬프트의 크기보다 커져요. 비용 추적 로직을 만들 때는 완전한 이터레이션별 내역을 위해 usage.iterations를 쓰세요.

어드바이저 출력은 보통 텍스트 400~700 토큰, thinking 포함 총 1,400~1,800 토큰이에요. 비용 절감의 핵심은, 어드바이저가 내 완전한 최종 출력을 만들지 않는다는 데 있어요. 실행 모델이 그걸 낮은 요금으로 만들거든요.

최상위 max_tokens실행 모델 출력에만 적용돼요. 어드바이저 서브-추론 토큰을 제한하지 않아요. 어드바이저 출력을 직접 제한하려면 도구 정의에 max_tokens를 설정하세요. 어드바이저 토큰은 실행 모델에 적용되는 어떤 작업 예산(task budget)에서도 빠져요.

Priority Tier는 각 모델에 독립적으로 적용돼요. 실행 모델에 대한 Priority Tier 약정은 어드바이저에게까지 이어지지 않아요. 어드바이저 호출이 Priority Tier로 돌려면 조직이 어드바이저 모델에도 약정을 보유해야 해요.

어드바이저 프롬프트 캐싱

여기엔 서로 독립적인 캐싱 층이 두 개 있어요.

실행 모델 쪽 캐싱

advisor_tool_result 블록은 다른 콘텐츠 블록처럼 캐시할 수 있어요. 이후 턴에서 그 뒤에 cache_control 중단점을 두면 캐시가 적중해요. 실행 모델의 프롬프트에는 내 클라이언트가 text를 받았든 encrypted_content를 받았든 항상 일반 텍스트 조언이 들어 있으므로, 두 결과 형태 모두 캐싱 동작은 동일해요.

어드바이저 쪽 캐싱

도구 정의에 caching을 설정하면, 같은 대화 안에서 호출 간에 어드바이저 자신의 전사본에 프롬프트 캐싱을 사용할 수 있어요.

tools = [
    {
        "type": "advisor_20260301",
        "name": "advisor",
        "model": "claude-opus-5",
        "caching": {"type": "ephemeral", "ttl": "5m"},
    }
]

어드바이저의 N번째 호출 프롬프트는 (N-1)번째 호출 프롬프트에 세그먼트 하나가 더 붙은 형태라, 접두사가 호출 간에 안정적이에요. caching을 켜면 각 어드바이저 호출이 캐시 항목을 쓰고, 다음 호출은 그 지점까지 읽으면서 델타만 지불해요. 두 번째 이후 advisor_message 이터레이션에서 cache_read_input_tokens가 0이 아닌 값이 되는 걸 볼 수 있어요.

언제 켤까: 대화당 어드바이저 호출이 2회 이하면 캐시 쓰기 비용이 읽기로 아끼는 것보다 커져요. 캐싱은 대략 3회 호출에서 손익분기점에 도달하고 그 이후로 좋아져요. 긴 에이전트 루프에서는 켜고, 짧은 작업에서는 꺼두세요.

일관성 유지: caching은 한 번 설정하면 대화 전체에 그대로 두세요. 중간에 껐다 켜면 캐시 미스가 생겨요.

다른 도구와 조합하기

어드바이저 도구는 다른 서버 쪽·클라이언트 쪽 도구와 조합할 수 있어요. 모두 같은 tools 배열에 넣으면 돼요.

tools = [
    {
        "type": "web_search_20250305",
        "name": "web_search",
        "max_uses": 5,
    },
    {
        "type": "advisor_20260301",
        "name": "advisor",
        "model": "claude-opus-5",
    },
    {
        "name": "run_bash",
        "description": "Run a bash command",
        "input_schema": {
            "type": "object",
            "properties": {"command": {"type": "string"}},
        },
    },
]

실행 모델은 같은 턴에서 웹 검색도 하고, 어드바이저도 호출하고, 내 커스텀 도구도 쓸 수 있어요. 어드바이저의 계획은 실행 모델이 다음에 어떤 도구를 집을지 정하는 데 도움을 줄 수 있어요.

기능 상호작용
배치 처리 지원돼요. usage.iterations가 항목별로 보고돼요.
토큰 세기 실행 모델의 첫 이터레이션 입력 토큰만 돌려줘요. 어드바이저 대략값을 보려면 model을 어드바이저 모델로 두고 같은 messages로 count_tokens를 호출해 봐요.
문맥 편집 clear_tool_uses는 어드바이저 도구 블록과 완전히 호환되지 않아요. clear_thinking은 앞서 본 캐싱 경고를 확인하세요.
pause_turn 같은 턴에 클라이언트 tool_use 블록이 내 결과를 기다리며 없을 때, 매달린 어드바이저 호출은 응답이 stop_reason: "pause_turn"이고 결과 없는 server_tool_use 블록으로 끝나요. 어드바이저는 재개 시 실행돼요. 그 턴에서 실행 모델이 내 도구 중 하나도 호출했다면 응답은 대신 stop_reason: "tool_use"로 끝나고, 대기 중인 어드바이저 호출은 내가 tool_result 블록을 보낸 뒤 다음 요청 시작에 실행돼요. 멈춘 턴 재개, 한 턴에서 서버 도구와 클라이언트 도구 섞기, 서버 도구를 참고해요.

모범 사례

코딩·에이전트 작업을 위한 프롬프팅

어드바이저 도구에는 복잡한 작업의 시작 무렵과 어려움에 부딪혔을 때 호출하도록 실행 모델을 부추기는 내장 설명(built-in description)이 포함돼 있어요. 연구 작업에서는 추가 프롬프팅이 필요 없는 경우가 보통이에요.

코딩·에이전트 작업에서, 어드바이저가 총 도구 호출 수와 대화 길이를 줄여 주면 비슷한 비용으로 더 높은 지능을 만들어내요. 그 개선을 이끄는 타이밍은 두 가지예요.

  1. 처음 몇 번의 탐색 읽기가 전사본에 들어간 뒤, 이른 첫 어드바이저 호출.
  2. 어려운 작업이라면, 파일 쓰기와 테스트 출력이 전사본에 들어간 뒤 마지막 어드바이저 호출.

에이전트가 todo 리스트 도구 같은 다른 플래너류 도구를 노출한다면, 어드바이저가 그 도구들 앞에 호출되도록 모델에 프롬프트해 계획이 거기로 흘러들게 해요. 아래 코딩 작업용 권장 시스템 프롬프트가 이른 호출 패턴을 강화해 줘요. 에이전트가 노출하는 플래너 도구를 가리키는 자신만의 funnel 문장을 추가하세요.

코딩 작업용 권장 시스템 프롬프트

시스템 프롬프트로 끌어주지 않으면 실행 모델이 일부 영역, 특히 코딩 작업에서 어드바이저를 덜 호출하는 경향이 있어요. 일관된 어드바이저 타이밍과 작업당 2~3회의 호출을 원하는 코딩 작업에서는, 어드바이저를 언급하는 다른 문장보다 앞서 아래 블록들을 실행 모델 시스템 프롬프트에 붙여 넣으세요.

타이밍 지침:

You have access to an `advisor` tool backed by a stronger reviewer model. It takes NO parameters — when you call advisor(), your entire conversation history is automatically forwarded. They see the task, every tool call you've made, every result you've seen.

Call advisor BEFORE substantive work — before writing, before committing to an interpretation, before building on an assumption. If the task requires orientation first (finding files, fetching a source, seeing what's there), do that, then call advisor. Orientation is not substantive work. Writing, editing, and declaring an answer are.

Also call advisor:
- When you believe the task is complete. BEFORE this call, make your deliverable durable: write the file, save the result, commit the change. The advisor call takes time; if the session ends during it, a durable result persists and an unwritten one doesn't.
- When stuck — errors recurring, approach not converging, results that don't fit.
- When considering a change of approach.

On tasks longer than a few steps, call advisor at least once before committing to an approach and once before declaring done. On short reactive tasks where the next action is dictated by tool output you just read, you don't need to keep calling — the advisor adds most of its value on the first call, before the approach crystallizes.

실행 모델이 조언을 어떻게 대해야 하는지 (타이밍 블록 바로 뒤에 배치):

Give the advice serious weight. If you follow a step and it fails empirically, or you have primary-source evidence that contradicts a specific claim (the file says X, the paper states Y), adapt. A passing self-test is not evidence the advice is wrong — it's evidence your test doesn't check what the advice is checking.

If you've already retrieved data pointing one way and the advisor points another: don't silently switch. Surface the conflict in one more advisor call — "I found X, you suggest Y, which constraint breaks the tie?" The advisor saw your evidence but may have underweighted it; a reconcile call is cheaper than committing to the wrong branch.

Haiku 코딩 워크로드용 대체 시스템 프롬프트

Claude Haiku 4.5는 기본 어드바이저 지침을 보수적으로 적용해요. 이 덕에 연구·조회 워크로드에서는 호출률을 적절히 낮게 유지하지만, 이른 어드바이저 컨설트가 확실히 이득인 코딩 워크로드에서는 품질을 놓쳐요. 내부 코딩 벤치마크에서, 아래 블록의 가까운 변형(Hard 규칙의 읽기 전용 carve-out은 측정 후 추가됨)이 Haiku 통과율을 기본값 대비 약 7.5퍼센트포인트 올렸어요.

Haiku 실행 모델이 주로 코딩이나 쓰기 작업 워크로드를 돌릴 때는 앞의 타이밍·조언 블록 대신 이 블록을 쓰세요.

Consult a stronger reviewer who sees your full conversation transcript.

No parameters. When you call advisor(), your entire history -- task, every tool call and result, your reasoning -- is automatically forwarded. The advisor sees exactly what you've done.

Call advisor BEFORE substantive work -- before writing, before committing to an interpretation, before building on an assumption. If the task requires orientation first (finding files, fetching a source, seeing what's there), do that, then call advisor. Orientation is not substantive work. Writing, editing, and declaring an answer are.

Also call advisor:
- When you believe the task is complete. BEFORE this call, make your deliverable durable: write the file, save the result, commit the change. The advisor call takes time; if the session ends during it, a durable result persists and an unwritten one doesn't.
- When stuck -- errors recurring, approach not converging, results that don't fit.
- When considering a change of approach.

On tasks longer than a few steps, call advisor at least once before committing to an approach and once before declaring done. On short reactive tasks where the next action is dictated by tool output you just read, you don't need to keep calling -- the advisor adds most of its value on the first call, before the approach crystallizes.

Give the advice serious weight. If you follow a step and it fails empirically, or you have primary-source evidence that contradicts a specific claim (the file says X, the paper states Y), adapt. A passing self-test is not evidence the advice is wrong -- it's evidence your test doesn't check what the advice is checking.

If you've already retrieved data pointing one way and the advisor points another: don't silently switch. Surface the conflict in one more advisor call -- "I found X, you suggest Y, which constraint breaks the tie?" The advisor saw your evidence but may have underweighted it; a reconcile call is cheaper than committing to the wrong branch.

Call advisor for design, architecture, and risk questions where you won't touch a file. If your response would be analysis or a recommendation with no other tool calls, call advisor first -- that judgment call is exactly where a second opinion is highest-value.

Hard rule: your first write_file, edit_file, or state-changing bash call on a task must be preceded by an advisor call in the same or an earlier turn. Read-only orientation commands (ls, cat, grep, find) are not state-changing. This is a checkpoint, not a difficulty judgment. It applies to one-line edits too.

주의: 내부 브라우즈 이해 벤치마크(n = 1,266)에서 이 블록의 가까운 변형이 기본값 대비 정확도에서 약 4퍼센트포인트 손해였어요. 작업이 코딩과 상당한 조회·검색이 섞여 있다면 권장 블록을 유지하거나, 이미 계산 중인 워크로드 유형 신호에 따라 교체 여부를 정하세요.

Opus 실행 모델에서 어드바이저 호출 늘리기

Opus 실행 모델은 보통 추가 프롬프팅 없이 적절한 비율로 어드바이저를 호출해요. 워크로드에서 Opus 실행 모델이 덜 호출한다면 시스템 프롬프트에 아래 체크포인트를 추가하세요.

Call advisor for design, architecture, and risk questions where you won't touch a file. If your response would be analysis or a recommendation with no other tool calls, call advisor first. That judgment call is exactly where a second opinion is highest-value. (This does not apply to simple factual lookups or arithmetic; those you answer directly.)

Hard rule: your first write_file, edit_file, or state-changing bash call on a task must be preceded by an advisor call in the same or an earlier turn. Read-only orientation commands (ls, cat, grep, find) are not state-changing. This is a checkpoint, not a difficulty judgment. It applies to one-line edits too.

주의: Anthropic 테스트에서 이 블록의 가까운 변형(Hard 규칙의 읽기 전용 carve-out은 측정 후 추가됨)은 덜 호출하는 작업에서 통과율을 약 7~10퍼센트포인트 올렸지만, 첫 동작이 계획을 필요로 하지 않는 작업에서는 Opus가 과호출하게 만들었어요. 혼합 워크로드에서 순효과는 대략 평평했어요. 컨설트가 도움이 됐을 작업에서 Opus가 어드바이저를 건너뛰는 걸 관찰했을 때만 추가하세요. 기본값으로 넣지 마세요.

어드바이저 출력 길이 줄이기

어드바이저 출력은 어드바이저의 최대 비용 동인이에요. 그리고 최상위 max_tokens는 이를 제한하지 않아요. 어드바이저는 내 시스템 프롬프트와 user 메시지 둘 다를 실행 모델 작업에 대한 인용 문맥으로 보기 때문에, 어드바이저를 직접 겨냥한 지시문이 3인칭 설명보다 훨씬 더 확실히 지켜져요. Anthropic이 테스트한 가장 효과적인 배치 위치는 user 메시지의 한 줄이에요.

(Advisor: please keep your guidance under 80 words — I need a focused starting point, not a comprehensive plan.)

이 줄은 에이전트 프레임워크가 요청을 보내기 전에 프로그램적으로 앞에 붙일 수 있어요. 이 한도는 소프트 제약이에요. 어드바이저가 가끔 넘기 때문에, 실제로 원하는 상한의 약 80퍼센트를 요청하세요.

이 방식을 코딩 작업용 권장 시스템 프롬프트의 타이밍 지침(또는 바꿔 넣었다면 Haiku 대체 블록)과 함께 쓰면 비용 대비 품질 트레이드오프가 가장 좋아요. 소프트 요청이 아닌 하드 상한이 필요하다면 어드바이저 출력 상한을 보세요.

어드바이저 출력 상한

도구 정의에 max_tokens를 설정하면 호출당 어드바이저의 총 출력(thinking + 텍스트)을 제한해요.

tools = [
    {
        "type": "advisor_20260301",
        "name": "advisor",
        "model": "claude-opus-5",
        "max_tokens": 2048,
    }
]

최소값은 1024예요. max_tokens를 어드바이저 모델 자체의 출력 상한보다 크게 설정하면 400 오류가 나요. 이 상한은 각 어드바이저 호출에 독립적으로 적용되며 같은 요청의 호출 간에 공유되지 않아요.

이건 단순한 하드 잘라내기만은 아니에요. 서버가 어드바이저에게 남은 토큰 예산도 전달해서, 어드바이저가 거기에 맞게 응답을 다듬어요.

권장 시작값: max_tokens: 2048. 하드 추론 벤치마크(구성별 n = 40)에서 Anthropic 테스트는 이 값을 상한을 안 둔 경우 대비 평균 어드바이저 출력을 약 7배 줄였고, 잘라내기는 거의 없고 감지 가능한 품질 저하도 없었어요. 최소값 1024는 출력을 약 10배 줄였지만 호출의 약 10퍼센트를 잘라냈어요. 모든 구성에서 정확도 차이는 이 표본 크기에서 노이즈 범위 안이었어요. 자기 작업에서 검증하세요.

max_tokens 평균 어드바이저 출력 토큰 잘린 호출
미설정 4,2005,900 n/a
2048 630840 ~0%
1024 370480 ~10%

하드 추론 작업은 가벼운 워크로드에 대해 앞서 인용한 보통 1,400~1,800 토큰보다 훨씬 긴 어드바이저 출력을 끌어내요. 이 표는 절감 비율을 감잡는 용도로 쓰지, 어드바이저 출력의 보편적 기준선으로 쓰지 마세요.

어드바이저가 실제로 상한에 걸리면, 어떤 어드바이저 모델을 쓰든 결과 블록이 두 결과 형태 모두에서 stop_reason: "max_tokens"를 담아요. stop_reason으로 잘린 조언을 감지하고, 상한을 올릴지 부분 지침으로 실행 모델을 진행시킬지 정해요. API는 또한 조언 텍스트에 [Advisor output truncated at max_tokens=2048.](내 상한 이름)을 덧붙여서, 실행 모델이 자기 문맥에서 잘림을 볼 수 있게 해요. 일반 텍스트 advisor_result 어드바이저면 이 표시가 내 클라이언트에도 보여요. 두 신호 모두 도구 정의에 max_tokens를 설정했을 때만 나타나요.

{
  "type": "advisor_tool_result",
  "tool_use_id": "srvtoolu_abc123",
  "content": {
    "type": "advisor_redacted_result",
    "encrypted_content": "EqQBCkYIBRgCIiQ3YTAwMjY1Mi1mZjM5LTQ1NGUtODgxNC1kNjNjNTk1ZWI3Y...",
    "stop_reason": "max_tokens"
  }
}

usage.iterations에서 해당 advisor_message 항목의 output_tokens를 확인해 각 호출이 상한에 얼마나 가까웠는지 볼 수 있어요.

프롬프트 기반 접근과 비교하면, max_tokens는 소프트 요청이 아니라 하드 상한이에요. 비용이나 지연에 보장된 경계가 필요할 때는 max_tokens를 쓰세요. 사고 도중 잘림을 감수하지 않고 간결함 쪽으로 치우치고 싶다면 프롬프트 기반 접근(또는 둘 다)을 쓰세요.

effort 설정과 조합

코딩 작업에서, medium effort의 Sonnet 실행 모델Opus 어드바이저와 짝지으면, 기본 effort의 Sonnet과 맞먹는 지능을 더 낮은 비용으로 얻어요. 최대 지능이 필요하면 실행 모델은 기본 effort를 유지하세요.

비용 관리

  • 대화 수준 예산은 클라이언트 쪽에서 어드바이저 호출 횟수를 세어요. 상한에 도달하면 tools에서 어드바이저 도구를 빼면 돼요. 메시지 기록에서 advisor_tool_result 블록을 지울 필요는 없어요(멀티 턴 대화의 주석 참고).
  • caching은 어드바이저 호출이 3회 이상 예상되는 대화에서만 켜요.

모델 호환성

실행 모델(최상위 model 필드)과 어드바이저 모델(도구 정의 안의 model 필드)은 유효한 쌍을 이뤄야 해요. 어드바이저는 Claude Sonnet 4.6 이상이면서 실행 모델과 같거나 더 뛰어나야 해요. 같은 능력의 모델(예: Claude Opus 4.7과 Claude Opus 4.8)은 서로 어드바이저가 될 수 있어요.

실행 모델 어드바이저 모델
Claude Haiku 4.5 (claude-haiku-4-5) Claude Mythos 5.1 (claude-mythos-5-1)
Claude Fable 5.1 (claude-fable-5-1)
Claude Mythos 5 (claude-mythos-5)
Claude Fable 5 (claude-fable-5)
Claude Opus 5 (claude-opus-5)
Claude Opus 4.8 (claude-opus-4-8)
Claude Opus 4.7 (claude-opus-4-7)
Claude Opus 4.6 (claude-opus-4-6)
Claude Sonnet 5 (claude-sonnet-5)
Claude Sonnet 4.6 (claude-sonnet-4-6)
Claude Sonnet 4.6 (claude-sonnet-4-6) Claude Mythos 5.1 (claude-mythos-5-1)
Claude Fable 5.1 (claude-fable-5-1)
Claude Mythos 5 (claude-mythos-5)
Claude Fable 5 (claude-fable-5)
Claude Opus 5 (claude-opus-5)
Claude Opus 4.8 (claude-opus-4-8)
Claude Opus 4.7 (claude-opus-4-7)
Claude Opus 4.6 (claude-opus-4-6)
Claude Sonnet 5 (claude-sonnet-5)
Claude Sonnet 4.6 (claude-sonnet-4-6)
Claude Sonnet 5 (claude-sonnet-5) Claude Mythos 5.1 (claude-mythos-5-1)
Claude Fable 5.1 (claude-fable-5-1)
Claude Mythos 5 (claude-mythos-5)
Claude Fable 5 (claude-fable-5)
Claude Opus 5 (claude-opus-5)
Claude Opus 4.8 (claude-opus-4-8)
Claude Opus 4.7 (claude-opus-4-7)
Claude Sonnet 5 (claude-sonnet-5)
Claude Opus 4.6 (claude-opus-4-6) Claude Mythos 5.1 (claude-mythos-5-1)
Claude Fable 5.1 (claude-fable-5-1)
Claude Mythos 5 (claude-mythos-5)
Claude Fable 5 (claude-fable-5)
Claude Opus 5 (claude-opus-5)
Claude Opus 4.8 (claude-opus-4-8)
Claude Opus 4.7 (claude-opus-4-7)
Claude Opus 4.6 (claude-opus-4-6)
Claude Sonnet 5 (claude-sonnet-5)
Claude Opus 4.7 (claude-opus-4-7) Claude Mythos 5.1 (claude-mythos-5-1)
Claude Fable 5.1 (claude-fable-5-1)
Claude Mythos 5 (claude-mythos-5)
Claude Fable 5 (claude-fable-5)
Claude Opus 5 (claude-opus-5)
Claude Opus 4.8 (claude-opus-4-8)
Claude Opus 4.7 (claude-opus-4-7)
Claude Opus 4.8 (claude-opus-4-8) Claude Mythos 5.1 (claude-mythos-5-1)
Claude Fable 5.1 (claude-fable-5-1)
Claude Mythos 5 (claude-mythos-5)
Claude Fable 5 (claude-fable-5)
Claude Opus 5 (claude-opus-5)
Claude Opus 4.8 (claude-opus-4-8)
Claude Opus 4.7 (claude-opus-4-7)
Claude Opus 5 (claude-opus-5) Claude Mythos 5.1 (claude-mythos-5-1)
Claude Fable 5.1 (claude-fable-5-1)
Claude Mythos 5 (claude-mythos-5)
Claude Fable 5 (claude-fable-5)
Claude Opus 5 (claude-opus-5)
Claude Fable 5 (claude-fable-5) Claude Mythos 5.1 (claude-mythos-5-1)
Claude Fable 5.1 (claude-fable-5-1)
Claude Mythos 5 (claude-mythos-5)
Claude Fable 5 (claude-fable-5)
Claude Opus 5 (claude-opus-5)
Claude Mythos 5 (claude-mythos-5) Claude Mythos 5.1 (claude-mythos-5-1)
Claude Fable 5.1 (claude-fable-5-1)
Claude Mythos 5 (claude-mythos-5)
Claude Fable 5 (claude-fable-5)
Claude Opus 5 (claude-opus-5)
Claude Fable 5.1 (claude-fable-5-1) Claude Mythos 5.1 (claude-mythos-5-1)
Claude Fable 5.1 (claude-fable-5-1)
Claude Mythos 5.1 (claude-mythos-5-1) Claude Mythos 5.1 (claude-mythos-5-1)
Claude Fable 5.1 (claude-fable-5-1)

유효하지 않은 쌍을 요청하면 API가 지원되지 않는 조합을 이름으로 알리는 400 invalid_request_error를 돌려줘요.

플랫폼 가용성

어드바이저 도구는 Claude API와 Claude Platform on AWS에서 베타로 쓸 수 있어요. 현재 Amazon Bedrock, Google Cloud, Microsoft Foundry에서는 사용할 수 없어요.

Claude Managed Agents에서의 어드바이저

Claude Managed Agents 세션도 어드바이저를 지원해요. 다만 도구 정의가 아니라 에이전트의 일부로 구성해요. 에이전트의 멀티에이전트 로스터에 {"type": "advisor", "model": ...} 항목을 추가하면, 세션의 기본 스레드가 턴 도중에 그 모델과 상의할 수 있어요. 로스터 항목은 max_uses, max_tokens, caching 옵션을 받지 않고, 조언은 응답의 advisor_tool_result 블록이 아니라 세션의 이벤트 스트림에서 스레드 이벤트로 전달돼요. 자세한 내용은 세션에 어드바이저 부여하기를 참고해요.


출처: Claude Platform Docs — Advisor tool