Ollama 실전 · 글 8편Ollama 실전
  1. Ollama 처음 시작하기
  2. Ollama 모델 관리: 받기, 확인, 정리
  3. Modelfile과 파라미터로 업무용 모델 만들기
  4. Ollama API를 Python에서 부르기
  5. HTML 파일 하나로 Ollama 챗봇 만들기
  6. 엑셀에서 Ollama 부르기: VBA로 AI 함수 만들기
  7. Ollama가 느리거나 안 될 때 점검 순서
  8. 사무실 네트워크에서 한 대의 모델 같이 쓰기

이 글에서 다루는 것시스템 프롬프트와 설정값을 Modelfile에 담아 이름 붙은 업무용 모델로 저장하는 방법과, 설정값을 바꾸는 세 가지 경로를 설명합니다.

Modelfile이 하는 일

같은 모델이라도 업무마다 시키는 방식이 다릅니다. 민원 상담에는 짧고 공손한 답이, 분류에는 한 단어 답이 필요합니다. 그때마다 역할과 규칙을 다시 입력하는 대신 파일 하나에 적어 두고 이름을 붙여 저장할 수 있습니다. 이 파일이 Modelfile입니다.

Modelfile은 메모장으로 여는 일반 텍스트 파일입니다. 세 가지를 적습니다.

줄 적는 내용
FROM 바탕이 되는 모델
SYSTEM 시스템 프롬프트. 모델의 역할과 답변 규칙
PARAMETER 답의 성향을 조절하는 설정값

새 모델을 학습시키는 것이 아닙니다. 기존 모델에 “이 역할과 이 설정으로 답하라”는 꼬리표를 붙여 다른 이름으로 저장하는 것입니다. 그래서 만드는 데 몇 초면 되고 디스크도 거의 더 쓰지 않습니다.

만들어 보기: 민원 상담용 모델

1. 바탕 모델 받기

ollama pull gemma4:e4b

모델 이름은 예시입니다. 이미 받아 둔 모델이 있으면 그것을 써도 됩니다.

2. Modelfile 쓰기

작업 폴더를 하나 만들고 그 안에 minwon.Modelfile이라는 이름으로 파일을 만듭니다. 내용은 강의 실습에서 쓰는 것과 같은 구조입니다.

FROM gemma4:e4b

# 시스템 프롬프트: 모델의 역할을 고정
SYSTEM """너는 민원 상담 담당자다.
답변 규칙:
1. 3줄 이내로 답한다.
2. 반드시 한국어 존댓말을 쓴다.
3. 관련 법령이 있으면 이름을 적되, 확실하지 않으면 적지 않는다.
4. 모르는 것은 "확인 후 안내드리겠습니다"라고 답한다."""

