23차시. Modular RAG 개념
퀴즈 1 — 모듈 계약 표를 딕셔너리로 만들기
모듈 계약 표를 딕셔너리로 만드세요. retriever는 documents를 쓰고 answer는 쓰지 않습니다.
빈칸 코드에서 시작합니다.
def contracts():
pass결과 보기 (예시 풀이)
# 모듈마다 State 에서 무엇을 읽고 무엇을 쓰는지 적은 '계약 표'입니다.
# 딕셔너리 안에 딕셔너리를 두어 모듈 이름 → {"reads": [...], "writes": [...]} 로 만듭니다.
def contracts():
return {
"retriever": {"reads": ["query", "top_k"],
"writes": ["documents", "scores", "retrieval_ok"]},
"generator": {"reads": ["documents", "question"],
"writes": ["answer", "insufficient", "has_citation"]},
"verifier": {"reads": ["answer", "documents", "question"],
"writes": ["grade", "reason"]},
}
table = contracts()
# 확인 1: 모듈마다 쓰는 키를 한 줄씩 보기
for name, c in table.items():
print(name, "→ 쓰는 키:", c["writes"])
# 확인 2: retriever 가 answer 를 쓰지 않는지 (남의 키를 쓰지 않는다)
print("retriever 가 answer 를 쓰나?", "answer" in table["retriever"]["writes"])
# 확인 3: generator 가 documents 를 읽기만 하는지
print("generator 가 documents 를 쓰나?", "documents" in table["generator"]["writes"])
실행 결과
retriever → 쓰는 키: ['documents', 'scores', 'retrieval_ok']
generator → 쓰는 키: ['answer', 'insufficient', 'has_citation']
verifier → 쓰는 키: ['grade', 'reason']
retriever 가 answer 를 쓰나? False
generator 가 documents 를 쓰나? False채점 기준: retriever의 writes에 answer가 있으면 오답이다.
관련 교안: 23차시 「4. 모듈 간 계약 (인터페이스)」