"둘 다 텍스트를 받아 코퍼스에서 텍스트를 돌려줘. 그럼 같은 거겠지? 아냐. 둘은 latency 절벽의 반대편에 있어."
하나처럼 보이는 둘
Lantern 은 형제처럼 보이는 두 종류 질문에 답해. 검색: "장기 투자에 관한 구절을 찾아줘." 자동완성: "'장기 투자자가 물어야 할 유일한 질문' 을 치는 중 — 내 코퍼스가 하듯 끝내줘." 둘 다 텍스트를 받고, 둘 다 같은 코퍼스에서 텍스트를 돌려줘. 게으른 본능은 둘 다 하는 엔드포인트 하나를 짓는 거야. 그 본능은 틀렸고, 이유는 물리야.
latency 예산이 선을 그어
검색은 인터랙티브 야: 사람이 쿼리를 치고 엔터를 눌렀고, 좋은 답을 위해 한 박자 기다릴 거야. 그 박자 — 수백 ms — 는 키워드 인덱스를 상의하고, 벡터 검색을 돌리고, 둘을 융합하고, 선택적으로 rerank 하기에 충분한 시간이야. 자동완성은 키스트로크 등급 이야: 치는 대로, 모든 문자마다 발사되고, 수십 ms 안에 못 답하면 쓸모없는 것보다 나빠 — 네 손가락 뒤에 처져. 네트워크 왕복은커녕 모델 호출 예산도 없어.
일도 선을 그어
둘은 다른 질문에도 답해. 검색은 관련성 을 원해: 가장 잘 매칭되는 구절을, 순위 매겨, 코퍼스 어디 있든. 자동완성은 연속 을 원해: 커서 밑의 정확한 prefix 가 주어지면, 네 글에서 실제로 뒤따르는 단어가 뭐야? 하나는 옳은 책을 가져오는 사서고, 다른 하나는 네 자신의 목소리가 네 문장을 끝내는 거야. 한 경로를 두 일에 최적화하면 각각에 그저 그렇게 돼.
한 엔진, 두 엔드포인트
두 레짐은 표면 아래 전부를 공유해 — 같은 코퍼스, 같은 인덱스, 같은 chunk — 근데 두 별도 계약의 두 별도 엔드포인트를 노출해. 검색은 벡터와 rerank 를 위해 네트워크 너머로 손 뻗을 수 있고, degrade 하면 알려. 자동완성은 로컬 기계를 절대 안 떠나. 둘을 별개 경로로 두는 건 중복이 아냐. 키스트로크와 쿼리가 같은 이벤트가 아니고, 같은 척해서 서비스하면 안 된다는 정직한 인정이야.