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

모델 selection과 mini mode

~18 min · adapters, selection

Level 0Downloader
0 XP0/41 lessons0/11 achievements
0/120 XP to next level120 XP to go0% complete

Size-vs-prompt 미스매치

작은 모델 (1B–3B)은 길고 겹겹이 쌓인 system prompt에 약해. 잘 못 따라가고, 중간에 딴 데로 새고, 시키는 일을 하는 대신 자기 얘기를 늘어놓는 일이 잦아. 큰 모델 (32B+)은 빽빽한 system prompt도 자연스럽게 소화하고. 그러니까 adapter가 지금 어떤 size를 상대하는지 알고 system prompt를 맞춰줘야 해.

Mini mode

"Mini mode"는 하나의 관례야. 지금 쓰는 모델이 작으면 확 덜어낸 system prompt로 갈아 끼우는 거지. Plan은 남기고 철학은 빼. 형식은 남기고 톤 조율은 빼고.

Metadata 어디서 와?

/api/tags가 설치된 각 모델의 details.parameter_size ("7B", "32B", "1.5B") 반환. 그걸 읽어서 mini / standard / large로 나누고, prompt를 거기에 맞춰 태워 보내.

분류 reinvent하지 마

세 칸이면 충분해. mini (≤3B), standard (4–14B), large (≥15B). 칸을 더 쪼개봐야 얻는 건 거의 없고 if/else만 길어져.

Code

Mini-mode 인지 selector·python
class OllamaModelSelector:
    """OllamaAdapter 위에 layer된 스마트 모델 selection."""

    def __init__(self, adapter: OllamaAdapter):
        self.adapter = adapter

    async def installed(self) -> list[dict]:
        r = await self.adapter.client.get(f"{self.adapter.base_url}/api/tags")
        r.raise_for_status()
        return r.json().get("models", [])

    def classify(self, model_info: dict) -> str:
        size = model_info.get("details", {}).get("parameter_size", "")
        try:
            params_b = float(size.replace("B", "").strip())
        except ValueError:
            params_b = 0.0
        if params_b <= 3:
            return "mini"
        if params_b <= 14:
            return "standard"
        return "large"

    def system_prompt_for(self, klass: str) -> str:
        if klass == "mini":
            # 작은 모델: stripped down — plan + 형식만
            return (
                "You are a helpful assistant. Be concise. "
                "If asked to use a tool, call it directly without commentary."
            )
        # standard + large는 full prompt 처리
        return (
            "You are a knowledgeable AI assistant with expertise in software "
            "engineering, data analysis, and creative work. Think step by step. "
            "Provide detailed, accurate responses. When using tools, explain "
            "your plan in one sentence before calling them."
        )

    async def system_prompt_for_active(self) -> str:
        """활성 모델 class lookup해서 옳은 prompt 반환."""
        models = await self.installed()
        info = next((m for m in models if m["name"] == self.adapter.model), {})
        return self.system_prompt_for(self.classify(info))

External links

Exercise

OllamaModelSelector 구현. 머신 모든 설치된 모델에 classify() 돌려서 bucket 출력. 같은 prompt를 mini-mode랑 standard-mode system prompt로 1B랑 7B 모델에 보내. Mini mode일 때 1B 모델이 더 잘 동작하는지 메모.

Progress

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

댓글 0

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

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