Zwykły tekst a formatowany wynik
Dowiedz się, kiedy prosić o czysty tekst, a kiedy o rozbudowany wynik Markdown.
Zwykły tekst a formatowany wynik to bezpłatna lekcja AI Prompt Engineering na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej AI Prompt Engineering, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AI Prompt Engineering zawiera 4 lekcji w sumie.
Przypadek zwykłego tekstu
Formatowanie Markdown jest przydatne, ale nie zawsze stanowi właściwy wybór. Wiele aplikacji używanych w praktyce wymaga czystego, niesformatowanego tekstu, w którym symbole Markdown pojawiają się jako dosłowne znaki zamiast wyrenderowanego formatowania.
Wiedza o tym, kiedy poprosić o zwykły tekst, jest równie ważna jak wiedza o tym, jak poprosić o rozbudowane formatowanie.
Kiedy wymagany jest zwykły tekst
Należy używać zwykłego tekstu, gdy środowisko nie renderuje Markdown:
- Treść wiadomości e-mail: większość klientów poczty wyświetla surowe gwiazdki
- SMS-y i powiadomienia push: brak obsługi formatowania
- Wyjście głosowe: synteza mowy odczytuje „** bold **” dosłownie
- Pola systemów CRM i help desk: wiele z nich nie renderuje Markdown
- Przetwarzanie danych API: gdy tekst będzie przechowywany lub dalej przetwarzany
- Pola wejściowe starszych systemów: tylko zwykły tekst
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)Wyraźne żądanie zwykłego tekstu
W wielu kontekstach modele AI domyślnie generują odpowiedzi intensywnie korzystające z Markdown. Aby uzyskać rzeczywiście zwykły tekst, należy wyraźnie to zaznaczyć i często wskazać konkretne symbole, których trzeba unikać:
- „Tylko zwykły tekst — bez formatowania Markdown”
- „Bez gwiazdek, znaków hash i symboli punktowania”
- „Bez nagłówków, pogrubień i list — wyłącznie ciągłe akapity prozy”
- „Usuń całe formatowanie — wynik ma wyglądać tak, jak tekst wpisany w Notatniku”
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()Zwykły tekst w treści wiadomości e-mail
Tworzenie treści wiadomości e-mail jest jednym z najczęstszych zastosowań zwykłego tekstu. Chociaż niektóre klienty poczty obsługują formatowanie HTML, treść wiadomości generowana przez AI powinna być czystą prozą, którą redaktor może bezpośrednio wkleić do klienta poczty lub systemu CRM bez dodatkowego czyszczenia.
Należy określić: „Proszę napisać treść wiadomości e-mail jako zwykły tekst. Bez Markdown. Bez gwiazdek do oznaczania pogrubienia. Bez myślników w listach. Zamiast list proszę użyć numerowanych zdań lub podziału na wiersze.”
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)Spójne akapity prozy
Oprócz unikania symboli Markdown „czysta proza” oznacza formułowanie myśli w postaci płynnych zdań, a nie fragmentarycznych punktów.
Dobra proza:
- wykorzystuje słowa łączące do powiązania myśli (jednak, ponadto, w rezultacie)
- różnicuje długość zdań, zapewniając odpowiedni rytm
- grupuje powiązane myśli w spójne akapity
- unika rozpoczynania każdego zdania od rzeczownika
Prośba: „Proszę pisać spójną prozą w akapitach — bez list i nagłówków, płynne zdania ze słowami łączącymi.”
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)Zwykły tekst na potrzeby wyjścia głosowego
Systemy syntezy mowy odczytują wszystko dosłownie. Jeśli wynik AI będzie odczytywany na głos:
- należy unikać wszystkich symboli Markdown
- należy unikać skrótów (TTS może ich nie rozwinąć)
- w razie potrzeby należy zapisywać liczby słownie
- należy używać przecinków w miejscach naturalnych pauz
- należy unikać nawiasów — system TTS często odczytuje je w nienaturalny sposób
- należy zapisywać znaki specjalne słownie („@” → „małpa”)
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)Usuwanie Markdown z istniejącego wyniku
Czasami otrzymują Państwo wynik w formacie Markdown z jednego wywołania AI i muszą go oczyścić na potrzeby innego kontekstu. Można w tym celu użyć drugiego wywołania AI, przeznaczonego konkretnie do usuwania formatowania:
„Proszę usunąć całe formatowanie Markdown z poniższego tekstu. Proszę zastąpić **pogrubienie** zwykłym tekstem, usunąć nagłówki #, zamienić punkty listy na numerowane zdania oraz usunąć wszystkie gwiazdki i znaki hash. Wynik ma zawierać wyłącznie czysty zwykły tekst.”
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)Zwykły tekst w wiadomościach systemowych
W przypadku asystentów AI, które stale generują wyniki dla środowisk obsługujących zwykły tekst, należy ustawić regułę formatowania raz w wiadomości systemowej, zamiast powtarzać ją w każdej wiadomości użytkownika.
Jest to najczystsze podejście w aplikacjach produkcyjnych, gdy środowisko renderowania jest znane z wyprzedzeniem.
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)Schemat wyboru formatu
Przed zażądaniem wyniku w dowolnym formacie warto skorzystać z poniższego szybkiego schematu decyzyjnego:
- Dokąd trafia wynik? Do interfejsu webowego, wiadomości e-mail, terminala, wyjścia głosowego czy bazy danych
- Czy to środowisko renderuje Markdown? Tak → należy użyć Markdown. Nie → zwykłego tekstu.
- Czy będzie to czytać człowiek? Tak → należy zadbać o strukturę ułatwiającą szybkie skanowanie wzrokiem. Nie → należy zoptymalizować wynik pod kątem parsowania.
- Czy kod będzie go przetwarzać? Tak → należy użyć JSON lub CSV, bez prozy.
- Czy wynik będzie odczytywany? Tak → należy użyć zwykłego tekstu bezpiecznego dla głosu, bez skrótów.
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}')Ustrukturyzowany zwykły tekst
Zwykły tekst nie musi być pozbawiony struktury. Można ją utworzyć bez Markdown za pomocą:
- ETYKIET SEKCJI PISANYCH WIELKIMI LITERAMI (wyświetlanych tak samo w każdym środowisku)
- podziału na wiersze między sekcjami
- numerowanych zdań: „1. Pierwszy punkt. 2. Drugi punkt.”
- pauz oddzielających treść: „Najważniejszy wniosek — zawsze należy zweryfikować wynik przed działaniem.”
- konsekwentnych wcięć za pomocą spacji (w przypadku wyników terminala)
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)Wykrywanie formatu wyjściowego
W aplikacjach produkcyjnych można programowo wykrywać środowisko wyjściowe i automatycznie wstawiać odpowiednią instrukcję dotyczącą formatu — dzięki temu nie trzeba określać go ręcznie w każdym promptcie.
Jest to często stosowany wzorzec w wielokanałowych systemach AI, które udostępniają te same treści w internecie, na urządzeniach mobilnych i odbiorcom API.
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()Sprawdzenie wiedzy
Programista tworzy chatbota AI do obsługi klienta, który przekazuje odpowiedzi do starszego systemu CRM przechowującego zwykły tekst. AI stale generuje odpowiedzi z ** oznaczającymi pogrubienie oraz - oznaczającymi punkty listy, które w systemie CRM wyświetlają się jako surowe znaki. Jakie jest najbardziej niezawodne rozwiązanie?
Zwykły tekst a formatowany wynik — podsumowanie
Wybór właściwego formatu zależy od środowiska wyjściowego. Najważniejsze zasady:
- należy używać Markdown, gdy środowisko go renderuje: w interfejsach webowych, Notion, GitHub i dokumentacji
- należy używać zwykłego tekstu w treści wiadomości e-mail, SMS-ach, wyjściu głosowym, systemach CRM i potokach API
- należy używać JSON/CSV, gdy wynik będzie przetwarzany przez kod
- należy żądać zwykłego tekstu, wyraźnie wymieniając elementy, których trzeba unikać: bez gwiazdek, znaków hash i punktów listy
- należy ustawić reguły formatowania raz w wiadomości systemowej, aby zapewnić spójne działanie aplikacji
- zwykły tekst nadal może mieć strukturę dzięki ETYKIETOM PISANYM WIELKIMI LITERAMI, podziałom na wiersze i numerowanym zdaniom
Często zadawane pytania
Czy lekcja „Zwykły tekst a formatowany wynik” jest bezpłatna?
Tak — pełny tekst „Zwykły tekst a formatowany wynik” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu AI Prompt Engineering, przejdź na CoddyKit PRO. Kurs AI Prompt Engineering zawiera 4 lekcji w sumie.
Co nauczysz się w „Zwykły tekst a formatowany wynik”?
Dowiedz się, kiedy prosić o czysty tekst, a kiedy o rozbudowany wynik Markdown. Ćwiczysz AI Prompt Engineering z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć AI Prompt Engineering?
Nie wymagamy żadnego doświadczenia. AI Prompt Engineering w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Zwykły tekst a formatowany wynik”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji AI Prompt Engineering?
Tak. Każda lekcja AI Prompt Engineering zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Prośby o listy i wypunktowania
- Prośby o tabele i dane strukturalne
- Formatowanie Markdown w promptach
- Zwykły tekst a formatowany wynik