К основному содержанию
скилл CX Codex

llm-cost-optimization — скилл для Claude Code: снижение затрат на LLM

Скилл для сокращения расходов на LLM API: кеширование, выбор модели под задачу, батчинг и расчёт выгоды от self-hosting.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add BagelHole/DevOps-Security-Agent-Skills --skill llm-cost-optimization -a claude-code
Открыть на GitHub

Что делает llm-cost-optimization

Скилл даёт агенту набор приёмов для работы с расходами на LLM. Внутри — трекинг затрат через LiteLLM с колбэком, который пишет стоимость по пользователю и модели в вашу аналитику, и таблица рычагов экономии: семантический кеш, подбор модели под задачу, сжатие промптов, провайдерский prompt cache, батчинг, self-hosting и квантизация.

Практическая часть — код. Маршрутизация по типу задачи отправляет классификацию и извлечение на дешёвую модель, а сложные рассуждения и генерацию кода — на дорогую. Для кеша есть пример на Redis с эмбеддингами sentence-transformers и порогом похожести, для батчинга — сборка JSONL и загрузка через Batch API, для сжатия — LLMLingua. Есть и калькулятор точки безубыточности self-hosting: он считает месячную стоимость GPU с учётом загрузки и сравнивает с текущими тратами на API.

Семантический кеш требует поднятого Redis и модели эмбеддингов, а трекинг — установленного litellm. Калькулятор принимает стоимость GPU-часа и коэффициент загрузки как аргументы, поэтому подставьте свои цифры: чужие значения по умолчанию дадут неверную точку безубыточности.

Какие задачи решает

  • посчитать, сколько тратит каждая команда на LLM
  • перевести простые задачи на дешёвую модель
  • убрать повторные вызовы через семантический кеш
  • сжать длинные промпты без потери качества
  • решить, окупится ли self-hosting

Примеры запросов агенту

  • Покажи, сколько мы тратим на LLM по командам и моделям
  • Настрой семантический кеш для повторяющихся запросов
  • Посчитай точку безубыточности self-hosting при наших текущих тратах

Как установить llm-cost-optimization

1Через Skills CLI (Vercel)

npx skills add BagelHole/DevOps-Security-Agent-Skills --skill llm-cost-optimization -a claude-code

2Вручную: положить файлы

~/.claude/skills/llm-cost-optimization/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/llm-cost-optimization/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Из того же набора127

vendor-management Оценивает безопасность сторонних поставщиков и распределяет их по четырём уровням риска. Пригодится при подготовке к аудитам SOC 2 и ISO 27001. CX Codex +1 334установок business-continuity Скилл помогает написать план непрерывности бизнеса, провести анализ влияния на процессы и расписать порядок действий при сбое. CX Codex +1 335установок aws-secrets-manager Скилл для работы с AWS Secrets Manager: создаёт секреты, настраивает ротацию и подключает их к приложениям. CX Codex +1 335установок mcp-server-security Скилл-руководство по укреплению MCP-серверов: TLS, OAuth 2.1, mTLS, валидация ввода и аудит вызовов инструментов. CX Codex +1 334установок aws-iam Скилл для работы с AWS IAM: помогает писать политики, создавать роли и настраивать доступ по принципу least-privilege прямо из агента. CX Codex +1 333установок llm-gateway Скилл помогает развернуть API-шлюз перед несколькими LLM: балансировка, лимиты, ключи, кеш и учёт расходов. CX Codex +1 333установок blue-green-deploy Скилл для настройки blue-green, canary и rolling-деплоя: переключение трафика, проверки здоровья и откат. Пригодится, когда релиз в прод нельзя ронять. CX Codex +1 332установок cloudflare-pages Разворачивает статические сайты и fullstack-приложения на Cloudflare Pages. Помогает настроить edge-функции и превью для веток. CX Codex +1 331установок

Похожие

