Авторы оригинального гайда: Noah MacCallum (OpenAI), Julian Lee (OpenAI). Дата публикации гайда: 14 апреля 2025 г.

Источник: GPT-4.1 Prompting Guide

GPT-4.1 здесь. Новое семейство моделей от OpenAI значительно превосходит GPT-4o в написании кода, следовании инструкциям и работе с длинным контекстом. Но чтобы раскрыть весь потенциал, придется адаптировать свои подходы к составлению промптов. Этот материал — выжимка ключевых советов из официального гайда OpenAI, основанных на их внутреннем тестировании. Он поможет вам перейти на новый уровень взаимодействия с ИИ.

Старые добрые практики, такие как предоставление примеров в контексте, максимальная ясность инструкций и поощрение планирования через промпт, все еще актуальны. Однако GPT-4.1 обучен следовать инструкциям более точно и буквально, чем его предшественники, которые чаще домысливали намерения пользователя. Это означает, что GPT-4.1 чрезвычайно управляем и отзывчив на четко сформулированные промпты. Если поведение модели отличается от ожидаемого, обычно достаточно одного предложения, твердо и однозначно разъясняющего желаемое поведение, чтобы направить модель на верный путь.

И помните: Промптинг— дисциплина эмпирическая. Создавайте тесты (evals) и часто итерируйте, чтобы убедиться, что ваши изменения в промпт-инженерии приносят пользу.

1. Агентные рабочие процессы: Превращаем GPT-4.1 в самостоятельного исполнителя

GPT-4.1 отлично подходит для создания агентных сценариев. Модель обучалась на разнообразных примерах решения агентных задач и показывает передовые результаты (55% решенных проблем на SWE-bench Verified для моделей без внутреннего логического вывода).

Ключ к агентности: Напоминания в системном промпте

Чтобы GPT-4.1 работал как агент, а не просто чат-бот, OpenAI рекомендует включать три типа напоминаний в системный промпт. Эти инструкции превращают модель в более «инициативного» агента, способного автономно продвигать взаимодействие. Их добавление увеличило результат на SWE-bench Verified почти на 20%.

  1. Настойчивость (Persistence): Дает модели понять, что она вступает в диалог из нескольких сообщений и не должна преждевременно передавать управление пользователю.

    • Оригинальный пример OpenAI:

      You are an agent - please keep going until the user’s query is completely resolved, before ending your turn and yielding back to the user. Only terminate your turn when you are sure that the problem is solved.
  2. Использование инструментов (Tool-calling): Побуждает модель активно использовать предоставленные инструменты и снижает вероятность галлюцинаций или догадок.

    • Оригинальный пример OpenAI:

      If you are not sure about file content or codebase structure pertaining to the user’s request, use your tools to read files and gather the relevant information: do NOT guess or make up an answer.
  3. Планирование (Planning) [опционально]: Заставляет модель явно прописывать план и рефлексировать над каждым вызовом инструмента, а не просто выполнять цепочку вызовов.

    • Оригинальный пример OpenAI:

      You MUST plan extensively before each function call, and reflect extensively on the outcomes of the previous function calls. DO NOT do this entire process by making function calls only, as this can impair your ability to solve the problem and think insightfully.

Работа с инструментами (Tool Calls)

GPT-4.1 лучше предыдущих моделей обучен использованию инструментов, переданных через поле tools в API-запросе OpenAI.

  • Используйте поле tools: Передавайте инструменты исключительно через это поле, а не вставляя их описание в промпт и создавая отдельный парсер. Это минимизирует ошибки.

  • Четкие имена и описания: Называйте инструменты так, чтобы их назначение было очевидно. Добавляйте ясное и подробное описание в поле "description". То же касается параметров инструментов.

  • Примеры использования: Если инструмент сложный, приведите примеры его использования в секции # Examples системного промпта, а не в поле "description". Примеры помогут показать, когда использовать инструменты, нужно ли включать пользовательский текст вместе с вызовами инструментов, и какие параметры подходят для разных входных данных. Используйте "Generate Anything" в Prompt Playground для создания начальных определений инструментов.

Планирование и «Цепочка мыслей» (Chain-of-Thought) через промптинг

Хотя GPT-4.1 не является моделью с внутренним логическим выводом (reasoning model), то есть не генерирует внутреннюю цепочку мыслей перед ответом, вы можете побудить ее к явному пошаговому планированию («мышлению вслух») через промпт. Используйте вариант компонента "Planning", показанный выше.

