계층형 AI Assistant 컨텍스트 만들기: 전역 vs. 프로젝트별 구성
Source: Dev.to
소개
이 글은 여러 상황에서 효과적으로 작동해야 하는 AI 어시스턴트를 개발하고 관리하면서 직면한 실제 도전 과제에서 비롯되었습니다.
문제는 동일한 어시스턴스가 일반 시스템 관리 작업 및 특정 코드베이스 내의 고도로 전문화된 프로젝트 작업을 동시에 처리해야 할 때 발생했습니다.
초기에 AI 어시스턴스는 컨텍스트 혼란을 겪었습니다 — 전문 프로젝트를 진행할 때 일반적인 지식으로 답변하거나, 일반 작업에 프로젝트‑특화 규칙을 부적절하게 적용하는 식이었습니다.
이로 인해 행동이 일관되지 못하고 효율성이 떨어졌습니다.
제가 개발한 해결책은 전역과 프로젝트‑특화 AI 어시스턴트 설정 사이에 견고한 분리와 계층 구조를 구축하는 것이었으며, 이를 통해 혼란 없이 컨텍스트를 인식하는 동작을 보장했습니다.
이 접근 방식은 어시스턴트가 핵심 안전 및 운영 원칙을 유지하면서 현재 프로젝트 컨텍스트에 따라 동작을 특화할 수 있게 합니다.
문제: 컨텍스트 혼동
적절한 구성 계층이 없으면 AI 어시스턴트는 작업 범위가 바뀔 때 정체성 혼란을 겪을 수 있습니다. 예를 들어, 어시스턴트가 다음과 같은 상황에 처할 수 있습니다:
- 특정 소프트웨어 프로젝트를 진행하면서 일반적인 시스템 관리 지식으로 응답하거나, 또는
- 일반 작업에 프로젝트‑특정 규칙을 적용하는 경우.
두 경우 모두 일관성 없는 행동과 효율성 저하를 초래합니다.
Solution Overview
- Global Configuration – 어디서든 적용되는 기본 규칙.
- Project‑Specific Configuration – 개별 프로젝트에 대한 특화된 규칙.
- Dynamic Context Detection – 현재 디렉터리를 기반으로 자동 전환.
- Clear Hierarchy – 충돌 발생 시 명확히 정의된 우선순위.
구현 전략
1. 전역 구성 기반
전역 구성은 보편적으로 적용되는 필수 규칙을 포함하는 기본 레이어 역할을 합니다:
# global-config.yml
assistant:
name: "Universal AI Assistant"
safety:
enabled: true
policies:
- no-harm
- privacy-first
logging:
level: info
destination: /var/log/assistant/global.log
defaults:
temperature: 0.7
max_tokens: 1500
설명
- 안전 정책은 모든 곳에서 적용됩니다.
- 로그는 감사 목적을 위해 중앙 집중화됩니다.
- 기본값은 모든 상호작용에 일관된 기준을 제공합니다.
2. 프로젝트별 구성
각 프로젝트는 전역 설정을 재정의하거나 확장할 수 있습니다:
# .assistant/project-config.yml
assistant:
name: "Project‑X AI Assistant"
defaults:
temperature: 0.3 # More deterministic for code generation
max_tokens: 800
extensions:
- linting-helper
- test‑generator
context:
root: "./src"
language: "python"
핵심 포인트
- 보다 예측 가능한 출력을 위해
temperature를 재정의합니다. - 프로젝트별 확장 기능을 추가합니다(예: linting, test generation).
- 동적 컨텍스트 감지를 위해 프로젝트 루트와 주요 언어를 정의합니다.
3. 동적 컨텍스트 감지
작은 래퍼 스크립트가 현재 작업 디렉터리를 감지하고 적절한 구성을 로드합니다:
#!/usr/bin/env python3
import os
import yaml
def load_config():
cwd = os.getcwd()
# Walk up the directory tree looking for a project config
while cwd != "/":
proj_cfg_path = os.path.join(cwd, ".assistant", "project-config.yml")
if os.path.isfile(proj_cfg_path):
with open(proj_cfg_path) as f:
return yaml.safe_load(f)
cwd = os.path.dirname(cwd)
# Fallback to global config
with open("/etc/assistant/global-config.yml") as f:
return yaml.safe_load(f)
config = load_config()
print(f"Loaded configuration for: {config['assistant']['name']}")
스크립트:
- 현재 디렉터리에서 시작합니다.
.assistant/project-config.yml을 찾을 때까지 상위 디렉터리를 탐색합니다.- 찾지 못하면 전역 구성으로 대체합니다.
4. 명확한 계층 구조 및 충돌 해결
전역 및 프로젝트 구성 모두 동일한 키를 정의할 경우 프로젝트별 값이 우선합니다. 이는 프로그래밍적으로 강제할 수 있습니다:
def merge_configs(global_cfg, project_cfg):
merged = global_cfg.copy()
for key, value in project_cfg.items():
if isinstance(value, dict) and key in merged:
merged[key] = merge_configs(merged[key], value)
else:
merged[key] = value
return merged
병합 전략이 보장하는 점:
- 중첩된 딕셔너리에 대한 깊은 병합.
- 프로젝트 수준의 재정의가 우선합니다.
Benefits
- 예측 가능한 동작: 어시스턴트는 상황에 따라 적용할 규칙 집합을 알 수 있습니다.
- 안전 우선: 전역 안전 정책은 절대 우회되지 않습니다.
- 확장성: 새로운 프로젝트를 추가하려면 작은 설정 파일만 필요합니다.
- 유지 보수성: 중앙 집중식 전역 설정으로 중복을 줄일 수 있습니다.
결론
글로벌 기본값, 프로젝트‑별 오버라이드, 동적 감지를 포함한 명확한 계층 구조를 설정함으로써 컨텍스트 혼란을 없애고 다양한 워크로드에서 신뢰할 수 있고 안전하며 적응 가능한 AI 어시스턴트를 제공할 수 있습니다. 이 패턴은 언어에 구애받지 않으며 계층형 구성 파일을 지원하는 모든 도구 생태계에 적용할 수 있습니다.
Source: …
Every Session Protocol
- 핵심 정체성 파일(
SOUL.md,USER.md) 읽기 - 메모리 컨텍스트 로드
- 현재 디렉터리에서 프로젝트‑특정 설정 확인
- 적용 가능한 경우 우선순위를 두고 프로젝트 규칙 적용
- 관련 있을 때 현재 디렉터리 컨텍스트 보고
2. Project‑Specific Configuration
각 프로젝트는 어시스턴트의 동작을 특화시키는 자체 설정 파일을 유지합니다:
| 파일 | 목적 |
|---|---|
| SOUL.md | 프로젝트‑특정 성격 및 우선순위 |
| IDENTITY.md | 역할‑특정 정체성 및 커뮤니케이션 스타일 |
| USER.md | 프로젝트 팀 구성원 및 그들의 선호도 |
| AGENTS.md | 프로젝트‑특정 워크플로우 및 프로세스 |
| MEMORY.md | 중요한 프로젝트 노트 (선택 사항) |
3. Dynamic Context Detection
어시스턴트는 현재 프로젝트 컨텍스트를 자동으로 감지하고 적응해야 합니다.
// Pseudocode for context detection
if (current_directory.hasProjectConfigs()) {
const projectIdentity = loadProjectIdentity(current_directory);
const globalRules = loadGlobalRules();
return mergeConfigs(projectIdentity, globalRules, { priority: "project" });
} else {
return loadGlobalRules();
}
4. Clear Hierarchy and Conflict Resolution
| 도메인 | 규칙 |
|---|---|
| Development Tasks | 프로젝트 규칙이 우선 |
| Safety / Ethics | 전역 안전 규칙이 항상 우선 |
| Operational Tasks | 두 규칙을 적절히 모두 적용 |
| Identity Questions | 먼저 프로젝트 역할을 제시하고, 그 다음 일반 역량을 제시 |
모범 사례
1. 일관된 파일 구조
모든 프로젝트에서 동일한 구성 파일 레이아웃을 유지합니다:
SOUL.md– 성격 및 가치IDENTITY.md– 특정 역할 정의USER.md– 팀원 정보AGENTS.md– 워크플로우 및 프로세스MEMORY.md– 중요한 프로젝트 노트 (선택 사항)
2. 명시적 컨텍스트 보고
- 관련 있을 경우 현재 디렉터리를 보고합니다.
- 감지된 컨텍스트를 기반으로 역할을 명확히 합니다.
- 컨텍스트를 전환할 때 설명합니다.
3. 원활한 전환
- 컨텍스트 변화를 자동으로 감지합니다.
- 사용자 개입 없이 적절한 규칙을 적용합니다.
- 컨텍스트 전환 시 연속성을 유지합니다.
4. 안전 우선 접근법
- 전역 안전 규칙이 프로젝트별 규칙을 우선합니다.
- 컨텍스트와 관계없이 프라이버시 보호를 유지합니다.
- 언제나 핵심 윤리 제약을 유지합니다.
Benefits of This Approach
- Context‑Aware Behavior – 현재 프로젝트에 맞게 응답이 조정됩니다.
- Reduced Confusion – 명확한 정체성과 역할 정의가 컨텍스트 혼합을 방지합니다.
- Scalability – 새로운 프로젝트를 자체 특화 설정과 함께 추가할 수 있습니다.
- Consistency – 핵심 안전 및 운영 원칙은 그대로 유지됩니다.
- Flexibility – 특화된 작업과 일반 작업을 모두 효과적으로 처리합니다.
실제 사례
시나리오: AI 어시스턴트가 시스템 관리 및 특정 웹‑애플리케이션 프로젝트를 수행합니다.
| Context | Focus |
|---|---|
| Global | 시스템 운영, 파일 관리, 일반 생산성 |
| Web‑App Project | 코딩, 테스트, 배포, 프로젝트‑특정 워크플로우 |
- Identity – 일반적인 역량과 프로젝트‑특정 역할을 모두 설명합니다.
- Safety – 두 상황 모두 동일한 보안 및 프라이버시 조치가 적용됩니다.
결론
계층형 AI‑assistant 구성 시스템은 일반적인 유용성을 유지하면서도 특화된 프로젝트 작업을 가능하게 합니다. 자동 컨텍스트 감지, 명확한 우선순위 규칙, 원활한 전환을 구현함으로써 어시스턴트는 특정 분야에서 더 효과적이며 일반 작업에서도 신뢰성을 유지합니다. 핵심은 다음과 같은 요소를 설계에 포함하는 것입니다:
- 자동 컨텍스트 감지
- 명시적 계층 구조 (프로젝트 > 전역, 안전이 항상 최상위)
- 활성 컨텍스트에 대한 투명한 보고
이 구조는 불필요한 복잡성을 추가하지 않으면서 사용자 경험을 향상시킵니다.
