0Pricing
AI Prompt Engineering · Урок

Обычный текст и форматированный вывод

Когда запрашивать чистый обычный текст, а когда — расширенный вывод в Markdown

«Обычный текст и форматированный вывод» — бесплатный урок AI Prompt Engineering на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Prompt Engineering, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Prompt Engineering содержит 4 уроков всего.

Случай с обычным текстом

Форматирование с помощью разметки — мощный инструмент, однако оно не всегда является правильным выбором. Многие реальные приложения требуют чистого, неформатированного текста, в котором символы разметки отображаются как обычные символы, а не как форматирование.

Умение определить, когда следует запросить обычный текст, так же важно, как и умение запрашивать расширенное форматирование.

Когда требуется обычный текст

Используйте вывод в виде обычного текста, если среда не отображает разметку:

  • Текст электронного письма: большинство почтовых клиентов показывают необработанные звёздочки
  • SMS и push-уведомления: форматирование не поддерживается
  • Голосовой вывод: преобразование текста в речь буквально читает '** жирный шрифт **'
  • Поля CRM и службы поддержки: многие из них не отображают разметку
  • Обработка данных через программный интерфейс: когда текст будет сохранён или обработан дополнительно
  • Поля ввода устаревших систем: поддерживается только обычный текст
import anthropic

client = anthropic.Anthropic(api_key='sk-ant-your-key-here')

response = client.messages.create(
    model='claude-opus-4-5',
    max_tokens=200,
    messages=[{
        'role': 'user',
        'content': (
            'Write a 120-character push notification for a flash sale ending in 2 hours. '
            'Plain text only — no emojis, no markdown, no asterisks, no special characters. '
            'Must include: urgency, discount percentage (30%), and category (electronics). '
            'Output the notification text only — nothing else.'
        )
    }]
)
print(response.content[0].text)

Явный запрос обычного текста

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

  • «Только обычный текст — без форматирования разметкой»
  • «Без звёздочек, без символов решётки, без маркеров списка»
  • «Без заголовков, без жирного шрифта, без списков — только связные абзацы»
  • «Удалите всё форматирование — выведите текст так, как если бы он набирался в Блокноте»
import openai

client = openai.OpenAI(api_key='sk-your-key-here')

# Without plain text instruction — likely gets markdown
default_prompt = 'Explain what a webhook is in 100 words.'

# With explicit plain text instruction
plain_prompt = (
    'Explain what a webhook is in 100 words. '
    'Output format: plain text only. No markdown. No asterisks. No headers. '
    'No bullet points. Just continuous prose paragraphs.'
)

for label, prompt in [('DEFAULT (likely markdown)', default_prompt), ('EXPLICIT PLAIN TEXT', plain_prompt)]:
    response = client.chat.completions.create(
        model='gpt-4o', max_tokens=150,
        messages=[{'role': 'user', 'content': prompt}]
    )
    print(f'--- {label} ---')
    print(response.choices[0].message.content)
    print()

Обычный текст для электронных писем

Написание текста электронных писем — один из самых распространённых вариантов использования обычного текста. Хотя некоторые почтовые клиенты поддерживают форматирование HTML, текст электронного письма, созданный ИИ, должен представлять собой чистый связный текст, который редактор может напрямую вставить в почтовый клиент или CRM без дополнительной обработки.

Укажите: «Напишите текст электронного письма в виде обычного текста. Без разметки. Без звёздочек для жирного шрифта. Без дефисов для списков. Вместо списков используйте нумерованные предложения или разрывы строк».

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-your-key-here')

response = client.messages.create(
    model='claude-opus-4-5',
    max_tokens=300,
    messages=[{
        'role': 'user',
        'content': (
            'Write a 3-paragraph re-engagement email for inactive newsletter subscribers. '
            'Context: SaaS analytics tool, subscriber inactive for 60 days.\n'
            'Format requirements:\n'
            '- Plain text only — no asterisks, no pound signs, no bullet symbols\n'
            '- Paragraph 1: acknowledge absence, create curiosity\n'
            '- Paragraph 2: one new feature they missed\n'
            '- Paragraph 3: CTA with a direct link placeholder [LINK]\n'
            '- No subject line — body only'
        )
    }]
)
print(response.content[0].text)

Связные абзацы

Помимо отказа от символов разметки, «связный текст» означает изложение мыслей в виде последовательных предложений, а не разрозненных пунктов списка.

Хороший связный текст:

  • Использует слова-связки для объединения мыслей (однако, кроме того, в результате)
  • Чередует длину предложений, создавая ритм
  • Объединяет связанные мысли в последовательные абзацы
  • Не начинает каждое предложение с существительного

Запрос: «Пишите связными абзацами — без списков и заголовков, последовательными предложениями со словами-связками».

import openai

client = openai.OpenAI(api_key='sk-your-key-here')

