0Pricing
AI Prompt Engineering · 강의

일반 텍스트와 서식이 있는 출력 비교

깔끔한 일반 텍스트와 서식이 풍부한 마크다운 출력 중 무엇을 요청할지 배웁니다.

일반 텍스트와 서식이 있는 출력 비교은(는) CoddyKit의 무료 AI Prompt Engineering 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 AI Prompt Engineering 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. AI Prompt Engineering 강의에는 총 4개의 강의가 포함되어 있습니다.

일반 텍스트가 필요한 경우

마크다운 서식은 강력하지만 항상 올바른 선택은 아닙니다. 많은 실제 애플리케이션에는 마크다운 기호가 서식으로 렌더링되지 않고 문자 그대로 표시되는, 깔끔하고 서식이 지정되지 않은 텍스트가 필요합니다.

일반 텍스트를 요청해야 할 때를 아는 것은 서식이 풍부한 출력을 요청하는 방법을 아는 것만큼 중요합니다.

일반 텍스트가 필요한 경우

환경에서 마크다운을 렌더링하지 않을 때는 일반 텍스트 출력을 사용하십시오:

  • 이메일 문구: 대부분의 이메일 클라이언트에서 별표가 그대로 표시됨
  • SMS 및 푸시 알림: 서식 지원 없음
  • 음성 출력: 텍스트 음성 변환이 '** 굵게 **'를 문자 그대로 읽음
  • CRM 및 헬프 데스크 필드: 많은 필드가 마크다운을 렌더링하지 않음
  • API 데이터 처리: 텍스트를 저장하거나 추가로 처리할 경우
  • 레거시 시스템 입력 필드: 일반 텍스트만 지원
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)

출력 형식 감지

운영 애플리케이션에서는 출력 환경을 프로그래밍 방식으로 감지하고 적절한 형식 지시를 자동으로 주입할 수 있으므로, 각 프롬프트에서 수동으로 지정할 필요가 없습니다.

이는 웹, 모바일, 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()

이해도 확인

개발자가 고객 지원용 인공지능 챗봇을 구축하고 있으며, 응답을 일반 텍스트로 저장하는 레거시 CRM에 전달합니다. 그런데 인공지능이 굵게 표시하는 **와 글머리 기호에 사용하는 -가 포함된 응답을 계속 출력하여 CRM에 원시 문자로 표시됩니다. 가장 신뢰할 수 있는 해결 방법은 무엇입니까?

일반 텍스트와 서식 적용 출력 — 복습

적절한 형식을 선택하는 일은 출력 환경에 따라 달라집니다. 주요 규칙은 다음과 같습니다:

  • 환경에서 렌더링할 때 마크다운을 사용합니다: 웹 사용자 인터페이스, 노션, GitHub, 문서
  • 이메일 문구, SMS, 음성, CRM 및 API 처리 흐름에는 일반 텍스트를 사용합니다
  • 코드가 출력을 처리할 때는 JSON/CSV를 사용합니다
  • 피해야 할 항목을 명시적으로 나열하여 일반 텍스트를 요청합니다: 별표 없음, 해시 기호 없음, 글머리 기호 없음
  • 일관된 애플리케이션 동작을 위해 서식 규칙을 시스템 메시지에서 한 번 설정합니다
  • 일반 텍스트도 CAPS LABELS, 줄 바꿈, 번호가 매겨진 문장을 통해 구조를 가질 수 있습니다

자주 묻는 질문

“일반 텍스트와 서식이 있는 출력 비교” 강의는 무료인가요?

네 — “일반 텍스트와 서식이 있는 출력 비교” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 AI Prompt Engineering 강의 전체를 잠금 해제할 수 있습니다. AI Prompt Engineering 강의에는 총 4개의 강의가 포함되어 있습니다.

“일반 텍스트와 서식이 있는 출력 비교”에서 뭘 배우나요?

깔끔한 일반 텍스트와 서식이 풍부한 마크다운 출력 중 무엇을 요청할지 배웁니다. 브라우저에서 직접 실행하는 실습 코드로 AI Prompt Engineering을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

AI Prompt Engineering을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 AI Prompt Engineering은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“일반 텍스트와 서식이 있는 출력 비교” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 AI Prompt Engineering 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 AI Prompt Engineering 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 목록과 글머리 기호 요청하기
  2. 표와 구조화된 데이터 요청하기
  3. 프롬프트에서 마크다운 형식 지정하기
  4. 일반 텍스트와 서식이 있는 출력 비교
← AI Prompt Engineering(으)로 돌아가기