byteforce

CPN 한국어 자습서 · 러닝패스 2 / 4 — Building with the Claude API

API로 Claude에 접근하기

시스템 프롬프트 실습

System prompts exercise

앞 장에서 배운 system prompt를 직접 써보는 실습입니다. 장황하게 쏟아지는 코드를, 역할 부여 한 줄로 핵심만 남기도록 줄여 봅니다. 먼저 직접 시도한 뒤 해법을 펼쳐 비교하세요.

전체 내레이션영상 나레이션 한국어 번역 (전체)

Stephen Grider · Anthropic 기술 스태프

system prompt를 활용하는 간단한 실습을 해보겠습니다. 노트북을 수정해서, 이번에는 Claude에게 문자열에 중복 문자가 있는지 검사하는 Python 함수를 작성해 달라고 요청합니다. 이걸 실행해 답을 출력하면, 엄청난 양의 코드가 생성되는 걸 보게 됩니다. 일부는 실제 코드지만, 설명도 많이 붙고 주석도 잔뜩 달립니다.

그래서 여기서는 생성되는 코드의 양을 줄여 보는 실습을 해보려고 합니다. 이 함수를 가능한 한 간결하게 구현한 형태까지 줄이는 게 목표입니다. 그러려면 여러분이 직접 system prompt를 작성해 chat 함수 호출에 넘겨 주세요. 이 system prompt는 Claude에게 역할을 부여하고, 가능한 한 간결하게 답하도록 유도해야 합니다. 다시 한 번, 여기서 영상을 멈추고 직접 해본 뒤, 곧바로 해법을 함께 살펴보겠습니다.

해결하기 위해, chat 함수 호출에 system prompt를 넘기겠습니다. 그 안에서 Claude에게 아주 간결한 코드를 쓰도록 유도하는 역할을 부여합니다. "너는 아주 간결한 코드를 쓰는 Python 엔지니어다"라고 적겠습니다. 이제 셀을 실행해서 어떤 응답이 돌아오는지 봅니다.

좋습니다. 이게 제가 찾던 결과에 훨씬 가깝습니다. 이 중복 검사를 구현하기 위해 실제로 작성된 코드가 아주, 아주 짧습니다 — 조금 전에 봤던 코드보다 훨씬요. 이 실습을 잘 해내셨길 바랍니다. 잘 안 됐더라도 전혀 괜찮습니다. 과정 곳곳에 여러분의 실력을 시험해 볼 실습이 더 많이 준비돼 있습니다.

이 실습에서 할 것What you'll do

약 2분
1

chat()system prompt를 넘겨 출력 스타일을 바꾼다

2

역할 부여 + "간결하게" 지시로 군더더기를 걷어낸다

3

system 없을 때 vs 있을 때의 출력을 직접 비교한다

4

같은 모델·같은 질문에도 분량이 크게 달라짐을 확인한다

문제 상황 — 너무 많은 코드

The problem

앞 장에서 만든 chat으로, 문자열에 중복 문자가 있는지 검사하는 Python 함수를 Claude에게 요청합니다.

Recap이전 chat 함수 다시 보기 — system은 두 번째 인자

이 함수는 앞 장 시스템 프롬프트에서 만든 그대로입니다. system이 있을 때만 params에 넣는 구조였습니다. 이번 실습에서는 이 system 인자에 무엇을 넘기는지만 바꿉니다.

노트북 · 재사용 가능한 chat
def chat(messages, system=None):
    params = {
        "model": model,
        "max_tokens": 1000,
        "messages": messages,
    }

    if system:
        params["system"] = system

    message = client.messages.create(**params)
    return message.content[0].text
# 중복 문자 검사 함수를 요청 → 답 출력
노트북 · system 없이 요청
messages = []
add_user_message(
    messages,
    "Write a Python function that checks a string for duplicate characters.",
)

answer = chat(messages)
print(answer)
model 변수

model은 앞 레슨에서 정해 둔 모델 문자열입니다(이 자습서는 현행 claude-sonnet-4-6). 여기서 모델은 그대로 두고, system만 바꿔 응답 스타일을 조절합니다.

실행하면 함수 하나 분량을 훌쩍 넘는 코드가 쏟아집니다 — docstring, 줄줄이 달린 주석, 예시 사용법과 테스트 케이스, 그리고 긴 설명까지.

# print(answer) — 생성된 답 전체
출력 — 장황함
# Python Function to Check for Duplicate Characters in a String

