루프를 한 번은 손으로 만들어봐
프레임워크 쓰기 전에 루프를 직접 만들어봐. 프레임워크가 나빠서가 아니라, 프레임워크가 가장 중요한 장치를 감춰버리기 때문이야. provider는 final text나 tool call을 돌려준다. 애플리케이션은 tool call을 실행하고 결과를 다시 넣는다. 그게 기계야.
직접 만든 loop는 프레임워크가 대신 구해주지 못하는 세 가지 실패 지점을 가르쳐. 나쁜 tool schema, 나쁜 tool result formatting, 빠진 stop policy.
루프의 모양
message list에서 시작해. model에 tool definition과 함께 보낸다. model이 tool call을 돌려주면 신뢰된 코드에서 실행한다. model의 요청과 tool 결과를 state에 붙인다. 반복한다.
아래 구현은 일부러 provider-neutral하게 쓴 거야. 실제 API의 메시지 모양은 다르지만 control flow는 같다.
도구 실행은 모형 밖에 둬
모형은 tool call을 요청할 뿐이고, 애플리케이션이 허용 여부를 판단하고, 실행하고, 에러를 잡고, 로그를 남기고, 간결한 결과를 돌려줘야 해. 이 분리가 있어야 디버깅과 권한 통제가 가능해진다.