18차시. State 이해
10. 자주 겪는 문제
출처: 원본 PDF 18차시_State이해.pdf 21쪽 · 쪽 그림 21쪽
| 증상 | 원인과 해결 |
|---|---|
| KeyError: 'query' | 초기 State에 query를 안 넣었습니다. / make_initial_state를 쓰세요 |
| 로그가 마지막 것만 남음 | Reducer를 안 붙였습니다. Annotated[List, / operator.add] |
| 노드에서 바꾼 값이 반영 안 됨 | state를 직접 수정했습니다. 딕셔너리로 반환해야 합니다 |
| 다른 키가 사라짐 | State 전체를 반환했습니다. 바꾼 키만 반환하세요 |
| retries가 리스트로 나옴 | 카운터에 Reducer를 붙였습니다. 떼세요 |
| TypedDict 필수 키 오류 | total=False를 붙이거나 초기값을 모두 넣으세요 |
10-1) State를 직접 수정하면 안 되는 이유
❌ 하지 마세요
──────────────────────────────────
def bad_node(state):
state["documents"].append(new_doc) # 직접 수정
state["retries"] += 1 # 직접 수정
return {}
→ LangGraph가 변경을 인지하지 못할 수 있습니다
→ Reducer가 적용되지 않습니다
→ 여러 노드가 병렬 실행될 때 충돌합니다✅ 이렇게 하세요
──────────────────────────────────
def good_node(state):
return {
"documents": state["documents"] + [new_doc],
"retries": state.get("retries", 0) + 1,
}
→ 새 값을 만들어 반환합니다
→ LangGraph가 규칙대로 합쳐줍니다