DTGARAGE · AI · ПРАКТИЧЕСКИ ГАЙд

НАПРАВИ СИ
СВОЙ
AI ИНСТРУМЕНТ

Claude и OpenAI имат API. Плащаш само за токените, които използваш. Без абонамент, без ограничения на ChatGPT Plus, без да чакаш за capacity. Пишеш 10 реда код и имаш AI инструмент, направен точно за теб.

CLAUDE API OPENAI API PYTHON PHP РЕАЛЕН КОД
01
ОСНОВНИ КОНЦЕПЦИИ
Преди да пишеш код — разбери как работи
КАК РАБОТИ
Изпращаш HTTP POST заявка с JSON тяло към API endpoint. В тялото: моделът, системният промпт, и съобщенията. Получаваш JSON отговор с генерирания текст. Толкова. Няма магия.
ТЕРМИНКАКВО ОЗНАЧАВАПРАКТИЧЕСКИ
Token ~4 символа текст За това плащаш — input + output токени
System prompt Инструкции за поведението на AI "Ти си помощник за ремонт на коли. Отговаряй само на БГ."
Temperature Случайност на отговора (0.0 - 1.0) 0 = детерминистичен; 1 = творчески. За код: 0.2
Max tokens Максимална дължина на отговора 1024 за кратки отговори, 4096 за дълги
Context window Колко текст "помни" моделът Claude: 200K токена. GPT-4o: 128K
Messages array Историята на разговора user/assistant редуване — така симулираш чат
Streaming Отговорът идва на части Показваш текста докато се генерира — по-добро UX
ТОКЕНИ = ПАРИ
Всяко извикване на API струва. Input токени (твоят промпт) + output токени (отговорът). Дълъг system prompt се плаща при всяко извикване. Prompt caching (Claude) намалява цената при повтарящ се system prompt до 90%.
02
API КЛЮЧОВЕ
Откъде, как, и как да ги пазиш
CLAUDE / ANTHROPIC
Регистрацияconsole.anthropic.com
Free tier$5 кредит при регистрация
Ключ форматsk-ant-api03-...
Headerx-api-key
Endpointapi.anthropic.com/v1/
OPENAI
Регистрацияplatform.openai.com
Free tierняма — плащаш от нулата
Ключ форматsk-proj-...
HeaderAuthorization: Bearer
Endpointapi.openai.com/v1/
НИКОГА НЕ COMMITВАЙ API КЛЮЧ В GIT
Пази ключовете в .env файл. Добави .env в .gitignore. При leak — ключът се компрометира веднага, ротирай го. Публичен репо с API ключ = сметка за стотици долари за часове.
.ENV ФАЙЛ — ПРАВИЛНИЯТ НАЧИН # .env — не се commit-ва
ANTHROPIC_API_KEY=sk-ant-api03-xxxxxxxxxxxxx
OPENAI_API_KEY=sk-proj-xxxxxxxxxxxxx

# .gitignore
.env
*.env
.env.local
03
ПЪРВО ИЗВИКВАНЕ — CURL
Без библиотеки, само HTTP — разбери основата
CLAUDE API — CURL curl https://api.anthropic.com/v1/messages \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{
    "model": "claude-sonnet-4-5",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "Кажи здравей на БГ."}]
  }'
OPENAI API — CURL curl https://api.openai.com/v1/chat/completions \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o-mini",
    "messages": [{"role": "user", "content": "Кажи здравей на БГ."}]
  }'
ОТГОВОР ОТ CLAUDE — JSON СТРУКТУРА {
  "id": "msg_01XFDUDYJgAACzvnptvVoYEL",
  "type": "message",
  "role": "assistant",
  "content": [{
    "type": "text",
    "text": "Здравейте!" ← това искаш
  }],
  "usage": {
    "input_tokens": 12, ← плащаш това
    "output_tokens": 8 ← и това
  }
}
04
PYTHON
SDK или requests — и двата начина
ИНСТАЛАЦИЯ # Anthropic SDK
pip install anthropic python-dotenv

