이상적인 프롬프트 구조#
- 프롬프트의 모든 요소를 개행 문자로 끝나도록 강제하면 문자열 처리 코드를 단순하게 만들 수 있다.
- 샌드위치 기법: 프롬프트 첫 부분에 도입부를 넣고 마지막 부분에 초점 재설정을 넣는다.
- 도입부: 작성할 문서의 유형을 명확하게 하고 보델이 이후 콘텐츠에 올바른 방향으로 접근할 수 있도록 준비하는 역할
- 초점 재설정: 모델에게 주요 질문을 상기 시키는 역할
- 이유: 모든 LLM은 인-콘텍스트 학습과 중간 부분 상실 현상의 영향을 받기 때문이다.
- 인-콘텍스트 학습: 프롬프트에서 정보가 끝부분에 위치할수록 모델에 더 큰 영향을 미친다.
- 중간 부분 상실 현상: 모델은 프롬프트의 시작과 끝에 위치한 정보는 쉽게 기억하지만 중간에 위치한 정보는 제대로 다루지 못한다.

어떤 종류의 문서인가?#
- 프롬프트와 응답은 합쳐서 하나의 문서를 이루고, 훈련 데이터와 유사한 문서 형식을 사용하는 것이 가장 좋다.
- 가장 보편적으로 사용되는 문서 유형과 각 유형을 어떤 상황에서 사용하면 좋은지 살펴보자.
상담 대화#
- 장점
- 사람들은 대화 형태로 사고하는 데 익숙하다.
- 새로운 질문과 답변으로 프롬프트를 이어갈 수 있으며, 이를 통해 대화를 관리하고 정리하기 더 쉬워진다.
- 다회차 프로세사와 실제 도구나기법과의 통합에 적합하다.
분석 보고서#
- 보고서는 경계를 정의하는 범위 섹션을 포함할 수 있다.
- 보고서는 객관적인 분석을 선호한다.
- 보고서 스타일의 프롬프트를 작성할 때 마크다운 형식을 일관되게 사용하는 것을 권장한다.
- 마크다운 파일의 시작 부분에 목차를 넣는 것이 일반적이며 이는 매유 유용할 수 있다.

구조화된 문서#
- 구조화된 문서는 형식이 명확히 정의된 사양을 따르기 때문에 완성된 응답의 형식에 대해 확신할 수 있다.
탄력적 스니펫#
- 하나의 콘텐츠를 여러 개의 스니펫으로 분할하거나 다양한 형식으로 표현해야 할 수도 있다.
- 이렇게 하면 맥락 정보를 얼마나 많이 포함할지에 따라 다양한 선택지가 생긴다.
- 컨텍스트 윈도우를 넘지 않으면서도 중요한 정보를 적절하게 실을 수 있다.
- 탄력적 스니펫 구성 방법 2가지
- 탄력적 프롬프트 요소: 긴 버전, 조금 짧은 버전, 더 짧은 버전 등으로 만들어두고, 상황에 따라 적당한 길이의 스니펫을 사용한다.
- 추출한 정보로부터 서로 다른 수준의 맥락을 가진 스니펫을 만든다. 만들어 둔 스니펫중 적절한 것을 하나만 선택해서 넣는다.
프롬프트 요소 간 관계#
- 프롬프트 요소를 구성할 때 위치, 순서, 중요도를 고려해야 한다.
- 각 요소가 프롬프트 내에서 어디에 위치해야 하는지를 결정한다.
- 예시: 참고 문헌을 인용한다면 원래 순서를 유지해야하며, 대화나 이야기 구조에서는 시간 순서를 지켜야 한다.
- 이러한 관계를 관리하기 위해 프롬프트 요소를 배열이나 연결 리스트로 구성하거나 모든 요소를 아우르는 인덱스를 사용하거나, 각 요소에 대한 고유의 위칫값을 부여할 수 있다.
중요도#
- 특정 프롬프트 요소가 모델에 관련 정보를 전달하는 데 얼마나 핵심적인지를 결정한다.
- 도입부는 중간에 나오는 세부 정보보다 훨씬 중요할 수 있다.
- 중요도를 평가할 때
- 관련성이 높은 대량 정보를 통쨰로 넣을 것인지 덜 중요한 작은 요소를 여러 개 넣을 것인지 고려 필요
- 스니펫 길이를 기준으로 할지 절대적 척도를 기준으로 할지 결정 필요
- 동일 분량의 정보를 전달한다면 긴 프롬프트보다 짧고 효율적인 프롬프트 요소가 보통 더 낫다.
- 처음붜 길이를 고려하지 않았다면 프롬프트 조립 엔진이 나중에 토큰 길이에 따라 중요도를 조정할 수 있도록 해야 한다.
- 중요도를 평가할 때 숫자 형태의 점수나 우선순위 레벨을 사용할 수 있다.
의존성#
- 특정 요소를 포함하는 것이 다른 요소의 포함 여부에 어떤 영향을 미치는지에 초점을 맞춘다.
- 선행 조건: 하나의 프롬프트 요소가 다른 요소에 의존할 때 발생한다.
- 비호환성: 어떤 프롬프트 요소가 다른 요소와 함께 포함될 수 없을 때 발생한다.
최종 프롬프트 구성#
- 최종 프롬프트 구성을 위한 제약 조건
- 의존성 구조: 프롬프트 요소 간 선행 조건과 비호환성을 반드시 준수해야 한다.
- 프롬프트 길이: 전체 프롬프트 길이는 반드시 설정된 한도 내로 유지해야 한다.
- 기본 아이디어: 프롬프트 요소를 정렬하고, 토큰 한도 내에서 가능한 한 많은 요소를 끝부분에 유지하는 방식으로 구성한다.
- 속도를 고려한다면 탐욕 알고리즘을 사용하는 것을 고려해보자.
- 추가 방식 탐욕 알고리즘
- 프롬프트 길이를 넘어설 만큼 요소가 많아서 많이 제거해야 할 경우에 효과적이다.
- 하지만, 순환적인 요건이 거의 없고 가치가 높은 요소가 가치가 낮은 요소에 의존하는 경우가 적어야 잘 작동한다.

- 제거 방식 탐욕 알고리즘
- 요소 개수가 적당하고 요소 간 상호 출돌이 적을 때 효과적으로 작동한다.
- 가치가 낮은 요소에 의존하는 가치가 높은 요소는 고급 기술을 사용해 높은 가치 의존성을 유지하는 것이 우선시하지 않는 한, 최적이 아닌 결과를 초래할 수 있다.

comments powered by