Назад до блогу

AI для початківцівПосібник

Як написати хороший запит: 5 частин і приклад до/після

Перетворіть розпливчастий однорядковий запит на запит із завданням, контекстом, форматом, прикладом і правилами, а потім надішліть його через OpenAI-сумісний API.

Автор: CheapTokens TeamОпубліковано 5 хв читання

Обкладинка: однорядковий запит «Підсумуй цей лист» і відповідь, що йому потрібні завдання, контекст, формат, приклад і правила
На цій сторінці
  1. Чому «Підсумуй цей лист» — це азартна гра
  2. П'ять частин простими словами
  3. До і після: лист клієнта
  4. Надішліть це через API
  5. Скільки коштують зайві слова
  6. Перевірте себе

Ваша модель підсумовує лист клієнта трьома абзацами в понеділок і двома пунктами у вівторок. Той самий запит, та сама модель. Ось що робить однорядковий запит: він залишає кожне рішення моделі, а модель щоразу вирішує по-різному.

Хороший запит відповідає на п'ять питань: що робити (завдання), з чим працювати (контекст), як має виглядати відповідь (формат), як виглядає хороша відповідь (приклад) і чого уникати (обмеження). Нижче один розпливчастий запит стає структурованим, проходить через OpenAI-сумісний CheapTokens API, і ви бачите, що довший запит додає до рахунку.

Чому «Підсумуй цей лист» — це азартна гра#

Коли ви пишете «Підсумуй цей лист», ви вже маєте на думці відповідь: одне речення, наскільки це терміново, що робити далі. Модель не бачить цієї картини. Тож вона здогадується, і кожна здогадка розумна. Разом вони дають вам різну відповідь при кожному запуску, а скрипту, який читає відповідь, немає чого стабільно розібрати.

Посібник OpenAI з промпт-інженерії (прочитано 27 жовтня 2026) прямо формулює ідею: промпт-інженерія — це написання ефективних інструкцій, і GPT-моделі працюють краще, коли ви явно кажете їм, як виконати завдання. Ця звичка не обмежується текстом. 26 жовтня 2026 один Telegram-канал поділився запитом для 30-секундного згенерованого відео, розбитим на блоки: сцена, візуальний стиль, діалог, аудіо та виключення, технічні характеристики. Інше завдання, той самий хід. Автор назвав кожне рішення заздалегідь, замість того щоб залишити його моделі.

Спробуйте саміСпробуйте: що модель мала б вгадати з «Підсумуй цей лист»?Показати відповідь

Довжину (один рядок чи сторінку), аудиторію (ви чи клієнт), форму відповіді (проза, пункти, JSON), що вважається важливим і що робити, коли в листі цього не сказано. Кожне з цих питань може вирішити запит.

П'ять частин простими словами#

Уявіть, що ви вводите в курс справи нового колегу в його перший день. «Розберися з цим» дасть вам здогадку. Стікер із завданням, матеріалом, бажаним форматом, зразком і «не роби» дасть вам те, що ви мали на увазі.

Завдання — це одне дієслово й один об'єкт: «Підсумуй лист і оціни його терміновість». Будьте буквальними. «Допоможи з цим листом» — це не завдання.

Контекст — це матеріал, з яким працює модель: лист, опис продукту, політика. Модель знає лише те, що вивчила під час тренування, плюс те, що ви вставили. Обгортайте вставлений текст у роздільники, як-от XML-теги на кшталт <email>…</email> або markdown-заголовки, щоб ваші інструкції не змішалися з текстом. Посібник OpenAI пропонує обидва варіанти.

Формат — це те, як виглядає відповідь: «JSON з ключами summary, urgency, next_step» або «три пункти, по 12 слів максимум». Він найважливіший, коли код читає відповідь.

Приклад — це один вхід із бажаним виходом. Посібник рекомендує few-shot приклади, які охоплюють різноманітні входи з бажаними виходами. Одного прикладу цілком достатньо для початку; додайте другий, коли ваші входи сильно відрізняються.

Обмеження — це «не роби»: використовуй лише факти з листа, пиши «невідомо», коли чогось бракує, жодних повернень коштів чи знижок.

П'ять частин запиту в порядку, у якому вони зазвичай ідуть
П'ять частин структурованого запиту: завдання, контекст, формат, приклад, обмеження

Порядок теж трохи важливий. Той самий посібник каже, що повідомлення розробника або системне повідомлення зазвичай іде так: ідентичність, інструкції, приклади, контекст, і що контекст належить ближче до кінця, бо він змінюється між запитами. Правила йдуть у системне повідомлення; вхід іде в повідомлення користувача.

З'єднайте пари

Зіставте кожну частину запиту з питанням, на яке вона відповідає

  • ЗавданняЩо має робити модель?
  • КонтекстЗ яким матеріалом вона працює?
  • ФорматЯк має виглядати відповідь?
  • ПрикладЯк виглядає хороша відповідь?
  • ОбмеженняЧого вона не повинна робити?

До і після: лист клієнта#

Ось однорядковий запит поруч із тим самим проханням з усіма п'ятьма частинами. Сам лист — це контекст, і він іде в повідомлення користувача, обгорнутий у теги <email>.

Порівняйте

Один запит, два промпти

До

text
Summarize this email.

Після

text
You summarize customer emails for a support team.

Task: Summarize the email in the <email> tags and rate how urgent it is.

