Skip to content

AI 기능 레지스트리 (규격 초안) ​

작성: 2026-09-14 · 상태: 초안 — docs/DECISION_LOG.md(2026-09-14) · docs/MODEL_GATEWAY_SCOPE.md §9 결정에 따른 규격

1. 목적 ​

AI를 사용하는 공통기능을 고정 목록이 아니라 열린 목록으로 등록·연결·관측하는 단일 규격을 정의한다. 새 기능 추가는 서비스 코드·스키마·화면 변경이 아니라 등록 한 건으로 끝나야 한다.

기능은 계속 늘어난다 — 요약·번역·정합성 → 영역 추론, 검색 → RAG → 실시간 번역. 기능을 enum(["search","answer"] 같은)으로 고정하면 확장마다 여러 저장소를 함께 고쳐야 하고, 화면을 서비스별로 만들면 관리자가 여러 곳을 오가며 "어느 포털에 어떤 AI 기능이 적용됐는지" 볼 지점이 사라진다.

2. 개념 ​

개념정의소유자
AI 기능(Feature)포털이 사용하는 AI 단위 기능. purposeId로 귀속·집계된다등록·정책은 PortalConsole, 업무 규칙(프롬프트·적용 범위)은 각 포털
능력(Capability)기능이 요구하는 실행 능력(completion·retrieval·streaming·embedding·tool_use 등)충족은 각 플랫폼 서비스
연결(Wiring)기능이 실제로 붙는 대상 — model(ModelGateway) · retrieval(ExploreGateway·RagService)각 플랫폼 서비스
정책(Policy)적용 여부 · 쿼터(포털×purpose) · 허용 모델PortalConsole(제어평면)
관측(Observation)사용량·지연·실패율각 서비스가 집계, 콘솔이 표시

핵심은 "기능"과 "능력"의 분리다. 기능은 업무 단위(실시간 번역)이고, 능력은 실행 조건(streaming)이다. 능력이 아직 준비되지 않았으면 기능은 오류가 아니라 "준비 중" 이다.

3. 기능 레코드 스키마 (초안) ​

필드형설명
featureIdstring기능 식별자(예: process.version-summary)
portalIdstring등록 포털. 플랫폼 공통 제공이면 platform
labelstring표시 이름(예: 영역 추론, 실시간 번역)
purposeIdstring귀속·집계 단위 — ModelGateway x-purpose와 동일 어휘(예: process.version-summary)
capabilitiesstring[]요구 능력 — completion · retrieval · streaming · embedding · tool_use
wiring.model{ provider, model } | nullModelGateway 연결(완성). completion 능력이면 필수
wiring.retrieval{ source, index } | nullExploreGateway·RagService 연결(선택). RAG 기능이면 사용
policy.enabledboolean적용 여부
policy.quota{ window, limit } | null포털×purpose 한도(MODEL_GATEWAY_SCOPE §8-6과 정렬)
observation요약최근 사용량·지연·실패 — 파생 값(저장 대상 아님)

예 — 요약(비스트리밍 완성)

jsonc
{
  "featureId": "process.version-summary",
  "portalId": "process-center",
  "label": "게시본 요약",
  "purposeId": "process.version-summary",
  "capabilities": ["completion"],
  "wiring": { "model": { "provider": "deepseek", "model": "deepseek-flash" }, "retrieval": null },
  "policy": { "enabled": true, "quota": { "window": "day", "limit": 200000 } }
}

예 — RAG(완성 + 검색 연결)

jsonc
{
  "featureId": "process.manual-answer",
  "portalId": "process-center",
  "label": "매뉴얼 근거 답변",
  "purposeId": "process.manual-answer",
  "capabilities": ["retrieval", "completion"],
  "wiring": {
    "model": { "provider": "deepseek", "model": "deepseek-flash" },
    "retrieval": { "source": "process-center", "index": "manuals" }
  },
  "policy": { "enabled": true, "quota": { "window": "day", "limit": 200000 } }
}

예 — 실시간 번역(능력 미비 → 준비 중)

jsonc
{
  "featureId": "guide.live-translate",
  "portalId": "guide-center",
  "label": "실시간 번역",
  "purposeId": "guide.live-translate",
  "capabilities": ["completion", "streaming"],
  "wiring": { "model": { "provider": "openai", "model": "gpt-4o-mini" }, "retrieval": null },
  "policy": { "enabled": false }
}

4. 능력 ↔ 서비스 매트릭스 ​