```python
def has_duplicate_characters(string):
    """
    Checks if a string contains any duplicate characters.

    Args:
        string (str): The input string to check for duplicates

    Returns:
        bool: True if the string has duplicate characters, False otherwise
    """
    # Create an empty set to keep track of seen characters
    seen_chars = set()

    # Iterate through each character in the string
    for char in string:
        # If we've seen this character before, there's a duplicate
        if char in seen_chars:
            return True
        # Otherwise, add it to our set of seen characters
        seen_chars.add(char)

    # If we made it through the entire string without finding duplicates
    return False

# Example usage
if __name__ == "__main__":
    test_cases = [
        "abcde",        # No duplicates
        "hello",        # Duplicate 'l'
        "python",       # No duplicates
        "programming",  # Duplicate 'r', 'g', 'm'
        "",             # Empty string
        "aaa"           # Multiple duplicates
    ]

    for test in test_cases:
        result = has_duplicate_characters(test)
        print(f"'{test}' has duplicate characters: {result}")
```

This function:
1. Uses a set to track characters we've seen while iterating
2. Returns True as soon as it finds a duplicate
3. Returns False if it gets through the whole string
4. Has O(n) time complexity where n is the length of the string

전부 맞는 코드입니다. 하지만 우리가 원한 건 "중복 검사" 한 가지였는데, 군더더기가 너무 많습니다. 이걸 핵심만 남도록 줄여 보겠습니다.

실습 — 이렇게 해보세요

Your turn

코드를 새로 짜는 게 아닙니다. 같은 요청은 그대로 두고, chat() 호출에 system prompt 하나를 더해 출력을 바꿉니다.

과제
  • chat() 호출에 system prompt를 하나 넘기세요.
  • 그 system prompt는 Claude에게 역할을 부여해야 합니다 (예: 어떤 종류의 엔지니어인지).
  • 그리고 가능한 한 간결하게 답하도록 유도해야 합니다.
먼저 직접

여기서 영상을 멈추고 직접 한 줄 써보세요. 다 됐으면 아래 정답 보기를 펼쳐 비교하면 됩니다. 잘 안 돼도 괜찮습니다.

해법 — system prompt 한 줄

The solution
정답 보기역할 + 간결 지시를 담은 system prompt

chat() 호출에 system 인자를 더하고, "간결한 코드를 쓰는 Python 엔지니어"라는 역할을 부여합니다. 역할 한 줄에 "간결하게"라는 방향이 함께 들어 있습니다.

# 같은 요청 — system만 추가
노트북 · system 추가
messages = []
add_user_message(
    messages,
    "Write a Python function that checks a string for duplicate characters.",
)

# 역할 부여 + 간결 지시
answer = chat(
    messages,
    system="You are a Python engineer who writes very concise code",
)
print(answer)
역할Python engineer — Claude가 그 직무처럼 답하도록 만듭니다.
방향writes very concise code — 장황한 설명·주석 대신 핵심 구현만 남기게 유도합니다.

결과 — 직접 비교

Seeing the difference

같은 질문, 같은 모델입니다. system prompt만 켜고 꺼서 응답이 어떻게 달라지는지 보세요. 오른쪽 배지의 줄 수를 함께 확인하면 차이가 한눈에 들어옵니다.

중복 검사 함수 · 같은 질문, 달라지는 분량
구현 코드~23줄
system = "..." · 역할 부여
You are a Python engineer who writes very concise code
YouWrite a Python function that checks a string for duplicate characters.
Claude장황함

무엇이 달라졌나

Takeaway

바꾼 건 system prompt 한 줄뿐입니다 — 역할 + 간결 지시. 같은 모델, 같은 질문인데 구현 코드가 ~23줄(+ 예시·설명)에서 2줄로 줄었습니다. 모델을 바꾼 게 아니라, 출력의 분량과 스타일을 의도대로 조절한 것입니다.

트레이드오프

간결함이 늘 정답은 아닙니다. 실제 코드베이스라면 docstring·주석·예시가 오히려 필요할 수 있습니다. 핵심은 "짧게가 좋다"가 아니라, system prompt로 출력 스타일을 원하는 방향으로 정할 수 있다는 점입니다.

성공했다면 좋고, 잘 안 됐어도 괜찮습니다. 과정 곳곳에 직접 실력을 시험해 볼 실습이 더 있습니다.

퀴즈

Quick check

Q1생성되는 코드를 더 간결하게 만들려면 무엇을 바꾸나요?

Q2이 실습에서 system prompt가 한 일은 무엇인가요?

Q3간결한 코드가 항상 더 나은가요?

MEMBER SESSION REQUIRED · REGISTRATION IS FREE

여기부터는 등록한 분에게 열립니다.

전 코스는 계속 무료입니다. 등록하면 이 코스의 남은 76개 레슨을 끝까지 읽을 수 있습니다.

등록하고 이어서 읽기

이미 등록하셨다면 그때 쓰신 이메일을 넣어 주세요.