llm-cost-optimizer Alireza Rezvani Скилл находит утечки токенов и помогает снизить расходы на LLM API без потери качества ответов. Пригодится при росте счетов за модели или перед запуском новых ИИ-эндпоинтов. 73установок cost-aware-llm-pipeline affaan-m Скилл для приложений, которые дёргают LLM API: выбирает модель по сложности задачи, считает расход и кэширует промпты. Пригодится, когда счёт за API растёт. CX Codex +1 4 600установок cx-cost-optimization coralogix Скилл помогает агенту находить причины перерасхода в Coralogix, пересматривать правила TCO и переводить телеметрию в архивное хранилище. CX Codex +1 3 300установок gke-cost-optimization официальный google Скилл помогает снижать расходы GKE: подбирает ресурсы, настраивает квоты и Spot VM. Нужен при разборе затрат кластера или workload. CX Codex 5 100установок cost-latency-optimizer patricio0312rev Скилл разбирает, куда уходят деньги и время в LLM-приложении, и предлагает кеш, выбор модели, батчинг и сжатие промптов. CX Codex +1 322установок aws-billing-and-cost-management aws Анализирует расходы в AWS, ищет резервы экономии и настраивает бюджеты. Помогает проверить аномалии цен, оценить Savings Plans и снизить затраты на инфраструктуру. CX Codex +1 9 000установок

Рядом в теме «ИИ и ML»

Всё по теме «ИИ и ML» →

Вопросы о llm-cost-optimization

Как установить llm-cost-optimization в Claude?

Выполните npx skills add BagelHole/DevOps-Security-Agent-Skills --skill llm-cost-optimization -a claude-code. Скилл окажется в ~/.claude/skills/llm-cost-optimization/SKILL.md.

Что делает llm-cost-optimization?

Помогает агенту снижать расходы на LLM: считает стоимость вызовов, подбирает модель под задачу, настраивает кеширование и батчинг, оценивает переход на self-hosted модели.

Что нужно для работы скилла?

Для трекинга затрат — litellm, для семантического кеша — Redis и модель эмбеддингов sentence-transformers, для сжатия промптов — LLMLingua.

Исходный текст

SKILL.md · MIT
---
name: llm-cost-optimization
description: Reduce LLM API and infrastructure costs through model selection, prompt caching, batching, caching, quantization, and self-hosting strategies. Track spend by team and model, set budgets, and implement cost-aware routing.
license: MIT
metadata:
  author: devops-skills
  version: "1.0"
---

# LLM Cost Optimization

Cut LLM costs by 50–90% with the right combination of caching, model selection, prompt optimization, and self-hosting.

## When to Use This Skill

Use this skill when:
- LLM API spend is growing faster than revenue
- You need to attribute AI costs to teams, products, or customers
- Implementing caching to avoid redundant LLM calls
- Deciding when to switch from API providers to self-hosted models
- Optimizing prompt length without sacrificing quality

## Cost Levers by Impact

| Strategy | Typical Savings | Effort |
|----------|-----------------|--------|
| Semantic caching | 20–50% | Low |
| Model right-sizing | 30–70% | Low |
| Prompt compression | 10–30% | Medium |
| Provider caching (prompt cache) | 10–25% | Low |
| Batching offline workloads | 50% (Batch API) | Medium |
| Self-hosting 7–8B models | 80–95% at scale | High |
| Quantization | 30–50% VRAM cost | Medium |

## Track Costs First

```python
# Use LiteLLM's cost tracking (automatic per-model pricing)
import litellm

response = litellm.completion(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "Hello"}],
)
cost = litellm.completion_cost(response)
print(f"Cost: ${cost:.6f}")

# Add custom cost callbacks
def log_cost(kwargs, completion_response, start_time, end_time):
    cost = kwargs.get("response_cost", 0)
    model = kwargs.get("model")
    user = kwargs.get("user")
    # Send to your analytics DB
    db.record_cost(user=user, model=model, cost=cost)

litellm.success_callback = [log_cost]
```

