СИСТЕМА КОМПЬЮТЕРНОГО ДОСТУПА

Стратегии кэширования для AI-агентов: снижение затрат без потери качества


Стратегии кэширования для AI-агентов: снижение затрат без потери качества

Ваш агент-исследователь выполняет 50 задач в день. Каждая задача начинается с одного и того же системного промпта на 3 000 токенов, одних и тех же определений инструментов на 2 500 токенов и одной и той же базы знаний на 5 000 токенов. Это 10 500 токенов, повторяющихся 50 раз — 525 000 токенов в день, которые модель читает идентично каждый раз. По стандартным ценам вы платите за обработку одного и того же контента снова и снова.

Кэширование — это оптимизация с минимальными усилиями и максимальным эффектом для производственных агентов. Только кэширование промптов может снизить стоимость входных токенов на 90% для кэшированного контента. В сочетании с кэшированием результатов инструментов можно нередко сократить общие затраты на агента вдвое — без ущерба для качества, точности или гибкости.

В этой статье вы познакомитесь с тремя уровнями кэширования для агентов — кэшированием промптов, кэшированием результатов инструментов и мемоизацией ответов — с паттернами реализации на базе API Claude и чётким анализом затрат для принятия решений.


Раздел 1: Анатомия затрат агента

Прежде чем оптимизировать, нужно понять, куда на самом деле уходят токены. Разберём типичный агентный рабочий процесс.

Распределение токенов на один шаг

В стандартной архитектуре агента каждый вызов API модели включает:

КомпонентПрибл. токеновПовторяется?
Системный промпт~1 500Каждый шаг
Определения инструментов~2 000Каждый шаг
База знаний / контекст~3 000Каждый шаг
История диалогаРастётНакапливается
Результаты инструментов~500 в среднемНа каждый вызов инструмента

Статические накладные расходы — системный промпт, определения инструментов и база знаний — составляют в сумме примерно 6 500 токенов на шаг, и они идентичны каждый раз.

Проблема накапливающихся затрат

Агенты не делают один вызов API. Они работают в цикле. Типичный запуск агента на 15 шагов выглядит так:

Без кэширования:

Каждый из 15 шагов отправляет полный контекст. Допустим, история диалога растёт в среднем на ~300 токенов за шаг:

  • Статические токены на шаг: 6 500
  • Итого статических токенов за 15 шагов: 97 500
  • Токены истории диалога (накопленные): ~33 750
  • Токены результатов инструментов: ~7 500
  • Итого входных токенов: ~138 750

По цене Claude Sonnet в $3 за миллион входных токенов это примерно $0,42 за задачу. При 50 задачах в день выходит $21/день — только на входных токенах.

С кэшированием промптов:

Кэшированные токены тарифицируются по $0,30 за миллион при чтении из кэша (скидка 90%). Если кэшировать 6 500 статических токенов:

  • Чтение кэшированных токенов за 15 шагов: 97 500 × $0,30/М = $0,029
  • Некэшированные токены по стандартной цене: ~41 250 × $3/М = $0,124
  • Запись в кэш (первый шаг): 6 500 × $3,75/М = $0,024
  • Итого стоимость входных токенов: ~$0,18 за задачу

Это снижение на 57% только за счёт кэширования. При 50 задачах в день вы экономите более $12/день — примерно $360/месяц — при минимальных изменениях в коде.


Раздел 2: Кэширование промптов с Claude

API кэширования промптов Claude — это наиболее эффективная оптимизация, которую можно применить к агентным рабочим процессам. Она позволяет сообщить API: «эта часть промпта не изменилась — используй кэшированные вычисления повторно».

Как работает кэширование промптов

Когда вы отправляете запрос с включённым кэшированием, инфраструктура Anthropic:

  1. Проверяет, существует ли кэшированная версия отмеченного префикса
  2. При промахе кэша: обрабатывает полный промпт, кэширует префикс и взимает плату за запись в кэш (надбавка 25% к стандартной цене входных токенов)
  3. При попадании в кэш: использует кэшированные вычисления, взимая только плату за чтение из кэша (скидка 90% от стандартной цены входных токенов)

Кэш имеет TTL 5 минут (Time to Live — время жизни, по истечении которого кэшированные данные устаревают). Каждое попадание в кэш сбрасывает TTL, поэтому активные агенты поддерживают кэш «тёплым» естественным образом. Пакетные задания с паузами более 5 минут между вызовами будут чаще платить за запись в кэш.

