랭체인과 랭그래프로 구현하는 RAG·AI 에이전트 실전 입문과 Prompt Engineering Guide 을 읽고 요약한 글입니다.
LLM으로부터 원하는 출력을 얻기 위해 입력하는 프롬프트를 설계하거나 최적화하는 것
주어진 텍스트를 긍정, 부정, 중립 중 하나로 분류하세요.
텍스트: 휴가는 괜찮을 것 같아요.
감정:
중립
Task: Correct the grammar of the following sentences.
Example 1:
Incorrect: She go to the store.
Correct: She goes to the store.
Example 2:
Incorrect: They is happy.
Correct: They are happy.
Now, correct the following sentence:
Incorrect: We was playing soccer.
Correct:
We were playing soccer.
Q: 제가 6살 때 제 여동생은 제 나이의 절반이었습니다. 지금 저는 70살입니다. 제 여동생은 몇 살일까요?
A:
*생성 1:* 제가 6살 때 여동생은 제 나이의 절반이었으므로 3살이었습니다. 지금 제가 70살이니, 여동생은 70 - 3 = 67살입니다. 답은 67입니다.
*생성 2:* 화자가 6살일 때 그의 여동생은 그의 나이의 절반인 3살이었습니다. 이제 화자가 70살이므로, 그의 여동생은 70 - 3 = 67세가 될 것입니다. 답은 67입니다.
*생성 3:* 제가 6살 때 여동생은 제 나이의 절반이었으므로 3살이었습니다. 지금 저는 70살이니, 여동생은 70/2 = 35살입니다. 답은 35입니다.
-> 최종 답변: 여러 추론 과정 중 다수를 차지한 67이 최종 답변으로 선택됩니다[14].
# 1단계: 지식 생성
Question: 뉴욕에서 런던으로 가는 항공편이 취소된 경우 재예약 옵션은 무엇인가요?
Knowledge: 뉴욕에서 출발하는 승객에 대한 현재 영국 여행 제한 사항과 뉴욕에서 런던으로 가는 다음 항공편의 이용 가능 여부를 확인하세요.
# 2단계: 지식 통합 및 답변 생성
Knowledge: "현재 영국 여행 제한으로 인해 일부 항공편만 운항이 허용됩니다. 뉴욕에서 런던으로 가는 다음 이용 가능한 항공편은 [날짜]입니다."
User Query: 항공편이 취소된 승객을 위한 재예약 옵션은 무엇인가요?
현재 영국 여행 제한으로 인해 항공편 운항이 제한적입니다. 이용 가능한 다음 항공편은 [날짜]이며, 해당 항공편으로 재예약하시거나 전액 환불을 받으실 수 있습니다. 자세한 사항은 항공사 고객 서비스 센터로 문의해 주시기 바랍니다.
# 프롬프트 1: 고객 리뷰에서 핵심 제품과 감정 추출
고객 리뷰: "새로 산 XYZ 스마트폰 카메라는 정말 놀랍지만, 배터리가 너무 빨리 닳아서 실망스러워요."
이 리뷰에서 언급된 제품 기능과 각각에 대한 긍정/부정 감정을 추출해줘.
# 프롬프트 2: 추출된 정보를 바탕으로 요약문 생성
(프롬프트 1의 출력) 제품 기능: 카메라(긍정), 배터리(부정)
위 정보를 바탕으로 고객 피드백을 한 문장으로 요약해줘.
XYZ 스마트폰은 카메라 성능에 대해서는 긍정적인 평가를 받았지만, 배터리 수명에 대해서는 부정적인 피드백이 있습니다.
문제: 숫자 4, 9, 10, 13을 사용하여 정확히 24를 만드는 수식을 찾아라. 각 숫자는 한 번씩만 사용해야 한다.
생각 생성: 이 문제를 해결하기 위한 첫 단계로 가능한 연산들을 떠올려보자.
- 10 - 4 = 6. 남은 숫자 9, 13. 6, 9, 13으로 24를 만들 수 있을까?
- 13 - 9 = 4. 남은 숫자 4, 10. 4, 4, 10으로 24를 만들 수 있을까?
- ...
(10 - 4) * (13 - 9) = 6 * 4 = 24. 답은 (10-4)*(13-9)입니다.
# 1단계: 정보 검색
사용자 질문: "연차 휴가가 얼마나 남았나요?"
시스템: (인사 데이터베이스에서 '홍길동'의 연차 정책 문서와 과거 휴가 기록을 검색)
# 2단계: 프롬프트 증강 및 답변 생성
증강된 프롬프트:
- 검색된 정보: "홍길동의 연간 연차는 15일이며, 올해 5일을 사용했습니다."
- 사용자 질문: "연차 휴가가 얼마나 남았나요?"
LLM, 위 정보를 바탕으로 질문에 답하세요.
귀하의 연차 휴가는 총 15일 중 5일을 사용하셨으며, 현재 10일이 남아있습니다.
질문: 에펠탑이 있는 나라의 현재 대통령은 누구이며, 그 나라 인구의 제곱근은 얼마인가?
# ART 시스템의 자동 생성 계획:
1. "에펠탑이 있는 나라"가 어디인지 검색 도구를 사용해 찾아라.
2. 1번 결과로 나온 나라의 "현재 대통령"이 누구인지 검색 도구를 사용해 찾아라.
3. 1번 결과로 나온 나라의 "현재 인구"를 검색 도구를 사용해 찾아라.
4. 3번 결과로 나온 인구 수에 대해 "제곱근"을 계산기 도구를 사용해 계산하라.
5. 2번과 4번의 결과를 조합하여 최종 답변을 생성하라.
에펠탑이 있는 나라인 프랑스의 현재 대통령은 에마뉘엘 마크롱이며, 프랑스 인구(약 6,500만 명)의 제곱근은 약 8062입니다.
# 초기 목표
주어진 문장의 감정을 분석하는 프롬프트를 만들어라.
# APE가 생성한 후보 프롬프트들
1. 이 문장은 긍정적인가, 부정적인가, 중립적인가?
2. 다음 텍스트의 감정 톤을 평가하라.
3. 주어진 텍스트를 [긍정, 부정, 중립] 중 하나로 분류하세요.
...
# APE의 선택
(내부 평가 후) 3번 프롬프트가 가장 명확하고 높은 성능을 보이므로 최종 프롬프트로 선택.
"주어진 텍스트를 [긍정, 부정, 중립] 중 하나로 분류하세요."
# 1단계: 불확실한 질문 식별
모델에게 여러 질문을 제시하고, 어떤 질문이 가장 답변하기 어려운지(불확실성이 높은지) 스스로 평가하게 함.
# 2단계: 주석 요청 및 프롬프트 구성
가장 불확실하다고 판단된 질문에 대해 사람에게 정답을 요청하고, 이 (질문, 정답) 쌍을 few-shot 예시로 프롬프트에 추가함.
(Active-Prompt로 구성된 예시가 포함된 프롬프트를 통해 더 정확하고 일관된 답변을 생성)
미래 도시의 외로운 탐정에 대한 짧은 이야기를 써줘. 이야기에 '네온', '비', '사이보그', '음모'라는 단어를 반드시 포함해줘.
자정의 비가 거리를 적시자, 도시의 네온 불빛이 젖은 아스팔트 위에서 번져나갔다. 탐정 잭은 낡은 트렌치코트 깃을 올렸다. 이번 사건은 단순한 실종이 아니었다. 거대 기업의 음모가 숨 쉬고 있었고, 그 중심에는 기억을 잃은 사이보그 증인이 있었다.
문제: 카페에서 5달러짜리 커피 3잔과 3달러짜리 베이글 2개를 샀다. 총 얼마를 내야 하는가? 파이썬 코드로 풀어줘.
# LLM의 생각과 코드 생성
# 커피 가격을 계산한다.
coffee_price = 5 * 3
# 베이글 가격을 계산한다.
bagel_price = 3 * 2
# 총액을 계산한다.
total_price = coffee_price + bagel_price
def solution():
coffee_price = 5 * 3
bagel_price = 3 * 2
total_price = coffee_price + bagel_price
return total_price
# 실행 결과: 21
질문: '백년의 고독'을 쓴 작가가 태어난 나라의 가장 높은 산은 무엇인가?
Thought 1: 먼저 '백년의 고독'의 작가를 찾아야 한다.
Action 1: Search("author of One Hundred Years of Solitude")
Observation 1: 가브리엘 가르시아 마르케스
Thought 2: 가브리엘 가르시아 마르케스가 태어난 나라를 찾아야 한다.
Action 2: Search("where was Gabriel Garcia Marquez born")
Observation 2: 콜롬비아
Thought 3: 이제 콜롬비아에서 가장 높은 산을 찾아야 한다.
Action 3: Search("highest mountain in Colombia")
Observation 3: 피코 크리스토발 콜론
Thought 4: 답을 찾았으니 종합하여 답변한다.
'백년의 고독'의 작가 가브리엘 가르시아 마르케스가 태어난 나라인 콜롬비아에서 가장 높은 산은 피코 크리스토발 콜론입니다.
# 작업
주어진 파이썬 함수에서 버그를 찾아 수정하라.
# 1차 시도 (실패)
(코드를 잘못 수정하여 테스트 케이스 통과 실패)
# 성찰 과정
"코드를 분석해보니, 인덱스 범위를 잘못 계산하여 'list index out of range' 오류가 발생했다. 반복문의 범위를 n-1이 아닌 n으로 수정해야 한다."
# 2차 시도
(성찰 내용을 바탕으로 코드를 성공적으로 수정)
(버그가 수정된 최종 코드)
(이미지로 레스토랑 메뉴판이 주어짐)
질문: 치즈버거와 콜라를 하나씩 주문하면 총 얼마인가요?
# 추론 과정
1. 이미지에서 '치즈버거' 항목을 찾는다. 가격은 8달러이다.
2. 이미지에서 '콜라' 항목을 찾는다. 가격은 2달러이다.
3. 두 가격을 더한다. 8 + 2 = 10.
총 10달러입니다.
그래프 정보:
- 노드: Alice, Bob, Charlie
- 엣지: (Alice, Bob), (Bob, Charlie)
이 소셜 네트워크에서 누가 가장 많은 친구를 가지고 있는가?
# 추론 과정
Alice는 Bob과 연결되어 있다 (친구 1명).
Bob은 Alice와 Charlie와 연결되어 있다 (친구 2명).
Charlie는 Bob과 연결되어 있다 (친구 1명).
따라서 Bob이 가장 많은 친구를 가지고 있다.
Bob