Знакът на КАГАМИ КАГАМИ
kagami.bg/academy · lesson · machine-readable viewVERIFIED 2026-10-01 · UPDATED 2026-10-01
IDENTITY
module
01-00a · What is an LLM and how it thinks in tokens
series
KAGAMI Academy · Blocks 0–10 · Block 0 — AI Fundamentals · part 1/3 (chapters 0.1–0.2)
level
Beginner
duration
~3–4 h (reading + practice)
prerequisites
basic Python; intuition for vectors
trust_label
VERIFIED 2026-10-01 (token counts measured with tiktoken 0.14; prices, context windows, embedding models, links) · UPDATED 2026-10-01
language
human view: bg · english edition: /en/academy/blokove/moduli/01-00a_Блок_0_Част_1_LLM_Токенизация.html
next
01-00b · Block 0 part 2/3 · The AI stack: CUDA → runtime → framework → application
PURPOSE

Give practitioners a working mental model of LLMs without heavy maths: next-token prediction via self-attention; pre-training vs fine-tuning vs inference; parameters × quantization → memory; tokens (BPE) as the unit of cost; the context window as working memory; embeddings as semantic coordinates that power RAG.

KEY CONCEPTS
COMMANDS / PATHS
CHECKLIST
NEXT MODULE

01-00b_Блок_0_Част_2_AI_Стек.html · The AI stack top-down · offer: Quick experiment (kagami.bg/stalbata/)

SOURCES
TAGS
llmtransformerself-attentiontokenizationbpecontext-windowembeddingsragbulgarian
ПРОВЕРЕНО · 01.10.2026 ОБНОВЕНО · 01.10.2026

Какво е LLM и как мисли в токени

Солидна основа без излишна математика. Ще разбереш как трансформърът обработва текст, защо контекстният прозорец е най-важният ти ресурс, защо българският текст струва повече токени и как embeddings правят смисъла изчислим.

⏱ ~3–4 часа Начинаещ Блок 0 · AI основи Глави 0.1 и 0.2
tiktoken🔒 локално Ollama + embedding модел🔒 локално OpenAI API / Tokenizer🌐 глобален модел

01Какво ще научиш

02Преди да започнеш