Что кэшировать

Не всё можно и нужно кэшировать. Кэшируйте стабильные, повторяющиеся префиксы:

  • Системные промпты — почти всегда идентичны между запусками. Кэшируйте их в первую очередь.
  • Определения инструментов — схемы инструментов редко меняются между вызовами.
  • Статические базы знаний — справочные документы, руководства, политики.
  • Префиксы диалогов — для многошаговых диалогов кэшируйте ранние шаги, которые не будут меняться.

Важные ограничения:

  • Кэширование основано на префиксах — можно кэшировать только контент с начала промпта, по порядку. Нельзя кэшировать секцию в середине, оставив более ранние секции некэшированными.
  • Существует минимальная длина кэшируемого контента — 1 024 токена для Claude Sonnet и Haiku (2 048 для Opus).
  • В одном запросе можно установить до 4 точек разрыва кэша.

Реализация

Ниже приведён полный пример настройки агента с кэшированием промптов:

До (без кэширования):

import anthropic
client = anthropic.Anthropic()
SYSTEM_PROMPT = """You are a research assistant specializing in market analysis.
You have access to tools for searching databases, reading files, and performing
calculations. Always cite your sources and provide confidence levels for your
findings. [... detailed instructions totaling ~1,500 tokens ...]"""
TOOLS = [
{
"name": "search_database",
"description": "Search the company database for market data, competitor info, or financial records.",
"input_schema": {
"type": "object",
"properties": {
"query": {"type": "string", "description": "Search query"},
"database": {"type": "string", "enum": ["market", "competitors", "financial"]},
"limit": {"type": "integer", "description": "Max results", "default": 10}
},
"required": ["query", "database"]
}
},
{
"name": "read_file",
"description": "Read the contents of a research file.",
"input_schema": {
"type": "object",
"properties": {
"file_path": {"type": "string", "description": "Path to the file"}
},
"required": ["file_path"]
}
},
# ... more tools totaling ~2,000 tokens in definitions
]
KNOWLEDGE_BASE = """## Company Policies and Guidelines
[... reference material totaling ~3,000 tokens ...]"""
def run_agent(user_query: str):
messages = [{"role": "user", "content": user_query}]
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=4096,
system=f"{SYSTEM_PROMPT}\n\n{KNOWLEDGE_BASE}",
tools=TOOLS,
messages=messages,
)
# Log token usage
print(f"Input tokens: {response.usage.input_tokens}")
return response

После (с кэшированием промптов):

import anthropic
client = anthropic.Anthropic()
SYSTEM_PROMPT = """You are a research assistant specializing in market analysis.
You have access to tools for searching databases, reading files, and performing
calculations. Always cite your sources and provide confidence levels for your
findings. [... detailed instructions totaling ~1,500 tokens ...]"""
KNOWLEDGE_BASE = """## Company Policies and Guidelines
[... reference material totaling ~3,000 tokens ...]"""
TOOLS = [
{
"name": "search_database",
"description": "Search the company database for market data, competitor info, or financial records.",
"input_schema": {
"type": "object",
"properties": {
"query": {"type": "string", "description": "Search query"},
"database": {"type": "string", "enum": ["market", "competitors", "financial"]},
"limit": {"type": "integer", "description": "Max results", "default": 10}
},
"required": ["query", "database"]
}
},
{
"name": "read_file",
"description": "Read the contents of a research file.",
"input_schema": {
"type": "object",
"properties": {
"file_path": {"type": "string", "description": "Path to the file"}
},
"required": ["file_path"]
},
"cache_control": {"type": "ephemeral"} # Cache breakpoint after tools
},
]
def run_agent_cached(user_query: str):
messages = [{"role": "user
---
## Связанные статьи
- [Оптимизация затрат на агентов: практическое руководство по сокращению расходов на API](/ru/blog/agent-cost-optimization-a-practical-guide-to-reducing-api-spend/)
- [Восстановление Агентов После Ошибок: 5 Паттернов для Продакшн-Надёжности](/ru/blog/agent-error-recovery-patterns/)
- [Паттерны использования инструментов: надёжные интерфейсы агент-инструмент](/ru/blog/agent-tool-use-patterns/)