[AI-007][중급] 프롬프트·토큰·컨텍스트 예산 이해하기 > IT 기술 공유

본문 바로가기
사이트 내 전체검색

IT 기술 공유

[AI-007][중급] 프롬프트·토큰·컨텍스트 예산 이해하기

페이지 정보

profile_image
작성자 기술팀장
댓글 0건 조회 133회 작성일 26-09-02 21:34

본문

[이번 수업]
대규모 언어모델에 전달하는 프롬프트, 모델이 처리하는 토큰, 한 번에 참고할 수 있는 컨텍스트 창을 연결해 이해합니다. 숫자가 자주 바뀌는 특정 모델 대신 공통 원리와 예산 계산법을 익힙니다.

[선수지식]
AI-006의 Transformer와 대규모 언어모델 개념을 알고 Python과 터미널을 실행할 수 있어야 합니다.

[학습목표]
1. 프롬프트의 구성 요소를 설명한다.
2. 토큰이 글자·단어와 항상 같지 않음을 확인한다.
3. 컨텍스트 창 안에서 입력과 출력을 계획한다.

[핵심개념]
프롬프트(prompt)는 모델에 제공하는 지시, 질문, 예시와 입력 자료의 묶음입니다. 좋은 프롬프트는 해야 할 작업, 사용할 자료, 지켜야 할 제한, 원하는 출력 형식을 구분해 씁니다. 예를 들어 “다음 글을 세 문장으로 요약하고 모르는 내용은 추측하지 마세요”처럼 완료 조건을 확인할 수 있게 적습니다. 긴 설명보다 관련 정보가 정확히 들어 있는지가 중요합니다.

토큰(token)은 언어모델이 학습하고 예측하는 텍스트 조각입니다. 모델의 토크나이저(tokenizer)는 텍스트를 정규화하고 단어·부분 단어·문장부호 같은 조각으로 나눈 뒤 숫자 ID로 바꿉니다. 같은 문장도 모델과 토크나이저, 언어에 따라 토큰 수가 달라질 수 있습니다. 따라서 글자 수나 띄어쓰기 단어 수는 대략적인 참고값일 뿐이며 실제 요청은 해당 모델의 공식 토크나이저나 사용량 필드로 확인합니다.

컨텍스트 창(context window)은 모델이 한 번의 처리에서 참고할 수 있는 토큰 범위입니다. 지시문, 대화 기록, 예시, 첨부한 자료, 도구 결과와 생성할 답변이 이 예산을 함께 사용합니다. 실제 계산 방식은 서비스마다 다를 수 있으므로 `입력 가능량 = 전체 한도 - 답변 예약량 - 형식·도구 여유량`처럼 보수적으로 계획합니다. 너무 길면 관련 없는 기록을 빼고, 문서를 작은 단위로 나누거나 필요한 부분만 검색해 넣습니다.

[따라하기]
아래 코드를 `context_budget.py`로 저장합니다. 이 정규식은 개념을 보기 위한 학습용 분리기이며 실제 언어모델의 토크나이저가 아닙니다.

```python
import re

text = "안녕, AI! 2+2=4"
pieces = re.findall(r"\w+|[^\w\s]", text)
window = 16
reserved_output = 4
input_budget = window - reserved_output

print(pieces)
print(f"pieces={len(pieces)}")
print(f"characters={len(text)}")
print(f"input_budget={input_budget}")
print(f"fits={len(pieces) <= input_budget}")
```

Windows PowerShell에서는 `py context_budget.py`, macOS·Linux 터미널에서는 `python3 context_budget.py`를 실행합니다. 예상 결과에서 13글자가 학습용 조각 9개로 나뉘고 입력 예산 12 안에 들어갑니다.

```text
['안녕', ',', 'AI', '!', '2', '+', '2', '=', '4']
pieces=9
characters=13
input_budget=12
fits=True
```

실제 토큰 수를 이 결과로 대신하면 안 됩니다. 실제 모델에서는 특수 토큰, 정규화, 부분 단어 규칙 때문에 결과가 달라집니다.

[흔한 실수]
- 인증 토큰과 언어모델의 텍스트 토큰을 혼동한다.
- 한 토큰이 항상 한 글자나 한 단어라고 가정한다.
- 컨텍스트 한도를 입력만의 최대 길이로 생각한다.
- 대화 기록을 계속 붙여 중요한 지시와 답변 공간을 밀어낸다.
- 출력 형식과 완료 조건 없이 막연하게 질문한다.

[보안 주의]
프롬프트와 첨부 자료에 암호·API 키·불필요한 개인정보를 넣지 않습니다. 웹페이지나 문서 같은 외부 자료에는 모델의 원래 지시를 바꾸려는 프롬프트 인젝션(prompt injection)이 숨어 있을 수 있습니다. 외부 내용은 명령이 아니라 분석할 데이터로 분리하고, 모델의 도구 권한은 최소화하며, 파일 삭제·결제·전송 같은 중요한 동작은 별도 검증과 사용자 승인을 거칩니다. 입력과 출력도 길이·형식·권한을 검사합니다.

[직접 해볼 과제]
`text`를 두 문장으로 늘리고 `reserved_output`을 8로 바꿔 다시 실행하세요. `fits`가 어떻게 달라지는지 기록하고, 예산을 넘으면 어떤 문장을 빼거나 나눌지 정한 뒤 실제 사용할 모델의 공식 토큰 계산 결과와 비교합니다.

[확인문제]
1. 같은 문장의 토큰 수가 모델마다 달라질 수 있는 이유는 무엇인가요?
2. 컨텍스트 예산에 입력 외에 무엇을 남겨 두어야 하나요?
3. 외부 문서를 프롬프트에 넣을 때 필요한 보안 원칙은 무엇인가요?

[다음 학습]
다음 DATA-007에서는 데이터를 정확하게 전달하는 표와 그래프를 만듭니다.

[공식 참고 자료]
- 토큰 정의: https://developers.google.com/machine-learning/glossary#token
- 컨텍스트 창 정의: https://developers.google.com/machine-learning/glossary/generative#context_window
- 토크나이저 처리 과정: https://huggingface.co/docs/tokenizers/index
- 입력 자르기와 최대 길이: https://huggingface.co/docs/transformers/pad_truncation
- 프롬프트 인젝션 방어: https://cheatsheetseries.owasp.org/cheatsheets/LLM_Prompt_Injection_Prevention_Cheat_Sheet.html
- Python 정규식: https://docs.python.org/3/library/re.html

댓글목록

등록된 댓글이 없습니다.

회원로그인

회원가입

사이트 정보

회사명 : 회사명 / 대표 : 대표자명
주소 : OO도 OO시 OO구 OO동 123-45
사업자 등록번호 : 123-45-67890
전화 : 02-123-4567 팩스 : 02-123-4568
통신판매업신고번호 : 제 OO구 - 123호
개인정보관리책임자 : 정보책임자명

접속자집계

오늘
723
어제
5,103
최대
16,772
전체
771,777
Copyright © 소유하신 도메인. All rights reserved.