Format: Reply with JSON only, using the keys "summary" (one sentence), "urgency" ("low", "medium" or "high") and "next_step" (one short sentence).

Example:
<email>Hi, order 1042 was due Monday and it's Thursday. Where is it?</email>
{"summary": "Order 1042 is three days late and the customer asks where it is.", "urgency": "medium", "next_step": "Check the carrier tracking for order 1042 and reply with the status."}

Rules:
- Use only what the email says. If something is missing, write "unknown".
- Don't offer refunds or discounts.
- Output nothing outside the JSON.

Прочитайте «після» згори донизу, і ви зможете вказати на кожну частину: вступний рядок і завдання, рядок формату, приклад, правила. Лист навмисно відсутній у тексті. Він змінюється з кожним запитом, тож іде окремо.

Скелет структурованого запиту: п'ять позначених частин
П'ять частин запиту, по одному рядку кожна (лист іде в повідомлення користувача)

Надішліть це через API#

Інструкції ніколи не змінюються, тож вони живуть у константі й ідуть першими. Лист змінюється, тож він іде останнім. Це весь скрипт, який використовує OpenAI Python SDK, націлений на CheapTokens. Модель — DeepSeek-V4-Flash: контекст 380K, до 32 768 вихідних токенів на відповідь, одна ціна будь-якої години. Візьміть базову URL-адресу та ідентифікатор моделі з документації CheapTokens; якщо у вас ще немає ключа, ваш перший запит до API проведе вас через це.

python
import json
import os

from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key=os.environ["CHEAPTOKENS_API_KEY"],
)

SYSTEM_PROMPT = """You summarize customer emails for a support team.

Task: Summarize the email in the <email> tags and rate how urgent it is.

Format: Reply with JSON only, using the keys "summary" (one sentence), "urgency" ("low", "medium" or "high") and "next_step" (one short sentence).

Example:
<email>Hi, order 1042 was due Monday and it's Thursday. Where is it?</email>
{"summary": "Order 1042 is three days late and the customer asks where it is.", "urgency": "medium", "next_step": "Check the carrier tracking for order 1042 and reply with the status."}

Rules:
- Use only what the email says. If something is missing, write "unknown".
- Don't offer refunds or discounts.
- Output nothing outside the JSON.
"""

email = "Hello, I was charged twice for my subscription this month. Please fix it before Friday, my card is almost at its limit."

response = client.chat.completions.create(
    model="deepseek-ai/DeepSeek-V4-Flash-0731",
    messages=[
        {"role": "system", "content": SYSTEM_PROMPT},
        {"role": "user", "content": f"<email>\n{email}\n</email>"},
    ],
)

reply = response.choices[0].message.content
print(json.loads(reply))
print(response.usage.prompt_tokens, response.usage.completion_tokens)

Якщо рядок формату виконав свою роботу, відповідь — це один JSON-об'єкт з summary, urgency і next_step, а json.loads перетворює його на словник. Якщо він викликає помилку, модель обгорнула JSON у зайвий текст: посильте останнє правило або додайте другий приклад. Останній рядок виводить, скільки токенів увійшло й вийшло, — це число, про яке йдеться в наступному розділі.

Скільки коштують зайві слова#

Токен — це частина слова. Ви платите за токен за те, що надсилаєте (вхід), і за те, що пише модель (вихід), а вихід — дорожча сторона. Докладніше про це в вхідні та вихідні токени.

Скажімо, ви запускаєте бота підтримки з 1 000 листів на день, і лист — це близько 300 токенів. Однорядковий запит додає приблизно 10 токенів інструкції, тож увіходить близько 310; припустімо, він дає вільний підсумок приблизно на 250 токенів. Системний запит вище — це близько 200 токенів, плюс приблизно 10 на теги <email>, тож увіходить близько 500; припустімо, рядок формату утримує відповідь у JSON приблизно на 80 токенів. На DeepSeek-V4-Flash це $0.00003 за лист для однорядкового запиту і $0.000016 для структурованого. Запит став довшим, але запит став дешевшим, бо довга частина — це вхід, а частина, яку ви скоротили, — це вихід. Запустіть скрипт і замініть ці припущення на власні prompt_tokens і completion_tokens.

Ось структурований запит на 1 000 листів на день по моделях. Загалом, з урахуванням входу й виходу разом, CheapTokens виходить дешевшим за довідкову ціну OpenRouter на цьому навантаженні; поточні ціни на сторінці цін.

Модель За запит 1 000 запитів OpenRouter, 1 000 запитів
GLM-5.3-Flash $0.000013 $0.0132 $0.0234
DeepSeek-V4-Flash $0.000016 $0.0155 $0.0462
MiniMax-M2.7 $0.000037 $0.037 $0.444

500 вхідних і 80 вихідних токенів на запит. Ціни за 1 млн токенів актуальні та змінюються разом із нашими тарифами; стовпець OpenRouter показує довідкові ціни для того самого навантаження.

Перевірте себе#

Одне питання про звичку, яка найбільше окупається, коли скрипт повторно використовує запит. Коли структура працює, наступні важелі — це системне повідомлення й температура, про них у Системний запит і температура.

Швидка перевірка

Ваш скрипт надсилає ті самі інструкції з новим листом щоразу. Куди має йти лист?

Показати відповідь

Відповідь: У кінці, після інструкцій і прикладу

Інструкції залишаються незмінними між запитами, а лист змінюється. Посібник OpenAI пропонує розміщувати контекст, який змінюється, ближче до кінця запиту.