## Model Right-Sizing

```python
# Route by task complexity — don't use GPT-4o for everything
def get_model_for_task(task_type: str) -> str:
    routing = {
        "classification":     "gpt-4o-mini",      # ~30× cheaper than gpt-4o
        "summarization":      "gpt-4o-mini",
        "extraction":         "gpt-4o-mini",
        "simple_qa":          "gpt-4o-mini",
        "complex_reasoning":  "gpt-4o",
        "code_generation":    "claude-sonnet-4-6",
        "creative_writing":   "claude-opus-4-6",
    }
    return routing.get(task_type, "gpt-4o-mini")

# Cost comparison (per 1M tokens, 2025 approx.)
# gpt-4o-mini:          input $0.15 / output $0.60
# gpt-4o:               input $2.50 / output $10.00
# claude-sonnet-4-6:    input $3.00 / output $15.00
# llama-3.1-8b (self):  ~$0.05–0.10 all-in (GPU amortized)
```

## Prompt Caching (Provider-Side)

```python
# Anthropic — cache long system prompts (saves 90% on cached tokens)
import anthropic

client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    system=[
        {
            "type": "text",
            "text": "You are a helpful assistant.",
        },
        {
            "type": "text",
            "text": open("large-context.txt").read(),  # large doc
            "cache_control": {"type": "ephemeral"},     # cache this!
        }
    ],
    messages=[{"role": "user", "content": "Summarize the key points."}],
)
# First call: full price. Subsequent calls: 90% discount on cached part.
print(f"Cache read tokens: {response.usage.cache_read_input_tokens}")

# OpenAI — prompt caching is automatic for repeated prefixes >1024 tokens
# No code change needed; check usage.prompt_tokens_details.cached_tokens
```

## Batching with OpenAI Batch API (50% Discount)

```python
import json
from openai import OpenAI

client = OpenAI()

# Prepare batch requests
requests = [
    {
        "custom_id": f"task-{i}",
        "method": "POST",
        "url": "/v1/chat/completions",
        "body": {
            "model": "gpt-4o-mini",
            "messages": [{"role": "user", "content": f"Classify: {text}"}],
            "max_tokens": 50,
        }
    }
    for i, text in enumerate(texts)
]

# Write JSONL file
with open("batch.jsonl", "w") as f:
    for req in requests:
        f.write(json.dumps(req) + "\n")

# Upload and create batch
batch_file = client.files.create(file=open("batch.jsonl", "rb"), purpose="batch")
batch = client.batches.create(
    input_file_id=batch_file.id,
    endpoint="/v1/chat/completions",
    completion_window="24h",
)
print(f"Batch ID: {batch.id}")  # poll status with client.batches.retrieve(batch.id)
```

## Semantic Caching

```python
import hashlib
import json
import redis
import numpy as np
from sentence_transformers import SentenceTransformer

r = redis.Redis(host="localhost", port=6379)
embed_model = SentenceTransformer("BAAI/bge-small-en-v1.5")

SIMILARITY_THRESHOLD = 0.92
CACHE_TTL = 3600 * 24  # 24 hours

def cached_llm_call(prompt: str, llm_fn) -> str:
    # 1. Exact match (free)
    exact_key = f"exact:{hashlib.sha256(prompt.encode()).hexdigest()}"
    if cached := r.get(exact_key):
        return cached.decode()

    # 2. Semantic match
    query_vec = embed_model.encode(prompt)
    cached_keys = r.keys("sem:*")
    for key in cached_keys:
        data = json.loads(r.get(key))
        similarity = np.dot(query_vec, data["embedding"]) / (
            np.linalg.norm(query_vec) * np.linalg.norm(data["embedding"])
        )
        if similarity >= SIMILARITY_THRESHOLD:
            return data["response"]

    # 3. Cache miss — call LLM
    response = llm_fn(prompt)

    # Store exact match
    r.setex(exact_key, CACHE_TTL, response)

    # Store semantic embedding
    sem_key = f"sem:{hashlib.sha256(prompt.encode()).hexdigest()}"
    r.setex(sem_key, CACHE_TTL, json.dumps({
        "embedding": query_vec.tolist(),
        "response": response,
        "prompt": prompt,
    }))
    return response
```

