강의 영상: https://www.youtube.com/watch?v=P8yKg88xF_8
실습 코드: https://bit.ly/3W89UkV
프롬프트 엔지니어링
생성 AI 종류
- text to Image
- Text to Speech
- Text to Text - chatGPT
- Text to Video
chatGPT 학습 방법
- GPT
Generative Pre-trained Transformer(사전 훈련된 생성 변환기)
단어들을 주고 다음에 나올 단어를 예측하는 방식 - RLHF:
사람이 직접 지시/답변 데이터 구축 후 학습 → 생성된 글에 순위 매기기 → 글의 순위를 통해 강화학습
chatGPT 사용법
- ~역할로 ~을 해서 ~형태로 보여줘
(예시) 카피라이터 역할로 광고를 만들어서 PDF 형식으로 보여줘 - 문제 풀기
프롬프트의 정의
- 과거 → 컴퓨터는 사람의 말을 이해하지 못하므로 사람이 프로그래밍 언어로 컴퓨터에게 명령문 입력
- 현재 → 거대언어모델로부터 응답을 생성하기 위한 입력. 거대언어모델이 사람의 말을 이해할 수 있으므로 사람의 말로 프롬프트가 가능해졌다. 텍스트가 아니어도 가능하다.
프롬프트 엔지니어링?
- 거대언어모델로부터 “원하는 응답”을 생성하기 위해 입력프롬프트를 만드는 행위.
- 프롬프트의 미세한 조정에 따라 결과물이 큰 차이를 보인다.
(아래 글을 요약해줘 vs 아래 글을 3문장으로 요약해줘. 각 문장은 1, 2, 3으로 시작해야해.) - 내가 원하는 품질의 응답을 얻으려면 거대언어모델이 잘 이해할 수 있는 정제된 언어로 구조화된 프롬프트를 구성해야 한다. 또한 원하는 결과가 나올 때까지 프롬프트를 재구생 해야 한다.
- 구체적으로, 심플하고 명확하게, 절차적으로, 예시를 들어서 작성하는 것이 좋다
- 프롬프트: 인공지능에게 입력하는 값
- 프롬프팅: 프롬프트를 입력하는 일
- 프롬프트 엔지니어링: 원하는 결과를 얻기 위해 좋은 프롬프트를 만드는 일
- 프롬프트 엔지니어: 프롬프트 엔지니어링을 하는 사람/직업
프롬프트 최적화
- Zero-shot prompts: 예시가 없는 프롬프트. 제대로된 응답을 얻기 어렵다
(예시) 한국의 수도는 어디야? - Few-shot prompts: 몇개의 예시를 보여주며 질문. 예시를 통해 유추하여 성능이 좋아진다. 입력 길이가 길어져서 처리량이 많아진다
(예시) 스페인의 수도는 마드리드고 영국의 수도는 런던이야. 한국의 수도는 어디야? - COT(chain-of-thought-prompt): 논리적으로 순서대로 설명. step-by-step 설명. 입력 길이가 길어져서 시간과 비용이 늘어난다.
- self-consistency technique: 같은 프롬프트로 여러 결과를 만들고 좋은 결과를 선택.
- Embeddings + vector databases: 벡터 데이터베이스를 활용.
Cost and latency
입력 + 출력의 길이가 길수록 비용이 커진다
프롬프트 엔지니어링으로 LLM 사용법 극대화하기
개발자를 위한 프롬프트 엔지니어링: https://www.youtube.com/watch?v=H4YK_7MAckk&t=6s
Base LLM vs Instruction Tuned LLM
- Base LLM: 단순히 다음 단어 예측
- Instruction Tuned LLM: LLM이 질문에 대해 잘 답변하도록 학습
Iterative: 아이디어 → 프롬프트 구성 → 결과 도출 → 문제 분석 (과정 반복)
하이퍼 파라미터 조절
하이퍼 파라미터: 생성 모델의 출력을 제어하거나 다양한 결과를 생성하는 기능. 답변의 랜덤성, 길이, 창의성을 조절하는 기능.
- temperature(온도): 모델의 출력 확률 분포를 조절한다
온도가 높을 수록 다양하고 창의적인 답변, 낮을수록 확실하고 일관성 있는 답변 - max_token(최대 토큰 수): 답변으로 생성할 수 있는 최대 토큰 수 제한. 출력의 길이를 조절한다.
- top_p, top_k: 토큰의 다양성을 조절하는 데 도움을 준다.
- top_p: 출력 확률의 누적 합이 특정 임계값(0~1)을 초과하지 않도록 제한. 누적 확률이 확률 p에 다다르는 최소한의 단어 집합으로부터 샘플링
- top_k: 확률 분포에서 가장 높은 k개의 후보 고려해 한 개 출력
역할 지정하기
- system: chatGPT의 역할 부여
- user: 사용자 질문 내용
- assistent: 더 좋은 답변을 위한 추가적인 설명
프롬프트 엔지니어링의 원칙
- 명확하고 구체적인 프롬프트
- 모델이 생각할 시간을 갖도록 많은 예시 부여, 절차 설명
- 반복적인 프롬프트 업데이트 시도
'Graduation Project' 카테고리의 다른 글
응답 스트리밍(2) - SSE (1) | 2024.07.23 |
---|---|
응답 스트리밍(1) - AWS Lambda 응답 스트리밍 (1) | 2024.07.22 |
S3 + CloudFront 비디오 스트리밍 (0) | 2024.07.03 |
[Error 😥] Serverless Framework 사용 도전기 (0) | 2024.07.02 |
AWS APIgateway+ 응답 HTTP status 변경하기 (0) | 2024.06.28 |