본문 바로가기

IT 고찰/재밌는 글들

Anthrophic에서 시스템 프롬프트를 공개하다

끄적끄적...

Hello.Stranger라는 해외 IT 트렌드 뉴스 레터를 보내주는 사이트가 있다.

 

Hello.Stranger를 구독하게 되면 지정한 메일로 매일 오전 7시에 정리된 뉴스레터가 온다.

 

영어로 작성된 해외 IT 기사는 읽는데 오래 걸리는 편이라 진짜 관심 있는 것이 아니면 잘 안 읽는데

 

최근 Hello.Stranger쪽에서 뽑아오는 해외 IT 기사의 품질이 상당히 좋아서, 손이 가는 내용이 많아지고 있다.

 

오늘 읽어본 기사(블로그 글?)는 Anthrophic(LLM 모델인 Claude를 관리하는 회사)에서 시스템 프롬프트를 공개했다는 내용이다.

 

해당 기사

 

Anthropic publishes the 'system prompts' that make Claude tick | TechCrunch

Anthropic has published the system prompts for Claude, its family of generative AI models. They instruct the model how it should -- and shouldn't -- behave.

techcrunch.com

 

anthrophic 시스템 프롬프트

 

System Prompts - Anthropic

<claude_info> The assistant is Claude, created by Anthropic. The current date is { }. Claude’s knowledge base was last updated on April 2024. It answers questions about events prior to and after April 2024 the way a highly informed individual in April 20

docs.anthropic.com

 

 

모델의 성능은 Haiku, Opus, Sonnet 순으로 좋아지는데, 더 좋은 성능의 모델일수록 시스템 프롬프트가 꼼꼼해지는 경향이 있다.

 

흥미롭게 읽은 부분은 어시스턴트에 대한 정의를 내리는 부분이었다.

 

프롬프트 엔지니어링을 하면서 시스템 프롬프트를 통해 품질을 높이려는 시도를 하는 편인데, 시스템 프롬프트에 어떤 정의를 내려줘야 할지 고민했었기 때문이다.

 

프롬프트 엔지니어링을 공부해보면 페르소나를 부여하라고 하는데, 누구에게? 페르소나를 부여하라는 것인지 감이 안오기 때문.

 

그래서 "당신은 ~~ 전문가입니다.로 시작해서 사용자 입력정보 설명, 지시, 주의사항, 결과 형식" 이런 패턴으로 프롬프트를 만드는데,

 

이번에 공개된 시스템 프롬프트를 보니 Assistant라는 것을 명시하는 게 좋겠다는 생각이 들었다.

 

가장 성능이 좋은 Sonnet의 경우 <XML> 태그 기반으로 특정 작업을 명시하는데, 이 부분도 인사이트를 주는 부분이다.

 

언어가 다르긴 하지만 나의 경우 프롬프트 엔지니어링 과정에서 분리된 지시를 표시할 때는 특수 문자를 사용하는 편이다.

 

[주의사항] ###주의사항### 이런식이다.

 

엔지니어링 가이드에서 <XML> 태그도 추천이 된 적이 있는데 한 번도 시도는 안 해봤었는데, 이번 기회에 XML 방식으로 시스템 프롬프팅을 진행해 볼 예정이다.

 

따로 문장을 개행하지도 않고 쭉 나열해서 쓰는 것을 보니.. 개행이나 탭은 의미가 없는 것 같은...

 

내용적인 부분보다 프롬프트의 구조가 궁금했었는데, 보면 볼수록 많은 인사이트를 준다고 생각한다.

 

사실 우리 팀에서는 여러 작업에 있어서 프롬프트 인젝션으로 기반이 될 프롬프트를 탐색하곤 하는데,

 

프롬프트 인젝션이 가장 쉬웠던 모델이 Claude였다.

 

프롬프트 인젝션이 아주 쉬운? 모델이었는데 이제는 기반이 되는 프롬프트를 공개해버렸으니, 이 회사의 자신감이 느껴진다.

 

나와 같이 프롬프트 엔지니어링에 관심이 많은 사람이라면 재밌게 읽을만한 기사라고 생각한다. :)


실제 활용해 본 후기

 

이름을 붙여주다.

 

품질이 좋아졌다. 우선 페르소나에 이름을 부여한 점이 강력했다.

 

이전에는 당신은 ~~전문가 입니다 수준으로만 페르소나를 부여했는데, 해당 프롬프트를 참고한 이후부터는 이름을 붙여줬다.

 

해당 시스템 (이름)으로 ~~에서 만든 ~~기능 AI 비서입니다.

 

(이름)은 ~~ 작업을 합니다 등등..

 

XML 태그

 

이전에는 [작업] 이렇게 명시하고 밑에 작업들을 나열했다. 우리의 서비스는 시스템 프롬프트를 redis에 두고 가져와서 사용하는데 

 

redis에 넣는 과정에서 텍스트의 공백이나 개행 정보들이 이스케이프 시퀀스(escape sequence)로 변환되어서 LLM 모델로 요청이 되는 것이다.

 

이 부분이 난감했다. LLM 모델이 이스케이프 시퀀스를 어떻게 받아들일지 알 수 없었기 때문이다. 이런 정보를 최소화하고 싶었고 가능한 텍스트 자체를 전달하고 싶었다.

 

해당 프롬프트를 참고해 XML 태그로 정보를 묶고, 정보 안에 개행작업 없이 일련의 작업을 설명하니 이전 시스템 프롬프트보다 더 나은 결과를 보여줬다.

 

특히 반환 결과 형식에 대한 품질이 매우 높아졌다.

 

나의 경우 키워드로 구분해서 LLM 모델로부터 4개의 결과를 받도록 작업을 수행하는데, 이전에는 이런 작업들이 지켜지지 않는 경우가 많았다. 

 

<result_format_info>결과 형식~~~</result_format_info>을 명시하니 지정한 키워드와 함께 더 좋은 품질의 결과를 보여줬다.

 

결과적으로 기존 시스템 프롬프트를 위와 같은 방식으로 전부 교체해볼 생각이다.

 

실제 서비스의 시스템 프롬프트를 볼 수 있어서 매우 귀중한 자료라 생각되고, 프롬프트 엔지니어링을 한다면 해당 프롬프트를 참고해서 비교해보는 것도 좋을 것 같다.

 

 

 


참고 정보

Hello.Stranger 사이트

 

Hello.Stranger

"하루를 13시간 앞서 시작하세요:" 해외 IT 트렌드를 가장 먼저 만날 수 있게 '아침 7시'마다 뉴스레터를 보내드려요.🛸

maily.so

 

반응형