캐시 키가 설계 전부야
요약이든 번역이든 정리된 본문이든, 유도된 텍스트는 한 번 비싸고 그다음엔 공짜야. 두 번째 요청을 알아볼 수 있을 때만. 그러니까 키는 출력을 바꿀 만한 걸 전부 지명해야 해. 어느 기사인지, 어떤 종류의 유도인지, 어떤 목표 언어인지. 차원 하나를 빠뜨리면 엉뚱한 산물을 돌려주거나 이미 있는 걸 또 사게 돼.
기사만으로 키를 잡는 게 고전적 실수고, 더 창피한 방향으로 실패해. 요약을 요청하고 그다음 번역을 요청하면, 두 번째 요청이 캐시 항목을 찾아서 요약을 돌려줘. 복합 키는 아무 비용도 안 들고 틀린 답을 표현 불가능하게 만들어.
날것 말고 처리된 형태에서 유도해
유도엔 입력이 정확히 하나여야 하고, 그건 날 추출본이 아니라 정리된 본문이어야 해. 날 출력을 요약하는 건 기사랑 같이 내비게이션 메뉴랑 쿠키 안내를 요약하는 거고, 같은 값에 더 나쁜 결과를 내지.
결과로 명시할 값어치가 있는 의존이 생겨. 아직 처리 안 된 기사한텐 유도가 날 형태로 물러나지 않고 정중히 사양해. 엉뚱한 입력으로 만들어진 캐시된 유도물은 유도물이 없는 것보다 나빠. 아래쪽 어디서도 어느 입력이 그걸 냈는지 알 수 없으니까.
전부 모형이 필요한 건 아냐
빌려 갈 값어치가 있는 세부 하나. 기사가 무슨 언어인지 정하는 데 턴이 필요 없어. 문자 종류를 세면 결정론적으로, 즉시, 공짜로 답이 나와. 규칙이 일반화돼. 분류에 턴을 쓰기 전에 답이 계산 가능한지 물어봐. 언어 감지, 길이, 이게 목록인지, 필드가 비었는지. 전부 모형 작업으로 제안되고 전부 그러면 안 되는 것들이야.
퇴비로 만들어도 되고, 그게 요점이야
유도물의 목소리 사양이 바뀌었을 때, 앞서 캐싱된 텍스트는 옛 사양 아래 생성된 거였어. 마이그레이션 대신 지웠고, 다음 탭이 다시 유도했지.
그게 변호 가능한 건 유도물이 뭔지 때문이야. 아직 존재하는 입력에서 재생산 가능한 작업 집합. 아무것도 안 잃었어. 거기 원본이 없었으니까. "지워, 다시 나올 거야"라고 말할 수 있는 게 유도 데이터를 엄격히 유도된 채로 둬서 얻는 성질이야. 그리고 유도물이 수정이나 주석이나 손으로 한 정정을 얻는 순간 그 성질이 사라지고 영원히 마이그레이션 문제를 안게 돼.