도구 사용을 포함한 멀티턴 대화를 구축하려면 Claude의 다양한 응답 유형을 처리해야 합니다. Claude가 응답할 때, 도구를 사용해야 할 수도 있고, 직접적인 답변을 제공할 수도 있습니다. 코드는 두 시나리오를 모두 원활하게 처리해야 합니다.
단순한 도구 통합의 문제점
모든 대화에 도구 결과를 그냥 추가하면 문제가 발생합니다. Claude가 "1+1은 무엇인가요?"와 같은 간단한 질문에 답할 때는 어떤 도구도 필요하지 않습니다. 하지만 코드가 항상 도구 결과를 처리하려고 하면, 대화 기록에 빈 메시지를 추가하게 됩니다.
해결책은 모든 Claude 응답과 함께 반환되는 stop_reason을 확인하는 것입니다. 이는 Claude가 왜 생성을 멈췄는지 알려줍니다 - 자연스럽게 완료되었는지, 아니면 도구를 사용하려고 했는지 말입니다.
Stop Reasons

Claude는 여러 가지 이유로 멈출 수 있습니다:
"tool_use"- 모델이 도구를 호출하려고 함"end_turn"- 모델이 응답 생성을 완료함"max_tokens"- 출력 한도에 도달함"stop_sequence"- 제공한 중지 시퀀스를 만남
채팅 함수 개선하기
먼저, 더 많은 정보를 반환하도록 채팅 함수를 업데이트하세요. 텍스트와 부분을 따로 반환하는 대신, 필요한 모든 것을 담은 딕셔너리를 반환하세요:
이 방식은 응답 부분에서 모든 텍스트 콘텐츠를 추출하므로, 첫 번째 부분이 항상 텍스트라고 가정하는 것보다 더 견고합니다.
대화 루프 구축하기
전체 대화 흐름을 처리하는 함수를 만드세요:
이 루프는 Claude가 도구 사용이 아닌 다른 이유로 멈출 때까지 계속됩니다. 각 반복마다:
- 현재 메시지를 Claude에 전송합니다
- Claude의 응답을 메시지 기록에 추가합니다
- Claude가 도구를 사용하려고 하는지 확인합니다
- 그렇다면, 도구를 실행하고 결과를 대화에 다시 추가합니다
- 그렇지 않다면, 루프를 종료합니다
구현 테스트하기
이 방식은 도구가 필요한 질문과 단순한 질문을 모두 처리합니다:
시간 관련 질문의 경우, Claude는 datetime 도구를 사용합니다. 수학 질문의 경우, 도구 호출 없이 직접 응답합니다. 대화 루프는 Claude의 stop reason에 따라 자동으로 적응합니다.
이 패턴은 더 많은 도구를 추가할 때도 잘 확장됩니다 - 동일한 루프가 도구 사용과 직접 응답의 모든 조합을 처리하여, 대화형 AI를 더 견고하고 자연스럽게 만들어줍니다.