상세 컨텐츠

본문 제목

LLM과 친해지기: Prompt Engineering의 모든 것

본문

1. LLM은 왜 프롬프트에 민감할까?

LLM(Large Language Model)은 질문에 대해 확률적으로 다음 토큰을 예측하는 모델입니다. 즉, 우리가 던지는 질문(프롬프트)이 문제 정의 그 자체가 됩니다.

같은 질문이라도:

  • "강아지 설명해줘"
  • "강아지 품종별 특징을 표로 정리해줘"

결과 품질이 달라지는 이유가 바로 여기에 있습니다.

➡️ Prompt Engineering이란,

LLM이 문제를 정확히 이해하도록 질문을 설계하는 기술

 


2. PromptTemplate – 재사용 가능한 프롬프트 설계

LangChain에서는 프롬프트를 코드 레벨에서 구조화할 수 있습니다. 그 핵심이 PromptTemplate입니다.

 
from langchain_core.prompts import PromptTemplate

prompt = PromptTemplate.from_template(
"{product}에 대한 {length}자 이내의 광고 문구를 작성해주세요."
)

prompt.format(product="아이폰 16", length="50")

 

왜 중요한가?

  • 하드코딩된 프롬프트 제거
  • 변수 기반 자동화
  • 서비스 로직에 바로 연결 가능

PromptTemplate은 이후 RAG, Chain, Agent의 기본 단위가 됩니다.


3. ChatPromptTemplate – 역할을 부여하는 프롬프트

ChatGPT 같은 대화형 LLM은 단순 문자열이 아니라 역할 기반 메시지를 입력으로 받습니다.

from langchain_core.prompts import ChatPromptTemplate

chat_prompt = ChatPromptTemplate.from_messages([
("system", "당신은 Python 전문가입니다."),
("human", "리스트 컴프리헨션이 뭐예요?")
])
  • system: LLM의 정체성과 행동 규칙
  • human: 사용자 입력

➡️ 같은 질문이라도 System Message에 따라 답변 수준이 달라집니다.


4. MessagesPlaceholder – 대화 맥락 유지하기

실제 서비스에서는 이전 대화 맥락 유지가 필수입니다.

from langchain_core.prompts import MessagesPlaceholder

ChatPromptTemplate.from_messages([
("system", "도움이 되는 AI입니다."),
MessagesPlaceholder(variable_name="history"),
("human", "{question}")
])

이를 통해:

  • 챗봇
  • 상담형 서비스
  • 멀티턴 QA

구현이 가능해집니다.


5. Few-shot Prompting – 예시로 LLM을 학습시키기

LLM에게 규칙을 말로 설명하는 것보다 예시를 보여주는 것이 효과적입니다.

("system", """
텍스트 감정을 분석하세요.

예시:
- 좋아요 → 긍정
- 별로예요 → 부정
""")

Few-shot Prompting은 분류, 포맷 고정, 일관된 출력에서 매우 강력합니다.


정리하며

1일차에서는 모델 이전에 프롬프트가 설계의 핵심이라는 점을 강조했습니다.

다음 글에서는 오늘 만든 프롬프트를 실제 LLM과 연결하고, LangChain의 핵심 문법인 LCEL(LangChain Expression Language)을 통해 "LLM 파이프라인"을 어떻게 조립하는지 다뤄보겠습니다.

관련글 더보기