03Стъпки

  1. Какво е LLM — трансформърът без дълбока математика

    Large Language Model (LLM) е невронна мрежа, обучена да предсказва следващия токен (парче от дума) въз основа на всички предишни токени. Простото предсказване на „следващата дума“, повторено милиарди пъти, поражда привидно разбиране на езика.

    Преди трансформъра (2017, Google, „Attention Is All You Need“) мрежите четяха текста последователно, дума по дума — и краят на изречението „забравяше“ началото. Трансформърът решава това със self-attention: всяка дума може да „погледне“ всяка друга едновременно.

    ЕтапКакво става
    1. Входтекстът се реже на токени: „Котката“ · „яде“ · „риба“
    2. Векторизациявсеки токен става вектор (embedding) + позиция в изречението
    3. Обработкаself-attention + feed-forward мрежа, повторени в много слоеве (десетки)
    4. Вероятностиlogits — вероятност за всеки възможен следващ токен
    5. Изборsampling с настройки като temperature и top_p

    Self-attention е по-просто, отколкото звучи: за всяка дума механизмът пита „кои други думи са важни, за да разбера тази?“. В „Котката яде риба, защото е гладна“ при „е“ вниманието отива към „Котката“, не към рибата. Тази способност за далечни връзки прави трансформърите силни.

    💡
    Аналогия: вниманието при четене
    Когато четеш, не даваш еднакво внимание на всяка дума. В „Той върна книгата в библиотеката, защото я дочете“ — „я“ се свързва с „книгата“, не с „библиотеката“. Self-attention изчислява такива връзки автоматично.
  2. Pre-training, fine-tuning, inference — кога кое

    Трите фази имат коренно различни нужди от ресурси, данни и цел. Смесването им е честа грешка при планиране на AI проект.

    ФазаКакво се правиGPUДанниКога
    Pre-trainingучим модела от нулата върху огромен корпусхиляди GPU · месецитрилиони токенисамо големи лаборатории (OpenAI, Meta, Mistral…)
    Fine-tuningдообучаваме готов модел за конкретна задача1–8 GPU · часове/днистотици до хиляди примерадомейн (медицина, право, фирмен стил)
    Inferenceползваме обучен модел за отговори1 GPU (или CPU) · секундисамо входният промптвсеки ден, във всяко приложение
    ✅
    Правило за 95% от проектите
    Ще работиш почти само с inference. Fine-tuning е нужен, когато промпт инженерингът и RAG не стигат. Pre-training — практически никога, освен ако нямаш бюджет от милиони за изчисления.
  3. Размер на модела — параметри и памет

    „7B“, „13B“, „70B“ е броят параметри (тегла). Повече параметри = по-добро разбиране, но повече памет и по-бавен отговор. Грубо: памет ≈ параметри × байтове на тегло. Квантизацията (напр. Q4 ≈ половин байт на тегло) намалява размера многократно при малка загуба на качество.

    Размерfp16 (без квантизация)Q4Практически
    7B~14 GB~4 GBбърз, добър за прости задачи; върви на обикновена карта
    13B~26 GB~8 GBбалансирано качество · карта от класа 16–24 GB
    34B~68 GB~20 GBQ4 се побира в една 24 GB карта; fp16 — сървърен клас
    70B~140 GB~40 GBсървърен хардуер или машина с голяма обща памет
    ⚠️
    Халюцинации — основният риск
    LLM генерира статистически правдоподобен текст, не проверени факти. Може да измисли имена, дати и цитати с пълна увереност. Затова RAG (Retrieval-Augmented Generation) е толкова важен — „заземява“ модела в реални документи.
  4. Какво е токен — и защо българският е по-скъп

    Токенът не е дума. BPE (Byte Pair Encoding), най-разпространеният алгоритъм, реже текста по честота на символните комбинации: честа дума = 1 токен, рядка дума = няколко, по-рядко срещан в обучението език = повече токени.

    ТекстДумиТокени · GPT-4 (cl100k)Токени · GPT-4o (o200k)
    „Изкуственият интелект промени света“41610
    „Artificial intelligence changed the world“565
    „невроендокринен“ (рядка медицинска дума)1106
    📏
    ОБНОВЕНО · 01.10.2026 — измерено, не на око
    Старият урок даваше 11 / 5 / 6 токена „за GPT-4“ и „~2,5× повече за български“. Преброихме с tiktoken 0.14. Върху целия текст на урока (същото съдържание на двата езика): българският е ~3,1 токена на дума при GPT-4 и ~2,2 при GPT-4o, английският ~1,4. Тоест българският струва ~2× повече токени при GPT-4 и ~1,5× при GPT-4o. По-новите токенизатори са по-добри към кирилицата — но тя остава по-скъпа.
    💰
    Токените имат пряка цена
    При API плащаш на токен. GPT-4o 🌐 глобален: $2,50 за 1 млн. входни токена (цена на OpenAI, в USD, към 01.10.2026). 10 000 документа на месец × 500 думи × ~2,2 токена = ~11 млн. токена ≈ $27,50 само за входа. Оптимизирането на промптите не е естетика, а финансово решение.
    ОБНОВЕНО · 01.10.2026 — старият урок ползваше първоначалната цена $0,005 / 1K ($5 / 1 млн.) и ~700 токена за 500 думи; вярното е ~1100.
    Python · преброй токените сам 🔒 локално
    import tiktoken
    enc = tiktoken.encoding_for_model("gpt-4o")   # o200k_base; за GPT-4: get_encoding("cl100k_base")
    for s in ["Изкуственият интелект промени света",
              "Artificial intelligence changed the world"]:
        print(len(enc.encode(s)), s)
  5. Контекстен прозорец — работната памет на модела

    Контекстният прозорец е максималният брой токени, които моделът „вижда“ наведнъж — системният промпт, историята и текущото запитване заедно. Всичко извън него е невидимо.

    МоделПрозорецБележка
    GPT-3.5 Turbo 🌐16Kстар модел — за сравнение; ~12 000 думи на английски
    GPT-4o 🌐128K~200 страници английски текст
    Claude Sonnet 5.5 🌐1MClaude Haiku 4.5 — 200K
    Gemini 3.1 Pro (preview) 🌐1M1 048 576 входни токена
    Llama 3.2 🔒 локално128K1B и 3B; типично за отворените модели
    🔄
    ОБНОВЕНО · 01.10.2026 — прозорците растат
    Старият урок сочеше „GPT-4o / Claude Sonnet — 128K“ и „Gemini 1.5 Pro — 1M“. Claude Sonnet вече е с 1M, а Gemini 1.5 е спрян — заменихме го с Gemini 3.1 Pro (Gemini 2.5 Pro вече е достъпен само за досегашни потребители; проверено 01.10.2026). Числата се менят често: провери в документацията на доставчика преди проект. Помни и че в български текст една страница струва повече токени.

    Пример за разпределение в дълъг разговор: системен промпт ~15%, история ~45%, текущо запитване ~20%, свободен буфер ~20%. При 128K прозорец 57K токена история × $2,50 / 1 млн. ≈ $0,14 на всяко запитване — затова управлението на историята е критично за разходите.

    Три основни стратегии, когато историята напълни прозореца:

    Python · три стратегии за управление на контекста
    # Стратегия 1: плъзгащ се прозорец — пазим системния промпт + последните N съобщения
    def sliding_window(messages, max_messages=10):
        system = [m for m in messages if m["role"] == "system"]
        history = [m for m in messages if m["role"] != "system"]
        return system + history[-max_messages:]
    
    # Стратегия 2: обобщение — старата история се свива до няколко изречения
    async def summarize_history(old_messages, llm_client):
        prompt = f"""Обобщи тази разговорна история в 3–5 изречения,
    запазвайки ключовите факти и решения:
    {old_messages}"""
        summary = await llm_client.complete(prompt)   # твоят клиент към модела
        return [{"role": "system", "content": f"Обобщение: {summary}"}]
    
    # Стратегия 3: бюджет на токени — броим и режем най-старото
    import tiktoken
    def count_tokens(messages, model="gpt-4o"):
        enc = tiktoken.encoding_for_model(model)
        return sum(len(enc.encode(m["content"])) + 4 for m in messages)  # +4 ≈ служебни токени
    
    def trim_to_budget(messages, max_tokens=100_000):
        while count_tokens(messages) > max_tokens:
            for i, m in enumerate(messages):
                if m["role"] != "system":
                    messages.pop(i)
                    break
            else:
                break   # останаха само системни — спираме
        return messages
    ⚠️
    Капан: tiktoken брои само за OpenAI
    tiktoken е токенизаторът на моделите на OpenAI. Claude, Gemini и отворените модели ползват свои токенизатори — там броят ще е различен. За тях ползвай инструмента за броене на съответния доставчик или токенизатора на самия модел. (ОБНОВЕНО · 01.10.2026 — старият урок твърдеше, че tiktoken е съвместим с Claude.)
  6. Embeddings — думите като координати

    Embedding е плътен вектор от числа, който представя смисъла на текст. Ключовото свойство: близки по смисъл текстове имат близки вектори. Това е основата на RAG, семантичното търсене и класификацията.

    🔑
    Разстояние = смислова близост
    вектор("крал") − вектор("мъж") + вектор("жена") ≈ вектор("кралица")
    Класическият пример показва, че embeddings кодират аналогии, синоними и противоположности като геометрия в многомерно пространство.

    Представи си карта: „котка“, „куче“, „риба“, „птица“ са в един ъгъл; „кола“, „влак“, „самолет“, „кораб“ — в друг; „свобода“, „демокрация“, „права“ — в трети. В реалността векторите имат стотици до хиляди измерения (напр. 384, 768, 1024, 1536), не две — но принципът е същият. Стандартната мярка е косинусова близост: тя гледа ъгъла между векторите, не дължината им.

    Python · embeddings с локален модел чрез Ollama 🔒 локално
    import ollama
    import numpy as np
    
    # Локално: без интернет и без такса на токен. Първо: ollama pull bge-m3
    def embed(text: str) -> list[float]:
        r = ollama.embed(model="bge-m3", input=text)   # многоезичен, 1024 измерения
        return r.embeddings[0]
    
    def cosine_similarity(v1, v2) -> float:
        a, b = np.array(v1), np.array(v2)
        return float(np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b)))
    
    for w1, w2 in [("котка", "коте"), ("котка", "куче"), ("котка", "автомобил")]:
        print(f"{w1} ↔ {w2}: {cosine_similarity(embed(w1), embed(w2)):.3f}")
    # Очакване: „котка–коте“ най-близо, „котка–автомобил“ най-далеч.
    # Точните числа зависят от модела — пусни и виж.
    МоделИзмеренияЕзициРазмерБележка
    bge-m3 🔒1024многоезичен (100+)~1,2 GBдобър старт за български · в Ollama · прозорец 8K
    nomic-embed-text 🔒768основно английски~274 MBбърз, прозорец 2K · в Ollama
    mxbai-embed-large 🔒1024основно английски~670 MBсилен за английски · прозорец 512 · в Ollama
    all-MiniLM-L6-v2 🔒384английски~90 MBмного бърз · за системи само на английски
    text-embedding-3-small 🌐1536многоезиченсамо APIOpenAI · $0,02 / 1 млн. токена · не е локален
    🎯
    ОБНОВЕНО · 01.10.2026 — препоръката за български е сменена
    Старият урок препоръчваше nomic-embed-text и mxbai-embed-large като многоезични. Проверено: и двата са обучени основно на английски (картите им на Hugging Face са с етикет „en“). За RAG на български започни с многоезичен модел като bge-m3 и винаги тествай с реални документи от твоя домейн — разликите в качеството са големи.

