티스토리 뷰

리플렉션 그래프 구성: 입력 문장을 요약하고 만족하지못하면 다시 생각해봐 만족하면 END(요약 2번 반복시키기 하드코딩)

 

 

1. State 정의

class State(TypedDict):
    input: str
    summary: str
    is_satisfied: bool
    log: list[str]

 

2. Node 정의

summary ->요약됨 두번 등장하면 만족했다고 판단

 

# 요약 노드: 간단히 결과 요약 + 만족 여부 결정
def summary_node(state: State):
    state["summary"] += " → 요약됨"
    state["log"].append("요약 수행")

    # 만족 여부 판단 (2회 이상 요약되면 만족했다고 가정)
    if state["summary"].count("요약됨") >= 2:
        state["is_satisfied"] = True
    else:
        state["is_satisfied"] = False
    print(state)
    return state

# 반추 노드: 추가 아이디어 도출 시도 (다시 생각해보기)
def reflect_node(state: State):
    state["log"].append("반추 수행")
    state["summary"] += " → 다시 생각해봄"
    print(state)
    return state

 

3. 그래프 정의

# 그래프 구성
builder = StateGraph(State)
builder.add_node("summarize", summary_node)
builder.add_node("reflect", reflect_node)

# 흐름 정의
builder.add_edge(START, "summarize")

# 조건 분기: 만족 여부에 따라 흐름 결정
def check_satisfaction(state: State):
    return "satisfied" if state["is_satisfied"] else "retry"

builder.add_conditional_edges("summarize", check_satisfaction,
                              {"satisfied": END, "retry": "reflect"})

# 반추 후 → 요약 다시 시도 (루프)
builder.add_edge("reflect", "summarize")

# 컴파일
graph = builder.compile()

 

state["is_satisfied"] 만족하면 satisfied =>END 노드로 타고

만족하지않으면 satisfied =>retry =>reflect 노드 => summarize 노드로 다시 탐

 

4. 그래프 실행

# 실행
initial_state = {"input": "오늘 하루 요약해줘", "summary": "", "is_satisfied": False, "log": [] }

result = graph.invoke(initial_state)
print("최종 상태:")
print(result)

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함