Лого на 91. НЕГ „Проф. Константин Гълъбов“

Избираем модул · Урок 15

Архитектура на AI функцията

Къде стои моделът в едно приложение, защо ключът никога не е у клиента и как изглежда пътят на едно запитване от бутона до отговора.

Едно правило определя всичко

Ключът не напуска сървъра

Ако извикате модела направо от браузъра или от настолното приложение, ключът е в ръцете на потребителя. Всяко приложение, което го прави, плаща чужди сметки в рамките на дни.

клиентбраузър, C# формасървървашият кодбазаданни и векторимоделвъншна услугаключът, правата и лимитите живеят само тукКлиентът никога не говори директно с модела.
Клиентът пита вашия сървър; сървърът решава дали, какво и с какви права да пита модела.

Освен ключа на сървъра остават и всички други решения: кой има право да пита, колко пъти, какъв контекст се добавя, какво се записва.

Пътят на едно запитване

  1. Клиентът изпраща въпроса към вашия краен адрес (endpoint).
  2. Сървърът проверява кой е потребителят и има ли право.
  3. Проверява лимита му — брой запитвания за час или на ден.
  4. Търси контекст в базата (векторно и по ключови думи).
  5. Сглобява промпта: системно указание, контекст, история, въпрос.
  6. Извиква модела с таймаут.
  7. Проверява отговора (валиден JSON, липса на забранено съдържание).
  8. Записва разговора и разхода в базата.
  9. Връща отговора и източниците на клиента.

Само стъпка 6 е „изкуственият интелект“. Останалите осем са обикновено сървърно програмиране — и точно там се решава дали системата е използваема.

Синхронно или отложено

СинхронноОтложено (опашка)
Как работизаявката чака отговоразаявката връща номер, отговорът идва после
Подходящо зачат, кратки отговориобработка на 500 документа, дълги анализи
Рискизтичане на времето при бавен моделпо-сложна реализация
Потребителят виждаизчакване или потоксъстояние: чака / готово

Правилото за времето

Ако операцията може да отнеме над 30 секунди, тя не бива да е синхронна. Дълга HTTP заявка ще бъде прекъсната някъде по пътя — от браузъра, от прокси сървъра или от хостинга.

Слоевете в кода

Отделяйте работата с модела в собствен слой. Не разпръсквайте извикванията из целия проект.

Контролер (приема заявката)
    → Услуга „Помощник“ (сглобява промпта, вика модела, проверява отговора)
        → Клиент на модела (само HTTP: ключ, таймаут, повторни опити)
        → Хранилище (търсене в базата, запис на разговора)
  • Смяната на доставчик засяга само последния слой.
  • Промените в промпта са на едно място и могат да се версионират (урок 22).
  • Слоят с HTTP може да се замени с фалшив при тестване (урок 20).

Какво се записва

Задължително

  • кой е питал и кога
  • какъв промпт е изпратен (или поне версията му и входа)
  • какъв е отговорът
  • колко токена са изразходвани и колко е струвало
  • коя версия на модела е отговорила

Внимателно

Записите съдържат това, което потребителите са писали — тоест потенциално лични данни. Определете срок на съхранение и кой има достъп още преди първия запис.