참고하면 좋겠다.
https://velog.io/@exoluse/AI-google-adk-%EB%A5%BC-%EC%8D%A8%EB%B3%B4%EC%9E%90
import json
from typing import List, Dict, Set, Tuple
from google.adk.agents import Agent
def generate_qa_prompt(context: str, batch_index: int, batch_size: int = 10) -> str:
return (
f"[문장]: {context}\n\n"
f"이 문장을 바탕으로 **반드시 {batch_size}개의 서로 다른 질문과 그에 대한 답변**을 생성해 주세요.\n"
"각 질문과 답변은 중복되지 않아야 하며, 표현 방식도 다양해야 합니다.\n"
"형식은 JSONL이며, 각 줄은 아래 형식과 완전히 일치해야 합니다:\n"
'{"instruction": "질문", "input": "", "output": "답변"}\n\n'
"예시:\n"
'{"instruction": "삼성은 언제 창립되었나요?", "input": "", "output": "1938년 3월입니다."}\n\n'
f"{batch_index * batch_size + 1}번부터 {batch_index * batch_size + batch_size}번까지 생성해 주세요.\n"
"※ 반드시 정확히 10개를 생성해 주세요. 누락 없이 모두 포함되어야 합니다."
)
# JSONL 파서
def parse_jsonl(text: str) -> List[Dict[str, str]]:
return [json.loads(line) for line in text.strip().splitlines() if line.strip()]
# 중복 제거
def remove_duplicates(qa_list: List[Dict[str, str]]) -> List[Dict[str, str]]:
seen: Set[Tuple[str, str]] = set()
unique = []
for qa in qa_list:
key = (qa['instruction'].strip(), qa['output'].strip())
if key not in seen:
seen.add(key)
unique.append(qa)
return unique
# Q&A 생성 툴
def get_qa(context: str) -> Dict:
try:
total_needed = 300
batch_size = 100
max_batches = 100
all_qa: List[Dict[str, str]] = []
for i in range(max_batches):
prompt = generate_qa_prompt(context, i, batch_size)
response = qa_generator_agent.run(prompt) # 🔥 핵심 수정!
batch_qa = parse_jsonl(response)
all_qa.extend(batch_qa)
all_qa = remove_duplicates(all_qa)
if len(all_qa) >= total_needed:
break
final_qa = all_qa[:total_needed]
jsonl_str = "\n".join(json.dumps(qa, ensure_ascii=False) for qa in final_qa)
return {"status": "success", "report": jsonl_str}
except Exception as e:
return {"status": "error", "error_message": str(e)}
# 하위 LLM 호출용 에이전트 (직접 실행 전용)
qa_generator_agent = Agent(
name="qa_gen",
model="gemini-2.0-flash",
description="Generates batches of Q&A pairs based on a sentence.",
instruction="Generate non-redundant Q&A pairs in JSONL format from a sentence. Avoid duplication in questions and answers.",
)
# 실제 호출 가능한 상위 Agent
root_agent = Agent(
name="qa_agent",
model="gemini-2.0-flash",
description="Expert in parsing sentences and creating unique Q&A pairs as JSONL.",
instruction="You are a professional assistant that generates large numbers of diverse and unique question-answer pairs.",
tools=[get_qa],
)