모든 호출을 추적해
호출마다 토큰 수를 기록하지 않으면 "오늘 이 사용자가 비용을 얼마나 썼지?"나 "이 기능이 청구서를 폭발시키나?" 같은 단순한 질문에도 답할 수 없어. 첫날부터 추적기를 만들어. 나중에 모든 경로에 덧대려면 고통스러워.
기록할 값
모든 호출에서 모델, 프롬프트 토큰, 완성 토큰, 캐시된 토큰, 종료 이유, 시각, 어느 기능이 호출했는지를 나타내는 경로 키를 기록해. 작은 DB나 JSONL에 덧붙이면 대부분의 앱 규모에는 충분해.
OpenAI와 Gemini 사이의 메시지 변환
예전 OpenAI 구조의 코드나 OpenAI 형식 메시지를 받는 어댑터가 있다면 OpenAI → Gemini 변환을 자주 쓰게 돼. 세 가지가 중요해:
role: "system"은 메시지가 아니라 최상위system_instruction필드로 옮겨.role: "assistant"는contents안의role: "model"로 바꿔.tool_call_id가 있는role: "tool"은id를 가진 사용자 차례의functionResponsepart로 바꿔.