로컬 AI 기초 · 글 11편
로컬 AI 기초이 글에서 다루는 것1B~4B급 로컬 모델에서 결과를 안정시키는 지시문 작성법을 다섯 요소, 세 가지 원칙, 고쳐 쓰기 예시로 정리합니다.
작은 모델은 알아서 해 주지 않습니다
온라인의 대형 모델은 “이거 정리해 줘”처럼 막연하게 말해도 맥락을 짐작해 그럴듯한 결과를 냅니다. 1B~4B급 작은 모델은 그렇지 않습니다. 적어 주지 않은 것은 하지 않고, 적어 준 것도 길어지면 놓칩니다.
강의에서는 이것을 프롬프트가 왜 중요한지 가장 직접 체험하는 방법으로 씁니다. 같은 지시를 큰 모델과 작은 모델에 똑같이 넣어 보면, 작은 모델 쪽에서 지시문의 빈틈이 그대로 드러납니다.
지시문의 다섯 요소
강의 교재가 정리한 좋은 프롬프트의 구조입니다.
| 요소 | 적는 내용 | 예 |
|---|---|---|
| 역할 | 모델이 어떤 입장에서 답하는가 | 너는 민원 분류 담당자다 |
| 맥락 | 일의 배경과 읽을 사람 | 접수된 민원을 담당 부서로 넘기려 한다 |
| 작업 | 무엇을 하라는 것인가 | 아래 민원을 범주 하나로 분류하라 |
| 형식 | 결과를 어떤 모양으로 내는가 | 범주 이름만 한 단어로 출력하라 |
| 제약 | 하지 말 것, 지킬 것 | 목록에 없는 범주는 쓰지 않는다 |
후배에게 “보고서 좀 써 봐”라고 하는 것과 “내일 결재용으로, 분량은 한 장, 결론은 표로”라고 하는 것의 차이와 같습니다.
작은 모델을 위한 세 가지 원칙
강의의 Ollama 단원에서 정리한 원칙입니다.
1. 지시를 분명하게 적습니다
- 한 번에 한 가지 일만 시킵니다. “요약하고 분류하고 답변 초안도”라고 하지 않고 세 번에 나누어 부릅니다.
- 고를 수 있는 답을 목록으로 줍니다. “분류하라”가 아니라 “환경, 교통, 복지, 세무, 기타 중 하나를 골라라”라고 적습니다.
- 길이를 숫자로 정합니다. “간단히”가 아니라 “3줄 이내”, “30자 이내”라고 적습니다.
- 답하는 언어를 적습니다. 작은 모델은 한국어 질문에 영어로 답하는 일이 있습니다. “반드시 한국어로 답하라”를 넣습니다.
2. 출력의 모양을 고정합니다
결과를 엑셀 셀이나 다른 프로그램이 받아 쓴다면 모양이 매번 같아야 합니다.
- “다른 설명 없이 범주 이름만 출력하라”
- “항목마다 한 줄씩, 앞에 번호를 붙여라”
- “결과만 출력하고 인사말이나 머리말은 쓰지 마라”
원하는 모양을 예시로 한두 개 보여 주면 더 잘 따릅니다.
3. 넣는 글을 줄입니다
작은 모델은 입력이 길어질수록 지시를 놓칩니다.
- 일에 필요한 부분만 잘라 넣습니다.
- 지시는 맨 앞에 두고, 입력 글이 길면 맨 끝에 지시를 한 번 더 적습니다.
- 지시와 입력 글 사이에 구분선이나 따옴표를 둡니다. 어디까지가 지시이고 어디부터가 처리할 글인지 모델이 헷갈리지 않습니다.
고쳐 쓰기 예시 1: 분류
고치기 전
이 민원 분류해 줘. 골목에 쓰레기가 방치되어 악취가 심합니다
작은 모델은 이 지시에 긴 설명을 붙이거나, 범주를 제멋대로 지어내거나, 영어로 답할 수 있습니다.
고친 뒤
너는 민원 분류 담당자다.
아래 민원을 다음 범주 중 하나로 분류하라.
범주: 환경, 교통, 복지, 세무, 안전, 기타
규칙:
- 범주 이름만 한 단어로 출력한다.
- 목록에 없는 범주는 쓰지 않는다.
- 설명을 붙이지 않는다.
민원: """골목에 쓰레기가 방치되어 악취가 심합니다"""
범주가 열 개를 넘어가면 작은 모델은 구분이 흔들립니다. 강의에서는 범주가 3~5개면 3B급으로 충분하고, 10개가 넘으면 더 큰 모델을 쓰라고 안내합니다.
고쳐 쓰기 예시 2: 요약
고치기 전
아래 회의록 요약해 줘
고친 뒤
아래 회의록을 한국어로 요약하라.
형식:
1. 결정된 사항 (최대 3줄)
2. 담당자와 기한 (있는 경우만)
3. 다음 회의에서 다룰 것 (최대 2줄)
회의록에 없는 내용은 쓰지 않는다. 해당 내용이 없으면 "없음"이라고 쓴다.
회의록:
"""
(여기에 회의록)
"""
위 형식대로 요약만 출력하라.
끝의 한 줄은 지시를 다시 적은 것입니다. 회의록이 길 때 효과가 있습니다.
고쳐 쓰기 예시 3: 모른다고 말하게 하기
작은 모델은 모르는 것을 지어내는 일이 잦습니다. 빠져나갈 길을 지시문에 열어 둡니다.
아래 자료 안에서만 답하라.
자료에 답이 없으면 "확인 후 안내드리겠습니다"라고만 답하라.
시스템 프롬프트로 고정하기
매번 같은 역할과 규칙을 붙여 넣는 것은 번거롭고 빠뜨리기 쉽습니다. 역할과 규칙은 시스템 프롬프트에 한 번 적어 두고, 대화에서는 처리할 글만 넣습니다.
Ollama에서는 대화 중에 다음과 같이 넣을 수 있습니다.
/set system "너는 민원 상담 담당자다. 3줄 이내로 존댓말로 답한다."
업무별로 아예 이름을 붙여 저장해 두려면 Modelfile을 씁니다. 방법은 Modelfile과 파라미터로 업무용 모델 만들기에 있습니다.
설정값도 같이 조정합니다
지시문만으로 안 잡히는 흔들림은 설정값으로 줄입니다.
| 증상 | 조정 |
|---|---|
| 같은 입력에 답이 매번 다름 | temperature를 0.1~0.3으로 낮춤 |
| 답이 끝없이 길어짐 | num_predict로 최대 길이를 정함 |
| 같은 말을 되풀이함 | repeat_penalty를 조금 올림 |
| 결과를 다시 재현해야 함 | seed를 고정 |
프롬프트를 모델에게 쓰게 하기
지시문을 처음부터 잘 쓰기 어렵다면 큰 모델에게 맡깁니다. 강의에서 메타프롬프트라고 부르는 방법입니다.
- 온라인의 큰 모델에 내가 할 일을 대충 설명합니다.
- “이 일을 4B급 작은 로컬 모델에게 시킬 프롬프트를 작성해 줘. 역할, 작업, 출력 형식, 제약을 포함하고 짧고 분명하게.“라고 요청합니다.
- 받은 프롬프트를 로컬 모델에 넣고 실제 문장 몇 개로 시험합니다.
- 틀린 사례를 큰 모델에 보여 주고 프롬프트를 고치게 합니다.
이때 시험용 문장은 실제 자료가 아니라 지어낸 예문을 씁니다.
점검 목록
지시문을 쓴 뒤 확인합니다.
- 한 번에 한 가지 일만 시켰는가
- 고를 수 있는 답을 목록으로 주었는가
- 길이를 숫자로 정했는가
- 답하는 언어를 적었는가
- 출력 모양을 정했는가
- 모를 때 어떻게 답할지 정했는가
- 지시와 입력 글을 구분했는가
- 실제 문장 열 개로 시험했는가