INVALID_CHAT_HISTORY 오류
INVALID_CHAT_HISTORY 오류
에이전트를 만들고 실행하다 보면 가끔 INVALID_CHAT_HISTORY 오류를 만날 수 있어요. 이름만 봐도 "대화 기록이 이상하다"는 뜻인데, 정확히 언제 발생하는지 이해하면 고치기도 쉬워져요.
이 오류는 미리 만들어진 create_agent에서 call_model 그래프 노드가 형식이 잘못된 메시지 목록을 받았을 때 발생해요. 구체적으로는 tool_calls(LLM이 도구 호출을 요청하는 것)를 가진 AIMessage인데, 그에 대응하는 ToolMessage(도구 호출의 결과를 LLM에게 돌려주는 메시지)가 없을 때가 그런 경우예요.
왜 발생하나요
이 오류가 보이는 이유는 크게 두 가지가 있어요.
- 그래프를 호출할 때 직접 형식이 잘못된 메시지 목록을 넘긴 경우, 예를 들어
graph.invoke({'messages': [AIMessage(..., tool_calls=[...])]}) - 그래프가
tools노드로부터 업데이트(ToolMessage목록)를 받기 전에 중단(interrupt)됐는데, 그 후None도 아니고ToolMessage도 아닌 입력으로 다시 호출한 경우. 예를 들어graph.invoke({'messages': [HumanMessage(...)]}, config)처럼요.
중단은 다음 두 가지 방식으로 생길 수 있어요.
create_agent에서interrupt_before = ['tools']를 직접 설정- 도구 중 하나가
ToolNode("tools")가 처리하지 못한 오류를 발생시킴
해결하기
다음 중 하나를 하면 해결돼요.
- 형식이 잘못된 메시지 목록으로 그래프를 호출하지 않기
- 중단(수동이든 오류든)이 발생한 경우:
- 기존 도구 호출과 일치하는
ToolMessage를 제공하고graph.invoke({'messages': [ToolMessage(...)]})로 호출하기. 참고: 이렇게 하면 메시지가 기록에 추가되고 그래프가 START 노드부터 다시 실행돼요. - 상태를 직접 업데이트하고 중단 지점에서 그래프를 재개하기:
graph.get_state(config)로 그래프 상태에서 가장 최근 메시지 목록을 가져오기- 메시지 목록을 수정해서
AIMessages에서 답이 없는 도구 호출을 제거하거나, 답이 없는 도구 호출과tool_call_ids가 일치하는ToolMessage객체를 추가하기 - 수정한 메시지 목록으로
graph.update_state(config, {'messages': ...})호출하기 graph.invoke(None, config)같은 방식으로 그래프를 재개하기