[LLM] 프롬프트 엔지니어링

[원본 링크]

프롬프트 엔지니어링, 또는 프롬프트 프로그래밍은 LLM과의 소통에 대해 최적화를 가하는 일련의 작업들을 통칭한다.

하지만 대개는 엔지니어링이라는 호칭을 붙이기 부끄러울 정도로 단순한 노가다성 잡무가 주를 이룬다.

https://pub.aimind.so/prompt-engineering-in-2023-a-comprehensive-guide-to-best-practices-and-techniques-for-effective-61c7c89fb012
그냥 원하는 걸 얻기 위해 LLM에 메세지를 보낼때, 필요에 따라서 해체하고 재조립하거나, 힌트를 더해서 보내거나 하는 식으로 더 나은 결과값을 유도하는 것이다.

여기엔 딱히 정형화된 방법도 없고, 모델마다도 동작이 다 달라서 뭐 그냥 적당히 노가다치면서 가장 좋은 방법을 찾을 수밖에 없다.




일반적인 팁들

그래도 어느정도 도움이 될만한 공통적인 권장사항이 있긴 하다.

1. 정확하고 자세하게 묻기
일단 뭘 해달라는건지 최대한 많은 맥락과 상황설명을 제공하고 정확한 요구사항을 상세하게 전해주는게 좋다.
애매하게 뭉뚱그려서 말하면 당연히 결과도 개떡같이 나올 것이다.

2. 예시 제공
보통 원하는 결과의 예제 형태를 제공하면 거기에 맞춰서 결과를 주기 때문에 좀더 규격화된 응답을 얻을 수 있다.
예를 들면 이런식으로 물을 수 있을 것이다. 예제와 그에 따른 결과값을 쌍으로 붙여주는 것이다.

나는 당신에게 몇 가지 견적을 줄 것입니다. 인용 블록에서 저자 정보를 추출해 주세요.


예를 들면 다음과 같습니다.

명언:
"추리하는 마음이 불가능에 계속해서 직면하도록 강요받을 때, 적응하는 것 외에는 선택의 여지가 없습니다."
― NK Jemisin, The Fifth Season
저자: NK Jemisin


인용블럭:
"일부 인간은 지능이 있는 종이 우주로 확장되기 전에 멸종된다는 이론을 세웁니다. 만약 그들이 맞다면 밤하늘의 고요는 묘지의 고요일 것입니다. "
- Ted Chiang, Exhalation
**저자: **

3. LLM에게 역할 주기
역할을 직접 지정하면 그 역할에 좀더 맞춰서 대답을 하기 때문에 좀더 근사한 결과를 유도할 수 있다.

예를 들면 이런 식이다.
"당신은 의학 전문가입니다. 제가 묻고 싶은 것은..."

이 정도다.

더 많은 경험이나 트릭들을 알고 싶다면 모델의 문서나 커뮤니티 자료들을 보고 찾는게 좋다.


참조
https://docs.anthropic.com/en/docs/prompt-engineering
https://www.deeplearning.ai/short-courses/prompt-engineering-with-llama-2/
https://discuss.pytorch.kr/t/claude-3-feat-anthropic/4323
https://techcommunity.microsoft.com/t5/ai-azure-ai-services-blog/15-tips-to-become-a-better-prompt-engineer-for-generative-ai/ba-p/3882935
https://cloud.google.com/blog/products/application-development/five-best-practices-for-prompt-engineering?hl=en