Пример промпта для SWE-bench Verified (SYS_PROMPT_SWEBENCH): Этот системный промпт использовался OpenAI для достижения наивысшего результата на SWE-bench Verified. Он содержит подробные инструкции по рабочему процессу и стратегии решения проблем. Общий паттерн применим к любой агентной задаче.

Python

SYS_PROMPT_SWEBENCH = """You will be tasked to fix an issue from an open-source repository.
Your thinking should be thorough and so it's fine if it's very long. You can think step by step before and after each action you decide to take.
You MUST iterate and keep going until the problem is solved.
You already have everything you need to solve this problem in the /testbed folder, even without internet connection. I want you to fully solve this autonomously before coming back to me.
Only terminate your turn when you are sure that the problem is solved. Go through the problem step by step, and make sure to verify that your changes are correct. NEVER end your turn without having solved the problem, and when you say you are going to make a tool call, make sure you ACTUALLY make the tool call, instead of ending your turn.
THE PROBLEM CAN DEFINITELY BE SOLVED WITHOUT THE INTERNET.
Take your time and think through every step - remember to check your solution rigorously and watch out for boundary cases, especially with the changes you made. Your solution must be perfect. If not, continue working on it. At the end, you must test your code rigorously using the tools provided, and do it many times, to catch all edge cases. If it is not robust, iterate more and make it perfect. Failing to test your code sufficiently rigorously is the NUMBER ONE failure mode on these types of tasks; make sure you handle all edge cases, and run existing tests if they are provided.
You MUST plan extensively before each function call, and reflect extensively on the outcomes of the previous function calls. DO NOT do this entire process by making function calls only, as this can impair your ability to solve the problem and think insightfully.

# Workflow

## High-Level Problem Solving Strategy
1. Understand the problem deeply. Carefully read the issue and think critically about what is required.
2. Investigate the codebase. Explore relevant files, search for key functions, and gather context.
3. Develop a clear, step-by-step plan. Break down the fix into manageable, incremental steps.
4. Implement the fix incrementally. Make small, testable code changes.
5. Debug as needed. Use debugging techniques to isolate and resolve issues.
6. Test frequently. Run tests after each change to verify correctness.
7. Iterate until the root cause is fixed and all tests pass.
8. Reflect and validate comprehensively. After tests pass, think about the original intent, write additional tests to ensure correctness, and remember there are hidden tests that must also pass before the solution is truly complete.

Refer to the detailed sections below for more information on each step.

## 1. Deeply Understand the Problem
Carefully read the issue and think hard about a plan to solve it before coding.

## 2. Codebase Investigation
- Explore relevant files and directories.
- Search for key functions, classes, or variables related to the issue.
- Read and understand relevant code snippets.
- Identify the root cause of the problem.
- Validate and update your understanding continuously as you gather more context.

## 3. Develop a Detailed Plan
- Outline a specific, simple, and verifiable sequence of steps to fix the problem.
- Break down the fix into small, incremental changes.

## 4. Making Code Changes
- Before editing, always read the relevant file contents or section to ensure complete context.
- If a patch is not applied correctly, attempt to reapply it.
- Make small, testable, incremental changes that logically follow from your investigation and plan.

## 5. Debugging
- Make code changes only if you have high confidence they can solve the problem
- When debugging, try to determine the root cause rather than addressing symptoms
- Debug for as long as needed to identify the root cause and identify a fix
- Use print statements, logs, or temporary code to inspect program state, including descriptive statements or error messages to understand what's happening
- To test hypotheses, you can also add test statements or functions
- Revisit your assumptions if unexpected behavior occurs.

## 6. Testing
- Run tests frequently using `!python3 run_tests.py` (or equivalent).
- After each change, verify correctness by running relevant tests.
- If tests fail, analyze failures and revise your patch.
- Write additional tests if needed to capture important behaviors or edge cases.
- Ensure all tests pass before finalizing.

## 7. Final Verification
- Confirm the root cause is fixed.
- Review your solution for logic correctness and robustness.
- Iterate until you are extremely confident the fix is complete and all tests pass.

## 8. Final Reflection and Additional Testing
- Reflect carefully on the original intent of the user and the problem statement.
- Think about potential edge cases or scenarios that may not be covered by existing tests.
- Write additional tests that would need to pass to fully validate the correctness of your solution.
- Run these new tests and ensure they all pass.
- Be aware that there are additional hidden tests that must also pass for the solution to be successful.
- Do not assume the task is complete just because the visible tests pass; continue refining until you are confident the fix is robust and comprehensive.
"""
# PYTHON_TOOL_DESCRIPTION и python_bash_patch_tool - это описание и структура инструмента для выполнения Python кода, bash команд и применения патчей.
# Эти структуры передаются модели при вызове API.
# Пример вызова:
# from openai import OpenAI
# import os
# client = OpenAI(
# api_key=os.environ.get(
# "OPENAI_API_KEY", "<your OpenAI API key if not set as env var>"
# )
# )
# response = client.responses.create(
# instructions=SYS_PROMPT_SWEBENCH,
# model="gpt-4.1-2025-04-14",
# tools=[python_bash_patch_tool],
# input=f"Please answer the following question:\nBug: Typerror...")

Комментарий: В этом промпте модель получает подробные инструкции о том, как подходить к исправлению ошибок в коде, включая этапы понимания проблемы, исследования кода, планирования, внесения изменений, отладки и тщательного тестирования. Также описан формат использования инструмента python для выполнения кода и применения патчей.

2. Длинный контекст: Работаем с 1 миллионом токенов

GPT-4.1 имеет производительное входное окно контекста в 1 миллион токенов. Это полезно для таких задач, как:

  • Парсинг структурированных документов.

  • Ранжирование информации.

  • Выбор релевантной информации при игнорировании нерелевантного контекста.

  • Многоэтапный логический вывод с использованием контекста.

Оптимальный размер контекста: Модель хорошо справляется с тестами типа "иголка в стоге сена" вплоть до 1М токенов. Однако производительность при работе с длинным контекстом может снижаться, если требуется извлечь много элементов или выполнить сложный логический вывод, требующий знания состояния всего контекста (например, поиск по графу).

Настройка опоры на контекст: Определите, какая комбинация внешних (предоставленных) и внутренних (собственных знаний модели) данных требуется для ответа.

  • Только предоставленный контекст (Оригинальный пример OpenAI):

    # Instructions
    // for internal knowledge
    - Only use the documents in the provided External Context to answer the User Query. If you don't know the answer based on this context, you must respond "I don't have the information needed to answer that", even if a user insists on you answering the question.
  • Предоставленный контекст + знания модели (Оригинальный пример OpenAI):

    // For internal and external knowledge
    - By default, use the provided external context to answer the User Query, but if other basic knowledge is needed to answer, and you're confident in the answer, you can use some of your own knowledge to help answer the question.

Организация промпта для длинного контекста: Размещение инструкций и контекста влияет на производительность.

  • Идеально: Размещайте инструкции и в начале, и в конце предоставленного контекста.

  • Если инструкции только один раз: Лучше разместить их над предоставленным контекстом, чем под ним.

3. «Цепочка мыслей» (Chain of Thought, CoT): Заставляем модель думать по шагам

Как уже упоминалось, GPT-4.1 не является моделью с внутренним логическим выводом. Однако промптинг, побуждающий модель думать по шагам (CoT), — эффективный способ разбить сложные проблемы на управляемые части и улучшить качество вывода. Это достигается ценой большего количества выходных токенов и, соответственно, более высокой стоимости и задержки.

Базовая инструкция для CoT (в конце промпта, оригинальный пример OpenAI):

...

First, think carefully step by step about what documents are needed to answer the query. Then, print out the TITLE and ID of each document. Then, format the IDs into a list.

Улучшение CoT-промптов: Анализируйте ошибки в ваших конкретных примерах и тестах. Устраняйте систематические ошибки планирования и логического вывода с помощью более явных инструкций. Если вы заметили работающий подход, закрепите его в промпте. Ошибки часто возникают из-за неправильного понимания намерения пользователя, недостаточного сбора или анализа контекста, или неверного пошагового мышления.

Пример промпта для анализа (Оригинальный пример OpenAI):

# Reasoning Strategy
1. Query Analysis: Break down and analyze the query until you're confident about what it might be asking. Consider the provided context to help clarify any ambiguous or confusing information.
2. Context Analysis: Carefully select and analyze a large set of potentially relevant documents. Optimize for recall - it's okay if some are irrelevant, but the correct documents must be in this list, otherwise your final answer will be wrong. Analysis steps for each:
	a. Analysis: An analysis of how it may or may not be relevant to answering the query.
	b. Relevance rating: [high, medium, low, none]
3. Synthesis: summarize which documents are most relevant and why, including all documents with a relevance rating of medium or higher.

# User Question
{user_question}

# External Context
{external_context}

First, think carefully step by step about what documents are needed to answer the query, closely adhering to the provided Reasoning Strategy. Then, print out the TITLE and ID of each document. Then, format the IDs into a list.

4. Следование инструкциям: Добиваемся точного контроля

GPT-4.1 отлично следует инструкциям, что позволяет разработчикам точно формировать и контролировать вывод. Модель более буквально следует инструкциям, поэтому может потребоваться явное указание, что делать или не делать. Промпты, оптимизированные для других моделей, могут не сработать сразу, так как неявные правила больше не выводятся так активно.

Рекомендуемый рабочий процесс:

  1. Начните с раздела «Правила Ответа» или «Инструкции» с высокоуровневыми указаниями и пунктами.

  2. Для изменения конкретного поведения добавьте раздел для уточнения деталей, например, # Sample Phrases.

  3. Если нужны конкретные шаги, добавьте упорядоченный список и укажите модели следовать этим шагам.

  4. Если поведение все еще не соответствует ожиданиям:

    • Проверьте наличие конфликтующих, недостаточно определенных или неверных инструкций и примеров. При конфликте GPT-4.1 обычно следует инструкции, расположенной ближе к концу промпта.

    • Добавьте примеры, демонстрирующие желаемое поведение. Убедитесь, что важное поведение из примеров также упомянуто в правилах.

    • Обычно нет необходимости использовать ЗАГЛАВНЫЕ БУКВЫ или стимулы вроде взяток/чаевых. Начинайте без них. Если они есть в ваших существующих промптах, GPT-4.1 может уделить им слишком много внимания.

    • Используйте IDE с ИИ-поддержкой для итерации над промптами (проверка на согласованность, добавление примеров).

Распространенные ошибки (не уникальны для GPT-4.1):

  • Инструкция "всегда делать X" может привести к нежелательным эффектам. Например, "ты должен вызвать инструмент перед ответом пользователю" может заставить модель галлюцинировать входные данные для инструмента. Смягчение: "если у тебя недостаточно информации для вызова инструмента, спроси пользователя о необходимой информации".

  • Примеры фраз могут использоваться моделью дословно, делая ответы монотонными. Укажите модели варьировать их.

  • Излишняя многословность или форматирование. Предоставляйте инструкции и примеры для смягчения.

Пример промпта: Клиентская служба NewTelco (SYS_PROMPT_CUSTOMER_SERVICE): Этот пример демонстрирует лучшие практики для вымышленного агента поддержки. Обратите внимание на разнообразие правил, их специфичность, использование дополнительных разделов для деталей и пример для демонстрации точного поведения.

Python

SYS_PROMPT_CUSTOMER_SERVICE = """You are a helpful customer service agent working for NewTelco, helping a user efficiently fulfill their request while adhering closely to provided guidelines.

# Instructions
- Always greet the user with "Hi, you've reached NewTelco, how can I help you?"
- Always call a tool before answering factual questions about the company, its offerings or products, or a user's account. Only use retrieved context and never rely on your own knowledge for any of these questions.
    - However, if you don't have enough information to properly call the tool, ask the user for the information you need.
- Escalate to a human if the user requests.
- Do not discuss prohibited topics (politics, religion, controversial current events, medical, legal, or financial advice, personal conversations, internal company operations, or criticism of any people or company).
- Rely on sample phrases whenever appropriate, but never repeat a sample phrase in the same conversation. Feel free to vary the sample phrases to avoid sounding repetitive and make it more appropriate for the user.
- Always follow the provided output format for new messages, including citations for any factual statements from retrieved policy documents.
- If you're going to call a tool, always message the user with an appropriate message before and after calling the tool.
- Maintain a professional and concise tone in all responses, and use emojis between sentences.
- If you've resolved the user's request, ask if there's anything else you can help with

# Precise Response Steps (for each response)
1. If necessary, call tools to fulfill the user's desired action. Always message the user before and after calling a tool to keep them in the loop.
2. In your response to the user
    a. Use active listening and echo back what you heard the user ask for.
    b. Respond appropriately given the above guidelines.

# Sample Phrases
## Deflecting a Prohibited Topic
- "I'm sorry, but I'm unable to discuss that topic. Is there something else I can help you with?"
- "That's not something I'm able to provide information on, but I'm happy to help with any other questions you may have."
## Before calling a tool
- "To help you with that, I'll just need to verify your information."
- "Let me check that for you—one moment, please."
- "I'll retrieve the latest details for you now."
## After calling a tool
- "Okay, here's what I found: [response]"
- "So here's what I found: [response]"

# Output Format
- Always include your final response to the user.
- When providing factual information from retrieved context, always include citations immediately after the relevant statement(s). Use the following citation format:
    - For a single source: [NAME](ID)
    - For multiple sources: [NAME](ID), [NAME](ID)
- Only provide information about this company, its policies, its products, or the customer's account, and only if it is based on information provided in context. Do not answer questions outside this scope.

# Example
## User
Can you tell me about your family plan options?
## Assistant Response 1
### Message
"Hi, you've reached NewTelco, how can I help you? ??\n\nYou'd like to know about our family plan options. ? Let me check that for you—one moment, please. ?"
### Tool Calls
lookup_policy_document(topic="family plan options")

// After tool call, the assistant would follow up with:
## Assistant Response 2 (after tool call)
### Message
"Okay, here's what I found: ? Our family plan allows up to 5 lines with shared data and a 10% discount for each additional line [Family Plan Policy](ID-010). ? Is there anything else I can help you with today? ?"
"""
# get_policy_doc и get_user_acct - это определения инструментов для поиска документов и информации об аккаунте.
# Пример вызова API:
# response = client.responses.create(
# instructions=SYS_PROMPT_CUSTOMER_SERVICE,
# model="gpt-4.1-2025-04-14",
# tools=[get_policy_doc, get_user_acct],
# input="How much will it cost for international service? I'm traveling to France.",
# # input="Why was my last bill so high?")

5. Общие советы по промптингу

Структура промпта (хорошая отправная точка, оригинальный пример OpenAI):

# Role and Objective

# Instructions

## Sub-categories for more detailed instructions

# Reasoning Steps

# Output Format

# Examples
## Example 1

# Context

# Final instructions and prompt to think step by step

Добавляйте или удаляйте разделы по мере необходимости.

Разделители:

  • Markdown: Рекомендуется для начала. Используйте заголовки Markdown для основных разделов и подсекций (включая более глубокую иерархию, до H4+). Используйте встроенные обратные кавычки или блоки обратных кавычек для точного обрамления кода, а также стандартные нумерованные или маркированные списки.

  • XML: Также хорошо работают. XML удобен для точного обрамления раздела, добавления метаданных к тегам и вложенности.

    • Оригинальный пример OpenAI:

      XML

      <examples>
      <example1 type="Abbreviate">
      <input>San Francisco</input>
      <output>- SF</output>
      </example1>
      </examples>
  • JSON: Очень структурирован и хорошо понимается моделью, особенно в контексте кодирования. Однако может быть более многословным и требовать экранирования символов.

Разделители для большого количества документов в длинном контексте (Оригинальные примеры OpenAI):

  • XML: Хорошо показал себя в тестах OpenAI.

    • Пример: <doc id=1 title=”The Fox”>The quick brown fox jumps over the lazy dog</doc>

  • Формат Lee et al.: Также хорошо себя показал.

    • Пример: ID: 1 | TITLE: The Fox | CONTENT: The quick brown fox jumps over the lazy dog

  • JSON: Показал себя особенно плохо.

    • Пример: [{“id”: 1, “title”: “The Fox”, “content”: “The quick brown fox jumped over the lazy dog”}]

В целом, используйте здравый смысл и думайте о том, что обеспечит ясную информацию и "выделится" для модели.

Предостережения:

  • В редких случаях модель может сопротивляться созданию очень длинных, повторяющихся выводов. Если это необходимо, настойчиво проинструктируйте модель выводить эту информацию полностью или рассмотрите возможность разбиения проблемы.

  • Наблюдались редкие случаи некорректных параллельных вызовов инструментов. Рекомендуется тестировать это и рассмотреть возможность установки параметра parallel_tool_calls в false при возникновении проблем.

Вывод: Осваиваем GPT-4.1 через осознанный промптинг

Освоение техник промптинга для GPT-4.1 — это не просто следование инструкциям, а переход на новый уровень взаимодействия с LLM. Более буквальное следование инструкциям моделью требует от разработчика большей точности и ясности в формулировках.

Ключевые моменты, которые выделил OpenAI в своем гайде:

  • Для агентных сценариев: Используйте напоминания о настойчивости, инструментах и планировании.

  • Для длинного контекста: Размещайте инструкции в начале и конце, управляйте опорой на внешний/внутренний контекст.

  • Для «цепочки мыслей»: Явно побуждайте модель к пошаговому мышлению.

  • Для следования инструкциям: Будьте максимально точны, проверяйте конфликты и используйте примеры.

  • Общие советы: Структурируйте промпты логично и выбирайте подходящие разделители.

Экспериментируйте с этими подходами, создавайте информативные тесты (evals) для ваших конкретных задач и итерируйте. Данный разбор и оригинальный гайд от OpenAI помогут вам в этом путешествии, превращая вызовы новой модели в ваши сильные стороны.

Комментарии (0)