Prompt Enginnering
- LLM이 prediction engine 라는 것을 생각해야함
- 순차 문자열을 입력으로 받아서 학습한 데이터를 기반으로 예측값을 줌
- 올바른 예측을 할 수 있도록 설정을 해주어야함
LLM output configuration
Output length
응답에서 생성할 토큰 수, 많을 수록 더 많은 계산을 해야함 (느린 응답, 비싼 비용)
Sampling controls
여러 토큰을 예측하는데 어떤 토큰을 다음으로 선택할지 경정하는 것
- Temperature: 토큰 선택의 무작위성의 정도(the degree of randomness)를 조절함
- 낮을 수록 정확한 선택, 높을 수록 예상치 못한 결과
- Top-K, Top-P (nucleus sampling): 다음 토큰이 상위 예측 확률을 가진 토큰에서 오는 것을 제한
- Top-K: 가장 가능성이 높은 상위 K 토큰을 선택
- Top-P: 누적 확률이 특정 값(P)을 초과하지 않는 상위 토큰을 선택
- Repetition Loop Bug: 반복되는 filler word로 응답이 채워지는 것. 적절하지 않은 temperature, top-k/top-p 설정으로 발생함
Prompting Techniques
- LLM은 많은 데이터로 학습하지만 정확하지 않음. 특정 기술을 사용하면 더 좋은 답을 얻을 수 있다.
Gneral prompting / zero shot
- zero shot으 가장 간단한 타입의 프롬프트, 작업에 대한 하나의 설명과 LLM을 시작하기 위한 몇개의 문자
- 예시 없음을 의미함
- zero shot이 동작하지 않으면 “one-shot”, “few-shot” 이라고 불리는 예시가 포함된 프롬프트 기술을 사용해야할 수 있음
One-shot & few-shot
- one-shot: 한개의 예제 제공
- few-shot: 여러개의 예제 제공, one-shot과 비슷하지만 여러개의 예제가 모델이 패턴을 따르도록 함
- 다양한 입력에 강력한 출력을 원하면 여러 엣지 케이스를 예제에 포함하는 것이 중요함
System, contextual and role prompting
- System prompting: 전반적인 맥락과 목적을 설정
- 모델의 기본 기능과 전반적인 목적을 정의
- 출력이 특정 조건(ex. JSON format)을 만족해야할 때 좋음
- safety와 toxicity를 설정하기 좋음, ex. You sholud be respectful in your answer.
- Contextual prompting: 현재 작업과 관련된 세부 사항, 배경 정보를 제공
- 즉각적인 정보를 제공, 동적인 작업에 특화되어있음
- 내 요청을 더 빨리 이해할 수 있음
- Role prompting: 특정 역할이나 정체성을 부여
- specificity와 personality를 부여함
- 더 관련성 있고 유익한 출력을 생성하는데 좋음
Step-back prompting
- 일반적인 질문을 먼저하고, 그 답을 작업에 대한 후속 프롬프트에 공급하여 성능을 향상시키는 기술
- 특정 질문만 하면 발생할 수 있는 편견을 완화할 수 있음
Chain of Thought (CoT)
- 중간 추론 단계를 생성하여 LLM의 추론 능력을 향상시키는 기술
- 적은 노력으로 기성 LLM에 효과적이고 잘 동작함
- 중간 단계를 알기 때문에 잘못된 응답을 얻었을 때 분석할 수 있음
- 여러 LLM 간의 차이를 줄일 수 있음
- 더 많은 비용, 시간이 필요함
Self-consistency
- 표본 추출과 다수결을 결합하여 다양한 추론 경로를 생성하고 가장 일관된 답변을 선택함
- CoT는 greedy decoding 라서 효과에 한계가 있음
- 다음 단계를 수행함
- 다양한 추론 생성
- 생성된 응답에서 답 추출
- 가장 일반적인 답 선택
- 예제에서는 여러개의 CoT를 만들고 그 중에서 선택하도록 함
Tree of Thoughts (ToT)
- CoT의 일반화된 버전, LLM이 다양한 추론 경로를 동시에 탐색할 수 있게 함
ReAct (reason & act)
- 자연어와 외부 도구를 사용하여 복잡한 작업을 수행하기 위한 패러다임
- 외부 API와 상호작용 하는 등의 액션을 함
- 현실 셰계에서 사람이 작업하는 것을 모방함
- 추론과 행동을 사고-행동 루프 (thought-action loop)로 결합하여 동작함
- 첫번쨰 추론에 대한 계핵을 만들고 실행하고, 결과를 관측하여 추론과 계획을 수정하는 과정을 반복함
Automatic Prompt Engineering
- 프롬프트를 쓰는 것은 꽤 복잡한 일임, 그렇기 때문에 자동화해보자는 생각
- 프롬프트를 만들기 위한 프롬프트
Best Practices
- 예시를 제공하라
- 단순하게 만들어라
- 출력을 구체적으로 명시하라
- 제약 보다는 지침을 사용하라
- 최대 토큰 개수를 조절하라
- 프롬프트에 변수를 사용해라
- 여러 입력 형식과 글쓰기 스타일을 시도해라
- 여러 분류 작업을 할때는 예제를 섞어라
- 모델 업데이트에 적응해라
- 여러 출력 형식을 시도해라
- JSON으로 만들어라
- 스키마로 작업해라
- 다른 엔지니어와 함께 시도해라
- CoT Best pratices: CoT는 greedy decoding이기 떄문에 temperature를 0으로 해라
- 프롬프트 시도를 문서화해라