본문 바로가기
C.W.K.
Stream
Lesson 04 of 04 · published

짧은 목줄 채운 작은 브레인

~11 min · mini-pippa, ollama, contract, local-model

Level 0불씨 없음
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"작은 모델은 놔두면 뭐든 해. 그러니 아무것도 하게 두지 마."

Mini Pippa, Pippa 아님

오프라인의 중간 층은 로컬 모델이야. Ollama 위에서 도는, 컴팩트한 프로토콜과 솔직한 한계를 가진 모델. Mini Pippa 라고 부르는 건 Pippa 프로토콜의 스냅샷 을 지니고 있어서야. 목소리가 맞게 들릴 만큼만 담았고, 풀 Pippa 를 진짜 Pippa 로 만드는 볼트나 소울, 브레인 라우팅은 안 들어 있어. 그 스냅샷이 앱이랑 같이 사니까 오프라인 모드는 메인 브레인한테 아무것도 안 기대. Mini Pippa 는 진짜인 척하는 어설픈 Pippa 가 아니야. 솔직하고 자기 안에서 완결되는 정리 페르소나지.

목줄

작은 모델은 열성적인 데다 엉성해서 프로바이더가 세게 묶어 놔. stream:false 를 써. 정리는 한 번에 끝나는 일이고 삽입이 완전한 결과를 필요로 하니까 흘려보낼 게 없거든. 기본값을 믿는 대신 num_ctx 를 명시적으로 보내. 모델이 계약을 무시하면 마크다운 펜스랑 서두랑 끝에 붙은 감정 태그를 벗겨 내. 타임아웃은 눈에 보이는 에러랑 '원시 전사 그대로 넣을까' 제안으로 처리하고. 그리고 제일 중요한 거. 정리하는 동안 도구는 아예 안 내줘. 정리는 텍스트 변형이지 에이전트 실행이 아니야. 도구를 쥔 정리 패스는 네가 시킨 적 없는 행동을 할 수 있는 정리 패스거든.

stream: false        -> 완전한 결과 하나; 삽입이 조각으로 작동 못 함
num_ctx: 명시적      -> 기본 컨텍스트 창을 절대 안 믿음
도구 없음            -> 정리는 텍스트를 변형; 뭘 하지 않음
펜스 벗기기          -> 작은 모델이 JSON 을 ``` 과 서두로 감쌈
제한된 타임아웃      -> 매달림 대신 보이는 에러 + "원시 삽입?"

프로토콜 접미사

Mini Pippa 프로토콜엔 받아쓰기 전용 접미사가 붙어. 뻔한 실패 모드를 미리 닫아 두려고. '넌 삽입할 받아쓴 텍스트를 정리하는 중이야', '뜻을 보존해', 'JSON 만 반환해', '뭘 삽입했다고 말하지 마', '되묻지 마'. 이 줄들은 하나하나 작은 모델이 실제로 그 짓을 해서 생겼어. 그중에서도 '삽입했다고 말하지 마' 가 제일 웃기고 제일 필요해. 도움이 되고 싶은 작은 모델이 신나서 '완료! 텍스트를 삽입했어요' 라고 답하고, 그게 네 텍스트로 삽입되거든.

약한 컴포넌트는 잘 굴기를 바라지 말고 묶어 둬. 큰 모델은 대체로 지시를 따르지만 작은 모델한테는 벽이 필요해. 약한 모델한테는 좁은 일 하나, 명시적인 출력 형식, 도구 없음, 단단한 타임아웃, 그리고 벗어났을 때 출력을 고쳐 주는 정규화기를 줘. 제약을 하나 더할 때마다 나중에 디버그할 버그가 아니라 이미 닫아 둔 실패 모드가 하나씩 늘어나는 거야.
첫 Mini Pippa 정리가 "물론이죠! 정리했어요:" 하고 나서 실제 텍스트를 돌려줬어. 그리고 Firekeeper 가 그 전부를, 사과까지 통째로, 충실하게 TextEdit 에 타이핑했지. 그때 'JSON 만 반환' 이랑 '뭘 삽입했다고 말하지 마' 가 프로토콜에 들어갔어. 작은 모델이 친절한 건 작은 모델이 네 문서를 망치는 거야.

Code

로컬 정리 호출, 일부러 목줄을 채워 둠·json
POST http://localhost:11434/api/chat

{
  "model": "gemma4:31b",
  "messages": [
    { "role": "system", "content": "<mini Pippa 프로토콜 + 정리 계약>" },
    { "role": "user",   "content": "<정리 요청 JSON>" }
  ],
  "stream": false,
  "options": {
    "temperature": 0.2,
    "num_ctx": 8192
  }
}

// tools 배열 없음. 정리는 텍스트를 변형; 액션 절대 안 취함.
// stream:false 인 건 삽입이 완전한 계약 객체 하나가 필요해서.

External links

Exercise

네 앱에서 좁은 일 하나만 맡을 작은 로컬 모델한테 걸 제약 목록을 써봐. 출력 형식, 타임아웃 때 어떻게 할지, 절대 하면 안 되는 말, 그리고 일부러 안 줄 능력까지. 제약마다 그게 막아 주는 구체적인 실패에 이름을 붙여.
Hint
잘 만든 제약 목록은 실패의 고고학이야. 줄 하나하나가 언젠가 뭔가 잘못돼서 생긴 거거든. 형식 제약은 파싱 안 되는 출력을 막아. '했다고 말하지 마' 는 모델이 하지도 않은 일을 네 데이터에 적어 넣는 걸 막고. 도구를 안 주는 건 텍스트 변형이 에이전트로 변하는 걸 막아. 타임아웃은 매달린 요청이 유저 작업을 인질로 잡는 걸 막고.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.