RAG2026-5일19차시 · Node 이해7 / 19← 이전목차다음 →MetaContents

19차시. Node 이해

4. RAG를 어떻게 나눌까?

출처: 원본 PDF 19차시_Node이해.pdf 9쪽 · 쪽 그림 9쪽

15차시 ask() 함수를 뜯어보며 경계선을 찾습니다.

4-1) 역할 표시하기

출력
def ask(question):
    # ─────── 검색 구간 ───────
    pairs = store.similarity_search_with_relevance_scores(
        question, k=config.TOP_K)
    docs = []
    for d, s in pairs:
        if s >= config.MIN_SCORE:
            docs.append(d)
    # ─────── 판단 구간 ───────
    if not docs:
        return {"answer": config.MSG_NO_DOC}
    # ─────── 생성 구간 ───────
    answer = _chain.invoke({"context": _build_context(docs),
                            "question": question})
    # ─────── 검증 구간 ───────
    nums = re.findall(r"\[(\d+)\]", answer)
    cited = bool(nums)
    for n in nums:
        if not (1 <= int(n) <= len(docs)):
            cited = False
    return {"answer": answer, "cited": cited, ...}

4-2) 구간별로 노드 만들기

노드읽는 키쓰는 키
retrievequery, top_kdocuments, scores, retrieval_ok
generatedocuments, questionanswer, insufficient, has_citation
verifyanswer, documentsgrade, reason
fallbackquestionanswer

🎯 "판단 구간"이 노드가 아닌 이유
if not docs: 부분은 노드가 아니라
조건부 Edge가 됩니다. (20차시에서 배웁니다)
노드 = 일을 하는 곳
Edge = 어디로 갈지 정하는 곳
이 구분을 지키면 그래프가 훨씬 읽기 쉬워집니다.

← 이전 절19차시 · 3. 좋은 노드의 4가지 조건다음 절 →19차시 · 5. 실습 ① — Retrieve 노드 만들기