능력충족 서비스현재 상태
completionModelGateway✅ 제공
embeddingModelGateway(x-purpose: rag.embedding)✅ 제공
retrievalExploreGateway(탐색 조합) · RagService(색인·RAG·citation)✅ 경계 확정(2026-09-15, SEARCH_SCOPE.md) — 콘솔 관리·상태 API 계약 초안 있음(연결은 서비스 가용 후)
streamingModelGateway⛔ 보류(MODEL_GATEWAY_SCOPE §8-8) — 실시간 번역 등 도입 시 재개
tool_use(미정)—

기능을 등록할 때 요구 능력이 이 표에서 준비 상태인지 먼저 확인한다. 미비하면 policy.enabled=false(준비 중)로 두고, 능력 자체를 서비스 로드맵 항목으로 올린다.

플랫폼이 제공하는 AI 기능(자체 purpose) — 2026-09-14 온톨로지 확정(ONTOLOGY_SCOPE.md)에 따라 등록 대상:

기능purposeId능력상태
온톨로지 후보 추출(개념·관계·용어)ontology.extractcompletion(+ retrieval)⏳ 구현 예정 — 결과는 proposed이며 사람 승인 전에는 색인에 반영하지 않는다
온톨로지 관계 후보 제안ontology.linkcompletion조건부 — 추출 품질이 안정된 뒤

이 두 기능의 결과는 제안이고, 승인 절차(사람)를 거친 것만 지식으로 쓰인다. 범위 판정 기준과 관계 유형 7종은 ONTOLOGY_SCOPE.md.

5. 소유 경계 ​

대상소유자
기능의 업무 규칙(무엇을 요약·번역할지, 프롬프트 내용)각 소비 포털 (MODEL_GATEWAY_SCOPE §3 · §8-1)
기능의 등록·허용·쿼터·적용 현황(운영 표면)PortalConsole(제어평면)
기능의 실행 연결(모델·키·색인·검색)ModelGateway · ExploreGateway · RagService
기능의 재사용 구현·계약·패턴portal-foundation(@hohyun94/portal-ai) — 2026-08-20 "공통 기능은 Asset 제공"
  • PortalConsole은 모델·키·색인·검색 실행을 소유하지 않는다(표시·정책·프록시만).
  • 게이트웨이는 UI를 갖지 않는다(MODEL_GATEWAY_SCOPE §8-7). 콘솔 서버가 서버 간 토큰으로 각 서비스 관리 API를 호출한다.
  • RAG는 ModelGateway 소유가 아니다. RAG 기능은 wiring.model + wiring.retrieval을 함께 가진 기능으로 기록한다.

6. 콘솔 표면(뷰 3개) ​

뷰내용데이터 출처
적용 현황포털 × 기능 매트릭스 — 적용 / 준비 중(능력 미비) / 미사용, 연결 모델·색인레지스트리 + 각 서비스 상태 API
사용량포털 × 기능 — 완성 토큰·요청·실패·지연 + 검색·색인 지표ModelGateway /admin/api/usage, RagService·ExploreGateway 상태 API
세팅기능별 연결(모델·키·쿼터), 서비스별 세팅(프로바이더·키·색인·검색 조합)각 서비스 관리 API(서버 간 프록시)

7. 새 기능 추가 절차 ​

  1. 등록 — featureId·purposeId·label·capabilities를 정해 등록한다(콘솔).
  2. 능력 확인 — §4 매트릭스에서 요구 능력의 준비 상태를 확인한다. 미비하면 enabled=false(준비 중).
  3. 연결 — wiring.model(완성, 필수) · wiring.retrieval(RAG일 때).
  4. 정책 — 활성화 + 쿼터 설정. 이후 사용량이 purposeId 기준으로 자동 집계된다.

목표는 코드 변경 없는 확장이다. 능력 자체가 없어 코드 변경이 필요하면 그건 서비스 로드맵 항목이다(예: ModelGateway 스트리밍 재개).

8. 후속(미해결) ​

#항목상태
1포털 카탈로그의 고정 capabilities(["search","answer"]) → 이 레지스트리로 승격미착수
2RagService ↔ ExploreGateway 경계(권장 A안) 확정✅ 확정(2026-09-15, SEARCH_SCOPE.md)
3RagService·ExploreGateway의 콘솔용 관리·상태 API 계약⏳ 초안 완료(SEARCH_SCOPE.md §6) — 실제 연결은 서비스 가용 후
4ModelGateway 스트리밍 재개(실시간 번역 등 스트리밍 기능 도입 시)조건부
5레지스트리 저장 위치(콘솔 DB 테이블 vs 환경 설정) 확정미착수