티스토리 뷰
리플렉션 그래프 구성: 입력 문장을 요약하고 만족하지못하면 다시 생각해봐 만족하면 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)
'Data science > Agent' 카테고리의 다른 글
[Agent] 6. Agent 시스템: Memory (0) | 2025.05.03 |
---|---|
[Agent] 5. Agent 시스템: Tools (0) | 2025.04.23 |
[Agent] 3. Agent 시스템 State, Node, Edge 라우팅 구조 (0) | 2025.04.23 |
[Agent] 2. Agent 시스템 State, Node, Edge 기본 구조 (0) | 2025.04.23 |
[Agent] 1. 기본 개념 (0) | 2025.04.23 |