## Prompt Compression

```python
# LLMLingua — compress long prompts by 3–20× with minimal quality loss
from llmlingua import PromptCompressor

compressor = PromptCompressor(
    model_name="microsoft/llmlingua-2-bert-base-multilingual-cased-meetingbank",
    device_map="cpu",
)

compressed = compressor.compress_prompt(
    long_context,
    ratio=0.5,       # keep 50% of tokens
    rank_method="longllmlingua",
)
print(f"Original: {len(long_context.split())} words")
print(f"Compressed: {len(compressed['compressed_prompt'].split())} words")
print(f"Savings: {compressed['saving']}")
```

## Self-Hosting Break-Even Calculator

```python
def break_even_analysis(
    monthly_api_spend_usd: float,
    gpu_cost_per_hour_usd: float = 2.50,   # e.g., A10G on AWS
    utilization: float = 0.70,             # 70% GPU utilization
) -> dict:
    monthly_gpu_cost = gpu_cost_per_hour_usd * 24 * 30 * utilization
    break_even = monthly_gpu_cost / monthly_api_spend_usd
    recommendation = (
        "Self-host now — strong ROI" if break_even < 0.5 else
        "Self-host if traffic grows 2×" if break_even < 0.8 else
        "Stick with API — not enough scale yet"
    )
    return {
        "monthly_gpu_cost": f"${monthly_gpu_cost:.0f}",
        "monthly_api_spend": f"${monthly_api_spend_usd:.0f}",
        "gpu_as_pct_of_api": f"{break_even*100:.0f}%",
        "recommendation": recommendation,
    }

# Example: $5k/month on OpenAI, $2.50/hr A10G
print(break_even_analysis(5000))
# → gpu_cost ~$1,260/mo = 25% of API spend → self-host now
```

## Cost Dashboard (Grafana)

```python
# Emit cost metrics to Prometheus
from prometheus_client import Counter, Histogram

llm_cost_total = Counter(
    "llm_cost_usd_total",
    "Total LLM spend in USD",
    ["model", "team", "task_type"],
)
llm_tokens_total = Counter(
    "llm_tokens_total",
    "Total tokens used",
    ["model", "token_type"],  # token_type: prompt, completion, cached
)

def track_call(model, team, task_type, response):
    cost = calculate_cost(model, response.usage)
    llm_cost_total.labels(model=model, team=team, task_type=task_type).inc(cost)
    llm_tokens_total.labels(model=model, token_type="prompt").inc(
        response.usage.prompt_tokens)
    llm_tokens_total.labels(model=model, token_type="completion").inc(
        response.usage.completion_tokens)
```

## Best Practices

- Use `gpt-4o-mini` or `claude-haiku` for 80% of tasks — they're 10–30× cheaper.
- Enable prompt caching for system prompts >1,024 tokens (Anthropic) or >1,024 tokens (OpenAI).
- Audit your top 5 prompts by token count — compress or cache them.
- Set hard budget limits with LiteLLM virtual keys before costs spiral.
- Self-host 7B–8B models when monthly API spend exceeds $2k/month.

## Related Skills

- [llm-gateway](../../../infrastructure/networking/llm-gateway/) - Centralized cost control
- [llm-caching](../llm-caching/) - Semantic caching patterns
- [vllm-server](../../../infrastructure/local-ai/vllm-server/) - Self-hosted inference
- [agent-observability](../agent-observability/) - Token and cost telemetry

© devops-skills · MIT · BagelHole/DevOps-Security-Agent-Skills

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой