Mneme가 모델이 코드를 한 줄도 쓰기 전에 AI 생성 코드를 제어하는 방법
요약
Mneme는 LLM이 코드를 생성하기 전, 프로젝트의 기존 결정 사항과 규칙을 대조하여 아키텍처 드리프트를 방지하는 도구입니다. 로컬 리포지토리 기반의 5단계 파이프라인을 통해 결정론적이고 감사 가능한 코드 생성 제어 환경을 제공합니다.
핵심 포인트
- 아키텍처 드리프트 방지를 위한 프롬프트 경계 제어
- 임베딩 없이 키워드와 가중치 기반의 결정론적 검색 방식 채택
- 결정 사항을 JSON/ADR 형태로 관리하는 프로젝트 메모리 구조
- 생성 전 예방(Prevention before review) 원칙 중심의 설계
LLM(Large Language Models)은 모든 호출을 제로 상태에서 시작합니다. 이들은 당신이 6개월 전에 삭제한 라이브러리를 다시 도입하고, 작게 유지하기로 선택한 컴포넌트를 다시 구축하며, 당신의 팀이 이미 결정한 사항들을 부정합니다. 각각의 위반 사항은 개별적으로 보면 합리적으로 보입니다. 하지만 에이전트 세션이 일주일 동안 쌓이면 아키텍처 드리프트 (architectural drift)가 발생합니다.
Mneme는 프롬프트 경계 (prompt boundary)에서 작동합니다. 프로젝트가 이미 내린 결정들을 읽고, 모델이 무언가를 생성하기 전에 해당 결정 사항들과 작업을 대조합니다. 이 리포지토리는 Layer 1: 로컬 리포지토리 (local-repo), 단일 개발자, 프로젝트 범위의 거버넌스 (governance)를 제공합니다. 그 구조는 다음과 같습니다.
파이프라인 (The pipeline)
2분 이내에 로컬에서 실행되는 5단계 과정입니다:
project_memory.json → MemoryStore → Retriever → ContextBuilder → LLMAdapter → Evaluator
- **
project_memory.json**은 코퍼스 (corpus)를 보유합니다: 규칙, 제약 조건, 안티 패턴 (anti-patterns), 그리고 결정 기록들을 구조화된, 사람이 편집 가능한 JSON 형태로 담고 있습니다. 이를 직접 작성하거나 ADR(Architecture Decision Records)로부터 컴파일하여 생성할 수 있습니다. - **
MemoryStore**는 파일을 로드하고, 이전 코퍼스들도 파싱할 수 있도록 레거시 아이템 형태를 마이그레이션합니다. - **
Retriever**는 현재 작업과 관련된 결정 사항들을 선택합니다. 키워드 중첩, 태그 일치, 우선순위 가중치를 기준으로 점수를 매깁니다. 임베딩 (embeddings)이나 벡터 데이터베이스 (vector database)는 사용하지 않습니다. - **
ContextBuilder**는 상위 일치 항목들을 압축된 컨텍스트 패킷 (context packet)으로 포맷팅합니다. - **
LLMAdapter**는 해당 패킷을 시스템 프롬프트 (system prompt)로 주입하여 모델을 호출하거나, API 키 없이 드라이 런 (dry-run)을 수행합니다. - **
Evaluator**는 주입된 결정 사항들을 기준으로 응답을 평가하고 정렬 수치 (alignment number)를 보고합니다.
두 번째 경로는 생성 후 응답을 스캔하는 conflict_detector를 추가하며, YAML 프론트매터 (frontmatter)가 포함된 ADR 파일을 코퍼스로 변환하고 서로 상충하는 결정 간의 우선순위를 해결하는 ADR 컴파일러 (adr_parser 후 adr_compiler)를 추가합니다.
데모는 각 작업을 두 번 실행합니다. 한 번은 거버넌스 없이, 한 번은 코퍼스가 강제된 상태로 실행하여 사용자가 직접 차이점 (delta)을 확인할 수 있게 합니다.
설계를 유지하는 세 가지 원칙
- 영리함보다 결정론적 (Deterministic over clever). 동일한 코퍼스(corpus)와 동일한 쿼리(query)는 실행할 때마다 바이트 단위로 일치하는 검색 순서를 생성합니다. 두 번 실행했을 때 동일한 답변을 반환하는 단순한 검색기(retriever)가, 그렇지 않은 똑똑한 검색기보다 낫습니다.
- 자율성보다 감사 가능성 (Auditable over autonomous). 모든 블록은 어떤 결정이 매칭되었는지, 어떤 규칙이 실행되었는지, 그리고 입력값의 어떤 용어가 이를 트리거했는지를 기록합니다. 아티팩트(artifacts)를 통해 어떤 판결이든 재구성할 수 있습니다.
- 검토 전 예방 (Prevention before review). 체크는 생성(generation) 이전에 이루어집니다. 검토자가 풀 리퀘스트(pull request)를 열 때쯤이면, 이미 드리프트(drift)가 브랜치에 반영된 상태가 됩니다.
이것이 RAG가 아닌 이유
RAG는 답변에 정보를 제공하기 위해 문서를 검색합니다. Mneme는 답변을 제약하기 위해 결정을 검색합니다.
| RAG | Mneme | |
|---|---|---|
| 입력 (Input) | 문서, 청크 (chunks), 임베딩 (embeddings) | 규칙, 제약 조건, 결정 기록 |
| ... |
벡터 스토어(vector store)도, 에이전트 루프(agent loop)도 없습니다. 코퍼스(corpus)는 작고 구조화되어 있으며 온전히 당신의 것입니다.
설계상 이것이 아닌 것들
프리즈(freeze)는 커밋 e73ff7d 시점에서 검색 메커니즘, 강제(enforcement) 의미론, 그리고 벤치마크 방법론을 고정합니다. 개방형 종료 기준(exit criterion)은 디자인 파트너와의 실세계 검증입니다. 다음의 몇 가지 사항들은 백로그(backlog)에 밀려 있는 것이 아니라, 의도적으로 이 범위에서 제외되었습니다:
- 일반화된 에이전트 메모리(agent memory)나 대화 기록 저장소가 아님
- 자율적인 계획(planning)이나 도구 사용 오케스트레이션(tool-use orchestration)이 아님
- 프롬프트 재작성(prompt rewriting)이 아님. Mneme는 위반하는 프롬프트를 차단하는 것이지, 프롬프트를 다듬는 것이 아닙니다.
- 자동 수정(auto-fixing)이 아님. Mneme는 차단하며, 수정은 인간이나 모델이 수행합니다.
벤치마크 또한 동일한 절제력을 유지합니다. 이는 일반화에 대한 주장이 아니라 회귀 테스트(regression) 도구입니다: 정해진 모델 응답, 고정된 검색, 2계층 스코어링, 현재 7/7 시나리오 및 recall@3 = 1.00을 기준으로 합니다. 이 도구의 역할은 검색이나 강제(enforcement)에 대한 어떠한 변경 사항도 가시화하여, 어떤 회귀(regression)도 보이지 않게 유입되지 않도록 하는 것입니다.
코드 읽기
Layer 1, 벤치마크 스위트 (benchmark suite), 그리고 예시 코퍼스 (example corpus)는 **https://github.com/MnemeHQ/mneme**에서 공개되어 있습니다. 설계의 이면에 있는 개념들 (생성 전 거버넌스 (governance before generation), 아키텍처 드리프트 (architectural drift), 검증 계약 (verification contracts))은 mnemehq.com/concepts에서 정의되어 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기