QA Interview Hub · База знань · Тести

AI

Промпти, RAG, tools, агенти, MCP

Промпти: system, user, few-shot

Запит до чат-моделі складається з повідомлень із ролями: system (правила, роль, формат; найвищий пріоритет), user (запит людини), assistant (попередні відповіді моделі), tool (результати викликів інструментів).

Базові техніки:

  • Zero-shot — лише інструкція без прикладів;
  • Few-shot — кілька прикладів «вхід → очікуваний вихід» у промпті; найкращий спосіб закріпити формат;
  • Structured output — вимагати JSON за схемою; відповідь потім валідується (JSON Schema / zod), бо модель все одно може порушити формат;
  • Chain-of-thought — просити міркувати кроками перед відповіддю; підвищує точність на складних задачах, але додає токени.

Для QA промпт — це код: його зміна може зламати поведінку так само, як зміна функції. Тому промпти лежать у git, версіонуються і покриваються eval-набором при кожній зміні.

RAG: embeddings, chunking, retrieval

RAG (retrieval-augmented generation) — модель відповідає на основі документів, які система знайшла й додала в контекст. Це спосіб дати моделі актуальні або приватні дані без донавчання.

Конвеєр: документи → chunking (нарізка на фрагменти) → embeddings (вектор, що кодує зміст) → vector DB → за запитом знаходимо top-k найближчих фрагментів → вставляємо в промпт → модель відповідає, бажано з посиланнями на джерела.

Де RAG ламається — це і є місця для тестів:

  • Retrieval не знайшов потрібний фрагмент (поганий chunking, неякісні embeddings, k замало): модель відповідає без джерела або вигадує;
  • Нерелевантний чи застарілий фрагмент потрапив у контекст;
  • Модель ігнорує знайдений контекст і відповідає з «пам'яті»;
  • Відповідь не спирається на документи (groundedness) або цитує не те джерело;
  • Права доступу: користувач отримав фрагмент документа, до якого не мав доступу.

Тому retrieval і generation оцінюють окремо: recall@k / precision@k для пошуку і faithfulness / answer relevance для відповіді.

Tool calling, агент і MCP

Tool calling (function calling): ми описуємо моделі інструменти (ім'я, опис, JSON Schema параметрів). Модель не виконує їх сама: вона повертає «хочу викликати search_orders з такими аргументами», наш код виконує виклик і повертає результат у контекст, після чого модель продовжує.

Агент — це цикл: модель отримує ціль → вирішує, який tool викликати → бачить результат → вирішує далі → … → фінальна відповідь або зупинка за лімітом. На відміну від звичайного чат-бота, агент має дії із побічними ефектами (створити тікет, надіслати лист, змінити дані) і сам обирає їх послідовність.

while (steps++ < MAX_STEPS) {
  const reply = await model.call(messages, tools);
  if (!reply.toolCalls.length) return reply.text;      // фінальна відповідь
  for (const call of reply.toolCalls) {
    const result = await runTool(call.name, call.args); // наш код, а не модель
    messages.push(toolResult(call.id, result));
  }
}
throw new Error('Agent exceeded step limit');

MCP (Model Context Protocol) — відкритий протокол, яким застосунок з моделлю підключає зовнішні tools, ресурси й промпти через стандартний інтерфейс: один MCP-сервер працює з різними клієнтами. Для QA це ще одна поверхня: контракт tools, їхні схеми, права й обробка помилок сервера.