# OpenAI SDK
pip install openai python-dotenv
CLAUDE — ПРОСТ ЧАТ (claude_chat.py) import anthropic
from dotenv import load_dotenv

load_dotenv()
client = anthropic.Anthropic()

def ask(question: str, system: str = "") -> str:
  message = client.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=1024,
    system=system,
    messages=[{"role": "user", "content": question}]
  )
  return message.content[0].text

# Употреба
answer = ask(
  "Обясни как работи турбото на двигател.",
  system="Ти си механик. Отговаряй кратко и ясно на БГ."
)
print(answer)
CLAUDE — STREAMING (текстът се появява постепенно) import anthropic

client = anthropic.Anthropic()

with client.messages.stream(
  model="claude-sonnet-4-5",
  max_tokens=1024,
  messages=[{"role": "user", "content": "Напиши стъпки за MIG заваряване."}]
) as stream:
  for text in stream.text_stream:
    print(text, end="", flush=True)
МНОГООБОРОТЕН ЧАТ — ПАМЕТ НА РАЗГОВОРА import anthropic

client = anthropic.Anthropic()
history = []
system = "Ти си технически асистент. Отговаряй на БГ."

while True:
  user_input = input("\nТи: ")
  if user_input.lower() in ["exit", "quit"]: break

  history.append({"role": "user", "content": user_input})

  response = client.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=1024,
    system=system,
    messages=history
  )
  reply = response.content[0].text
  history.append({"role": "assistant", "content": reply})
  print(f"\nAI: {reply}")
PROMPT CACHING — СПЕСТИ 90% ОТ INPUT ЦЕНАТА
Ако system prompt-ът ти е дълъг и постоянен, Claude може да го кешира. Плащаш само при първото зареждане, после е ~10x по-евтино:
system=[{"type": "text", "text": "...", "cache_control": {"type": "ephemeral"}}]
05
PHP
За уебсайтове — без SDK, само cURL
CLAUDE API — PHP ФУНКЦИЯ (api/chat.php) <?php
function claude_ask(string $message, string $system = ''): string {
  $key = $_ENV['ANTHROPIC_API_KEY'];
  
  $payload = json_encode([
    'model' => 'claude-sonnet-4-5',
    'max_tokens' => 1024,
    'system' => $system,
    'messages' => [['role' => 'user', 'content' => $message]],
  ]);

  $ch = curl_init('https://api.anthropic.com/v1/messages');
  curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $payload,
    CURLOPT_HTTPHEADER => [
      "x-api-key: $key",
      'anthropic-version: 2023-06-01',
      'content-type: application/json',
    ],
  ]);

  $response = json_decode(curl_exec($ch), true);
  curl_close($ch);

  return $response['content'][0]['text'] ?? 'Грешка.';
}

// Употреба
$answer = claude_ask(
  'Каква е разликата между MIG и TIG заваряване?',
  'Ти си опитен заварчик. Отговаряй на БГ.'
);
echo $answer;
PHP STREAMING — SSE (текстът се стриймва към браузъра) <?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
header('X-Accel-Buffering: no');

$payload = json_encode([
  'model' => 'claude-sonnet-4-5',
  'max_tokens' => 1024,
  'stream' => true,
  'messages' => [['role' => 'user', 'content' => $_POST['q']]],
]);

