"삽입 계층은 건네받은 뭐든 타이핑해. 그러니 챗봇이 쓴 문장을 절대 건네지 마."
변형이지 대화가 아냐
정리는 엄격한 변형이야: 원시 전사 입력, 다듬어 삽입 가능한 텍스트 출력. 전사에 절대 답하거나, 내용을 더하거나, 논평하면 안 돼. "은행에 전화하라고 알려줘" 라고 받아쓰면, 정리는 "은행에 전화하라고 알려줘." 를 돌려줘 — 문장부호 찍고 — "물론이죠, 알려드릴게요!" 가 아니라. 프로바이더는 구조화된 요청(원시 전사, 모드, 선택 텍스트, 허용된 맥락, 사전, 스니펫, 스타일 프로파일, 언어 힌트, 출력 제약)을 받아 구조화된 결과를 돌려줘. 양끝이 일부러 타입돼 있어.
결과가 구조화돼야 하는 이유
삽입 계층은 설계상 멍청해: 건네받은 뭐든 라이브 앱에 타이핑해. 그게 정리가 자유 산문을 건넬 수 없는 정확한 이유야. 정리 브레인이 "정리된 텍스트예요: …" 나 "무슨 뜻인지 모르겠어요" 를 돌려주면, 그게 유저 문서에 그대로 타이핑돼. 구조화된 결과 — text, action, press_enter, warnings — 가 삽입 계층이 작동할 줄 아는 필드만 받게 보장해. 산문은 유효한 반환값이 아냐; 결과 객체가 유효해.
CleanupRequest { transcript, mode, selection?, context?, dictionary,
snippets, style, language, constraints }
|
v (프로바이더: cwkPippa full / local Ollama / deterministic)
v
CleanupResult { text, action: "insert", press_enter, warnings[] }
|
v
Insertion result.text 만 타이핑 -- 원시 모델 산문 절대 아님
약한 모델 길들이기
로컬 모델이 어려운 케이스야: 작은 Ollama 모델이 JSON 반환 지시를 무시하고 마크다운-펜스 덩어리, 서두, 감정 태그로 답할 수 있어. 프로바이더의 일은 그걸 길들이는 거야 — 펜스와 서두를 벗기고, 다 안 되면 원시 텍스트를 유효한 결과 객체로 감싸서 계약이 여전히 성립하게. 규칙은: 삽입 계층은 난장판을 절대 안 봐. 약한 모델이 뭘 하든, 어댑터가 강한 모델이 내는 같은 깨끗한 결과 모양으로 정규화해.