Search

커스텀 에이전트 + FAQ 를 활용한 Golden Dataset 생성

Number
7

커스텀 에이전트 + 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_formatGroundTruth 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 생성 방법을 다룹니다.