프롬프트 엔지니어링 기초 실습
오늘 진행한 내용
오늘은 AI에게 질문하는 방법을 바꾸는 프롬프트 엔지니어링 실습을 했다. Python 코드에서 gpt-4o-mini 모델을 사용하고, 질문이나 지시 내용을 바꿔서 답변을 받는 방식이었다.
실습에서는 다음 방법들을 배웠다.
-제로샷: 예시 없이 바로 질문하기
-퓨샷: 원하는 답변 예시를 같이 주기
-단계별 답변: 문제 파악부터 결론까지 순서대로 답하도록 하기
-역할 프롬프트: 특정 역할이나 입장을 정해주기
-구조화된 출력: JSON처럼 정해진 형식으로 답변받기
-프롬프트 템플릿: 질문이나 역할을 바꿔서 재사용하기
예시 없이 질문하기와 예시를 넣어 질문하기
제로샷에서는 별도의 예시 없이 질문을 넣었다. 기본 질문 외에도 “AI가 사람을 대체할 수 있을까요?”라는 질문을 사용하는 코드가 있었다.
퓨샷에서는 학교 스마트폰 사용 금지와 대중교통 무료 운영에 대한 답변 예시를 넣었다. 예시는 찬성 근거, 반대 근거, 결론 순서로 작성했고, 새로운 질문으로 주 4일제 도입에 대해 물어보도록 했다.
result = chain.invoke({
"question": "주 4일제를 도입해야할까?"
})처음에는 둘 다 질문하는 것이라 비슷해 보였는데, 퓨샷은 예시를 통해 원하는 답변 모양까지 알려주는 방식이라는 점을 알게 됐다.
같은 질문에 다른 역할 정해주기
역할 프롬프트에서는 “재택근무 전면 도입, 찬성해야 할까요?”라는 질문을 사용했다. 질문은 같게 두고 답변하는 역할을 다르게 정했다.
재무 담당자에게는 비용과 효율을 중심으로, 인사 담당자에게는 직원 복지와 조직 문화를 중심으로 답하도록 했다. 신입사원 역할에는 개인의 성장과 워라밸을 중요하게 생각하도록 설정했다.
단순히 “전문가처럼 답해줘”라고 쓰는 것보다 어떤 부분을 중요하게 봐야 하는지 적는 것이 더 구체적인 지시라는 걸 배웠다. 답변 길이도 3~4문장으로 정할 수 있다는 점이 기억에 남았다.
답변 형식 정하기
답변을 일반 문장 대신 JSON 형식으로 받는 실습도 했다. 주제는 topic, 찬성 근거는 pros, 반대 근거는 cons에 담도록 지정했다.
이후에는 아래 코드로 답변을 읽어 필요한 항목을 꺼내도록 되어 있었다.
data = json.loads(raw_output)
print(data["topic"])
print(data["recommendation"])처음에는 굳이 형식을 정하는 이유가 잘 와닿지 않았는데, 코드에서 주제나 결론을 따로 사용하려면 이런 방식이 필요하다는 걸 알게 됐다. 실습 코드에는 형식이 맞지 않을 때 파싱 실패 메시지를 출력하는 부분도 있었다.
아직 어려운 부분
실습에서 반복해서 나오는 코드가 있었다.
chain = prompt | llm | StrOutputParser()프롬프트를 모델에 전달하고 답변을 문자열로 받는 흐름이라고 이해했다. 다만 각 부분이 어떻게 연결되어 동작하는지는 아직 익숙하지 않다. 지금은 질문이나 지시문을 바꾸는 부분부터 이해하고, 나머지 코드도 조금씩 살펴봐야 할 것 같다.
배운 점과 다음에 해볼 것
이번 실습에서는 질문 내용뿐 아니라 예시, 역할, 답변 형식도 함께 정할 수 있다는 것을 배웠다. AI에게 막연하게 질문하기보다 내가 어떤 답을 원하는지 구체적으로 적는 것이 중요하다고 느꼈다.
다음에는 같은 질문을 제로샷과 퓨샷으로 각각 실행해서 답변 형식이 얼마나 달라지는지 직접 비교해 보고 싶다. 실습 코드를 다시 보면서 프롬프트를 만들고 실행하는 흐름도 복습할 예정이다.
댓글
댓글이 없습니다.
