kokoball의 devlog
article thumbnail
728x90

 

- LLM & 프롬프트 엔지니어링

 

 

대규모 언어 모델은 어떻게 생각하고, 우리는 어떻게 말을 걸어야 할까

 

AI 스터디 1회차에서는 LLM(Large Language Model)프롬프트 엔지니어링을 중심으로,

요즘 우리가 사용하는 생성형 AI가 어떤 원리로 동작하는지, 그리고 왜 “질문을 잘 던지는 것”이 중요한지를 살펴보았습니다.

 

이번 글에서는

  • LLM이 무엇인지
  • 어떤 방식으로 학습되고
  • 왜 프롬프트가 결과를 크게 바꾸는지를 개발자 관점에서 정리해봅니다.

대규모 언어 모델(LLM)이란 무엇인가

 

정의

대규모 언어 모델(LLM)은 방대한 텍스트 데이터를 기반으로 인간의 언어를 이해하고 생성하도록 학습된 딥러닝 기반 AI 모델입니다.

핵심적으로 LLM은 **“다음 토큰(단어 혹은 글자 조각)을 예측하는 문제”**를 반복 학습함으로써 다양한 언어 처리 작업을 수행할 수 있게 됩니다.

 

이 단순한 목표 덕분에 LLM은 다음과 같은 작업을 하나의 모델로 처리할 수 있습니다.

 

  • 텍스트 생성, 요약, 번역
  • 질의응답(Q&A), 챗봇 응답
  • 코드 생성 및 프로그래밍 보조
  • 이미지·음성 등과 결합된 멀티모달 작업(확장 중)

LLM의 학습 기본 원리

 

LLM의 학습 과정은 개념적으로 다음과 같이 정리할 수 있습니다.

  1. 대규모 텍스트 데이터 수집
  2. 텍스트를 토큰(token) 단위로 분해
  3. “다음 토큰을 맞히는 것”을 목표로 설정
  4. 신경망에 입력 → 오차 계산
  5. 오차를 줄이도록 반복 학습
  6. 이후 특정 목적에 맞춰 미세 조정(fine-tuning)

 

즉, LLM은 의미를 이해한다기보다, 문맥상 가장 그럴듯한 다음 토큰을 확률적으로 선택하는 방식으로 작동합니다.

 


한국어와 LLM: 왜 더 어려운가

 

한국어는 LLM에게 비교적 까다로운 언어에 속합니다.

 

구조적 특징

  • 교착어: 하나의 어간에 조사·어미·시제·높임·부정이 다양하게 결합
    • 예: 하다 / 합니다 / 했습니다 / 하셨습니다 / 하겠습니까 …
  • 띄어쓰기의 불명확성
    • 어절 단위 기준이며, 사용자마다 습관 차이가 큼
  • 존댓말/반말/높임 체계
    • 같은 의미라도 상황과 관계에 따라 표현이 완전히 달라짐
  • 스크립트 혼합
    • 한글 + 영어 + 숫자 + 이모지 + 줄임말이 자연스럽게 섞임
    • 예: “넷플릭스 3화까지 정주행ㅋㅋ;;”

이러한 특성 때문에 단순한 “단어 단위 토큰화”는 한국어에서 잘 작동하지 않습니다.

 


해결 방식: 토큰화 전략

 

이를 해결하기 위해 다음과 같은 방식이 사용됩니다.

 

  • 음절 단위 기반 BPE(Byte Pair Encoding)
    • 한글 음절을 기본 단위로 분해 후, 자주 등장하는 조합을 토큰으로 묶음
  • 형태소 + 서브워드 혼합 방식
    • 어간/조사 단위로 나눈 뒤, 다시 서브워드 토큰화
  • 자모 단위 실험
    • 표현력은 높지만 시퀀스 길이 증가로 실용성은 낮음

 

실제 서비스 모델에서는 음절 또는 형태소+서브워드 방식이 가장 많이 사용됩니다.

 


프롬프트 엔지니어링이란 무엇인가

 

정의

 

프롬프트 엔지니어링은 LLM이 원하는 결과를 생성하도록 입력(prompt)을 설계하고 개선하는 과정을 의미합니다.

단순히 질문을 던지는 것이 아니라, 모델이 어떻게 생각하고 반응해야 하는지를 안내하는 설계 작업에 가깝습니다.

 

예를 들어,

  • ❌ “이 글을 요약해줘”
  • ⭕ “이 글을 3줄로 요약해주고, 마지막 줄에는 한 줄 의견을 따옴표로 작성해줘”

 

이처럼 형식, 톤, 역할, 조건을 명확히 할수록 결과는 안정적이고 일관되게 나옵니다.

 


프롬프트의 기본 구성 요소

 

일반적인 프롬프트는 다음 요소로 구성됩니다.

 

  • Instruction: 모델이 해야 할 역할과 작업
  • Context: 배경 정보 및 제약 조건
  • Input Data: 실제 입력 데이터
  • Output Indicator: 출력 형식에 대한 지시

 

이 네 가지를 분리해서 설계하면 프롬프트의 재사용성과 품질이 크게 올라갑니다.

 


프롬프트 기법과 학습 방식

Zero-shot / Few-shot

  • Zero-shot: 예시 없이 지시만으로 수행
  • Few-shot: 몇 가지 예시를 함께 제공하여 성능 향상

 

보통은 zero-shot으로 시작한 뒤, 결과가 불안정하면 few-shot으로 확장합니다.

 


주요 프롬프트 기법

  • Chain-of-Thought(CoT)
    • “단계적으로 생각해보자” 방식으로 추론 정확도 향상
  • Self-Consistency
    • 여러 추론 경로를 생성한 뒤, 가장 일관된 답을 선택
  • Prompt Chaining
    • 하나의 작업을 여러 하위 작업으로 분해하여 연쇄 실행
  • Tree of Thoughts
    • 여러 사고 흐름을 동시에 탐색하고 최적 경로 선택
  • RAG(Retrieval-Augmented Generation)
    • 외부 지식베이스를 검색해 답변 정확도 향상

 

이러한 기법들은 단순 질의응답을 넘어, 에이전트 기반 AI 시스템으로 확장될 때 핵심 역할을 합니다.

 


프롬프트 설계 시 Best Practices

 

  • 최신 모델을 우선 사용
  • 지침은 프롬프트 앞부분에 명확히 배치
  • 또는 “”” 로 지침과 맥락 구분
  • 원하는 출력의 형식·길이·스타일을 구체적으로 명시
  • “하지 말 것”보다 “해야 할 것”을 설명
  • 한 번에 완벽한 프롬프트를 기대하지 말고 A/B/C 버전 비교

 

프롬프트는 작성이 아니라 실험과 반복 개선의 과정에 가깝습니다.

 


정리하며

 

LLM은 생각보다 단순한 원리에서 출발했지만,

그 위에 쌓인 데이터와 구조, 그리고 프롬프트 설계에 따라 전혀 다른 결과를 만들어냅니다.

 

모델을 바꾸기 전에, 먼저 프롬프트를 의심해보는 것.

이것이 이번 회차의 가장 중요한 메시지였습니다.

 

다음 글에서는

👉 프롬프트 엔지니어링 기술 적용 샘플링를 중심으로 더 실전적인 이야기를 다뤄볼 예정입니다.

728x90
profile

kokoball의 devlog

@kokoball-dev

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!