wip: phase_z2 evidence 파이프라인 + matching 실험(phase2~26) + 프론트 trace 패널 진행분 스냅샷
- src: phase_z2 composition/mapper/pipeline/placement_planner/retry, ai_fallback(prompts/schema/validate), mdx_text_atoms 신규 - Front: PipelineTracePanel 신규, FramePanel/SlideCanvas/Home/designAgentApi 등 갱신 + 테스트 4종 추가 - templates/phase_z2: catalog(component_expansion_registry, node_slot_mapping 신규), frames, families, slide_base 갱신 - tests/matching: phase2~26 매칭 실험 스크립트·리포트·온톨로지 전체 (미커밋 진행분) - tests: b4_v4 evidence, task5~28.5 시리즈, regression(imp95 baseline) 등 신규 테스트 대량 추가 - docs/reference: MDX 구조 인벤토리, MDX→Frame 구조 계약 문서 - scripts: mdx 계약/parity/coverage/viewport 체크, gitea comment, run sync 유틸 - .gitignore: tmp*.json, chromedriver, .orchestrator, *.pkl, Front_test* 등 임시/스냅샷 제외 미완성 작업의 보존용 스냅샷 커밋 (2026-07-02) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,571 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Phase 26 — 매칭 방법 비교 종합 + Figma DB 설계 결론</title>
|
||||
|
||||
<style>
|
||||
body {
|
||||
font-family: -apple-system, 'Segoe UI', 'Malgun Gothic', sans-serif;
|
||||
max-width: 1800px;
|
||||
margin: 0 auto;
|
||||
padding: 24px;
|
||||
line-height: 1.6;
|
||||
color: #1e293b;
|
||||
background: #f8fafc;
|
||||
}
|
||||
h1 { color: #1e293b; border-bottom: 3px solid #2563eb; padding-bottom: 12px; }
|
||||
h2 {
|
||||
color: #1a365d;
|
||||
background: #e0e7ff;
|
||||
padding: 10px 16px;
|
||||
border-radius: 6px;
|
||||
margin-top: 32px;
|
||||
}
|
||||
hr { border: none; border-top: 1px solid #cbd5e1; margin: 24px 0; }
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
margin: 12px 0 24px;
|
||||
background: #fff;
|
||||
box-shadow: 0 2px 6px rgba(0,0,0,0.05);
|
||||
}
|
||||
th, td {
|
||||
border: 1px solid #e2e8f0;
|
||||
padding: 10px;
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
}
|
||||
th {
|
||||
background: #1e293b;
|
||||
color: #fff;
|
||||
font-weight: 700;
|
||||
text-align: center;
|
||||
width: 120px;
|
||||
}
|
||||
td:first-child {
|
||||
background: #f1f5f9;
|
||||
font-weight: 600;
|
||||
text-align: center;
|
||||
width: 120px;
|
||||
}
|
||||
td img {
|
||||
max-width: 260px;
|
||||
height: auto;
|
||||
display: block;
|
||||
margin: 0 auto 6px;
|
||||
border: 1px solid #cbd5e1;
|
||||
border-radius: 4px;
|
||||
}
|
||||
td br + strong { color: #2563eb; }
|
||||
</style>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<h1>Phase 26 — 매칭 방법 비교 결과와 Figma DB 설계 결론</h1>
|
||||
<p>AI 를 활용한 MDX ↔ Figma 매칭을 <strong>네 가지 방법</strong>으로 비교하고, 그 결과로부터 <strong>Figma DB 를 어떤 구조로 쌓아야 하는지</strong> 도출한다.</p>
|
||||
<h2>1. 네 가지 방법</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Phase</th>
|
||||
<th>방법</th>
|
||||
<th>공식</th>
|
||||
<th>데이터</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>22</strong></td>
|
||||
<td>정제 anchor keywords only (baseline)</td>
|
||||
<td><code>1.0 × 키워드</code></td>
|
||||
<td>keyword_base.yaml + anchor_sets mirror</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>23</strong></td>
|
||||
<td>anchor + content summary</td>
|
||||
<td><code>0.5 × 키워드 + 0.5 × 내용</code></td>
|
||||
<td>+ ko-sroberta cosine (MDX summary ↔ frame.content)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>24</strong></td>
|
||||
<td>anchor + content + legacy structure</td>
|
||||
<td><code>0.5 × 키워드 + 0.3 × 내용 + 0.2 × 구조</code></td>
|
||||
<td>+ legacy structure ontology (family/semantic_role)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>25</strong></td>
|
||||
<td>Template-fit-v1 (최종 운영)</td>
|
||||
<td><code>0.25 anchor + 0.20 card + 0.20 rel + 0.15 slot + 0.20 content − penalties</code></td>
|
||||
<td>templates_v1 (32개: slots + anchor_sets + fit_notes + adaptation_allowed)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2>2. 정답률</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Phase</th>
|
||||
<th>1. (MDX 1) 팝업 — DX와 BIM의 구분</th>
|
||||
<th>2. (MDX 2) 2.2 DX 시행 주체별 기대효과</th>
|
||||
<th>3. (MDX 03) 1. DX 시행을 위한 필수요건</th>
|
||||
<th>4. (MDX 03) 2. Process 혁신과 Product 변화</th>
|
||||
<th>합계</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>22</strong></td>
|
||||
<td>✓</td>
|
||||
<td>✓</td>
|
||||
<td>✓</td>
|
||||
<td>✓</td>
|
||||
<td><strong>4/4</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>23</strong></td>
|
||||
<td>✓</td>
|
||||
<td>✓</td>
|
||||
<td>✓</td>
|
||||
<td>✓</td>
|
||||
<td><strong>4/4</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>24</strong></td>
|
||||
<td>✓</td>
|
||||
<td>✓</td>
|
||||
<td>✓</td>
|
||||
<td>✓</td>
|
||||
<td><strong>4/4</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>25</strong></td>
|
||||
<td>✓</td>
|
||||
<td>✓</td>
|
||||
<td>✓</td>
|
||||
<td>✓</td>
|
||||
<td><strong>4/4</strong></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>→ <strong>네 방법 모두 4 TARGET 에서는 4/4</strong>. 정답률만으로는 차이 없음.</p>
|
||||
<h2>3. 1-2위 margin 비교 (안정성)</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Phase</th>
|
||||
<th>MDX01-2</th>
|
||||
<th>MDX02</th>
|
||||
<th>MDX03-1</th>
|
||||
<th>MDX03-2</th>
|
||||
<th>평균</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>22</strong></td>
|
||||
<td>0.095</td>
|
||||
<td>0.049</td>
|
||||
<td>0.207</td>
|
||||
<td>0.158</td>
|
||||
<td><strong>0.127</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>23</strong></td>
|
||||
<td>0.071</td>
|
||||
<td>0.051</td>
|
||||
<td>0.105</td>
|
||||
<td>0.107</td>
|
||||
<td><strong>0.083</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>24</strong></td>
|
||||
<td>0.121</td>
|
||||
<td>0.045</td>
|
||||
<td>0.213</td>
|
||||
<td>0.200</td>
|
||||
<td><strong>0.145</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>25</strong></td>
|
||||
<td>0.076</td>
|
||||
<td>0.180</td>
|
||||
<td>0.079</td>
|
||||
<td>0.098</td>
|
||||
<td><strong>0.108</strong></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2>4. 유닛별 Phase 점수 상세</h2>
|
||||
<h3>1. (MDX 1) 팝업 — DX와 BIM의 구분 — 정답 Frame <strong>18</strong></h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Phase</th>
|
||||
<th>1위 Frame</th>
|
||||
<th>1위 점수</th>
|
||||
<th>2위 Frame</th>
|
||||
<th>2위 점수</th>
|
||||
<th>margin</th>
|
||||
<th>라우팅</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>22</td>
|
||||
<td><span style='background:#fff3cd;padding:2px 6px;border:2px solid #dc2626;border-radius:3px;font-weight:bold'>🎯 18</span></td>
|
||||
<td>0.208</td>
|
||||
<td>24</td>
|
||||
<td>0.113</td>
|
||||
<td>0.095</td>
|
||||
<td>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>23</td>
|
||||
<td><span style='background:#fff3cd;padding:2px 6px;border:2px solid #dc2626;border-radius:3px;font-weight:bold'>🎯 18</span></td>
|
||||
<td>0.410</td>
|
||||
<td>04</td>
|
||||
<td>0.339</td>
|
||||
<td>0.071</td>
|
||||
<td>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>24</td>
|
||||
<td><span style='background:#fff3cd;padding:2px 6px;border:2px solid #dc2626;border-radius:3px;font-weight:bold'>🎯 18</span></td>
|
||||
<td>0.463</td>
|
||||
<td>24</td>
|
||||
<td>0.342</td>
|
||||
<td>0.121</td>
|
||||
<td>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>25</td>
|
||||
<td><span style='background:#fff3cd;padding:2px 6px;border:2px solid #dc2626;border-radius:3px;font-weight:bold'>🎯 18</span></td>
|
||||
<td>0.922</td>
|
||||
<td>29</td>
|
||||
<td>0.847</td>
|
||||
<td>0.076</td>
|
||||
<td>use_as_is</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3>2. (MDX 2) 2.2 DX 시행 주체별 기대효과 — 정답 Frame <strong>14</strong></h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Phase</th>
|
||||
<th>1위 Frame</th>
|
||||
<th>1위 점수</th>
|
||||
<th>2위 Frame</th>
|
||||
<th>2위 점수</th>
|
||||
<th>margin</th>
|
||||
<th>라우팅</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>22</td>
|
||||
<td><span style='background:#fff3cd;padding:2px 6px;border:2px solid #dc2626;border-radius:3px;font-weight:bold'>🎯 14</span></td>
|
||||
<td>0.164</td>
|
||||
<td>09</td>
|
||||
<td>0.115</td>
|
||||
<td>0.049</td>
|
||||
<td>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>23</td>
|
||||
<td><span style='background:#fff3cd;padding:2px 6px;border:2px solid #dc2626;border-radius:3px;font-weight:bold'>🎯 14</span></td>
|
||||
<td>0.402</td>
|
||||
<td>27</td>
|
||||
<td>0.351</td>
|
||||
<td>0.051</td>
|
||||
<td>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>24</td>
|
||||
<td><span style='background:#fff3cd;padding:2px 6px;border:2px solid #dc2626;border-radius:3px;font-weight:bold'>🎯 14</span></td>
|
||||
<td>0.404</td>
|
||||
<td>20</td>
|
||||
<td>0.359</td>
|
||||
<td>0.045</td>
|
||||
<td>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>25</td>
|
||||
<td><span style='background:#fff3cd;padding:2px 6px;border:2px solid #dc2626;border-radius:3px;font-weight:bold'>🎯 14</span></td>
|
||||
<td>0.928</td>
|
||||
<td>20</td>
|
||||
<td>0.748</td>
|
||||
<td>0.180</td>
|
||||
<td>use_as_is</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3>3. (MDX 03) 1. DX 시행을 위한 필수요건 — 정답 Frame <strong>13</strong></h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Phase</th>
|
||||
<th>1위 Frame</th>
|
||||
<th>1위 점수</th>
|
||||
<th>2위 Frame</th>
|
||||
<th>2위 점수</th>
|
||||
<th>margin</th>
|
||||
<th>라우팅</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>22</td>
|
||||
<td><span style='background:#fff3cd;padding:2px 6px;border:2px solid #dc2626;border-radius:3px;font-weight:bold'>🎯 13</span></td>
|
||||
<td>0.303</td>
|
||||
<td>20</td>
|
||||
<td>0.096</td>
|
||||
<td>0.207</td>
|
||||
<td>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>23</td>
|
||||
<td><span style='background:#fff3cd;padding:2px 6px;border:2px solid #dc2626;border-radius:3px;font-weight:bold'>🎯 13</span></td>
|
||||
<td>0.465</td>
|
||||
<td>15</td>
|
||||
<td>0.360</td>
|
||||
<td>0.105</td>
|
||||
<td>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>24</td>
|
||||
<td><span style='background:#fff3cd;padding:2px 6px;border:2px solid #dc2626;border-radius:3px;font-weight:bold'>🎯 13</span></td>
|
||||
<td>0.539</td>
|
||||
<td>20</td>
|
||||
<td>0.326</td>
|
||||
<td>0.213</td>
|
||||
<td>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>25</td>
|
||||
<td><span style='background:#fff3cd;padding:2px 6px;border:2px solid #dc2626;border-radius:3px;font-weight:bold'>🎯 13</span></td>
|
||||
<td>0.925</td>
|
||||
<td>20</td>
|
||||
<td>0.846</td>
|
||||
<td>0.079</td>
|
||||
<td>use_as_is</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3>4. (MDX 03) 2. Process 혁신과 Product 변화 — 정답 Frame <strong>29</strong></h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Phase</th>
|
||||
<th>1위 Frame</th>
|
||||
<th>1위 점수</th>
|
||||
<th>2위 Frame</th>
|
||||
<th>2위 점수</th>
|
||||
<th>margin</th>
|
||||
<th>라우팅</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>22</td>
|
||||
<td><span style='background:#fff3cd;padding:2px 6px;border:2px solid #dc2626;border-radius:3px;font-weight:bold'>🎯 29</span></td>
|
||||
<td>0.259</td>
|
||||
<td>09</td>
|
||||
<td>0.101</td>
|
||||
<td>0.158</td>
|
||||
<td>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>23</td>
|
||||
<td><span style='background:#fff3cd;padding:2px 6px;border:2px solid #dc2626;border-radius:3px;font-weight:bold'>🎯 29</span></td>
|
||||
<td>0.428</td>
|
||||
<td>01</td>
|
||||
<td>0.321</td>
|
||||
<td>0.107</td>
|
||||
<td>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>24</td>
|
||||
<td><span style='background:#fff3cd;padding:2px 6px;border:2px solid #dc2626;border-radius:3px;font-weight:bold'>🎯 29</span></td>
|
||||
<td>0.508</td>
|
||||
<td>27</td>
|
||||
<td>0.309</td>
|
||||
<td>0.200</td>
|
||||
<td>-</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>25</td>
|
||||
<td><span style='background:#fff3cd;padding:2px 6px;border:2px solid #dc2626;border-radius:3px;font-weight:bold'>🎯 29</span></td>
|
||||
<td>0.919</td>
|
||||
<td>18</td>
|
||||
<td>0.821</td>
|
||||
<td>0.098</td>
|
||||
<td>use_as_is</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2>5. 관찰</h2>
|
||||
<h3>5-1. 정답률로는 차이 없음</h3>
|
||||
<p>Phase 22~25 네 방법 모두 4 TARGET 에서 4/4 — 이 4개 유닛만 보면 어느 방법이 더 나은지 결정 불가.</p>
|
||||
<h3>5-2. Margin 으로 본 안정성 차이</h3>
|
||||
<ul>
|
||||
<li><strong>Phase 22 (키워드만)</strong>: IDF Jaccard 만으로는 의미 관계 포착 부족. 추상 주제에서 margin 약함.</li>
|
||||
<li><strong>Phase 23 (+내용)</strong>: 의미 유사도가 정답 margin 을 확대하지만, "의미 비슷한데 구조 다른" 프레임도 함께 상승.</li>
|
||||
<li><strong>Phase 24 (+기존 구조)</strong>: family/semantic_role 매칭이 정답 확정에 기여. 단, 구조 감지 confidence low 일 땐 점수 0 이라 불안정.</li>
|
||||
<li><strong>Phase 25 (template-fit-v1)</strong>: margin 절대값은 Phase 24 대비 일부 케이스에서 좁아지지만, <strong>multi-gate (intent + anchor/content/adaptation/not_suits) 로 정답 후보만 use_as_is</strong> — 운영 관점에선 가장 안전.</li>
|
||||
</ul>
|
||||
<h3>5-3. Phase 24 기존 구조축의 한계</h3>
|
||||
<p>기존 구조축은 <code>family=list</code>, <code>semantic_role=prerequisites</code> 같은 <strong>디자인이 어떻게 생겼나</strong>만 기록한다. 실제 운영에서는 '이 콘텐츠가 이 디자인에 들어갈 수 있나'를 알아야 하는데, 기존 구조축은 <strong>slot 개수·재구성 비용·금지 사항</strong>을 다루지 못한다.</p>
|
||||
<h3>5-4. Phase 25 (template-fit-v1) 이 제공하는 추가 가치</h3>
|
||||
<ul>
|
||||
<li><strong>라우팅 (multi-gate)</strong>: 점수만 제공하는 Phase 22~24 와 달리, <strong>structure_intent gate + anchor/content/adaptation/not_suits multi-constraint</strong> 로 <code>use_as_is</code> / <code>light_edit</code> / <code>restructure</code> / <code>reject</code> 4단계 운영 판단 제공.</li>
|
||||
<li><strong>structure_intent 축</strong>: 11 frame 에 태깅 (concept_comparison, persona_benefit, requirement_list, problem_diagnosis, process_product_split 등). Tagged mismatch 시 강한 차단 — 예: MDX03-1 × Frame 28 (requirement vs problem polarity 반대) = reject.</li>
|
||||
<li><strong>축별 breakdown</strong>: anchor · cardinality · relation · slot · content 가 각각 몇 점인지 설명 가능 → 왜 이 점수인지 투명.</li>
|
||||
<li><strong>조건부 cap</strong>: 짧은 generic anchor (<code>[BIM, DX]</code> 2-term) 가 우연히 매칭되어 점수를 부풀리는 편향 방어. MDX01-2 (진짜 BIM/DX 비교) 는 방증 세트(comparison_dimensions 0.71)로 cap 면제, MDX03-2 (BIM/DX 배경 언급) 는 방증 0.29 로 cap 적용 — 의도대로 작동.</li>
|
||||
<li><strong>not_suits 구조 신호</strong>: <code>주체별 나열</code>, <code>필수요건 나열</code>, <code>BIM vs DX 직접 대조</code> 등 잘못된 매칭을 구조 신호로 감점.</li>
|
||||
<li><strong>adaptation_cost</strong>: cardinality 불일치 시 split/merge/infer 비용으로 자연 감쇠.</li>
|
||||
<li><strong>32 템플릿 스키마화</strong>: Phase 22~24 의 legacy frames 는 analysis.md 키워드 + family 로만 기록된 반면, Phase 25 은 각 프레임마다 slot / anchor / fit_notes / adaptation 을 명시한 templates_v1 스키마로 32개 전부 작성.</li>
|
||||
</ul>
|
||||
<h2>6. 결론 — Figma DB 는 어떻게 쌓아야 하나</h2>
|
||||
<p><strong>네 방법 모두 4 TARGET 정답률은 같지만, 제공하는 정보량이 다르다:</strong></p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>제공 정보</th>
|
||||
<th style="text-align: center;">Phase 22</th>
|
||||
<th style="text-align: center;">Phase 23</th>
|
||||
<th style="text-align: center;">Phase 24</th>
|
||||
<th style="text-align: center;">Phase 25</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>1위 Frame</td>
|
||||
<td style="text-align: center;">✓</td>
|
||||
<td style="text-align: center;">✓</td>
|
||||
<td style="text-align: center;">✓</td>
|
||||
<td style="text-align: center;">✓</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>단일 점수</td>
|
||||
<td style="text-align: center;">✓</td>
|
||||
<td style="text-align: center;">✓</td>
|
||||
<td style="text-align: center;">✓</td>
|
||||
<td style="text-align: center;">✓</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>축별 분해</td>
|
||||
<td style="text-align: center;">✗</td>
|
||||
<td style="text-align: center;">2축</td>
|
||||
<td style="text-align: center;">3축</td>
|
||||
<td style="text-align: center;"><strong>5축 + 2감점</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>원본 그대로 쓸 수 있나 (use_as_is)</td>
|
||||
<td style="text-align: center;">✗</td>
|
||||
<td style="text-align: center;">✗</td>
|
||||
<td style="text-align: center;">✗</td>
|
||||
<td style="text-align: center;">✓</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>편집이 필요한가 (light_edit)</td>
|
||||
<td style="text-align: center;">✗</td>
|
||||
<td style="text-align: center;">✗</td>
|
||||
<td style="text-align: center;">✗</td>
|
||||
<td style="text-align: center;">✓</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>재구성이 필요한가 (restructure)</td>
|
||||
<td style="text-align: center;">✗</td>
|
||||
<td style="text-align: center;">✗</td>
|
||||
<td style="text-align: center;">✗</td>
|
||||
<td style="text-align: center;">✓</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>아예 쓰면 안 되는가 (reject)</td>
|
||||
<td style="text-align: center;">✗</td>
|
||||
<td style="text-align: center;">✗</td>
|
||||
<td style="text-align: center;">✗</td>
|
||||
<td style="text-align: center;">✓</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>짧은 anchor 편향 방어 (조건부 cap)</td>
|
||||
<td style="text-align: center;">✗</td>
|
||||
<td style="text-align: center;">✗</td>
|
||||
<td style="text-align: center;">✗</td>
|
||||
<td style="text-align: center;">✓</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>구조 신호로 감점 (not_suits)</td>
|
||||
<td style="text-align: center;">✗</td>
|
||||
<td style="text-align: center;">✗</td>
|
||||
<td style="text-align: center;">✗</td>
|
||||
<td style="text-align: center;">✓</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>재구성 비용 산정 (adaptation_cost)</td>
|
||||
<td style="text-align: center;">✗</td>
|
||||
<td style="text-align: center;">✗</td>
|
||||
<td style="text-align: center;">✗</td>
|
||||
<td style="text-align: center;">✓</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><strong>따라서 Figma DB 는 Phase 25 의 templates_v1 스키마로 쌓아야 한다</strong>:</p>
|
||||
<p><code>yaml
|
||||
templates_v1:
|
||||
<frame_id>:
|
||||
template_id: <snake_case_name>
|
||||
source: {title, original_layout}
|
||||
description: |
|
||||
<embedding-friendly 자연어 설명 (suits 맥락 포함)>
|
||||
visual_pattern:
|
||||
family: list | cards | table | compare | diagram | map | composite
|
||||
layout: <구체 layout>
|
||||
axis: horizontal | vertical
|
||||
relation_type: parallel | sequence | compare | hierarchy
|
||||
cardinality: {ideal, min, max}
|
||||
slots:
|
||||
- {id, type, required, max_chars}
|
||||
anchor_sets:
|
||||
- id: <set_name>
|
||||
terms: [...]
|
||||
min_hits: <int, optional>
|
||||
confidence_cap: <float, 짧은 generic 세트에만>
|
||||
cap_exempt_if_corroborated_by: <방증 임계>
|
||||
fit_notes:
|
||||
suits: [검수용 bullet, description 에 반영]
|
||||
not_suits: [점수 감점 발화 조건]
|
||||
adaptation_allowed:
|
||||
split, merge, infer_missing_slot, rewrite_label, rewrite_body
|
||||
legacy: {family, surface, semantic_role} # Phase 24 호환용 보존</code></p>
|
||||
<p>32개 전체 템플릿이 이 스키마로 <a href="structure_ontology.yaml"><code>structure_ontology.yaml</code></a> 에 정의됨. 스펙: <a href="TEMPLATE_FIT_V1.md"><code>TEMPLATE_FIT_V1.md</code></a>. 엔진: <a href="template_fit.py"><code>template_fit.py</code></a>.</p>
|
||||
<h2>7. 운영 권고</h2>
|
||||
<ul>
|
||||
<li><strong>매칭 엔진</strong>: <code>template_fit.py</code> (Phase 25)</li>
|
||||
<li><strong>DB 파일</strong>: <code>structure_ontology.yaml</code> → <code>templates_v1</code> 블록 (legacy <code>frames:</code> 는 Phase 24 호환용으로 보존)</li>
|
||||
<li><strong>MDX 분석</strong>: <code>detect_mdx.py</code> — 매칭 단계 LLM 호출 0회</li>
|
||||
<li><strong>임베딩</strong>: <code>embeddings.py</code> — ko-sroberta + numpy (32 프레임 규모는 벡터 DB 불필요)</li>
|
||||
<li><strong>라우팅 판정 (multi-gate)</strong>: 단순 threshold 아님 — 여러 조건 AND</li>
|
||||
<li>1차: <strong>structure_intent gate</strong> (tagged mismatch 강한 차단)<ul>
|
||||
<li><code>intent_source == 'tagged'</code> + <code>intent_compat < 0.4</code> → <strong>reject</strong></li>
|
||||
<li><code>intent_source == 'tagged'</code> + <code>intent_compat < 0.7</code> → use_as_is/light_edit 금지, restructure 이하만</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>2차: <strong>route_v2 multi-constraint</strong><ul>
|
||||
<li><code>use_as_is</code>: confidence ≥ 0.90 AND anchor ≥ 0.70 AND content ≥ 0.55 AND not_suits = 0</li>
|
||||
<li><code>light_edit</code>: confidence ≥ 0.75 AND anchor ≥ 0.50 AND content ≥ 0.45 AND adapt_pen < 0.10</li>
|
||||
<li><code>restructure</code>: confidence ≥ 0.60 AND (anchor ≥ 0.35 OR (content ≥ 0.55 AND adapt_pen < 0.20)) AND not_suits ≤ 1</li>
|
||||
<li>나머지: <code>reject</code></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>운영 의미</strong>:</li>
|
||||
<li><code>use_as_is</code>: 코드로 slot fill, AI 0회</li>
|
||||
<li><code>light_edit</code>: max_chars 초과 시만 AI 1회</li>
|
||||
<li><code>restructure</code>: adaptation_allowed 조작 AI 1회</li>
|
||||
<li><code>reject</code>: 다음 후보 또는 '적합 디자인 없음' 반환</li>
|
||||
</ul>
|
||||
<p><strong>추가 검증 필요</strong>: 현재 4 TARGET 으로는 엔진 프로토타입 검증까지 완료. 실제 확장 MDX 세트 (17~30개 추정) 회귀 테스트는 별도 진행.</p>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user