04Проверка

1. Кой фактор НАЙ-СИЛНО определя нужната памет при inference?

2. Медицинска фирма иска AI асистент за клинични протоколи. Кое е НАЙ-подходящото като първа стъпка?

3. Български текст от 500 думи — колко токена приблизително (GPT-4 / GPT-4o)?

4. Защо косинусовата близост се предпочита пред евклидовото разстояние при embeddings?

Обобщение

05Какво следва

06Източници

  1. „Attention Is All You Need“ (2017) — оригиналната статия; раздел 3 описва слоевете.
  2. The Illustrated Transformer — Jay Alammar — най-доброто визуално обяснение.
  3. 3Blue1Brown — Transformers, the tech behind LLMs — видео, ~27 мин (по-рано озаглавено „But what is a GPT?“).
  4. OpenAI Tokenizer — въведи текст и виж токените.
  5. tiktoken — библиотеката на OpenAI за броене на токени.
  6. OpenAI — цени на API — GPT-4o и text-embedding-3-small.
  7. Anthropic — преглед на моделите Claude — контекстни прозорци.
  8. Google — модели Gemini — лимити на токените.
  9. bge-m3, nomic-embed-text, mxbai-embed-large — embedding моделите в Ollama.
  10. MTEB Leaderboard — класиране на embedding модели по задачи.
  11. Собствено измерване на КАГАМИ, 01.10.2026: tiktoken 0.14 върху текста на този урок на двата езика.