# 설정값
PARAMETER temperature 0.3
PARAMETER top_p 0.9
PARAMETER num_predict 512
PARAMETER num_ctx 4096
PARAMETER seed 42
  • #으로 시작하는 줄은 설명입니다. 실행에 영향을 주지 않습니다.
  • 시스템 프롬프트가 여러 줄이면 큰따옴표 세 개(""")로 감쌉니다.
  • 메모장으로 저장할 때 확장자 .txt가 뒤에 붙지 않았는지 확인합니다.

3. 모델로 등록하기

터미널에서 그 폴더로 이동한 뒤 실행합니다.

ollama create minwon -f minwon.Modelfile

minwon이 새 모델의 이름입니다. 이름은 영문 소문자와 숫자로 짓습니다. 다른 프로그램에서 부를 때 글자가 깨지거나 거부되는 일을 피할 수 있습니다.

4. 실행하기

ollama run minwon

ollama ls를 실행하면 목록에 minwon이 보입니다. 이제 엑셀이나 파이썬에서 모델 이름을 minwon으로 지정하면 같은 역할과 설정으로 답합니다.

5. 고치기

파일을 고친 뒤 같은 ollama create 명령을 다시 실행하면 덮어씁니다. 필요 없어지면 ollama rm minwon으로 지웁니다.

설정값의 뜻

설정값 하는 일 실습에서 쓰는 값
temperature 낮을수록 같은 질문에 같은 답. 높을수록 다양하고 자유로운 답 분류·상담 0.1~0.3
top_p 다음 말의 후보를 확률 상위 몇 %까지 볼지 0.9
top_k 다음 말의 후보를 상위 몇 개까지 볼지 40
num_predict 답의 최대 길이(토큰) 256~512
repeat_penalty 같은 말을 되풀이하지 않게 하는 정도 1.1
num_ctx 한 번에 다룰 수 있는 글의 양(토큰) 4096
seed 같은 값이면 같은 입력에 같은 결과를 재현하기 쉬움 42 등 임의의 정수
stop 이 글자가 나오면 답을 멈춤 모델에 따라 지정

처음에는 temperature, num_predict, num_ctx 세 가지만 건드려도 충분합니다.

  • temperature: 분류, 추출, 상담처럼 일정해야 하는 일에는 낮춥니다. 문구 아이디어처럼 여러 안이 필요한 일에는 올립니다.
  • num_predict: CPU로 돌릴 때는 답의 길이가 곧 대기 시간입니다. 필요한 만큼만 줍니다.
  • num_ctx: 긴 문서를 넣을 때 키웁니다. 키운 만큼 메모리를 더 쓰므로 PC 사양을 보고 올립니다.

temperature의 차이를 눈으로 보기

강의에서 하는 실험입니다. 같은 질문을 값만 바꿔 여러 번 넣어 봅니다.

ollama run gemma4:e4b
>>> /set parameter temperature 0.1
>>> 다음 민원을 분류하라: "골목에 쓰레기가 방치되어 악취가 심합니다"
>>> /set parameter temperature 1.2
>>> 다음 민원을 분류하라: "골목에 쓰레기가 방치되어 악취가 심합니다"

0.1에서는 몇 번을 물어도 거의 같은 답이 나옵니다. 1.2에서는 물을 때마다 표현과 범주가 달라집니다. 업무 자동화에 쓸 때 왜 낮은 값을 쓰는지 바로 알 수 있습니다.

설정값을 바꾸는 세 가지 경로

경로 방법 맞는 상황
대화 중 /set /set parameter temperature 0.3 값을 바꿔 가며 시험할 때. 대화가 끝나면 사라짐
Modelfile PARAMETER temperature 0.3 업무별로 설정을 고정해 여럿이 같이 쓸 때
API 호출의 options "options": {"temperature": 0.1} 프로그램에서 요청마다 다르게 줄 때

권하는 순서는 이렇습니다. 대화 중 /set으로 맞는 값을 찾고, 찾은 값을 Modelfile에 적어 고정하고, 프로그램에서는 그 모델 이름만 부릅니다. 이렇게 하면 프롬프트와 설정이 코드 곳곳에 흩어지지 않습니다. API에서 options를 주는 방법은 Ollama API를 Python에서 부르기에 있습니다.

Hugging Face의 GGUF 모델을 바탕으로 쓰기

Ollama 라이브러리에 없는 모델도 Hugging Face에 GGUF 형식으로 올라와 있으면 바탕으로 쓸 수 있습니다. FROM 줄에 경로를 적습니다.

FROM hf.co/<올린 사람>/<모델 이름>-GGUF:Q4_K_M
SYSTEM "너는 한국어 민원 상담 담당자다."
PARAMETER temperature 0.3

<올린 사람>/<모델 이름> 자리는 Hugging Face 모델 페이지 주소에서 그대로 가져옵니다. 콜론 뒤는 양자화 수준입니다. 그 뒤는 같습니다.

ollama create my-model -f Modelfile
ollama run my-model

내 PC에 이미 내려받은 GGUF 파일이 있으면 FROM 뒤에 그 파일의 경로를 적습니다. 인터넷이 없는 PC로 모델을 옮겨 쓸 때 이 방식을 씁니다. 양자화 표기를 읽는 방법은 양자화란 무엇인가에 있습니다.

시스템 프롬프트를 쓸 때의 요령

작은 모델은 시스템 프롬프트가 길면 뒤쪽 규칙을 놓칩니다.

  • 규칙은 번호를 붙여 다섯 개 안쪽으로 줄입니다.
  • “반드시 한국어로 답한다”를 넣습니다.
  • 길이와 형식을 숫자로 적습니다.
  • 모를 때 할 말을 정해 줍니다.
  • 기관 이름, 담당자 이름, 내부 규정 원문 같은 민감한 내용을 시스템 프롬프트에 넣지 않습니다. Modelfile은 다른 사람에게 그대로 전달되는 파일입니다.

지시문 작성법은 작은 모델에서 더 중요한 프롬프트 기본기에 따로 정리했습니다.

업무별로 여러 개 만들기

Modelfile은 가볍기 때문에 업무마다 하나씩 만들어 두면 편합니다.

모델 이름 역할 주요 설정
minwon 민원 상담 답변 초안 temperature 0.3, 3줄 이내
bunryu 문장을 정해진 범주로 분류 temperature 0.1, 한 단어 출력
yoyak 회의록 3줄 요약 temperature 0.2, num_ctx 크게
gyojeong 문장 어투 교정 temperature 0.2, 원문 길이 유지

Modelfile을 한 폴더에 모아 두고 버전을 파일 이름에 적어 두면, 프롬프트를 고칠 때 이전 것과 비교할 수 있습니다.

흔한 실수

  • FROM에 적은 모델을 아직 받지 않은 경우. 먼저 ollama pull을 합니다.
  • 파일 이름이 minwon.Modelfile.txt로 저장된 경우
  • 파일을 고친 뒤 ollama create를 다시 하지 않은 경우. 고친 내용은 등록해야 반영됩니다.
  • num_ctx를 크게 잡아 메모리가 부족해진 경우
  • temperature를 0으로 두었는데도 답이 조금씩 달라져 당황하는 경우. seed를 같이 고정합니다.

참고한 문서