250427 TIL - System, assistant, user (Sunday)

Overview

-

What I Learned

  • 역할(System, User, Assistant)에 배분하는지는 결과물의 품질과 일관성에 영향을 줄 수 있습니다.

현재 설정은 다음과 같습니다:

  1. System Message (conf/config.yaml): 비교적 간단한 지침 (한국어 응답, 웹 검색 활용, 출처 인용 강조).

  2. User Message (main_web.py에서 생성): prompt_final.yaml의 전체 내용 (역할 정의, 규칙, 구조, 템플릿, 작업 절차, 작성 지침) + 실제 키워드.

이 방식의 잠재적인 단점은 다음과 같습니다:

  • 역할 혼동: 모델의 역할 정의, 핵심 규칙, 전체 작업 흐름 같은 지속적인 지침이 매번 사용자의 구체적인 요청(키워드)과 함께 User 메시지로 전달됩니다. 이는 모델에게 약간 혼란을 줄 수 있습니다.

  • 비효율성: 매번 동일한 긴 지침을 User 메시지에 반복하는 것은 토큰 사용 측면에서 비효율적일 수 있습니다.

개선 방안:

각 역할의 목적에 맞게 프롬프트 내용을 재배치하는 것이 좋습니다:

  1. System Role:
  • 목적: AI 모델의 페르소나(역할), 따라야 할 핵심적이고 일관된 규칙, 전반적인 목표, 제약 조건 등을 정의합니다.

  • 이동 대상:

  • [역할] 섹션 (“당신은 한국 공공기관 보도자료 전문가…”)

  • [핵심 규칙] 섹션 (가상 정보 금지, 종결어미, 계층 구조, HTML 표준, 페이지 구분, 출력 형식, 인용 위치 등)

  • 최상위 작업 목표 (“…2쪽 분량의 완전한 HTML 보도자료를 출력합니다.”)

  • 웹 검색 및 사실 확인, 출처 인용에 대한 강조 (현재 System 메시지 내용 통합)

  • 객관성 유지, 미공개 정보 처리 등 주요 [내용 작성 지침]

  • 수정된 System Message 예시 (conf/config.yaml에 반영):

yaml

Apply to config.yaml

system_message: 

당신은 한국 공공기관 보도자료 작성 전문가입니다. 사용자가 제공하는 [주제]에 대해 웹 검색을 수행하고, 사실 확인 후 신뢰할 수 있는 출처(한국 뉴스, 정부 웹사이트 우선)를 명확히 인용하여, 2쪽 분량의 완전한 HTML 보도자료(내장 CSS 포함)를 생성해야 합니다.

[핵심 규칙]

가상 정보 절대 금지: 담당자, 출처 등 모든 정보는 실제 검색 결과만 사용하고, 없으면 ’미공개’로 표기하세요.

종결어미: 본문은 ’…한다 / …이다’, 부제목은 명사형으로 작성하세요.

계층 구조: □ → ○ → ▲ 순서와 공백 규칙을 엄수하세요.

HTML: 표준 태그만 사용하고, 페이지 구분(<div class="page-break"></div>)을 삽입하세요.

출력: 최종 결과는 HTML 코드 전체만 포함해야 합니다.

인용: 본문에는 링크/출처를 표시하지 말고, 모든 참고 자료는 마지막 페이지 하단 각주에 URL과 함께 정리하세요.

객관성: 사실 기반으로 작성하고 주관적 표현은 피하세요.

  1. User Role:
  • 목적: 해당 실행에서 AI가 수행해야 할 구체적인 작업 내용이나 질문을 전달합니다.

  • 포함 대상:

  • [작업 절차] (어떻게 작업을 수행할지에 대한 구체적인 단계)

  • [보고서 구조] (따라야 할 상세한 XML 구조 정의)

  • [HTML 템플릿] (생성할 최종 HTML의 상세 구조)

  • [내용 작성 지침] 중 구조/템플릿과 관련된 세부 사항

  • Self-check 리스트 (모델이 스스로 검증하도록 유도)

  • 가장 중요한 것: 사용자의 실제 키워드 ([주제]: …)

  • prompt_final.yaml에서 User 메시지로 사용할 부분: 위의 System 메시지로 이동한 부분을 제외한 나머지 내용 + 실제 키워드.

  1. Assistant Role:
  • 목적: 모델이 따라야 할 응답의 예시(few-shot)를 제공하거나, 대화의 흐름을 특정 방향으로 유도할 때 사용합니다.

  • 현재 상황: 이 작업은 단일 응답 생성이므로 Assistant 역할에 특별히 내용을 넣을 필요는 없어 보입니다.

결론:

  • 현재 prompt_final.yaml의 내용을 System과 User 역할로 분리하는 것이 더 효과적일 수 있습니다.

  • System 메시지에는 모델의 역할, 핵심 규칙, 제약 조건 등 지속적인 컨텍스트를 넣습니다.

  • User 메시지에는 이번 실행을 위한 구체적인 작업 지시(구조, 템플릿, 절차)와 키워드를 넣습니다.

  • 현재 conf/config.yaml의 system_message는 좋은 내용을 담고 있지만, prompt_final.yaml의 관련 내용과 통합하여 더 강력한 System 메시지를 구성하는 것이 좋습니다.

이러한 변경은 모델이 역할을 더 명확히 인지하고, 주어진 규칙과 구조를 일관되게 따르는 데 도움이 될 수 있습니다.

이 제안에 따라 코드 수정을 원하시면 말씀해주세요.

  • Created Date: 2025-04-27
  • Category: TIL
  • ID: N_bvxdvyqx