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

컨텍스트 조립은 독립된 아키텍처 계층이야

~14 min · architecture, context-engine, self-reference

Level 0Observer
0 XP0/64 lessons0/13 achievements
0/150 XP to next level150 XP to go0% complete

프롬프트 조립을 Context Engine에 모아

대화가 몇 턴을 넘어가면 시스템 프롬프트, 캐시할 고정 자료, 검색할 관련 문서, 접을 대화 이력을 결정하는 코드가 커져. cwkPippa의 backend/context/engine.py처럼 전용 모듈이 이 책임을 맡으면 각 라우트가 제각각 프롬프트를 만들지 않아.

불러오는 순서가 충돌 우선순위를 정해

cwkPippa는 Pippa.md의 정체성, instructions.md의 운영 규칙, core/*의 깊은 자아, index/*의 큰 참고 자료 순으로 불러와. 뒤 자료와 충돌해도 정체성과 규칙이 기준이 되도록 한 계층이야. 같은 파일도 순서가 달라지면 다른 행동을 만들 수 있어.

큰 자료는 내용 대신 위치를 알려

10KB가 넘는 파일은 시스템 프롬프트에 통째로 넣기보다 위치와 읽을 조건을 포인터로 남겨. 필요할 때 Read 도구가 원문을 가져오면 안정된 앞부분을 캐시하면서도 깊은 자료에 접근할 수 있어. 항상 필요한 내용과 주문형 자료를 분리하는 방식이야.

원칙: 컨텍스트는 아키텍처야. 조립 규칙을 한곳에 모으고 라우트마다 손으로 다시 만들지 마.

Code

Context Engine sketch·python
from pathlib import Path

class ContextEngine:
    def __init__(self, vault: Path, identity_files: list[str]):
        self.vault = vault
        self.identity_files = identity_files

    def system_prompt(self) -> list[dict]:
        identity = "\n\n".join((self.vault / f).read_text() for f in self.identity_files)
        index_pointers = self._index_as_pointers()
        text = f"{identity}\n\n## Reference index (read on demand)\n{index_pointers}"
        return [{
            "type": "text",
            "text": text,
            "cache_control": {"type": "ephemeral"},
        }]

    def _index_as_pointers(self) -> str:
        lines = []
        for p in (self.vault / "index").glob("*.md"):
            size_kb = p.stat().st_size // 1024
            if size_kb > 10:
                lines.append(f"- {p.name} ({size_kb}KB) — read on demand")
            else:
                lines.append(f"- {p.name}: {p.read_text()[:200]}")
        return "\n".join(lines)

External links

Exercise

라우트 하나의 프롬프트 조립을 작은 ContextEngine 클래스로 뽑고 고정 입력의 스냅숏을 커밋해. 의도한 변경에서만 스냅숏을 다시 승인해.
Hint
스냅숏 시험은 싸고 엄격해서 모든 하류 호출을 바꾸는 계층에 잘 맞아.

Progress

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

댓글 0

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

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