$ch = curl_init('https://api.anthropic.com/v1/messages');
curl_setopt($ch, CURLOPT_WRITEFUNCTION, function($ch, $data) {
  if (str_contains($data, '"text"')) {
    $json = json_decode(trim(str_replace('data: ', '', $data)), true);
    if (isset($json['delta']['text'])) {
      echo 'data: ' . json_encode(['t' => $json['delta']['text']]) . "\n\n";
      ob_flush(); flush();
    }
  }
  return strlen($data);
});
curl_exec($ch);
06
CLAUDE vs OPENAI
Кое да избереш за твоя проект
CLAUDE (Anthropic)GPT-4o (OpenAI)
Най-добър модел claude-opus-4-7 gpt-4o
Бюджетен модел claude-haiku-4-5 gpt-4o-mini
Context window 200K токена 128K токена
Prompt caching Да — до 90% по-евтино Частично
Дълги документи Много добро Добро
Код генериране Отлично Отлично
Function calling Да (Tools) Да (по-зряло)
Цена (Sonnet/4o) $3 / $15 per MTok $2.50 / $10 per MTok
Подходящ за Дълги документи, анализ, код Бърза интеграция, vision, audio
ПРЕПОРЪКА
За нов проект — започни с Claude Sonnet. По-голям контекст, по-добро разбиране на инструкции, prompt caching. Ако имаш нужда от vision (анализ на изображения) или audio — OpenAI има предимство там.
07
РЕАЛНИ ПРОЕКТИ ЗА СТАРТ
Copy-paste и адаптирай за твоя случай
CLI АСИСТЕНТ ЗА ТЕРМИНАЛА
Питаш AI директно от терминала. Полезен за bash команди, grep patterns, git.
ask.py — пусни с: python ask.py "как да намеря файл по съдържание?" import sys, anthropic

client = anthropic.Anthropic()
q = " ".join(sys.argv[1:])

msg = client.messages.create(
  model="claude-haiku-4-5-20251001",
  max_tokens=512,
  system="Linux/macOS terminal expert. Отговаряй кратко с команди.",
  messages=[{"role": "user", "content": q}]
)
print(msg.content[0].text)
SUMMARIZER — ОБОБЩАВАЙ ДЪЛГИ ТЕКСТОВЕ
Подаваш файл, получаваш резюме. Полезен за логове, документация, статии.
summarize.py — пусни с: python summarize.py document.txt import sys, anthropic

text = open(sys.argv[1]).read()
client = anthropic.Anthropic()

result = client.messages.create(
  model="claude-sonnet-4-5",
  max_tokens=1024,
  system="Обобщавай текст на БГ. Bullet points. Само важното.",
  messages=[{"role": "user", "content": text}]
)
print(result.content[0].text)
PHP ЧАТ WIDGET ЗА САЙТ
Минимален chat endpoint за уебсайт. Приема POST, връща AI отговор.
api/chat.php — fetch от frontend <?php
header('Content-Type: application/json');
$msg = htmlspecialchars($_POST['message'] ?? '');
if (!$msg) { echo json_encode(['error' => 'no input']); exit; }

$ch = curl_init('https://api.anthropic.com/v1/messages');
curl_setopt_array($ch, [
  CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true,
  CURLOPT_POSTFIELDS => json_encode([
    'model' => 'claude-haiku-4-5-20251001',
    'max_tokens' => 512,
    'system' => 'Асистент на сайта. Отговаряй на БГ.',
    'messages' => [['role'=>'user', 'content'=>$msg]],
  ]),
  CURLOPT_HTTPHEADER => [
    "x-api-key: ".getenv('ANTHROPIC_API_KEY'),
    'anthropic-version: 2023-06-01',
    'content-type: application/json',
  ],
]);
$r = json_decode(curl_exec($ch), true);
echo json_encode(['reply' => $r['content'][0]['text'] ?? 'Грешка.']);
08
РЕАЛНИ ЦЕНИ
Колко струва на практика
МОДЕЛINPUTOUTPUT1000 СЪОБЩЕНИЯ (~500 токена)
claude-haiku-4-5 $0.80 / MTok $4 / MTok ~$0.002 = 0.004 лева
claude-sonnet-4-5 $3 / MTok $15 / MTok ~$0.009 = 0.016 лева
claude-opus-4-7 $15 / MTok $75 / MTok ~$0.045 = 0.08 лева
gpt-4o-mini $0.15 / MTok $0.60 / MTok ~$0.0004 = 0.0007 лева
gpt-4o $2.50 / MTok $10 / MTok ~$0.006 = 0.011 лева
НА ПРАКТИКА
Малък сайт с AI чат — 100 потребители дневно по 5 съобщения = 500 съобщения/ден. С Haiku: ~$1/месец. С Sonnet: ~$5/месец. Личен CLI инструмент — под $1/месец почти сигурно. API е масивно по-евтино от всеки абонамент при реална употреба.