RAG2026-5일18차시 · State 이해12 / 19← 이전목차다음 →MetaContents

18차시. State 이해

9. 실습 ④ — State 흐름 추적하기

출처: 원본 PDF 18차시_State이해.pdf 19~20쪽 · 쪽 그림 19쪽 20쪽

디버깅할 때 State가 어떻게 변하는지 보는 것이 가장 중요합니다.

9-1) 노드마다 로그 남기기

출력
def retrieve(state: RAGState):
    docs = search(state["query"])
    return {
        "documents": docs,
        "log": [f"[retrieve] query='{state['query']}' "
                f"→ {len(docs)}건"],
    }

def generate(state: RAGState):
    answer = make_answer(state["documents"], state["question"])
    return {
        "answer": answer,
        "log": [f"[generate] 답변 {len(answer)}자 생성"],
    }

실행 후 로그 확인
──────────────────────────────────────
final = app.invoke(make_initial_state("환불 규정은?"))

for line in final["log"]:
    print(line)

# [retrieve] query='환불 규정은?' → 3건
# [generate] 답변 87자 생성

9-2) stream으로 단계별 보기

출력
for step in app.stream(make_initial_state("환불 규정은?")):
    for node_name, update in step.items():
        print(f"■ {node_name} 실행")
        for k, v in update.items():
            preview = str(v)[:60]
            print(f"    {k} = {preview}")

실행 결과
──────────────────────────────────────
■ retrieve 실행
    documents = [Document(page_content='상품 수령 후 7일...
    log = ["[retrieve] query='환불 규정은?' → 3건"]
■ generate 실행
    answer = 환불은 상품 수령 후 7일 이내에 신청하실 수...
    log = ['[generate] 답변 87자 생성']

🔍 stream이 보여주는 것
어느 노드가 실행됐고
무엇을 반환했는지가 순서대로 보입니다.
반환한 키만 나온다는 점에 주목하세요.
"바꾼 것만 반환한다"는 규칙이 눈에 보입니다.
21차시에서 이 도구를 본격적으로 씁니다.

← 이전 절18차시 · 8. 실습 ③ — RAGState 완성다음 절 →18차시 · 10. 자주 겪는 문제