끄적끄적...
Hello.Stranger라는 해외 IT 트렌드 뉴스 레터를 보내주는 사이트가 있습니다.
아침 업무를 정리한 후, 차를 마시면서 보기 좋은 글들을 많이 소개해줍니다.
Hello.Stranger를 구독하면 등록한 이메일로 매일 오전 7시에 정리된 뉴스레터가 옵니다.
대부분 해외의 뉴스 혹은 블로그 글로 원문 그대로 추천되며, 한글로 핵심 정보만 정리해 주는 편입니다.
해외 IT 기사는 읽고 이해하는데 오래 걸리는 편이라 진짜 관심 있는 글이 아니면 한글로 정리된 핵심만 빠르게 보는 편입니다.
최근 Hello.Stranger쪽에서 뽑아오는 해외 IT 기사의 품질이 상당히 좋아서, 손이 가는 내용이 많아지고 있습니다.
오늘 읽어본 기사(블로그 글?)는 Anthrophic(LLM 모델인 Claude를 관리하는 회사)에서 시스템 프롬프트를 공개했다는 내용입니다
클로드 사의 챗봇 모델의 성능은 Haiku, Opus, Sonnet 순으로 좋아지는데,
더 좋은 성능의 모델일수록 시스템 프롬프트가 꼼꼼해지는 경향이 있습니다.
시스템 프롬프트에서 가장 흥미롭게 다가온 부분은 어시스턴트에 대한 정의를 내리는 부분이이었습니다.
LLM 성능이 크게 좌우되지 않는 상황에서 작게라도 계속해서 엔지니어링을 시도해 보는 부분이 시스템 프롬프트인데..
이런 귀한 자료를 공유해 준다는 게 감사할 따름입니다. (수억 원의 연봉을 받는 프롬프트 엔지니어의 결과물이니..)
시스템 프롬프트 페르소나 (이름 부여해 보기)
시스템 프롬프트의 시작은 페르소나 부여입니다.
앞으로 수행될 작업에 대한 큰 그림을 그리는 작업을 수행하는 중요한 부분입니다.
어떤 페르소나를 부여하는 게 좋은지 고민하다 보면.. 보통, "~~하는 전문가야. ~~를 돕는 전문가야"라며
전문가로 선언하는 문장으로 마무리하는 편입니다.
클로드의 시스템 프롬프트를 보면 재밌는 부분이 있습니다.
"클로드"라는 이름을 부여한다는 점입니다.
프롬프트 엔지니어링을 공부해보면 페르소나를 부여하라고 하는데, 누구에게? 페르소나를 부여하라는 것인지 감이 안 오는데,
제가 원하는 작업을 수행할 시스템에 이름을 붙이면, 시스템 프롬프트 여기저기에 이름을 편하게 쓸 수 있게 됩니다.
보통"당신은 ~~ 전문가입니다.로 시작해서 사용자 입력정보 설명, 지시, 주의사항, 결과 형식" 이런 패턴으로 프롬프트를 만드는데,
이번에 공개된 시스템 프롬프트를 보니 Assistant라는 것을 명시하는 게 좋겠다는 생각이 들었습니다.
예를 들어 "MOX 문테크에서 만든 AI 기반의 콘텐츠 내용을 요약해 주는
계속해서 이름을 거론해 주는 것입니다.
EX. MOX는 다음의 지시를 수행합니다.
등등...
작업을 XML 태그로 정리하기
가장 성능이 좋은 Sonnet의 경우 <XML> 태그 기반으로 특정 작업을 명시하는데, 이 부분도 인사이트를 주는 부분입니다.
언어가 다르긴 하지만, 프롬프트 엔지니어링 과정에서 분리된 지시를 표시할 때는 특수 문자를 사용하는 편입니다.
[주의사항] ###주의사항### 이런 식입니다.
엔지니어링 가이드에서 <XML> 태그 추천을 본 적이 있긴 하지만, 시도를 해본 적 없었는데,
이번 기회에 XML 방식으로 시스템 프롬프팅을 진행해 볼 예정입니다.
내용적인 부분보다 프롬프트의 구조가 궁금했었는데, 보면 볼수록 많은 인사이트를 주는 자료입니다.
현재 속한 팀에서 다양한 언어 모델에 여러 번 프롬프트 인젝션을 시도한 적이 있는데, 가장 손쉽게 프롬프트를 제공하는 모델이
클로드 모델이었습니다.
그런 클로드가 기반이 되는 프롬프트를 공개해 버렸으니, 해당 회사의 자신감이 느껴지기도 합니다.
프롬프트 엔지니어링에 관심이 많은 사람이라면 재밌게 읽을만한 기사라고 생각합니다. ㅎㅎ
실제 활용해 본 후기
이름 붙여주기
품질이 좋아졌습니다. 페르소나에 이름을 부여한 점은 다양한 장점이 있습니다.
문장을 작성하기가 매끄러워집니다.
시스템의 주어가 없었던 프롬프트 엔지니어링에서는 단순 작업 혹은 페르소나 문장만이 시스템을 대표했습니다.
이름을 가지니 어떤 작업, 설명에서든 이름이 들어가 문장을 작성하게 되면서 자연스러워진 부분이 많습니다.
사용자가 의도치 않게 장난치는 질문에도 자연스러운 응답을 생성해 주곤 합니다.
종종 서비스의 사용자가 "너는 누구야?", "넌 뭔하는 애야"라고 질문을 하곤 하는데,
이에 대해서 자연스러운 응답을 생성해 주는 편입니다.
XML 태그
이전에는 [작업] 이렇게 명시하고 밑에 작업들을 나열했습니다.
이제는 영어 기반의 태그로 작업을 묶어주고 있습니다.
function call과 같이 json 결과를 받기 위한 작업을 할 때 매우 편리하게 쓰고 있습니다.
[function call 양식을 따르지 않아도 훌륭한 json 결과를 추출하는데 도움을 줍니다.]
json 결과를 추출할 때 필드 이름이 한국어가 아닌 영어를 위주로 사용하는데, xml 태그는 json 포맷과 매끄러운 관계를 가집니다.
EX. <summary_content> 요약 관련 작업 지시~~ </summary_content>
String 타입의 summary 필드를 가진 json을 반환하세요
와
[요약 작업]
....
해당 결과를 String 타입의 summary 필드로 json을 반환하세요.
두 스타일은 프롬프트 엔지니어링 관점에서 다르게 취급됩니다.
json 필드명이 영어이기 때문에 XML 태그로 닫는 작업에 대한 영어 지시를 모델이 더 잘 이해하는 경험을 하곤 합니다.
현재는 클로드에서 공개한 시스템 프롬프트의 영향을 받아 프롬프트 엔지니어링을 하고 있습니다.
실제 서비스의 시스템 프롬프트를 볼 수 있어서 매우 귀중한 자료라 생각되고,
프롬프트 엔지니어링을 한다면 해당 프롬프트를 참고해서 비교해 보는 것도 좋을 것 같습니다.
참고 정보
'IT 고찰 > 좋은 글' 카테고리의 다른 글
ADR : 아키텍처 결정 기록물. -엔지니어링 결정에 대한 논쟁을 줄여줄 도구- (1) | 2024.11.19 |
---|---|
EU 인공지능 법안 요약본 [GPAI: General Purpose AI] (7) | 2024.09.13 |
[DB] 마이크로서비스에서 공유형 DB를 사용한다는 것 (3) | 2024.09.03 |