제공자별 프롬프트 캐싱 (Provider-Aware Prompt Caching)
Superdav AI Agent v1.12.0에서는 제공자별 프롬프트 캐싱(provider-aware prompt caching) 기능을 도입하여, 여러 LLM 제공자(provider)에 걸쳐 프롬프트를 캐싱함으로써 API 비용과 지연 시간(latency)을 최적화합니다. 각 제공자는 캐싱 메커니즘과 설정이 다르므로 이를 이해하는 것이 중요합니다.
개요 (Overview)
프롬프트 캐싱을 사용하면 다음 작업을 수행할 수 있습니다:
- 자주 사용되는 대용량 프롬프트를 캐싱할 수 있습니다.
- 중복 처리를 방지하여 API 비용을 절감할 수 있습니다.
- 캐시된 요청의 지연 시간을 개선할 수 있습니다.
- 캐시 수명 주기(cache lifecycle)를 명시적으로 관리할 수 있습니다.
제공자별로 캐싱 구현 방식이 다릅니다:
- Google Gemini:
cachedContentsAPI 사용 - Azure OpenAI: TTL(Time To Live)을 이용한 프롬프트 캐싱
- OpenRouter: 제공자별(Provider-specific) 캐싱
- Vertex Anthropic: 캐시 제어(cache control)를 이용한 프롬프트 캐싱
Google Gemini: cachedContents API
Google Gemini는 cachedContents API를 통해 명시적인 캐시 관리를 제공합니다.
설정 (Configuration)
$config = [
'provider' => 'google-gemini',
'model' => 'gemini-2.0-flash',
'caching' => [
'enabled' => true,
'ttl' => 3600, // 1시간은 초 단위입니다
'max_tokens' => 1000000, // 캐싱할 최대 토큰 수
],
];
캐시된 프롬프트 생성 (Creating a Cached Prompt)
use Superdav\AI\Providers\GoogleGemini;
$gemini = new GoogleGemini( $config );
$cached_content = $gemini->create_cached_content(
[
'system_prompt' => '당신은 도움이 되는 비서입니다...',
'context' => '대용량 컨텍스트 문서...',
'ttl' => 3600,
]
);
// 반환값: ['cache_id' => 'abc123', 'expires_at' => timestamp]
캐시된 프롬프트 사용 (Using a Cached Prompt)
$response = $gemini->generate(
[
'cache_id' => 'abc123',
'prompt' => '사용자 질문입니다',
]
);
캐시 수명 주기 (Cache Lifecycle)
// 캐시된 내용 목록 조회
$caches = $gemini->list_cached_contents();
// 캐시 상세 정보 가져오기
$cache = $gemini->get_cached_content( 'abc123' );
// 캐시 TTL 연장
$gemini->update_cached_content(
'abc123',
['ttl' => 7200] // 2시간으로 연장
);
// 캐시 삭제
$gemini->delete_cached_content( 'abc123' );
Gemini 모범 사례 (Best Practices for Gemini)
- 적절한 TTL 설정: 비용 절감과 캐시 오래됨(staleness) 사이의 균형을 맞추세요.
- 시스템 프롬프트 캐싱: 요청 간에 동일한 시스템 프롬프트를 재사용하세요.
- 캐시 사용량 모니터링: 어떤 캐시가 가장 많이 사용되는지 추적하세요.
- 만료된 캐시 정리: 사용하지 않는 캐시는 주기적으로 삭제하세요.
Azure OpenAI: 프롬프트 캐싱
Azure OpenAI는 자동 TTL 관리를 통해 프롬프트 캐싱을 지원합니다.
설정 (Configuration)
$config = [
'provider' => 'azure-openai',
'model' => 'gpt-4-turbo',
'api_version' => '2024-08-01-preview',
'caching' => [
'enabled' => true,
'cache_control' => 'max_age=3600',
],
];
캐싱 활성화 (Enabling Caching)
use Superdav\AI\Providers\AzureOpenAI;
$azure = new AzureOpenAI( $config );
$response = $azure->generate(
[
'system_prompt' => '당신은 도움이 되는 비서입니다...',
'context' => '대용량 컨텍스트 문서...',
'prompt' => '사용자 질문입니다',
'cache_control' => 'max_age=3600',
]
);
// 응답에는 캐시 사용 정보가 포함됩니다:
// [
// 'content' => '...',
// 'cache_creation_input_tokens' => 1000,
// 'cache_read_input_tokens' => 500,
// ]
캐시 헤더 (Cache Headers)
Azure OpenAI는 캐시 제어를 위해 HTTP 헤더를 사용합니다:
Cache-Control: max_age=3600
지원되는 값:
max_age=<seconds>: 지정된 시간 동안 캐싱no_cache: 이 요청을 캐싱하지 않음no_store: 캐싱하지 않고 재사용하지 않음
캐시 사용량 모니터링 (Monitoring Cache Usage)
$response = $azure->generate( [...] );
$cache_tokens = $response['cache_creation_input_tokens'] ?? 0;
$cache_hits = $response['cache_read_input_tokens'] ?? 0;
echo "캐시 생성: $cache_tokens 토큰\n";
echo "캐시 적중: $cache_hits 토큰\n";
Azure OpenAI 모범 사례 (Best Practices for Azure OpenAI)
- 일관된 프롬프트 사용: 동일한 프롬프트가 캐싱의 이점을 얻습니다.
- 합리적인 TTL 설정: 비용과 최신성 사이의 균형을 맞추세요.
- 캐시 메트릭 모니터링: 캐시 생성 대 적중 횟수를 추적하세요.
- 유사 요청 배치 처리: 요청을 그룹화하여 캐시 적중률을 최대화하세요.
OpenRouter: 제공자별 캐싱
OpenRouter는 하위 제공자(OpenAI, Anthropic 등)를 통해 캐싱을 지원합니다.
설정 (Configuration)
$config = [
'provider' => 'openrouter',
'model' => 'openai/gpt-4-turbo',
'caching' => [
'enabled' => true,
'provider_cache' => 'openai', // OpenAI의 캐싱 사용
],
];
OpenRouter 캐싱 사용 (Using OpenRouter Caching)
use Superdav\AI\Providers\OpenRouter;
$router = new OpenRouter( $config );
$response = $router->generate(
[
'system_prompt' => '당신은 도움이 되는 비서입니다...',
'context' => '대용량 컨텍스트 문서...',
'prompt' => '사용자 질문입니다',
'cache_control' => 'max_age=3600',
]
);
제공자별 옵션 (Provider-Specific Options)
제공자마다 캐싱 메커니즘이 다릅니다:
// OpenAI 호환 캐싱
$response = $router->generate(
[
'model' => 'openai/gpt-4-turbo',
'cache_control' => 'max_age=3600',
]
);
// Anthropic 호환 캐싱
$response = $router->generate(
[
'model' => 'anthropic/claude-3-opus',
'cache_control' => [
'type' => 'ephemeral',
'max_tokens' => 1000000,
],
]
);
OpenRouter 모범 사례 (Best Practices for OpenRouter)
- 제공자별 캐싱 이해: 각 제공자는 다른 메커니즘을 가지고 있습니다.
- 캐싱 동작 테스트: 선택한 제공자에서 캐싱이 제대로 작동하는지 확인하세요.
- 비용 모니터링: 캐싱을 통한 절감액을 추적하세요.
- 일관된 모델 사용: 모델을 변경하면 캐시 적중률이 깨집니다.
Vertex Anthropic: 캐시 제어와 함께하는 프롬프트 캐싱
Vertex Anthropic (Google Cloud)은 명시적인 캐시 제어와 함께 프롬프트 캐싱을 지원합니다.
설정 (Configuration)
$config = [
'provider' => 'vertex-anthropic',
'model' => 'claude-3-opus',
'project_id' => 'your-gcp-project',
'region' => 'us-central1',
'caching' => [
'enabled' => true,
'cache_control' => [
'type' => 'ephemeral',
'max_tokens' => 1000000,
],
],
];