커스텀 에이전트 + FAQ를 활용한 Golden Dataset 생성
1. 강의 개요
•
이번 강의는 FAQ 문서와 커스텀 프롬프트/에이전트를 활용해 Golden Dataset을 만드는 방법을 다룹니다.
•
이전 강의에서 설명한 RAGAS 기반 가상 데이터 생성 방식은 한국어 환경에서 적합하지 않을 수 있어, 이번에는 커스텀 방식을 권장합니다.
•
핵심은 FAQ처럼 이미 구조화된 문서가 있으면 질문-답변 쌍을 매우 쉽게 만들 수 있다는 점입니다.
2. 데이터셋 생성 방식 비교: Chain vs Agent
2.1 Chain 방식
•
에이전트가 등장하기 전, 여러 작업을 순차적으로 연결할 때 자주 사용하던 방식입니다.
•
작업 간 의존성(Dependency) 을 체인처럼 연결해 처리합니다.
•
이번 실습에서는 FAQ에서 추출한 내용을 바탕으로 LLM + 구조화 출력(Pydantic) 을 이용해 질문-답변 쌍을 생성합니다.
2.2 Agent 방식
•
LangChain의 create_agent 함수를 사용하면 복잡한 그래프를 직접 만들지 않아도 됩니다.
•
에이전트는 체인보다 더 유연한 실행 구조를 가지며, 같은 작업을 더 간단하게 수행할 수 있습니다.
•
이번 강의에서는 Chain 방식과 Agent 방식의 결과를 비교합니다.
3. Golden Dataset 생성 흐름
3.1 FAQ Markdown 문서 활용
•
앞에서 파싱한 FAQ Markdown 문서를 입력으로 사용합니다.
•
문서에서 질문/답변(Q&A)만 추출합니다.
•
추출된 결과를 Pydantic 모델로 구조화합니다.
3.2 Pydantic을 사용하는 이유
•
모델에게 단순히 “JSON으로 주세요”라고 요청해도, 결과가 항상 안정적으로 나오지 않을 수 있습니다.
•
Pydantic을 사용하면 원하는 출력 형식을 더 안정적으로 보장할 수 있습니다.
•
LangChain의 structured output 방식과 잘 맞습니다.
3.3 CSV 저장
•
생성된 Q&A 쌍을 CSV 파일로 저장하여 이후 평가용 Golden Dataset으로 사용합니다.
4. 체인(Chain)으로 Golden Dataset 만들기
4.1 Pydantic 모델 정의
•
GroundTruth라는 모델을 정의합니다.
◦
Question
◦
Answer
•
하나의 Q&A 쌍이 아니라 여러 개를 저장해야 하므로, 이를 List 형태로 감쌉니다.
4.2 LLM 설정
•
추론이 복잡하지 않으므로 저비용 모델을 사용합니다.
•
구조화 출력이 필요하므로 with_structured_output() 을 활용합니다.
4.3 프롬프트 작성
•
System Prompt로 “FAQ 문서에서 질문-답변 쌍을 생성하는 도우미”라고 지정합니다.
•
한국어로 결과를 생성하도록 지시합니다.
•
프롬프트는 가능하면 영어로 작성하면 토큰 수를 줄여 비용 절감에 도움이 됩니다.
◦
같은 의미라도 한국어보다 영어가 더 적은 토큰을 사용할 수 있습니다.
4.4 문서 입력과 실행
•
FAQ Markdown 파일의 경로를 읽고, 텍스트 내용을 가져옵니다.
•
이 내용을 프롬프트의 플레이스홀더에 넣어 체인을 실행합니다.
•
실행 결과로 GroundTruth 리스트를 생성합니다.
4.5 CSV로 저장
•
각 항목에 대해 model_dump()를 호출하면 JSON 형태로 변환됩니다.
•
이를 모아 DataFrame으로 만든 뒤 CSV로 저장합니다.
실습 순서
1.
환경 변수 로딩
2.
Pydantic 모델 생성
3.
LLM 설정
4.
프롬프트 템플릿 작성
5.
FAQ 문서 읽기
6.
Chain 구성 및 실행
7.
결과를 CSV로 저장
5. 에이전트(Agent)로 Golden Dataset 만들기
5.1 create_agent 사용
•
LangChain의 create_agent 함수를 사용해 에이전트를 생성합니다.
•
이때는 Pydantic 모델 대신 일반 모델을 넣습니다.
•
tools는 사용하지 않으므로 비워둡니다.
•
원하는 출력 형식은 response_format 에 GroundTruth List를 지정합니다.
•
시스템 프롬프트도 동일하게 사용합니다.
5.2 메시지 형식 주의
•
에이전트는 단순 문자열이 아니라 list of messages 형식을 받습니다.
•
메시지 종류:
◦
System Message
◦
Human Message
◦
AI Message
◦
Tool Message
•
따라서 입력은 messages 키를 사용해 메시지 리스트로 전달해야 합니다.
5.3 실행 및 결과 확인
•
에이전트를 실행하면 체인과 동일하게 구조화된 Q&A 결과를 얻을 수 있습니다.
•
결과는 structured_response에 들어갑니다.
•
이 결과 역시 CSV로 저장 가능합니다.
6. Chain vs Agent 비교
6.1 결과 비교
•
체인 방식과 에이전트 방식 모두 결과적으로 비슷한 Q&A 데이터를 생성합니다.
•
LangSmith에서 실행 로그를 확인하면 두 방식의 실행 흐름을 비교할 수 있습니다.
6.2 토큰 사용량 비교
•
강의에서는 체인과 에이전트의 토큰 사용량 차이도 확인합니다.
•
최근에는 에이전트 효율이 개선되어, 토큰 차이가 크지 않게 느껴질 수 있습니다.
•
특히 에이전트는 내부적으로 도구 선택 시도를 할 수 있어 비용이 증가할 수 있는데, 이번 예시에서는 비교적 최적화된 동작을 보였습니다.
7. 핵심 정리
•
FAQ 문서가 있으면 Golden Dataset 생성이 매우 쉽습니다.
•
Pydantic + structured output을 활용하면 안정적으로 Q&A 쌍을 만들 수 있습니다.
•
Chain 방식과 Agent 방식 모두 가능하지만, LangChain에서는 create_agent 로 더 간편하게 구현할 수 있습니다.
•
생성된 결과는 CSV로 저장해 평가용 Golden Dataset으로 활용합니다.
•
영어 프롬프트를 사용하면 토큰 비용을 줄이는 데 도움이 됩니다.
8. 다음 단계
•
이번에는 FAQ 문서를 활용해 Golden Dataset을 생성했습니다.
•
다음 단계에서는 일반 문서를 활용해서 더 확장된 Golden Dataset 생성 방법을 다룹니다.