prose_prompt = (
    'Explain the advantages of using Docker for development environments. '
    'Write in 3 clean prose paragraphs. '
    'Requirements:\n'
    '- No bullet points or numbered lists\n'
    '- No markdown headers\n'
    '- Use transition words between sentences and paragraphs\n'
    '- Vary sentence length — mix short and long\n'
    '- 150 words total maximum'
)

response = client.chat.completions.create(
    model='gpt-4o',
    messages=[{'role': 'user', 'content': prose_prompt}]
)
print(response.choices[0].message.content)

Обычный текст для голосового вывода

Системы преобразования текста в речь читают всё буквально. Если вывод ИИ будет произноситься вслух:

  • Избегайте любых символов разметки
  • Избегайте сокращений (TTS может не раскрыть их)
  • При необходимости записывайте числа полностью
  • Используйте запятые для естественных пауз
  • Избегайте скобок — TTS часто произносит их неестественно
  • Произносите специальные символы словами («@» → «собака»)
import anthropic

client = anthropic.Anthropic(api_key='sk-ant-your-key-here')

response = client.messages.create(
    model='claude-opus-4-5',
    max_tokens=200,
    messages=[{
        'role': 'user',
        'content': (
            'Write a 45-second spoken weather briefing for London today. '
            'Conditions: 12 degrees Celsius, light rain, wind 15 km/h from the southwest.\n'
            'Format for voice output:\n'
            '- No markdown symbols of any kind\n'
            '- No parentheses\n'
            '- No abbreviations (write "kilometres per hour" not "km/h")\n'
            '- Natural spoken rhythm — use commas for pause points\n'
            '- Write numbers as words when under ten'
        )
    }]
)
print(response.content[0].text)

Удаление разметки из существующего вывода

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

«Удалите всё форматирование разметкой из следующего текста. Замените **жирное начертание** обычным текстом, удалите # заголовки, преобразуйте маркеры списка в нумерованные предложения, удалите все звёздочки и символы решётки. Выведите только чистый обычный текст».

import openai
import re

client = openai.OpenAI(api_key='sk-your-key-here')

markdown_text = (
    '## Key Benefits\n'
    '- **Faster deployment** with Docker containers\n'
    '- **Consistent environments** across dev and prod\n'
    '- Reduced *configuration drift* between machines\n'
    '### Getting Started\n'
    'Run docker-compose up to start all services.'
)

# Option 1: Ask AI to strip
response = client.chat.completions.create(
    model='gpt-4o',
    max_tokens=150,
    messages=[{
        'role': 'user',
        'content': (
            'Remove all markdown formatting from the text below. '
            'Keep all the information but strip: **, ##, ###, -, *, backticks. '
            'Convert bullet lists to flowing sentences. Output plain text only.\n\n'
            + markdown_text
        )
    }]
)
print('AI-stripped:', response.choices[0].message.content.strip())

# Option 2: Simple regex strip (for code-based pipelines)
import re
clean = re.sub(r'[#*]', '', markdown_text).strip()
print('Regex-stripped:', clean)

Обычный текст в системных сообщениях

Для помощников на основе ИИ, которые постоянно выводят данные в средах с обычным текстом, задайте правило форматирования один раз в системном сообщении, а не повторяйте его в каждом сообщении пользователя.

Это наиболее удобный подход для рабочих приложений, если среда отображения заранее известна.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-your-key-here')

# System message enforces plain text for all responses
plain_text_system = (
    'You are a helpful assistant embedded in a mobile push notification system. '
    'All your responses are displayed as plain text in mobile notifications. '
    'ALWAYS follow these formatting rules:\n'
    '- Never use markdown (no **, no #, no -, no backtick, no *, no _)\n'
    '- Never use bullet points or numbered lists\n'
    '- Write in 1-2 complete sentences only\n'
    '- Maximum 120 characters per response\n'
    '- No emojis'
)

response = client.messages.create(
    model='claude-opus-4-5',
    max_tokens=64,
    system=plain_text_system,
    messages=[
        {'role': 'user', 'content': 'Notify user their order has shipped and will arrive in 2 days.'}
    ]
)
print(response.content[0].text)

Схема выбора формата

Перед запросом любого формата вывода воспользуйтесь этой краткой схемой принятия решения:

  1. Куда поступает вывод? Веб-интерфейс, электронная почта, терминал, голосовой канал, база данных
  2. Отображает ли эта среда разметку? Да → используйте разметку. Нет → обычный текст.
  3. Будет ли его читать человек? Да → структурируйте текст для удобного просмотра. Нет → оптимизируйте его для разбора.
  4. Будет ли код его обрабатывать? Да → JSON или CSV, без связного текста.
  5. Будет ли текст произноситься вслух? Да → обычный текст, безопасный для голосового вывода, без сокращений.
def choose_format(environment, human_reads, code_processes, voice_output):
    '''Simple formatting decision tree.'''
    if voice_output:
        return 'PLAIN TEXT — voice safe, spell out numbers and units'
    if code_processes:
        return 'JSON or CSV — machine-parseable, no prose'
    renders_markdown = environment in ['web', 'notion', 'github', 'vscode', 'obsidian']
    if renders_markdown and human_reads:
        return 'MARKDOWN — headers, bold, code blocks, lists'
    return 'PLAIN TEXT — clean prose paragraphs, no markdown symbols'

