Effort
Effort (Effort)
effort 매개변수로 Claude가 요청에 응답할 때 사용하는 토큰 수를 제어할 수 있어요. 단일 모델로 응답의 철저함과 토큰 효율성 사이를 트레이드오프할 수 있어요. 최상위 effort 매개변수는 베타 헤더 없이 지원되는 모든 모델에서 사용할 수 있어요.
출처: 문서
본문
effort 매개변수로 Claude가 요청에 응답할 때 얼마나 많은 토큰을 사용할지 제어할 수 있어요. 단일 모델로 응답 철저함과 토큰 효율성 사이를 트레이드오프할 수 있어요. 최상위 effort 매개변수는 베타 헤더 없이 지원되는 모든 모델에서 사용할 수 있어요. 대화 중간 effort 변경은 베타예요.
팁: effort가 thinking과 어떻게 상호작용하는지, 어떤 컨트롤을 써야 하는지는 Thinking과 effort를 참고하세요. 적응형 thinking을 사용할 수 있는 곳에서는 effort가 thinking 깊이를 제어하는 권장 방법이에요.
effort 수준 설정하기
요청에 output_config.effort를 설정하세요. 다음 예시는 medium effort로 요청 하나를 실행하고 응답 텍스트를 인쇄해요.
ant messages create \
--model claude-opus-5-5 \
--max-tokens 4096 \
--output-config '{effort: medium}' \
--message '{role: user, content: "Analyze the trade-offs between microservices and monolithic architectures"}' \
--transform 'content.#(type=="text").text' \
--raw-output
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-5-5",
max_tokens=4096,
messages=[
{
"role": "user",
"content": "Analyze the trade-offs between microservices and monolithic architectures",
}
],
output_config={"effort": "medium"},
)
for block in response.content:
if block.type == "text":
print(block.text)
const client = new Anthropic();
const response = await client.messages.create({
model: "claude-opus-5-5",
max_tokens: 4096,
messages: [
{
role: "user",
content: "Analyze the trade-offs between microservices and monolithic architectures"
}
],
output_config: {
effort: "medium"
}
});
const textBlock = response.content.find(
(block): block is Anthropic.TextBlock => block.type === "text"
);
console.log(textBlock?.text);
AnthropicClient client = new();
var parameters = new MessageCreateParams
{
Model = Model.ClaudeOpus5_5,
MaxTokens = 4096,
Messages = [
new() {
Role = Role.User,
Content = "Analyze the trade-offs between microservices and monolithic architectures"
}
],
OutputConfig = new OutputConfig
{
Effort = Effort.Medium
}
};
var message = await client.Messages.Create(parameters);
Console.WriteLine(message);
client := anthropic.NewClient()
response, err := client.Messages.New(context.TODO(), anthropic.MessageNewParams{
Model: anthropic.ModelClaudeOpus5_5,
MaxTokens: 4096,
Messages: []anthropic.MessageParam{
anthropic.NewUserMessage(anthropic.NewTextBlock("Analyze the trade-offs between microservices and monolithic architectures")),
},
OutputConfig: anthropic.OutputConfigParam{
Effort: anthropic.OutputConfigEffortMedium,
},
})
if err != nil {
log.Fatal(err)
}
for _, block := range response.Content {
if textBlock, ok := block.AsAny().(anthropic.TextBlock); ok {
fmt.Println(textBlock.Text)
}
}
import com.anthropic.models.messages.OutputConfig;
void main() {
AnthropicClient client = AnthropicOkHttpClient.fromEnv();
MessageCreateParams params = MessageCreateParams.builder()
.model(Model.CLAUDE_OPUS_5_5)
.maxTokens(4096L)
.addUserMessage("Analyze the trade-offs between microservices and monolithic architectures")
.outputConfig(OutputConfig.builder()
.effort(OutputConfig.Effort.MEDIUM)
.build())
.build();
Message response = client.messages().create(params);
response.content().stream()
.flatMap(block -> block.text().stream())
.forEach(textBlock -> IO.println(textBlock.text()));
}
$client = new Client();
$message = $client->messages->create(
maxTokens: 4096,
messages: [
['role' => 'user', 'content' => 'Analyze the trade-offs between microservices and monolithic architectures']
],
model: 'claude-opus-5-5',
outputConfig: ['effort' => 'medium'],
);
foreach ($message->content as $block) {
if ($block->type === 'text') {
echo $block->text, PHP_EOL;
}
}
client = Anthropic::Client.new
message = client.messages.create(
model: "claude-opus-5-5",
max_tokens: 4096,
messages: [
{ role: "user", content: "Analyze the trade-offs between microservices and monolithic architectures" }
],
output_config: {
effort: "medium"
}
)
message.content.each do |block|
puts block.text if block.type == :text
end
effort가 동작하는 방식
대부분 Claude 모델은 기본적으로 high effort로, 훌륭한 결과를 위해 필요한 만큼 토큰을 사용해요. Claude Opus 5.5는 medium을 기본으로 해요. effort 수준을 max로 올려 절대 최고 능력을 얻거나, 속도와 비용을 최적화하면서 일부 능력 감소를 수용해 토큰 사용을 더 보수적으로 low로 낮출 수 있어요.
팁:
effort를 모델 기본값(Claude Opus 5.5에서는"medium", 다른 모델에서는"high")으로 설정하면effort매개변수를 아예 생략한 것과 정확히 같은 동작을 만들어요.
effort 매개변수는 응답의 모든 토큰에 영향을 줘요. 다음을 포함해서요:
- 텍스트 응답과 설명
- 도구 호출과 함수 인자
- Thinking(활성화 시)
effort는 모든 출력 토큰에 적용되므로 thinking이 활성화되었든 아니든 동작해요. 낮은 effort는 또한 더 적고 간결한 도구 호출을 의미해요.
Effort 수준 (Effort levels)
| 수준 | 설명 | 전형적인 사용 사례 |
|---|---|---|
max |
토큰 지출에 제약이 없는 절대 최대 능력. Claude Fable 5.1, Claude Mythos 5.1, Claude Fable 5, Claude Mythos 5, Claude Mythos Preview, Claude Opus 5.5, Claude Opus 5, Claude Opus 4.8, Claude Opus 4.7, Claude Opus 4.6, Claude Sonnet 5, Claude Sonnet 4.6에서 사용 가능. | 가장 깊은 추론과 가장 철저한 분석을 요구하는 작업 |
xhigh |
장기 작업을 위한 확장 능력. Claude Fable 5.1, Claude Mythos 5.1, Claude Fable 5, Claude Mythos 5, Claude Opus 5.5, Claude Opus 5, Claude Opus 4.8, Claude Opus 4.7, Claude Sonnet 5에서 사용 가능. | 수백만 수준 토큰 예산의 장기 에이전트·코딩 작업(30분 초과) |
high |
훌륭한 결과를 위해 작업이 필요한 만큼 토큰 사용. Claude Opus 5.5를 제외한 effort를 지원하는 모든 모델의 기본값. | 복잡한 추론, 어려운 코딩 문제, 에이전트 작업 |
medium |
적당한 토큰 절감을 가진 균형 잡힌 접근. Claude Opus 5.5의 기본값. | 속도, 비용, 성능의 균형이 필요한 에이전트 작업 |
low |
가장 효율적. 일부 능력 감소가 있지만 상당한 토큰 절감. | 최고의 속도와 최저 비용이 필요한 더 단순한 작업(서브에이전트 등) |
max를 지원하는 모든 모델이 xhigh를 지원하는 것은 아니에요.
참고: effort는 엄격한 토큰 예산이 아니라 행동 신호예요. 낮은 effort 수준에서도 Claude는 충분히 어려운 문제에 대해 여전히 생각하지만, 같은 문제에 대해 높은 effort 수준보다는 덜 생각해요.
다음 모델별 권장 사항은 다를 때 이 표를 덮어써요.
Claude Fable 5.1의 권장 effort 수준
Claude Fable 5.1은 다섯 effort 수준을 모두 지원해요. 기본값인 high에서 시작하세요. 가장 능력 민감한 에이전트·코딩 작업에는 xhigh나 max로 올리고, 평가가 품질이 유지됨을 보여주면 일상적이거나 지연 민감한 작업에는 medium이나 low로 내리세요. high 이상에서는 큰 max_tokens를 설정하세요. 그것은 총 출력(thinking + 응답 텍스트)에 대한 하드 한도예요. 같은 권장 사항이 Claude Mythos 5.1에도 적용돼요. Claude Fable 5.1 프롬프팅 참고.
Claude Fable 5.1은 또한 메시지별 output_config로 대화 중간 effort 변경을 지원하며, 이는 프롬프트 캐시를 보존해요.
Claude Fable 5의 권장 effort 수준
effort는 Claude Fable 5에서 지능, 지연, 비용을 트레이드오프하는 주요 컨트롤이에요. 대부분 작업에 기본값인 high에서 시작하고, 가장 능력 민감한 워크로드에는 xhigh를, 일상 작업에는 medium이나 low로 내리세요. Claude Fable 5에서 낮은 effort 설정도 여전히 잘 수행하며 종종 이전 모델의 xhigh 성능을 초과해요. high와 xhigh에서 큰 max_tokens를 설정하세요. 그것은 총 출력(thinking + 응답 텍스트)에 대한 하드 한도예요. 비용 제어 참고.
작업이 완료되지만 필요한 것보다 오래 걸리거나 더 빠르고 상호작용적인 작업 스타일을 원하면 effort를 줄이세요. 같은 권장 사항이 Claude Mythos 5에 적용돼요. 더 자세한 지침은 Claude Fable 5 프롬프팅을 참고하세요.
Claude Opus 5.5의 권장 effort 수준
Claude Opus 5.5는 다섯 effort 수준을 모두 지원하고 medium이 기본값이에요(Claude Opus 5와 이전 Opus 모델은 high를 기본으로 하므로 effort를 생략한 요청은 Claude Opus 5에서보다 한 수준 낮게 실행돼요). 적응형 thinking은 항상 켜져 있고 끌 수 없으므로, effort가 모델이 얼마나 추론하는지와 요청의 비용을 위한 주요 컨트롤이에요. 이전 모델에서 설정을 가져오는 대신 평가에서 effort 스윕을 실행하고, 더 높은 수준에서는 큰 max_tokens를 설정하세요. 그것은 총 출력(thinking + 응답 텍스트)에 대한 하드 한도예요. thinking: {"type": "disabled"}를 설정한 요청은 모든 effort 수준에서 400 오류를 반환해요. Claude Opus 5.5는 또한 메시지별 output_config로 대화 중간 effort 변경을 지원하며, 이는 프롬프트 캐시를 보존해요. Claude Opus 5.5 프롬프팅 참고.
Claude Opus 5의 권장 effort 수준
Claude Opus 5는 다섯 effort 수준을 모두 지원해요. 기본값인 high에서 시작하고 평가에 따라 조정하세요: 까다로운 코딩·에이전트 작업에는 xhigh로, 작업이 제약 없는 토큰 지출을 정당화하면 max로 올리고, 평가가 품질 유지를 보여주는 곳에서는 토큰 비용과 응답 시간을 위한 주요 컨트롤로 low와 medium을 넉넉히 사용하세요. 이전 모델에서 effort 설정을 가져왔다면 재사용하는 대신 평가에서 새 effort 스윕을 실행하세요.
effort는 thinking 볼륨을 제어하지, 보이는 응답 길이를 제어하지 않아요. Claude Opus 5에서 effort를 바꿔도 응답이 안정적으로 짧아지지 않으므로, 대신 길이를 프롬프트하세요.
API 기본값은 high예요. 다른 수준을 쓰려면 effort를 명시적으로 설정하세요. 전달하는 값이 기본값을 덮어써요.
Claude Opus 5에서 xhigh나 max effort에서는 thinking을 비활성화할 수 없어요. 그 수준에서 thinking: {"type": "disabled"}를 설정한 요청은 400 오류를 반환해요. thinking과 함께하는 effort 참고.
Claude Opus 5를 xhigh나 max effort로 실행할 때 큰 max_tokens를 설정해 모델이 서브에이전트와 도구 호출에 걸쳐 생각하고 행동할 공간을 갖게 하세요. 64k 토큰에서 시작해 조정하는 것이 합리적인 기본값이에요.
Claude Opus 5는 또한 메시지별 output_config로 대화 중간 effort 변경을 지원하며, 이는 프롬프트 캐시를 보존해요.
Claude Opus 4.8의 권장 effort 수준
Claude Opus 4.7의 지침이 Claude Opus 4.8에도 적용돼요. 코딩과 에이전트 사용 사례에는 xhigh에서 시작하고, 대부분의 다른 지능 민감 워크로드에는 high를 사용하며, 낮은 수준이 평가에서 품질을 유지함을 측정했을 때만 medium이나 low로 내리세요.
API 기본값은 high예요. 다른 수준을 쓰려면 effort를 명시적으로 설정하세요. 전달하는 값이 기본값을 덮어써요.
Claude Opus 4.8을 xhigh나 max effort로 실행할 때 큰 max_tokens를 설정해 모델이 서브에이전트와 도구 호출에 걸쳐 생각하고 행동할 공간을 갖게 하세요. 64k 토큰에서 시작해 조정하는 것이 합리적인 기본값이에요.
Claude Opus 4.7의 권장 effort 수준
코딩과 에이전트 사용 사례에는 xhigh에서 시작하고, 대부분의 지능 민감 워크로드에는 high를 최소로 사용하세요. 비용 민감 워크로드에는 medium으로, 평가가 xhigh에서 측정 가능한 여지(headroom)를 보여줄 때만 max로 올리세요.
API 기본값은 high예요. xhigh를 쓰려면 effort를 명시적으로 설정하세요. 전달하는 값이 기본값을 덮어써요.
| Effort | Claude Opus 4.7 지침 |
|---|---|
low |
효율적이지만 짧고 범위가 한정된 작업에 최선. 작업에 여러 섹션이 있으면 low를 명시적 체크리스트와 짝지으세요. |
medium |
비용을 줄이면서 좋은 결과를 원하는 평균 워크플로의 대체재. |
high |
지능과 토큰 소비의 균형이 여전히 필요한 고급 사용 사례. 흔히 품질과 토큰 효율의 최상의 균형. |
xhigh |
코딩·에이전트 작업과 반복적 도구 호출, 상세 웹 검색, 지식 베이스 검색 같은 탐색적 작업의 권장 시작점. high보다 현저히 높은 토큰 사용 기대. |
max |
프런티어 문제를 위해 아껴두세요. 대부분 워크로드에서 max는 상대적으로 작은 품질 이득에 상당한 비용을 더하고, 일부 구조화된 출력이나 지능 덜 민감한 작업에서는 과도한 생각(overthinking)으로 이어질 수 있어요. |
Claude Opus 4.7은 또한 Claude Opus 4.6보다, 특히 low와 medium에서 effort 수준을 더 엄격히 지켜요. 낮은 effort 수준에서 모델은 요청된 것보다 더 하지 않고 요청된 것으로 작업 범위를 한정해요. Claude Opus 4.7로 복잡한 문제에서 얕은 추론이 관찰되면, 프롬프트로 우회하는 대신 effort를 올리세요. 지연 때문에 effort를 낮게 유지해야 한다면 "This task involves multistep reasoning. Think carefully before responding." 같은 목표 지침을 추가하세요.
Claude Opus 4.7을 xhigh나 max effort로 실행할 때 큰 max_tokens를 설정해 모델이 서브에이전트와 도구 호출에 걸쳐 생각하고 행동할 공간을 갖게 하세요. 64k 토큰에서 시작해 조정하는 것이 합리적인 기본값이에요.
Claude Sonnet 5의 권장 effort 수준
Claude Sonnet 5는 Claude API와 Claude Code에서 high effort를 기본으로 해요.
- High effort (기본): 속도나 비용보다 품질이 중요한 복잡한 추론, 코딩, 에이전트 작업에 적합.
- Xhigh effort: 가장 어려운 코딩·에이전트 작업용. Claude Sonnet 5 프롬프팅 참고.
- Medium effort: 기본값에서 내려가는 비용 절감 단계. high effort의 Claude Sonnet 4.6과 비슷.
- Low effort: 고용량 또는 지연 민감 워크로드용. 더 빠른 처리 시간을 우선시하는 채팅과 비코딩 사용 사례에 적합.
- Max effort: 토큰 지출에 제약이 없는 절대 최고 능력을 요구하는 작업용.
Claude Sonnet 4.6의 권장 effort 수준
Sonnet 4.6은 high effort를 기본으로 해요. Sonnet 4.6을 쓸 때 예상치 못한 지연을 피하려면 effort를 명시적으로 설정하세요:
- Medium effort (권장 기본): 대부분 애플리케이션에 최상의 속도·비용·성능 균형. 에이전트 코딩, 도구 중심 워크플로, 코드 생성에 적합.
- Low effort: 고용량 또는 지연 민감 워크로드용. 더 빠른 처리 시간을 우선시하는 채팅과 비코딩 사용 사례에 적합.
- High effort: 속도나 비용보다 품질이 중요한 복잡한 추론과 작업용.
- Max effort: 토큰 지출에 제약이 없는 절대 최고 능력을 요구하는 작업용.
도구 사용과 함께하는 effort
도구를 사용할 때 effort 매개변수는 도구 호출 주변의 설명과 도구 호출 자체 둘 다에 영향을 줘요. 낮은 effort 수준은 경향이 있어요:
- 여러 작업을 더 적은 도구 호출로 결합
- 더 적은 도구 호출
- 서문 없이 직접 행동
- 완료 후 간결한 확인 메시지 사용
높은 effort 수준은 다음을 할 수 있어요:
- 더 많은 도구 호출
- 행동 전에 계획 설명
- 변경의 상세한 요약 제공
- 더 포괄적인 코드 주석 포함
thinking과 함께하는 effort
thinking 매개변수는 Claude가 답변 전에 thinking 블록에서 생각할지 제어해요. effort 매개변수는 Claude가 전체 응답에 얼마나 많은 작업을 투입하는지 제어하는데, 적응형 모드에서는 얼마나 자주·얼마나 깊이 생각하는지를 포함해요. effort 값으로 adaptive를 전달하지 마세요. adaptive는 thinking 모드이지 effort 수준이 아니에요.
더 높은 effort 수준에서 Claude는 더 쉽게 그리고 더 길게 생각해요. 도구 사용 루프에서 도구 결과만 처리하는 후속 요청은 어떤 수준에서든 thinking을 건너뛸 수 있어요. 더 낮은 수준에서 Claude는 더 단순한 문제에 대해 thinking을 완전히 건너뛸 수 있어요. 두 컨트롤이 함께 작동하는 방식의 전체 지침은 Thinking과 effort를 참고하세요.
Claude Opus 4.5(확장 thinking 전용이면서 effort를 지원하는 유일한 모델)에서는 budget_tokens과 함께 작동해요. 작업에 effort 수준을 설정한 다음, 작업이 필요로 하는 추론 깊이에 따라 thinking 토큰 예산을 설정하세요.
모델별 thinking 가용성은 모델별 구성 표를 참고하세요. Effort는 thinking 유무와 관계없이 작동해요. effort가 동작하는 방식 참고.
대화 중간 effort 변경하기
대화의 이후 턴을 다른 effort 수준으로 실행하는 방법은 두 가지예요. Claude Fable 5.1, Claude Mythos 5.1, Claude Opus 5.5, Claude Opus 5에서는 메시지별 effort 변경을 사용하세요. 이것은 프롬프트 캐시를 유지해요. 다른 모델에서는 다음 요청에 새 최상위 값을 설정하세요. 이것은 캐시를 처음부터 다시 시작해요.
메시지별 effort (베타)
메시지별 effort는 베타이며 베타 헤더 mid-conversation-output-config-2026-07-01이 필요해요. Claude Fable 5를 포함한 메시지별 effort가 없는 모델은 400 오류를 반환해요: output_config.effort requires a model that supports per-turn effort; this model does not.
빈 content와 새 수준을 output_config.effort에 담은 role: "system" 메시지를 추가하세요. 새 수준은 다음 user 턴부터 적용되고 이후 메시지가 바꿀 때까지 유지돼요. 그 메시지 이전의 모든 것은 변경되지 않으므로, 캐시된 접두사가 여전히 일치해요.
다음 예시는 high에서 시작한 다음 일상적인 후속 질문에 low로 내려요:
ant beta:messages create --beta mid-conversation-output-config-2026-07-01 \
--transform 'content.#(type=="text").text' --raw-output <<'YAML'
model: claude-fable-5-1
max_tokens: 4096
output_config:
effort: high
messages:
- role: user
content: Plan a migration from SQLite to PostgreSQL in three short steps.
- role: assistant
content: "1. Export the SQLite data. 2. Create the PostgreSQL schema. 3. Import the data and verify row counts."
# Effort-only system message: the new level takes effect from the next user turn.
- role: system
content: []
output_config:
effort: low
- role: user
content: Summarize the plan in one sentence.
YAML
client = anthropic.Anthropic()
response = client.beta.messages.create(
model="claude-fable-5-1",
max_tokens=4096,
output_config={"effort": "high"},
messages=[
{
"role": "user",
"content": "Plan a migration from SQLite to PostgreSQL in three short steps.",
},
{
"role": "assistant",
"content": "1. Export the SQLite data. 2. Create the PostgreSQL schema. 3. Import the data and verify row counts.",
},
# Effort-only system message: the new level takes effect from the next user turn.
{"role": "system", "content": [], "output_config": {"effort": "low"}},
{"role": "user", "content": "Summarize the plan in one sentence."},
],
betas=["mid-conversation-output-config-2026-07-01"],
)
for block in response.content:
if block.type == "text":
print(block.text)
const client = new Anthropic();
const response = await client.beta.messages.create({
model: "claude-fable-5-1",
max_tokens: 4096,
output_config: { effort: "high" },
messages: [
{
role: "user",
content: "Plan a migration from SQLite to PostgreSQL in three short steps."
},
{
role: "assistant",
content:
"1. Export the SQLite data. 2. Create the PostgreSQL schema. 3. Import the data and verify row counts."
},
// Effort-only system message: the new level takes effect from the next user turn.
{ role: "system", content: [], output_config: { effort: "low" } },
{ role: "user", content: "Summarize the plan in one sentence." }
],
betas: ["mid-conversation-output-config-2026-07-01"]
});
for (const block of response.content) {
if (block.type === "text") {
console.log(block.text);
}
}
using Anthropic.Models.Beta;
using Anthropic.Models.Beta.Messages;
AnthropicClient client = new();
var response = await client.Beta.Messages.Create(new MessageCreateParams
{
Model = "claude-fable-5-1",
MaxTokens = 4096,
OutputConfig = new() { Effort = Effort.High },
Messages =
[
new() { Role = Role.User, Content = "Plan a migration from SQLite to PostgreSQL in three short steps." },
new() { Role = Role.Assistant, Content = "1. Export the SQLite data. 2. Create the PostgreSQL schema. 3. Import the data and verify row counts." },
// Effort-only system message: the new level takes effect from the next user turn.
new()
{
Role = Role.System,
Content = new([]),
OutputConfig = new() { Effort = BetaSystemMessageOutputConfigEffort.Low },
},
new() { Role = Role.User, Content = "Summarize the plan in one sentence." },
],
Betas = [AnthropicBeta.MidConversationOutputConfig2026_07_01],
});
foreach (var block in response.Content)
{
if (block.TryPickText(out var textBlock))
{
Console.WriteLine(textBlock.Text);
}
}
client := anthropic.NewClient()
response, err := client.Beta.Messages.New(context.Background(), anthropic.BetaMessageNewParams{
Model: "claude-fable-5-1",
MaxTokens: 4096,
OutputConfig: anthropic.BetaOutputConfigParam{
Effort: anthropic.BetaOutputConfigEffortHigh,
},
Messages: []anthropic.BetaMessageParam{
anthropic.NewBetaUserMessage(anthropic.NewBetaTextBlock("Plan a migration from SQLite to PostgreSQL in three short steps.")),
{
Role: anthropic.BetaMessageParamRoleAssistant,
Content: []anthropic.BetaContentBlockParamUnion{anthropic.NewBetaTextBlock("1. Export the SQLite data. 2. Create the PostgreSQL schema. 3. Import the data and verify row counts.")},
},
// Effort-only system message: the new level takes effect from the next user turn.
anthropic.NewBetaSystemMessage(anthropic.BetaSystemMessageOutputConfigParam{
Effort: anthropic.BetaSystemMessageOutputConfigEffortLow,
}),
anthropic.NewBetaUserMessage(anthropic.NewBetaTextBlock("Summarize the plan in one sentence.")),
},
Betas: []anthropic.AnthropicBeta{anthropic.AnthropicBetaMidConversationOutputConfig2026_07_01},
})
if err != nil {
log.Fatal(err)
}
for _, block := range response.Content {
if textBlock, ok := block.AsAny().(anthropic.BetaTextBlock); ok {
fmt.Println(textBlock.Text)
}
}
import com.anthropic.models.beta.AnthropicBeta;
import com.anthropic.models.beta.messages.BetaMessage;
import com.anthropic.models.beta.messages.BetaMessageParam;
import com.anthropic.models.beta.messages.BetaOutputConfig;
import com.anthropic.models.beta.messages.BetaSystemMessageOutputConfig;
import com.anthropic.models.beta.messages.MessageCreateParams;
void main() {
AnthropicClient client = AnthropicOkHttpClient.fromEnv();
MessageCreateParams params = MessageCreateParams.builder()
.model("claude-fable-5-1")
.maxTokens(4096L)
.addBeta(AnthropicBeta.MID_CONVERSATION_OUTPUT_CONFIG_2026_07_01)
.outputConfig(BetaOutputConfig.builder()
.effort(BetaOutputConfig.Effort.HIGH)
.build())
.addUserMessage("Plan a migration from SQLite to PostgreSQL in three short steps.")
.addAssistantMessage("1. Export the SQLite data. 2. Create the PostgreSQL schema. 3. Import the data and verify row counts.")
// Effort-only system message: the new level takes effect from the next user turn.
.addMessage(BetaMessageParam.builder()
.role(BetaMessageParam.Role.SYSTEM)
.contentOfBetaContentBlockParams(List.of())
.outputConfig(BetaSystemMessageOutputConfig.builder()
.effort(BetaSystemMessageOutputConfig.Effort.LOW)
.build())
.build())
.addUserMessage("Summarize the plan in one sentence.")
.build();
BetaMessage response = client.beta().messages().create(params);
response.content().stream()
.flatMap(block -> block.text().stream())
.forEach(textBlock -> IO.println(textBlock.text()));
}
use Anthropic\Beta\AnthropicBeta;
use Anthropic\Beta\Messages\BetaMessageParam;
use Anthropic\Beta\Messages\BetaOutputConfig;
use Anthropic\Beta\Messages\BetaSystemMessageOutputConfig;
use Anthropic\Client;
$client = new Client();
$response = $client->beta->messages->create(
model: 'claude-fable-5-1',
maxTokens: 4096,
outputConfig: BetaOutputConfig::with(effort: 'high'),
messages: [
BetaMessageParam::with(role: 'user', content: 'Plan a migration from SQLite to PostgreSQL in three short steps.'),
BetaMessageParam::with(role: 'assistant', content: '1. Export the SQLite data. 2. Create the PostgreSQL schema. 3. Import the data and verify row counts.'),
// Effort-only system message: the new level takes effect from the next user turn.
BetaMessageParam::with(
role: 'system',
content: [],
outputConfig: BetaSystemMessageOutputConfig::with(effort: 'low'),
),
BetaMessageParam::with(role: 'user', content: 'Summarize the plan in one sentence.'),
],
betas: [AnthropicBeta::MID_CONVERSATION_OUTPUT_CONFIG_2026_07_01],
);
foreach ($response->content as $block) {
if ($block->type === 'text') {
echo $block->text, PHP_EOL;
}
}
client = Anthropic::Client.new
response = client.beta.messages.create(
model: "claude-fable-5-1",
max_tokens: 4096,
output_config: {effort: :high},
messages: [
{role: "user", content: "Plan a migration from SQLite to PostgreSQL in three short steps."},
{role: "assistant", content: "1. Export the SQLite data. 2. Create the PostgreSQL schema. 3. Import the data and verify row counts."},
# Effort-only system message: the new level takes effect from the next user turn.
{role: "system", content: [], output_config: {effort: :low}},
{role: "user", content: "Summarize the plan in one sentence."}
],
betas: [Anthropic::AnthropicBeta::MID_CONVERSATION_OUTPUT_CONFIG_2026_07_01]
)
response.content.each do |block|
puts block.text if block.type == :text
end
effort 전용 시스템 메시지는 텍스트를 지니지 않으므로, 대화 중간 시스템 메시지의 배치 규칙이 적용되지 않아요. messages의 어디에나 나타날 수 있어요. 첫 항목이나 assistant 턴과 다음 user 턴 사이에도 말이에요. 값은 수준 이름들(low, medium, high, xhigh, max)이에요.
Claude Fable 5.1에서는 요청 사이에 최상위 값을 바꾸는 것보다 이 형식을 선호하세요. 최상위 변경은 캐시를 재시작하고 모델을 덜 안정적으로 조종해요. 그것의 이전 응답은 이전 수준에서 작성되었고, 그것과 일관성을 유지하는 경향이 있어요.
다음 요청의 최상위 effort
최상위 output_config.effort는 요청 전체에 적용돼요. 대화의 이후 부분을 다른 수준으로 실행하려면 다음 요청에 새 값을 설정하세요. 최상위 effort는 렌더링된 프롬프트를 형성하므로, 요청 사이에 바꾸면 이전 턴의 캐시된 접두사가 보존되지 않아요. 긴 세션 동안 프롬프트 캐싱에 의존하고 모델이 메시지별 effort를 지원하지 않으면, 처음에 effort 수준을 고르고 일정하게 유지하세요.
모범 사례 (Best practices)
- effort를 명시적으로 설정: API는 기본적으로
high예요(Claude Opus 5.5에서는medium). 하지만 올바른 시작점은 모델과 워크로드에 달려 있어요. - 속도 민감하거나 단순한 작업에는 low 사용: 지연이 중요하거나 작업이 단순할 때 low effort가 응답 시간과 비용을 크게 줄일 수 있어요.
- 사용 사례를 테스트: effort 수준의 영향은 작업 유형에 따라 달라져요. 배포 전에 특정 사용 사례에서 성능을 평가하세요.
- 동적 effort 고려: 작업 복잡성에 따라 effort를 조정하세요. 단순한 질의는 low effort에 적합할 수 있고, 에이전트 코딩과 복잡한 추론은 high effort에서 이익을 봐요. 한 대화 안에서 바꾸기 전에 다음 항목을 참고하세요.
- 캐시된 대화 안에서는 최상위 effort를 일정하게 유지: 요청 사이에 최상위 effort 값을 바꾸면 프롬프트 캐싱을 무효화해요. 따라서 캐시 히트에 의존하는 대화 안에서는 바꾸지 말고 워크로드에 걸쳐 바꾸세요. 지원하는 모델에서는 캐시를 보존하는 메시지별 effort 변경을 대신 사용하세요. Thinking과 프롬프트 캐싱 참고.