Skip to content
바람부는 자유
Go back
LLM Engineering

System Message 활용하기

LLM Engineering (7/21)

  1. LLM 토큰 기본 개념
  2. LLM Tokenizer 추가 학습
  3. LLM Inference 이해하기: 토큰 예측의 마법
  4. LLM API 기초 (Part 1/3)
  5. LLM API 중급 (Part 2/3)
  6. LLM API 고급 (Part 3/3)
  7. System Message 활용하기
  8. LLM을 활용한 회의록 자동 요약 시스템
  9. Multi-Modal AI 기초
  10. Gradio 기본 사용법
  11. Hugging Face 완전 정복: AI 모델의 GitHub
  12. Google Colab 사용해보기: 무료로 GPU 환경에서 AI 모델 실행하기
  13. Tool Use (Function Calling)
  14. LLM 벤치마크 완전 가이드: 모델 성능 평가의 모든 것
  15. Vector Embeddings와 RAG 기초
  16. LangChain vs LiteLLM 비교 가이드
  17. 고급 RAG: 벡터 데이터베이스를 활용한 문서 검색 시스템
  18. RAG 기반 고객 상담 챗봇 만들기
  19. RAG 시스템 평가 (RAG Evaluation)
  20. 고급 RAG 기법 (Advanced RAG Techniques)
  21. 08-1. 데이터셋 개념 정리

System message를 활용하면 챗봇에 특정 역할, 컨텍스트, 행동 지침을 부여할 수 있습니다. 이번 노트북에서는 System message를 효과적으로 활용하는 방법을 알아봅니다.

System Message란?

System message는 LLM에게 전달하는 초기 지침입니다. 대화가 시작되기 전에 AI의 역할, 성격, 제약사항 등을 설정합니다.

messages = [
    {"role": "system", "content": "당신은 친절한 고객 상담사입니다."},
    {"role": "user", "content": "안녕하세요"},
    ...
]
import gradio as gr
from openai import OpenAI

client = OpenAI()

1. 비즈니스 컨텍스트 제공

System message에 비즈니스 정보와 역할을 설정하면 일관된 응답을 유도할 수 있습니다.

효과적인 System Message 구성 요소

구성 요소설명예시
역할 정의AI가 맡을 역할"당신은 레스토랑 예약 도우미입니다"
컨텍스트 정보필요한 배경 지식영업시간, 메뉴, 위치 등
행동 지침응대 방식 가이드"친절하게 응대하세요"
제약사항하지 말아야 할 것"가격 할인은 약속하지 마세요"

2. One-shot Prompting

예시 답변을 system message에 포함시키면 LLM이 원하는 스타일로 응답하도록 유도할 수 있습니다.

예를 들어, 고객이 '예약하고 싶어요'라고 하면,
'네, 예약 도와드리겠습니다! 몇 분이서 방문하실 예정인가요?'처럼 응답하세요.

이렇게 하면 LLM이 비슷한 톤과 형식으로 응답합니다.

# 식당 예약 도우미 예제
system_message = """당신은 이탈리안 레스토랑 '벨라 이탈리아'의 예약 도우미입니다.

[레스토랑 정보]
- 영업시간: 점심 11:30-14:30, 저녁 17:30-22:00 (월요일 휴무)
- 위치: 서울시 강남구 테헤란로 123
- 예약: 최소 2인부터, 최대 8인까지 가능
- 인기 메뉴: 트러플 파스타, 마르게리타 피자, 티라미수

[응대 지침]
- 친절하고 전문적인 톤을 유지하세요
- 예약 문의 시 날짜, 시간, 인원을 순서대로 확인하세요
- 메뉴 추천 요청 시 인기 메뉴를 안내하세요

예를 들어, 고객이 '예약하고 싶어요'라고 하면, 
'네, 예약 도와드리겠습니다! 몇 분이서 방문하실 예정인가요?'처럼 응답하세요."""

def restaurant_chat(message, history):
    messages = [{"role": "system", "content": system_message}]
    for user_msg, assistant_msg in history:
        messages.append({"role": "user", "content": user_msg})
        messages.append({"role": "assistant", "content": assistant_msg})
    messages.append({"role": "user", "content": message})
    
    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=messages,
        stream=True
    )
    
    partial_message = ""
    for chunk in response:
        if chunk.choices[0].delta.content:
            partial_message += chunk.choices[0].delta.content
            yield partial_message

demo = gr.ChatInterface(
    fn=restaurant_chat,
    title="벨라 이탈리아 예약 도우미",
    description="레스토랑 예약 및 메뉴 문의를 도와드립니다."
)

demo.launch()
* Running on local URL:  http://127.0.0.1:7860
* To create a public link, set `share=True` in `launch()`.
<IPython.core.display.HTML object>

3. 동적 System Message

사용자 입력에 따라 system message를 동적으로 수정하면 상황에 맞는 응답을 유도할 수 있습니다.

활용 사례

# 동적 System Message 예제
def restaurant_chat_dynamic(message, history):
    # 기본 system message
    dynamic_system_message = system_message
    
    # 특정 키워드에 따라 추가 지침 삽입
    if "할인" in message or "이벤트" in message:
        dynamic_system_message += "\n\n[현재 진행 중인 이벤트] 평일 런치 타임(11:30-14:30)에는 파스타 메뉴 20% 할인 중입니다. 이 정보를 안내해주세요."
    
    if "주차" in message:
        dynamic_system_message += "\n\n[주차 안내] 건물 지하 주차장 2시간 무료 주차 가능합니다. 이 정보를 안내해주세요."
    
    if "단체" in message or "회식" in message:
        dynamic_system_message += "\n\n[단체 예약] 6인 이상 단체 예약 시 별도 룸 이용 가능하며, 코스 메뉴를 추천해주세요."
    
    messages = [{"role": "system", "content": dynamic_system_message}]
    for user_msg, assistant_msg in history:
        messages.append({"role": "user", "content": user_msg})
        messages.append({"role": "assistant", "content": assistant_msg})
    messages.append({"role": "user", "content": message})
    
    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=messages,
        stream=True
    )
    
    partial_message = ""
    for chunk in response:
        if chunk.choices[0].delta.content:
            partial_message += chunk.choices[0].delta.content
            yield partial_message

demo = gr.ChatInterface(
    fn=restaurant_chat_dynamic,
    title="벨라 이탈리아 예약 도우미 (동적 프롬프트)",
    description="할인, 주차, 단체 예약 등을 물어보세요!"
)

demo.launch()
* Running on local URL:  http://127.0.0.1:7861
* To create a public link, set `share=True` in `launch()`.
<IPython.core.display.HTML object>

요약

이번 노트북에서는 System Message를 효과적으로 활용하는 방법을 알아보았습니다.

핵심 포인트

  1. 역할과 컨텍스트 설정: 비즈니스 정보, 응대 지침을 system message에 포함
  2. One-shot Prompting: 예시 답변을 포함하여 응답 스타일 유도
  3. 동적 프롬프트: 사용자 입력에 따라 system message 수정


Share this post on:

Previous Post
LLM을 활용한 회의록 자동 요약 시스템
Next Post
LLM API 고급 (Part 3/3)