scenarios = [
    ('web',         True,  False, False),
    ('email',       True,  False, False),
    ('api_pipeline',False, True,  False),
    ('voice_app',   False, False, True),
    ('terminal',    True,  False, False),
]
for env, human, code, voice in scenarios:
    result = choose_format(env, human, code, voice)
    print(f'{env:<15} -> {result}')

Структурированный обычный текст

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

  • ALL CAPS SECTION LABELS (отображаются одинаково в любой среде)
  • Разрывов строк между разделами
  • Нумерованных предложений: «1. Первый пункт. 2. Второй пункт.»
  • Длинных тире для разделения: «Ключевой вывод — всегда проверяйте данные перед действием»
  • Единообразных отступов, заданных пробелами (для вывода в терминале)
import openai

client = openai.OpenAI(api_key='sk-your-key-here')

response = client.chat.completions.create(
    model='gpt-4o',
    messages=[{
        'role': 'user',
        'content': (
            'Write a daily briefing for a developer — 3 sections: TASKS, BLOCKERS, NOTES. '
            'Format: plain text only. '
            'Use ALL CAPS section labels followed by a colon. '
            'Use a line break between sections. '
            'Number each item within a section. '
            'No markdown symbols of any kind. '
            'Use realistic placeholder content.'
        )
    }]
)
print(response.choices[0].message.content)

Определение формата вывода

В рабочих приложениях можно программно определить среду вывода и автоматически добавить подходящую инструкцию по формату — так вам никогда не придётся указывать её вручную в каждом запросе.

Это распространённый шаблон в многоканальных системах ИИ, которые предоставляют один и тот же контент веб-, мобильным и другим потребителям через программный интерфейс.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-your-key-here')

def get_format_instruction(channel):
    formats = {
        'web':   'Use markdown formatting: headers, bold, bullet points, code blocks.',
        'email': 'Plain text only. No markdown symbols. Use line breaks between sections.',
        'sms':   'Plain text. Single paragraph. Max 160 characters.',
        'voice': 'Plain text. No symbols. Natural spoken sentences only. Spell out numbers.',
        'api':   'JSON output only. No prose.',
    }
    return formats.get(channel, 'Plain text only.')

def ask_with_channel(question, channel):
    fmt = get_format_instruction(channel)
    response = client.messages.create(
        model='claude-opus-4-5',
        max_tokens=100,
        system=f'Format instruction: {fmt}',
        messages=[{'role': 'user', 'content': question}]
    )
    return response.content[0].text

q = 'What are 3 benefits of regular code reviews?'
for ch in ['web', 'sms', 'voice']:
    print(f'[{ch.upper()}]:')
    print(ask_with_channel(q, ch)[:150])
    print()

Проверка знаний

Разработчик создаёт чат-бота на основе ИИ для обслуживания клиентов. Ответы передаются в устаревшую CRM, которая хранит обычный текст. ИИ продолжает выдавать ответы с ** для жирного шрифта и - для маркеров списка, поэтому в CRM отображаются необработанные символы. Какое исправление будет наиболее надёжным?

Обычный текст и форматированный вывод — итоги

Выбор подходящего формата зависит от среды вывода. Основные правила:

  • Используйте разметку, если среда отображает её: веб-интерфейсы, Нотион, GitHub, документация
  • Используйте обычный текст для текста электронных писем, SMS, голосового вывода, CRM и конвейеров API
  • Используйте JSON/CSV, если вывод будет обрабатываться кодом
  • Запрашивайте обычный текст, явно перечисляя элементы, которых следует избегать: без звёздочек, без символов решётки, без маркеров
  • Задайте правила форматирования один раз в системном сообщении, чтобы поведение приложения оставалось единообразным
  • Обычный текст всё равно может иметь структуру благодаря CAPS LABELS, разрывам строк и нумерованным предложениям

Часто задаваемые вопросы

Урок «Обычный текст и форматированный вывод» бесплатный?

Да — полный текст урока «Обычный текст и форматированный вывод» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Prompt Engineering, подпишись на CoddyKit PRO. Курс AI Prompt Engineering содержит 4 уроков всего.

Чему я научусь в уроке «Обычный текст и форматированный вывод»?

Когда запрашивать чистый обычный текст, а когда — расширенный вывод в Markdown Ты практикуешь AI Prompt Engineering с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать AI Prompt Engineering?

Предыдущий опыт не требуется. AI Prompt Engineering на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Обычный текст и форматированный вывод»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке AI Prompt Engineering?

Да. Каждый урок AI Prompt Engineering включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Запросы списков и маркированных пунктов
  2. Запрос таблиц и структурированных данных
  3. Форматирование Markdown в запросах
  4. Обычный текст и форматированный вывод
← Назад к AI Prompt Engineering