빠른 모드
빠른 모드 (Fast mode, research preview)
빠른 모드는 지원되는 Claude Opus 모델에서 초당 최대 2.5배 더 많은 출력 토큰을 프리미엄 가격으로 제공해요. 요청에 fast-mode-2026-02-01 베타 헤더와 함께 speed: "fast"를 설정해서 옵트인해요. 이 기능은 연구 미리보기 상태이며 계정 매니저에게 접근을 요청해야 해요.
출처: 문서
본문
빠른 모드는 Claude Opus 5.5, Claude Opus 5, Claude Opus 4.8에서 초당 최대 2.5배 더 높은 출력 토큰을 프리미엄 가격으로 제공해요. 요청에 fast-mode-2026-02-01 베타 헤더와 함께 speed: "fast"를 설정해서 옵트인하세요.
참고: 빠른 모드는 연구 미리보기 상태예요. 계정 매니저에게 접근을 요청하세요. 계정 매니저가 없다면 빠른 모드의 대기열에 등록하세요.
참고: 이 기능에 ZDR(제로 데이터 보존)이 어떻게 적용되는지 알아보려면 API와 데이터 보존을 참고하세요.
지원 모델 (Supported models)
빠른 모드는 다음 모델에서 지원돼요:
- Claude Opus 5.5 (claude-opus-5-5)
- Claude Opus 5 (claude-opus-5)
- Claude Opus 4.8 (claude-opus-4-8)
참고: Claude Opus 5.5, Claude Opus 5, Claude Opus 4.8의 빠른 모드는 Claude Managed Agents를 포함한 Claude API에서만 연구 미리보기로 사용할 수 있어요. Amazon Bedrock, Claude Platform on AWS, Google Cloud, Microsoft Foundry에서는 사용할 수 없어요.
참고: 빠른 모드는 Claude Opus 4.7에서는 사용할 수 없어요.
claude-opus-4-7에speed: "fast"를 설정한 요청은 오류를 반환해요. Claude Opus 4.6(다음 참고 참고)과 달리 요청이 표준 속도로 폴백되지 않아요. 모델 자체는 표준 속도로 계속 사용할 수 있어요. 빠른 모드를 계속 사용하려면 Claude Opus 4.7에서 Claude Opus 5.5로 마이그레이션을 참고하세요.
참고: 빠른 모드는 Claude Opus 4.6에서는 사용할 수 없어요.
claude-opus-4-6에speed: "fast"를 설정한 요청은 오류를 반환하지 않아요. 표준 속도로 실행되고 빠른 모드의 프리미엄 요금이 아닌 표준 요금으로 청구되며, 응답은usage.speed: "standard"를 보고해요. 빠른 모드를 계속 사용하려면 Claude Opus 4.6 및 이전 Opus 모델에서 Claude Opus 5.5로 마이그레이션을 참고하세요.
빠른 모드가 동작하는 방식
빠른 모드는 더 빠른 추론 구성으로 같은 모델을 실행해요. 지능이나 능력에는 변화가 없어요.
- 표준 속도에 비해 초당 최대 2.5배 더 높은 출력 토큰
- 속도 혜택은 첫 토큰까지의 시간(TTFT)이 아니라 초당 출력 토큰(OTPS)에 집중돼요
- 같은 모델 가중치와 동작(다른 모델이 아님)
- OTPS 이득이 가장 잘 보이는 스트리밍과 호환
기본 사용법 (Basic usage)
ant beta:messages create \
--beta fast-mode-2026-02-01 \
--transform 'content.#(type=="text").text' \
--raw-output <<'YAML'
model: claude-opus-5-5
max_tokens: 4096
speed: fast
messages:
- role: user
content: Refactor this module to use dependency injection
YAML
client = anthropic.Anthropic()
response = client.beta.messages.create(
model="claude-opus-5-5",
max_tokens=4096,
speed="fast",
betas=["fast-mode-2026-02-01"],
messages=[
{"role": "user", "content": "Refactor this module to use dependency injection"}
],
)
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-opus-5-5",
max_tokens: 4096,
speed: "fast",
betas: ["fast-mode-2026-02-01"],
messages: [
{
role: "user",
content: "Refactor this module to use dependency injection"
}
]
});
const textBlock = response.content.find(
(block): block is Anthropic.Beta.Messages.BetaTextBlock => block.type === "text"
);
console.log(textBlock?.text);
AnthropicClient client = new();
var response = await client.Beta.Messages.Create(new MessageCreateParams
{
Model = "claude-opus-5-5",
MaxTokens = 4096,
Speed = Speed.Fast,
Betas = ["fast-mode-2026-02-01"],
Messages = [
new() { Role = Role.User, Content = "Refactor this module to use dependency injection" }
],
});
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.TODO(), anthropic.BetaMessageNewParams{
Model: anthropic.ModelClaudeOpus5_5,
MaxTokens: 4096,
Speed: anthropic.BetaMessageNewParamsSpeedFast,
Betas: []anthropic.AnthropicBeta{anthropic.AnthropicBetaFastMode2026_02_01},
Messages: []anthropic.BetaMessageParam{
anthropic.NewBetaUserMessage(anthropic.NewBetaTextBlock("Refactor this module to use dependency injection")),
},
})
if err != nil {
log.Fatal(err)
}
for _, block := range response.Content {
if textBlock, ok := block.AsAny().(anthropic.BetaTextBlock); ok {
fmt.Println(textBlock.Text)
}
}
AnthropicClient client = AnthropicOkHttpClient.fromEnv();
BetaMessage response = client.beta().messages().create(
MessageCreateParams.builder()
.model(Model.CLAUDE_OPUS_5_5)
.maxTokens(4096L)
.speed(MessageCreateParams.Speed.FAST)
.addBeta(AnthropicBeta.FAST_MODE_2026_02_01)
.addUserMessage("Refactor this module to use dependency injection")
.build());
response.content().stream()
.flatMap(block -> block.text().stream())
.forEach(textBlock -> IO.println(textBlock.text()));
$client = new Client();
$response = $client->beta->messages->create(
model: 'claude-opus-5-5',
maxTokens: 4096,
speed: 'fast',
betas: ['fast-mode-2026-02-01'],
messages: [
['role' => 'user', 'content' => 'Refactor this module to use dependency injection'],
],
);
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-opus-5-5",
max_tokens: 4096,
speed: "fast",
betas: ["fast-mode-2026-02-01"],
messages: [{role: "user", content: "Refactor this module to use dependency injection"}]
)
response.content.each do |block|
puts block.text if block.type == :text
end
가격 (Pricing)
빠른 모드는 전체 컨텍스트 창(200k 입력 토큰 초과 요청 포함)에 걸쳐 표준 요금에 배율을 적용해요. 다음 표는 지원 모델의 빠른 모드 가격을 보여줘요:
| 모델 | 입력 | 출력 |
|---|---|---|
| Claude Opus 5.5 | $8 USD / MTok | $40 USD / MTok |
| Claude Opus 5 / Claude Opus 4.8 | $10 USD / MTok | $50 USD / MTok |
빠른 모드 가격은 다른 가격 조정과 함께 쌓여요:
- 프롬프트 캐싱 배율이 빠른 모드 가격 위에 적용돼요
- 데이터 레지던시 배율이 빠른 모드 가격 위에 적용돼요
전체 가격 상세는 가격 페이지를 참고하세요.
속도 제한 (Rate limits)
빠른 모드는 표준 Opus 속도 제한과 분리된 전용 속도 제한이 있어요. 빠른 모드 속도 제한을 초과하면 API는 용량이 가능해질 때를 나타내는 retry-after 헤더와 함께 429 오류를 반환해요.
응답에는 빠른 모드 속도 제한 상태를 나타내는 헤더가 포함돼요:
| 헤더 | 설명 |
|---|---|
anthropic-fast-input-tokens-limit |
분당 최대 빠른 모드 입력 토큰 |
anthropic-fast-input-tokens-remaining |
남은 빠른 모드 입력 토큰 |
anthropic-fast-input-tokens-reset |
빠른 모드 입력 토큰 한도가 초기화되는 시간 |
anthropic-fast-output-tokens-limit |
분당 최대 빠른 모드 출력 토큰 |
anthropic-fast-output-tokens-remaining |
남은 빠른 모드 출력 토큰 |
anthropic-fast-output-tokens-reset |
빠른 모드 출력 토큰 한도가 초기화되는 시간 |
티어별 속도 제한은 속도 제한 페이지를 참고하세요.
어떤 속도가 사용됐는지 확인하기
응답 usage 객체에는 어떤 속도가 사용됐는지("fast" 또는 "standard")를 나타내는 speed 필드가 포함돼요. 빠른 모드를 지원하지 않는 모델에 speed: "fast"를 요청하면 오류가 반환되고, 빠른 모드의 속도 제한이나 용량을 초과해도(429 또는 529) 오류가 반환돼요. speed: "fast"가 있는 요청이 성공하면 usage.speed는 "fast"예요. Claude Opus 4.6을 사용 중이고 빠른 모드를 요청하면 동작이 독특해요. 빠른 모드를 지원하지 않는 다른 모델처럼 오류를 반환하는 대신 표준 속도로 조용히 전환돼요. Opus 4.6에서는 오류가 없지만 speed 필드는 정확히 "standard"를 보여줘요.
ant beta:messages create \
--beta fast-mode-2026-02-01 \
--transform usage.speed \
--raw-output <<'YAML'
model: claude-opus-5-5
max_tokens: 1024
speed: fast
messages:
- role: user
content: Hello
YAML
client = anthropic.Anthropic()
response = client.beta.messages.create(
model="claude-opus-5-5",
max_tokens=1024,
speed="fast",
betas=["fast-mode-2026-02-01"],
messages=[{"role": "user", "content": "Hello"}],
)
print(response.usage.speed) # "fast" or "standard"
const client = new Anthropic();
const response = await client.beta.messages.create({
model: "claude-opus-5-5",
max_tokens: 1024,
speed: "fast",
betas: ["fast-mode-2026-02-01"],
messages: [{ role: "user", content: "Hello" }]
});
console.log(response.usage.speed); // "fast" or "standard"
AnthropicClient client = new();
var response = await client.Beta.Messages.Create(new MessageCreateParams
{
Model = "claude-opus-5-5",
MaxTokens = 1024,
Speed = Speed.Fast,
Betas = ["fast-mode-2026-02-01"],
Messages = [new() { Role = Role.User, Content = "Hello" }],
});
Console.WriteLine(response.Usage.Speed); // "fast" or "standard"
client := anthropic.NewClient()
response, err := client.Beta.Messages.New(context.TODO(), anthropic.BetaMessageNewParams{
Model: anthropic.ModelClaudeOpus5_5,
MaxTokens: 1024,
Speed: anthropic.BetaMessageNewParamsSpeedFast,
Betas: []anthropic.AnthropicBeta{anthropic.AnthropicBetaFastMode2026_02_01},
Messages: []anthropic.BetaMessageParam{
anthropic.NewBetaUserMessage(anthropic.NewBetaTextBlock("Hello")),
},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(response.Usage.Speed) // "fast" or "standard"
AnthropicClient client = AnthropicOkHttpClient.fromEnv();
MessageCreateParams params = MessageCreateParams.builder()
.model(Model.CLAUDE_OPUS_5_5)
.maxTokens(1024L)
.speed(MessageCreateParams.Speed.FAST)
.addBeta(AnthropicBeta.FAST_MODE_2026_02_01)
.addUserMessage("Hello")
.build();
BetaMessage response = client.beta().messages().create(params);
IO.println(response.usage().speed().orElseThrow()); // "fast" or "standard"
$client = new Client();
$response = $client->beta->messages->create(
model: 'claude-opus-5-5',
maxTokens: 1024,
speed: 'fast',
betas: ['fast-mode-2026-02-01'],
messages: [['role' => 'user', 'content' => 'Hello']],
);
echo $response->usage->speed; // "fast" or "standard"
client = Anthropic::Client.new
response = client.beta.messages.create(
model: "claude-opus-5-5",
max_tokens: 1024,
speed: "fast",
betas: ["fast-mode-2026-02-01"],
messages: [{ role: "user", content: "Hello" }]
)
puts(response.usage.speed) # "fast" or "standard"
{
"id": "msg_01XFDUDYJgAACzvnptvVoYEL",
"type": "message",
"role": "assistant",
// ...
"usage": {
"input_tokens": 8,
"output_tokens": 12,
"speed": "fast"
}
}
조직 전체의 빠른 모드 사용량과 비용을 추적하려면 사용량 및 비용 API를 참고하세요.
재시도와 폴백 (Retries and fallback)
자동 재시도
빠른 모드 속도 제한을 초과하면 API는 retry-after 헤더와 함께 429 오류를 반환해요. Anthropic SDK는 기본적으로 이 요청들을 최대 2회까지 자동 재시도하고(max_retries로 구성 가능), 각 재시도 전에 서버가 지정한 지연을 기다려요. 빠른 모드는 지속적 토큰 보충을 사용하므로 retry-after 지연은 보통 짧고 용량이 가능해지면 요청이 성공해요.
표준 속도로 폴백
참고: 이 섹션은 빠른 모드가 속도 제한에 걸렸을 때 옵트인 클라이언트 측 폴백을 다뤄요. Claude Opus 4.6의 동작과는 별개예요. 거기서는 빠른 모드를 사용할 수 없고 요청이 자동으로 표준 속도로 실행돼요.
빠른 모드 용량을 기다리는 대신 표준 속도로 폴백하는 것을 선호한다면 속도 제한 오류를 잡아서 speed: "fast" 없이 재시도하세요. 초기 빠른 요청에 max_retries를 0으로 설정해서 자동 재시도를 건너뛰고 속도 제한 오류에 즉시 실패하게 하세요.
참고: 빠른 속도에서 표준 속도로 폴백하면 프롬프트 캐시 미스가 생겨요. 다른 속도의 요청은 캐시된 접두사를 공유하지 않아요.
max_retries를 0으로 설정하면 다른 일시적 오류(과부하, 내부 서버 오류)에 대한 재시도도 비활성화되므로, 다음 예시는 그런 경우 원래 요청을 기본 재시도로 다시 제출해요.
MESSAGE=$( create_message_with_fast_fallback fast <<'YAML' model: claude-opus-5-5 max_tokens: 1024 messages: - role: user content: Hello YAML )
```python Python
client = anthropic.Anthropic()
def create_message_with_fast_fallback(max_retries=0, max_attempts=3, **params):
try:
return client.with_options(max_retries=max_retries).beta.messages.create(
**params
)
except anthropic.RateLimitError:
if params.get("speed") == "fast":
del params["speed"]
return create_message_with_fast_fallback(max_retries=max_retries, **params)
raise
except (
anthropic.APIStatusError,
anthropic.APIConnectionError,
) as error:
if isinstance(error, anthropic.APIStatusError) and error.status_code < 500:
raise
if max_attempts > 1:
return create_message_with_fast_fallback(
max_retries=max_retries, max_attempts=max_attempts - 1, **params
)
raise
message = create_message_with_fast_fallback(
model="claude-opus-5-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello"}],
betas=["fast-mode-2026-02-01"],
speed="fast",
max_retries=0,
)
const client = new Anthropic();
async function createMessageWithFastFallback(
params: Anthropic.Beta.MessageCreateParamsNonStreaming,
requestOptions?: Anthropic.RequestOptions,
maxAttempts: number = 3
): Promise<Anthropic.Beta.Messages.BetaMessage> {
try {
return await client.beta.messages.create(params, requestOptions);
} catch (e) {
if (e instanceof Anthropic.RateLimitError && params.speed === "fast") {
const { speed, ...rest } = params;
return createMessageWithFastFallback(rest);
}
if (
e instanceof Anthropic.InternalServerError ||
e instanceof Anthropic.APIConnectionError
) {
if (maxAttempts > 1) {
return createMessageWithFastFallback(params, undefined, maxAttempts - 1);
}
}
throw e;
}
}
const message = await createMessageWithFastFallback(
{
model: "claude-opus-5-5",
max_tokens: 1024,
messages: [{ role: "user", content: "Hello" }],
betas: ["fast-mode-2026-02-01"],
speed: "fast"
},
{ maxRetries: 0 }
);
AnthropicClient client = new();
async Task<BetaMessage> CreateMessageWithFastFallback(
MessageCreateParams parameters,
int? maxRetries = null,
int maxAttempts = 3)
{
try
{
var requestClient = maxRetries is int retries
? client.WithOptions(options => options with { MaxRetries = retries })
: client;
return await requestClient.Beta.Messages.Create(parameters);
}
catch (AnthropicRateLimitException)
{
if (parameters.Speed is not null)
{
return await CreateMessageWithFastFallback(
parameters with { Speed = null });
}
throw;
}
catch (Anthropic5xxException)
{
if (maxAttempts > 1)
{
return await CreateMessageWithFastFallback(
parameters, maxAttempts: maxAttempts - 1);
}
throw;
}
}
var message = await CreateMessageWithFastFallback(
new MessageCreateParams
{
Model = "claude-opus-5-5",
MaxTokens = 1024,
Messages = [new() { Role = Role.User, Content = "Hello" }],
Betas = ["fast-mode-2026-02-01"],
Speed = Speed.Fast,
},
maxRetries: 0);
func createMessageWithFastFallback(
ctx context.Context,
client *anthropic.Client,
params anthropic.BetaMessageNewParams,
maxAttempts int,
opts ...option.RequestOption,
) (*anthropic.BetaMessage, error) {
message, err := client.Beta.Messages.New(ctx, params, opts...)
if err != nil {
var apierr *anthropic.Error
if errors.As(err, &apierr) && apierr.StatusCode == 429 && params.Speed != "" {
params.Speed = ""
return createMessageWithFastFallback(ctx, client, params, maxAttempts)
}
if (errors.As(err, &apierr) && apierr.StatusCode >= 500) || !errors.As(err, &apierr) {
if maxAttempts > 1 {
return createMessageWithFastFallback(ctx, client, params, maxAttempts-1)
}
}
return nil, err
}
return message, nil
}
func main() {
client := anthropic.NewClient()
message, err := createMessageWithFastFallback(
context.TODO(),
&client,
anthropic.BetaMessageNewParams{
Model: anthropic.ModelClaudeOpus5_5,
MaxTokens: 1024,
Messages: []anthropic.BetaMessageParam{
anthropic.NewBetaUserMessage(anthropic.NewBetaTextBlock("Hello")),
},
Speed: anthropic.BetaMessageNewParamsSpeedFast,
Betas: []anthropic.AnthropicBeta{anthropic.AnthropicBetaFastMode2026_02_01},
},
3,
option.WithMaxRetries(0),
)
if err != nil {
panic(err)
}
fmt.Println(message)
}
import com.anthropic.errors.InternalServerException;
import com.anthropic.errors.RateLimitException;
// ...
// Disable SDK auto-retry so the fallback logic below handles it
AnthropicClient client =
AnthropicOkHttpClient.builder().fromEnv().maxRetries(0).build();
BetaMessage createMessageWithFastFallback(
MessageCreateParams params, int maxAttempts) {
try {
return client.beta().messages().create(params);
} catch (RateLimitException e) {
if (params.speed().isPresent()) {
MessageCreateParams retryParams = params.toBuilder()
.speed(Optional.empty())
.build();
return createMessageWithFastFallback(retryParams, maxAttempts);
}
throw e;
} catch (InternalServerException e) {
if (maxAttempts > 1) {
return createMessageWithFastFallback(params, maxAttempts - 1);
}
throw e;
}
}
void main() {
BetaMessage message = createMessageWithFastFallback(
MessageCreateParams.builder()
.model(Model.CLAUDE_OPUS_5_5)
.maxTokens(1024L)
.addUserMessage("Hello")
.addBeta(AnthropicBeta.FAST_MODE_2026_02_01)
.speed(MessageCreateParams.Speed.FAST)
.build(),
3);
message.content().stream()
.flatMap(block -> block.text().stream())
.forEach(textBlock -> IO.println(textBlock.text()));
}
use Anthropic\Core\Exceptions\APIConnectionException;
use Anthropic\Core\Exceptions\InternalServerException;
use Anthropic\Core\Exceptions\RateLimitException;
use Anthropic\RequestOptions;
// ...
$client = new Client();
function createMessageWithFastFallback(
Client $client,
array $params,
?RequestOptions $requestOptions = null,
int $maxAttempts = 3,
) {
try {
return $client->beta->messages->create(
...$params,
requestOptions: $requestOptions,
);
} catch (RateLimitException $e) {
if (isset($params['speed'])) {
unset($params['speed']);
return createMessageWithFastFallback($client, $params);
}
throw $e;
} catch (InternalServerException | APIConnectionException $e) {
if ($maxAttempts > 1) {
return createMessageWithFastFallback(
$client, $params, maxAttempts: $maxAttempts - 1
);
}
throw $e;
}
}
$message = createMessageWithFastFallback(
$client,
[
'model' => 'claude-opus-5-5',
'maxTokens' => 1024,
'messages' => [['role' => 'user', 'content' => 'Hello']],
'betas' => ['fast-mode-2026-02-01'],
'speed' => 'fast',
],
RequestOptions::with(maxRetries: 0),
);
client = Anthropic::Client.new
def create_message_with_fast_fallback(client, request_options: {}, max_attempts: 3, **params)
client.beta.messages.create(**params, request_options: request_options)
rescue Anthropic::Errors::RateLimitError
raise unless params[:speed] == "fast"
params.delete(:speed)
create_message_with_fast_fallback(client, **params)
rescue Anthropic::Errors::InternalServerError, Anthropic::Errors::APIConnectionError
raise unless max_attempts > 1
create_message_with_fast_fallback(client, max_attempts: max_attempts - 1, **params)
end
message = create_message_with_fast_fallback(
client,
model: "claude-opus-5-5",
max_tokens: 1024,
messages: [{ role: "user", content: "Hello" }],
betas: ["fast-mode-2026-02-01"],
speed: "fast",
request_options: { max_retries: 0 }
)
고려 사항 (Considerations)
- 프롬프트 캐싱: 빠른 속도와 표준 속도 사이를 전환하면 프롬프트 캐시가 무효화돼요. 다른 속도의 요청은 캐시된 접두사를 공유하지 않아요.
- 지원 모델: 빠른 모드는 Claude Opus 5.5, Claude Opus 5, Claude Opus 4.8에서 지원돼요. 지원 모델 참고.
- TTFT: 빠른 모드의 혜택은 첫 토큰까지의 시간(TTFT)이 아니라 초당 출력 토큰(OTPS)에 집중돼요.
- 배치 API: 빠른 모드는 배치 API에서는 사용할 수 없어요.
- Priority Tier: 빠른 모드는 Priority Tier 약정과 함께 사용할 수 없어요.
- Claude Platform on AWS: 빠른 모드는 현재 Claude Platform on AWS에서는 사용할 수 없어요.