AI Agents — A Graph, Not a Model
Quiz: State Schemas and Reducers
한국어 원문으로 표시합니다.
노드 셋이 차례로 {"trace": [자기이름]} 을 돌려줬는데 끝나고 보니 trace 에 마지막 이름 하나만 있다. 원인은?
- 그 열쇠에 리듀서가 없어서 새 값이 옛 값을 덮어썼다
- 노드가 상태 전체가 아니라 일부만 돌려주어 나머지가 지워졌다
- 리스트를 돌려줄 때는 튜플로 감싸야 하는데 그러지 않았다
- 그래프가 노드를 병렬로 돌려 마지막 결과만 살아남았다
리듀서 함수의 계약으로 옳은 것은?
- 상태 전체를 받아 상태 전체를 돌려주는 함수다
- 노드가 돌려준 값 하나만 받아 검증 결과를 돌려주는 함수다
- 옛 값과 노드가 돌려준 값 두 인자를 받아 새 값을 돌려주는 보통 함수다
- 그래프가 컴파일될 때 한 번만 불리는 초기화 함수다
peak_ms: Annotated[int, max] 라고 적었더니 그래프를 컴파일할 때 ValueError: no signature found for builtin max 가 났다. 무엇을 해야 하는가?
- 열쇠 이름을 max 와 겹치지 않게 바꾼다
(old, new)를 받는 함수로 한 겹 감싼 뒤 그것을 리듀서로 준다- 정수 채널에는 리듀서를 붙일 수 없으므로 문자열로 바꾼다
Annotated대신Optional을 쓴다
trace 에 operator.add 를 붙인 뒤 오래 도는 에이전트에서 체크포인트 저장량이 눈에 띄게 늘었다. 가장 정확한 설명은?
- 리듀서가 매번 새 리스트를 만들어 메모리 누수가 생긴다
operator.add는 리스트를 깊은 복사하므로 값이 두 배가 된다- 체크포인터가 단계마다 상태 전체를 저장하므로 자라는 열쇠가 저장량을 함께 키운다
- 리듀서가 붙은 채널은 압축되지 않아 저장 크기가 커진다
자라는 열쇠에 상한을 걸 자리로 이 실습이 권하는 곳은?
- 리듀서 — 채널마다 한 군데에서만 지키면 된다
- 노드마다 — 각 노드가 자기 값의 길이를 확인한다
- 그래프를 컴파일할 때 옵션으로 — 채널 크기 상한을 준다
- 체크포인터 — 저장 직전에 오래된 항목을 지운다
StateGraph(State, input=InputState, output=OutputState) 로 컴파일했을 때 노드와 바깥이 보는 범위는?
- 노드도 바깥도 출력 스키마의 열쇠만 본다
- 노드는 입력 스키마의 열쇠만 보고 바깥은 전체를 본다
- 노드는 전체 상태를 보고 바깥은 출력 스키마의 열쇠만 받는다
- 입력과 출력 스키마는 문서용이고 실행에는 영향이 없다