위성 대 L3 실험에서 임의로 정한 것
이 실험은 「정해지지 않은 정책은 실험 쪽에서 정하고, 없는 코드는 실험용으로 구현해, 실제와 다르지만 방향은 같게 한 조건」에서 돌았다. 이 문서는 그렇게 정한 것을 모두 적는다. 항목마다 다섯 가지를 적었다.
- 무엇을 정했나
- 왜 그렇게 정했나
- 다른 선택지
- 결과를 어느 쪽으로 기울이나
- 실제 서비스에서는 누가 무엇을 정해야 하나
여기 적은 실험 코드는 모두 원격에 반영되지 않은 실험 코드다. 파일 · 함수 이름만 적는다. 레포 main 의 코드는 그렇다고 밝힌다. 프롬프트 전문은 실험 사이트 부록(https://vs-sat-l3.miridih.app 「프롬프트 전문」)에 실린다. 여기서는 핵심 문단만 인용한다.
조건 기호는 본문과 같다.
- ① 기준
- ② 위성(감점 · 가점 켬) · ②′ 위성(감점 · 가점 끔)
- ③ 현실 L3 · ④ 위성 + 현실 L3
- ⑤ 이상 L3(합성 대리)
- ①-49 · ③-49: 45종 어휘 재생성
1. 가정 목록
- A-1위성 추출
- A-2컴포넌트 제목 · 부제
- A-3위성 감점 10 · 가점 3
- A-4못 채운 위성 글 비우기
- A-5현실 L3 노출 규칙
- A-6L3 생성
- A-7이상 L3
- A-8L3 생성 어휘
- A-9다른 경계 글은 비우지 않는다
- A-10풀
- A-11⑤ 표본과 어휘
- A-12짝 선호
- A-13그림 없는 장은 BAD
- B-1–B-11추가로 정한 것
A-1 위성 추출 — DO 범위 tree 위성만 쓴다
- 정한 것:
- 위성 = DO 의 RLSC 잎(role 에
.Element.가 있거나 자식이 없는 노드) − 그 DO 의 모든 경계 서브트리. type: Text는 desc, 그 밖은 deco 다.- 경계가 여럿인 DO 에서는 각 위성을 가장 깊은 공통 조상을 가진 경계에 붙인다. 동률이면 버린다(desc 1,103개, 1.7%).
- box · near 귀속은 쓰지 않는다.
- 결과로 경계 행의 14.9%(42,502 / 284,300)에 desc 위성이 생겼다. 실험 코드는
compute_tree_satellites.py다.
- 위성 = DO 의 RLSC 잎(role 에
- 왜:
- tree 위성은 LLM 없이 운영 경계(boundary-v12.4)와 DO 구조만으로 계산된다(전량 26초).
- near 는 페이지 IIS PoC 에서 엉뚱한 본체에 붙는 사례가 있었고, 검증되지 않았다.
- 다른 선택지:
- 페이지 IIS PoC 의 tree → box → near 전체 귀속(page-v1.6.1).
- 위성을 추출 LLM 출력 칸으로 받기.
- 기울기:
- 위성을 보수적으로 잡았다. near 로 붙을 「조연」 덩어리(TIP · 포인트 바 등)는 빠진다. 위성 효과를 작게 잴 수 있다.
- 동률을 버린 것도 같은 방향이다.
- 실서비스에서 정할 것: 추출기 담당이 정한다. 위성 저장 칸(IIS 행에 둘지), 귀속 규칙(tree 만 / box · near 까지), 귀속 정확도 기준과 골든셋이 필요하다.
A-2 컴포넌트 제목 · 부제 — 실험용 덧붙이기 호출
- 정한 것:
- 운영 L1 · L2 YAML(1,129 문서)은 그대로 둔다. 컴포넌트마다
title·subtitle만 붙이는 별도 LLM 호출을 돌렸다. - 호출은 gpt-5.6-luna · medium, 실비 $0.39 였다.
- 붙인 두 칸을 지우면 원본과 JSON 이 같은지 문서마다 검증했다.
- 질의에서는 컴포넌트 제목이 문서 제목보다 앞선다. 컴포넌트 제목이 없으면 문서 제목을 그대로 쓴다.
- 부제는 질의
satellites.subtitle로 싣고, 후보 부제와 짝 짓는다. - 중첩 자식 질의 · forest 질의에는 싣지 않는다.
- 실험 코드:
add-component-titles.mts, Rustvisual_summary/types.rsComponent칸 추가,query_frame.rs·align.rs정렬 규칙 f.
- 운영 L1 · L2 YAML(1,129 문서)은 그대로 둔다. 컴포넌트마다
- 왜:
- 운영 생성을 다시 돌리면 YAML 전체가 바뀌어 ① 이 「운영 YAML 그대로」가 아니게 된다.
- 덧붙이기면 생성 쪽 변수가 「제목 · 부제가 있다」 하나로 고정된다.
- 다른 선택지:
- 운영 생성 프롬프트에 컴포넌트 블록
title·subtitle규칙을 넣고 다시 생성한다. - 문서 제목을 모든 컴포넌트에 준다(지금 운영).
- 운영 생성 프롬프트에 컴포넌트 블록
- 기울기:
- ② 의 짝 선호 · D4 이득의 출처다. 같은 글 두 번 결함(제목 = 본문)도 여기서 나온 것으로 보인다.
- 운영 생성 프롬프트로 바꾸면 이득과 결함이 둘 다 달라질 수 있다.
- L2 에서 컴포넌트 제목이 없을 때 문서 제목을 두 컴포넌트에 다 주는 운영 동작(실험 결정 D-2)은 그대로 두었다.
- 실서비스에서 정할 것: 생성기 담당과 스키마 소유자가 정한다.
componentBlock스키마 칸, 생성 프롬프트 규칙, 제목이 entity 글을 되풀이하지 않게 하는 검증이 필요하다.
A-3 위성 감점 10 · 가점 3
- 정한 것:
- 감점: 정렬이 보존으로 남긴 유닛 밖 title · subtitle · desc 자리 하나당 10.
- 가점: 질의와 후보의 제목 유무가 같으면(둘 다 있음 또는 둘 다 없음) −3.
- 나눠 담기 채점은 두 줄을 한 번만 옮긴다.
- 실험 코드는
rank.rs의 환경변수 스위치COMP_PASS_SAT_PENALTY·COMP_PASS_SAT_BONUS다. 끄면 운영 계보와 같다.
- 왜:
- 위성으로 옮긴 글은 기존
outsideText벌점과 제목 구제에서 빠진다. 감점이 없으면 위성이 많은 DO 가 싸진다. - 1차값은 기존 가중치와 같게 두었다. 감점은
outsideText, 가점은titleOutsideBonus다. 「옮긴 것만으로 순위가 바뀌는」 몫을 줄이려는 것이다.
- 위성으로 옮긴 글은 기존
- 다른 선택지:
- 가중치 표(
CostWeights)에 정식 키로 넣는다. - ×0.5 · ×2 같은 값 사다리를 둔다. 이번에는 켬(②) · 끔(②′) 두 점만 쟀다.
- 가중치 표(
- 기울기: 감점을 끄면 E3(채워지지 않은 자리)가 +9.8%p 나빠진다. 감점은 위성에 유리하게 작용하는 필수 장치다. 값 사다리를 재지 않았으므로 최적값은 모른다.
- 실서비스에서 정할 것: 검색 담당이 정한다. 가중치 값, 정식 비용 키 여부, TS 쪽 가중치와 맞추는 방법을 정해야 한다.
A-4 못 채운 위성 글 비우기
- 정한 것:
- 대치에서 채우지 못한 위성(preserve 인 title · subtitle · desc)을 임시 문구 대신 빈 글
''로 둔다. - Marker · 비내용 role 은 종전대로 원문을 둔다. deco 는 frame 에 오르지 않으므로 그대로 남는다.
- 경계 안 헤더 위성(기준 풀에도 있는 것)도 못 채우면 비운다. 「채우지 못한 위성 글 비우기」를 문자 그대로 적용한 것이다.
- 실험 코드는
nodeTextPolicy.tsbuildNodeTextMap의 스위치COMP_PASS_SAT_BLANK다.
- 대치에서 채우지 못한 위성(preserve 인 title · subtitle · desc)을 임시 문구 대신 빈 글
- 왜: 경계 밖 글을 frame 글로 올린 지난 실험(조건 C)에서, 올리지 않은 경계 밖 글이 남아 E3 가 나빠졌다(
outside_left16 → 65, 파일럿 결과). - 다른 선택지: 임시 문구로 둔다 · 원문을 보존한다 · 노드를 지운다 · 남는 위성을 다른 글로 채운다.
- 기울기:
- E3 가 빈 칸을 「빈 자리」로 셀 수 있다 → 위성에 불리하다.
- 그림 확인에서 비운 칸은 빈 자리로 렌더됐고 깨짐은 없었다. 다만 「그림 위 빈 상자」 결함이 1장 있었다.
- 실서비스에서 정할 것: 대치 담당과 디자인이 정한다. 빈 글을 남길지 노드를 지울지, 줄 높이 · 상자 처리를 정해야 한다.
A-5 현실 L3 노출 규칙 — N1 · N2 만
- 정한 것:
- L3 문서(
entity.components를 쓴 것만)를 L1 · L2 문서와 한 검색 요청에 싣는다. - 응답에서 L3 항목은 대표 결과의
nested_stage가 모두 N1 · N2 이고 하나 이상 있을 때만 남긴다. N3–N5 결과는 버린다. - 서버
top_n은 50 으로 받고, 거른 뒤 앞 10 을 자른다. - 「시각화 종류」를 고른 원문에서 L3 문서는 0군에 싣는다.
- 실험 코드는
after-search.ts --l3-n12·l3-filter.ts다.
- L3 문서(
- 왜:
- N3 이하는 부모를 벗기거나 평탄화한 결과다. 그것은 L1 · L2 결과와 같은 성격이라 「L3 효과」가 아니다.
- 서버 상한으로 먼저 자르면 버릴 L3 항목이 L1 · L2 자리를 밀어낸다.
- 다른 선택지: N3 까지 허용한다 · L3 항목에 가점을 준다 · L3 를 별도 칸으로 노출한다.
- 기울기:
- L3 를 불리하게, 사실상 효과 0 으로 기울인다. ③ 의 L3 항목 1개는 N3 로 버려졌다.
- 「시각화 종류」 원문에서 종류 지정 없이 만든 L3 를 0군에 실은 것은 0군 규칙과 어긋날 수 있다.
- 실서비스에서 정할 것: 검색 담당과 PM 이 정한다. L3 결과를 어떤 단계까지 「L3」로 노출할지, L1 · L2 와 어떻게 섞을지를 정해야 한다.
A-6 L3 생성 — 운영 계보 PoC 프롬프트, TS 경로
- 정한 것:
- L3 프롬프트는 iui main TS
buildSystemPrompt('L3', undefined, 'V3')다. 운영 L1 · L2 스냅샷과 같은 계보다. L2 와 다른 자리는 nesting 힌트 한 줄 · 포함과 판별 블록 · 「최상위 2개 상한」 줄의 삭제다. - 모델은 운영과 같은 gpt-5.6-luna · medium 이다.
- 생성은 aippt 러너
after-generate.ts --levels L3로 했다. OpenAI 를 직접 부른다(운영은 Bedrock 경유).
- L3 프롬프트는 iui main TS
- 왜:
- 운영 Rust 서버는 L3 를 400 으로 거절한다(iui main
level.rsnormalize_wire). - 로컬 서버
text경로는 Bedrock 설정이 없어 쓸 수 없다.
- 운영 Rust 서버는 L3 를 400 으로 거절한다(iui main
- 다른 선택지:
- 옛 PoC 판(45종, 예시 자식 BigNumber).
- 판별 문장을 고친 새 프롬프트.
- Rust 이식.
- 기울기:
- L3 형 비율이 recent400 에서 V3 0.25% · V1 0.5% 였다.
- 판별 문장이 「항목마다」 꼴만 포함으로 이끈다. 그래서 공급 다수 꼴(하나에 하나)을 거의 내지 않는다 → L3 에 불리하다.
- 실서비스에서 정할 것: 생성기 담당과 PM 이 정한다. L3 를 켤지(2026-09-18 「L3 는 안 쓴다」 결정을 다시 볼지), 프롬프트 판별 문장, Rust 이식 범위를 정해야 한다.
A-7 이상 L3 — 축소 합성 대리
- 정한 것: 부모 DO 와 자식 DO 를 따로 검색한다. 부모 장의 entity 상자 안에 자식 장을 종횡비를 지켜 줄여 넣는다. 자세한 것은 5절이다.
- 왜: 「L3 포함 꼴을 조합으로 만들 수 있다면」의 잠재 효과를 보려 했다. 재사용할 합성 코드가 없어 새로 짰다.
- 다른 선택지:
- 사람이 만든 포함 장을 쓴다.
- 부모 레이아웃을 다시 짠다.
- 자식을 부모 옆 칸으로 붙인다(병치화).
- 기울기: ⑤ 를 크게 불리하게 기울인다(축척 0.06–0.22). 6/6 패배는 대리의 한계로 읽는다.
- 실서비스에서 정할 것: 조합 담당이 로드맵 조합 단계에서 정한다. 5절 끝을 본다.
A-8 L3 생성 어휘 — 운영 18종
- 정한 것: L3 생성은 운영 어휘 18종 판(V3)을 쓴다. 러너가 18종 밖 type 을 탈락시킨다. 민감도로 45종 판(V1,
--any-vocab)도 만들었다. - 왜: 운영 L1 · L2 와 같은 어휘라야 ①–④ 를 비교할 수 있다.
- 다른 선택지: 45종으로 생성한다(③-49 가 그것이다).
- 기울기:
- 18종에 BigNumber · ProfileCard · QuoteTestimonial 이 없다. 그래서 포함 공급 상위 조합 List ⊃ BigNumber(164행)를 낼 수 없다 → L3 에 불리하다.
- 포함 공급 1,707행 중 부모와 자식이 모두 18종 안인 것은 1,035행이다.
- 실서비스에서 정할 것: PM 과 생성기 담당이 정한다. 생성 허용 어휘다(2026-09-16 18종 확정).
A-9 다른 경계 글은 비우지 않는다
- 정한 것: 경계가 여럿인 DO 에서 같은 DO 의 다른 경계 글은 비우지 않는다(지금처럼 임시 문구). 비우는 것은 위성 desc 뿐이다.
- 왜: 다른 경계 글은 위성이 아니다(경계 밖 글이 있는 행 35% 중 위성 desc 행은 17%). 다른 경계 글까지 비우면 위성 효과와 섞인다.
- 다른 선택지: 다른 경계 글도 비운다(MOR-2603 다중 경계 DO 부분 행 문제와 같은 자리).
- 기울기: 양쪽 조건에 같게 남는 결함이라 차이에는 중립이다. 절대 결함률은 높게 남는다.
- 실서비스에서 정할 것: 대치 담당이 MOR-2603 과 함께 정한다.
A-10 풀 — 2.7 전량 + 구판 포함 DO 1,008 (그리고 45종 재생성 조건)
- 정한 것:
- (풀) ①–④ 는 2.7 판 전체(frame 284,300)다.
- 2.4–2.6 판에만 있던 포함 DO 1,008 개를
data_version2.7 로 덧붙였다. 이 DO 들은 2.7 과 레이아웃이 겹치지 않는다(0/1,008). 경계 · 속성 추출기 판은 같다. - 포함 공급은 2.7 의 690 행에서 1,694 행이 됐다.
- (어휘) 같은 번호로 「45종 어휘로 L1 · L2 · L3 를 다시 생성하는 민감도 조건(①-49 · ③-49)」도 정했다. 재생성 판에는 「시각화 종류」 추천(1군) 문서가 없다.
- 왜:
- 운영 DB 의 포함 1,707 행은 전 판 합계다. 2.7 만으로는 696 행이라 L3 를 잴 표본이 너무 작다.
- 45종 조건은 L3 효과와 어휘 확장 효과를 가르려 한 것이다.
- 다른 선택지: 2.7 만 쓴다 · pilot 2천 장 풀을 쓴다(포함 6행).
- 기울기:
- 포함 공급을 2.4배로 늘려 L3 에 유리하게 기울였다. 그런데도 ③ · ④ 효과는 0 이었다. 덧붙인 DO 의 다른 frame(풀의 0.9%)은 ①–④ 공통이다.
- ①-49 − ① 은 어휘 확장과 군 구분 없음이 합쳐진 효과다.
- 실서비스에서 정할 것: 색인 담당이 정한다. 구판 포함 DO 를 현행 판에 다시 넣을지(재추출), 운영 판 정책이다.
A-11 ⑤ 표본과 어휘
- 정한 것:
- ⑤ 표본은 V3 와 V1 의 L3 형 원문 합집합 3개(V3 1 · V1 2)다.
- ⑤ 는 그 원문의 L3 YAML(V1 이면 45종)로 만든다. 비교 상대는 같은 원문의 ② 장(18종, 운영 YAML) 그대로다.
- 왜: recent400 에서 L3 형이 3원문뿐이었다.
- 다른 선택지: L3 유리 원문 50 의 L3 형 13개로 ⑤ 를 만든다(하지 않았다).
- 기울기: 짝 안에 어휘 차이가 들어 있다. 표본 3원문이라 통계가 아니다.
- 실서비스에서 정할 것: 해당 없음(실험 설계).
A-12 짝 선호 — 새 측정기
- 정한 것:
- 원문과 두 장 그림(A · B)을 보여 주고 더 잘 시각화한 쪽을 고르게 한다.
- 모델은 gemini-3.6-flash(judge 와 같은 계열), 온도 0 이다.
- 순서를 바꿔 두 번 묻는다. 두 답이 같은 쪽일 때만 승패로 센다. 한쪽만 「같음」이거나 서로 반대면 「갈림」이다.
- 표본은 그림이 다른 자리에서 seed 20261104 로 뽑은 200쌍이다.
- 왜: judge 등급(다섯 축 strict)이 같은 장 사이의 차이를 보려 했다.
- 다른 선택지: 사람 짝 판정 · 다른 모델 계열 · 순서 한 번.
- 기울기:
- 위치 편향이 있다(「A」 201 · 「B」 148). 순서 바꾸기로 막았으나 갈림이 20% 다.
- judge 와 같은 계열이라 독립 측정기가 아니다.
- 그림 다른 자리만 뽑았으므로 표본 전체로 펴면 순승은 약 0.9배로 줄어든다(해석).
- 실서비스에서 정할 것: 평가 담당이 정한다. 짝 선호를 평가 체계에 넣을지, 사람 라벨과의 일치 기준을 정해야 한다.
A-13 그림 없는 장은 BAD
- 정한 것: ② · ②′ 에서 굽기에 실패해 그림이 없는 장은 위성 쪽 실패로 보고 총평 BAD 로 센다. 표본에 걸린 장은 ② 5 · ②′ 3 이다.
- 왜: 보수적으로 센 것이다. 다시 구워도 모두 실패했다(DO 15100942 등 DO 에 매인 합성기 실패). 빈 글 노드가 있는 실패 장은 0 이어서, 위성 비우기가 원인이 아니다.
- 다른 선택지: 그 장을 뺀다.
- 기울기: 위성에 불리하다(BAD 약 0.5%p). 빼면 ②−① 가 약 0.5%p 더 내려간다(해석).
- 실서비스에서 정할 것: 렌더 담당이 그 DO 의 합성기 실패를 고친다(위성과 무관).
추가로 정한 것
| 번호 | 정한 것 | 왜 | 기울기 |
|---|---|---|---|
| B-1 서버 계보 | 검색 서버는 iui PR #1612 머지 시점 판이다(iui main 최신이 아니다) | main 최신은 matrix + entities 를 split 키로 내는 등 응답 계약이 바뀌었다. 회차 대치는 aippt 의 iui 사본(같은 시점 판)이 한다 |
중립(①–⑤ 공통) |
| B-2 입력 | 운영 생성 로그의 최근 원문 400(recent400). L1 · L2 · 추천 문서는 운영 YAML 그대로 | 운영 분포를 대표하는 입력 | L3 에 불리(운영 원문에 포함 구조가 드묾). 그래서 L3 유리 원문 50 을 따로 쟀다 |
| B-3 judge 대상 | 그림이 ① 과 다른 장만 새로 판정하고, 같은 그림은 판정을 복제한다. 「그림 같음」 = 원문 · 대치 입력 sha256 · 글 칸 sha256 이 같음 | 비용 | 중립 |
| B-4 표본 | 장 자리 1,000(원문 357), seed 20261104. 한 번 뽑아 모든 비교에 쓴다 | 짝 비교 | 중립 |
| B-5 judge 셈법 | 정본 총평 규칙(다섯 축 strict) · rep 1 · 원문 군집 부트스트랩 4,000회 | 기존 회차와 같게 | 같은 그림 재판정 BAD 일치 65% 라 「같음」에 흔들림이 섞인다 |
| B-6 측정기 보정 | E1-nt: 세 근거 중 둘 이상이 「제목」을 든 결함은 결함이 아니다. D2-nt: 제목 · 부제 칸을 뺀다(제안 보정) | BQ 정답에 컴포넌트 제목이 없다 | 원값은 위성에 불리하다. 보정값도 근거 하나만 제목을 든 결함이 남아 있을 수 있다 |
| B-7 사람 검수 대체 | judge BAD 이면서 관문 카드에 결함이 없는 장 중 ② 30 · ① 10 을 에이전트가 그림으로 판정했다. 오판 비율로 BAD 를 보정했다 | 사람 검수 시간 | 오판 비율의 표본 불확실성은 구간에 넣지 않았다. 사람 재확인 일치 0.8 이상이면 채택(제안) |
| B-8 M1 분류 | L3 형 = 어느 entity 든 비지 않은 components. 이종 · 항목마다 · L1 접기 · L2 병치로도 되는 몫을 코드 규칙으로 가른다(실험 코드 m1-classify.ts) |
LLM 없이 | 「L1 접기 · L2 병치로도 되는 몫」은 경계 규칙이라 해석에 따라 달라질 수 있다 |
| B-9 L3 유리 원문 50 선정 | 운영 Containment 관계 중 실험 풀에 nested 가 있는 1,383 DO 에서, 조합(바깥 → 안쪽)마다 하나씩 50개를 뽑았다(seed 20261104). 목표는 항목마다 22 · 하나 28 · 병치 동반 15 다 | 조합 다양성 | 표본이 공급 분포가 아니라 조합 다양성을 대표한다. 상위 조합(LongForm ⊃ HM 등)도 1개씩이다 |
| B-10 ⑤ 자식 질의 제목 | 자식 질의 title = 그 entity label | 자식 장 제목 자리를 채우려고 | 합성 장에 같은 label 이 두 번 나온다 → ⑤ 에 불리 |
| B-11 단가 | gpt-5.6-luna 입력 $0.20 · 출력 $1.20 / 1M. 짝 선호 $1.5 · $9 / 1M | 비용 보고 | 해당 없음 |
2. 프롬프트
전문은 실험 사이트 부록 「프롬프트 전문」에 있다. 아래는 핵심 문단의 원문이다.
2-1. L3 생성 프롬프트 — V3(18종) · V1(45종)의 포함 권유 문장
두 판 모두 ## 컴포넌트 블록 절에 아래 한 줄을 싣는다.
- entity.components 는 이종 컴포넌트의 포함 관계를 적을 때만 쓴다 (아래 "이종 컴포넌트" 절).
## 이종 컴포넌트 절은 「두 모양을 구분해서 적는다. 무엇이 다른지는 시각 영역이 겹치는지로 갈린다.」로 시작한다. 그 뒤에 포함 → 병치 → 판별 순으로 이어진다.
포함 (containment)
한 컴포넌트의 시각 영역 안에 다른 컴포넌트가 들어간다. 부모 entity 아래
components로 자식 컴포넌트를 매단다. entity 가 곧 슬롯이므로 거기 매달면 자식의 위치가 정해진다.
포함 예시는 V3 와 V1 이 자식 type 만 다르다.
# V3 (18종 — BigNumber 가 없어 HighlightedMessage)
components:
- type: Enumeration.List
structure:
entities:
- label: 1분기
components:
- type: TextBasedCommunication.HighlightedMessage
structure:
entities:
- { label: 매출, items: ["15억원"] }
- label: 2분기
components:
- type: TextBasedCommunication.HighlightedMessage
structure:
entities:
- { label: 매출, items: ["21억원"] }
# V1 (45종) — 같은 자리의 자식이 KPIKeyMetric.BigNumber { label: 매출, value: 15, unit: 억원 }
판별
자식이 부모의 특정 항목에 속하는 내용이면 포함이다. 항목마다 반복되는 수치나 강조가 여기 해당한다. 서로 독립된 덩어리면 병치다. 한쪽을 지워도 다른 쪽이 그대로 성립하면 병치다. 겹치는 배치(overlap)는 적지 않는다. 현재 구조에서 발생하지 않는다.
- 예시와 판별 문장이 모두 「항목마다 자식」 꼴을 권한다. 공급은 86% 가 「entity 하나에 자식 하나」다.
- 병치 절 길이는 판마다 다르다(V3 2,468자 · V1 428자). V3 병치 절에는 「이 레벨에서는 넓은 그릇을 좁은 종으로 연다」 같은 형제로 떼라는 지시가 더 있다. 포함 절은 V3 770자 · V1 740자로 거의 같다.
- V1(병치 절이 짧은 판)에서도 L3 형이 2/399 였다. 그래서 「V3 병치 절이 포함을 밀어냈다」만으로는 설명이 안 된다(해석).
2-2. 위성 제목 덧붙이기 프롬프트 (A-2, 시스템 프롬프트 전문)
너는 시각 요약(Visual Summary) 문서의 각 컴포넌트에 붙일 제목과 부제를 정한다.
입력: 원문과, 그 원문으로 이미 만든 시각 요약 문서(JSON, 컴포넌트 목록).
할 일: 컴포넌트마다 그 컴포넌트를 슬라이드 한 덩어리로 보여 줄 때 위에 얹을 짧은 제목(title)과, 있으면 좋은 한 줄 부제(subtitle)를 정한다.
규칙:
- 원문의 언어를 따른다. 원문에 있는 말을 우선 쓰고, 없는 사실을 지어내지 않는다.
- title: 20자 안팎의 명사구. 컴포넌트가 하나뿐이면 문서 title 과 같거나 비슷해도 된다.
- subtitle: 원문에 그 컴포넌트를 설명하는 짧은 문장·기준·단위·출처가 있을 때만 40자 안팎으로. 없으면 null.
- 컴포넌트 안의 항목(entity) 글을 그대로 되풀이하지 않는다.
- 문서의 다른 칸은 바꾸지 않는다. 제목·부제만 낸다.
출력(JSON 하나): {"components": [{"index": 0, "title": "...", "subtitle": "..." 또는 null}, ...]} — 입력 컴포넌트 수와 순서 그대로.
사용자 메시지는 「원문: … / 시각 요약 문서(JSON): …」다. 규칙에 「항목 글을 되풀이하지 않는다」가 있는데도, 사람 검수 대체에서 「같은 글 두 번」 결함이 5장 나왔다. 컴포넌트가 하나뿐이면 「문서 title 과 같거나 비슷해도 된다」는 규칙이 본문 첫 글과 겹치는 경우가 있는 것으로 보인다(해석).
2-3. L3 유리 원문 생성 프롬프트 (가상 원문 50)
포함 DO 의 구조(바깥 · 안쪽 표현, 항목 수, 칸 종류)를 주고 그 구조에 맞는 원문을 쓰게 했다. 모델은 gpt-5.6-luna · medium 이다. 핵심 규칙 원문은 아래와 같다.
- 구조가 원문에서 뚜렷이 드러나야 한다: - 바깥 항목 수와 각 항목의 제목이 분명하다(번호 · 소제목 · 줄바꿈). - 안쪽 표현이 그 바깥 항목 안에 속하는 내용으로 쓰인다(그 항목의 수치, 그 항목의 단계, 그 항목의 강조문, 그 항목의 인용 등). 다른 항목으로 떼어 놓으면 뜻이 깨지게 쓴다. - 안쪽 항목 수도 구조와 같게 맞춘다. 수치 칸은 실제 숫자 + 단위로, 시점 칸은 연도 · 날짜로 쓴다.
- … 구조를 설명하는 낱말(「바깥 항목」 · 「안쪽 표현」 · 「조직도 1개」 · 「하위 1」 · 컴포넌트 이름 등)은 원문에 쓰지 않는다. 원문은 내용만 담는다.
- 실명 · 실존 회사는 쓰지 않게 했다(「김OO 팀장」 · 「A사」 꼴).
- 구조 낱말이 원문에 새어 나온 것은 0건이다.
- 원문이 구조를 아는 LLM 의 글이라 「핵심 수치: 85% …」 같은 줄 머리말이 자주 보인다 → L3 에 유리하다.
2-4. 짝 선호 판정 프롬프트 (A-12)
당신은 프레젠테이션 시각화 품질 평가자다. 사용자가 쓴 원문 하나와, 그 원문을 슬라이드 한 장(또는 이어지는 몇 장)으로 시각화한 결과 두 개(장 A, 장 B)를 본다. 두 결과 가운데 원문을 더 잘 시각화한 쪽을 고른다.
보는 것: 내용(빠짐 · 틀림 · 지어냄) · 구조(묶음 · 순서 · 위계 · 비교 관계) · 읽힘(잘림 · 겹침 · 넘침) · 완결(빈 자리 · 임시 문구 · 무관한 글). 보지 않는 것: 색, 그림 · 사진 · 장식의 취향, 장 전체의 여백과 배치 취향, 장 제목 유무.
차이가 작거나 한쪽이 낫다고 말할 근거가 분명하지 않으면 same 이다. 답 형식: JSON {"answer": "A" | "B" | "same", "reason": "한 문장"}.
(위 「보는 것」 줄은 원문의 네 항목을 한 줄로 줄인 것이다. 원문 전문은 사이트 부록에 있다.)
- 「장 제목 유무」를 보지 않게 했다. 위성 제목 칸이 생긴 것만으로 ② 가 이기지 않게 하려는 것이다.
- 그래도 제목 칸 때문에 글 배치가 달라진 효과는 판정에 들어간다.
3. 정책
| 정책 | 실험에서 정한 값 | 근거 · 다른 선택지 | 실서비스에서 정할 것 |
|---|---|---|---|
| 위성 추출 · 귀속 | tree 위성만. Text = desc · 그 밖 = deco. 경계가 여럿이면 가장 깊은 공통 조상의 경계, 동률이면 버림(A-1) | PoC 의 box · near 는 안 씀 | 추출기: 귀속 규칙 · 저장 칸 · 정확도 기준 |
| frame 슬롯 대응 | 경계 안 헤더가 이긴다. title = Title role 중 글꼴이 가장 큰 글(없으면 가장 큰 글) · subtitle = 첫 Subtitle · 나머지 = desc. deco 는 싣지 않음. 격자 칸 · 이미 쓰인 노드는 건너뜀(조건 C 적재기 mergePageSatellites) |
그 결과 frame satellites.title 행이 19,724 → 61,615 가 됐다 |
색인 빌더: 대응 규칙 · deco 반영 |
| 위성 감점 · 가점 | 감점 10 · 가점 3(A-3). ②′ 에서 둘 다 끔 | 기존 outsideText · titleOutsideBonus 와 같은 값 |
검색: 가중치 값과 정식 키 |
| 비우기 | 못 채운 위성 title · subtitle · desc 를 ''. Marker · deco · 다른 경계 글은 그대로(A-4 · A-9) |
임시 문구 · 노드 삭제 | 대치 · 디자인 |
| L3 노출 | N1 · N2 만. N3–N5 버림. top_n 50 → 거름 → 앞 10(A-5) | N3 허용 · 별도 칸 | 검색 · PM |
| 풀 구성 | 2.7 + 구판 포함 DO 1,008 덧붙임(포함 1,694 행, A-10) | 2.7 만(690 행) | 색인 |
| 어휘 | L3 와 ①–④ 는 18종. 민감도로 45종(①-49 · ③-49) | 45종 생성 | PM · 생성기 |
| judge 표본 · 셈법 | 1,000 자리 · 그림 다른 장만 새 판정 · 정본 총평 규칙 · rep 1 · 원문 군집 부트스트랩(B-3 – B-5) | rep 3 · 전량 | 평가 |
| 그림 없는 장 | 위성 쪽 BAD(A-13) | 제외 | 렌더 |
| 짝 선호 승패 | 순서를 바꾼 두 답이 같을 때만 승패. 나머지는 갈림(A-12) | 한 번만 묻기 · 사람 판정 | 평가 |
| BQ 제목 정답 | 문서 제목(운영 측정기 그대로). 보정 카드 E1-nt · D2-nt 를 따로 냄(B-6) | 컴포넌트 제목을 정답에 넣기 | 평가: 측정기에 컴포넌트 제목 반영 |
4. 결과에 쓰지 않은 것 · 확인하지 못한 것
- 감점 값 사다리(×0.5 · ×2)는 돌리지 않았다. 켬 · 끔 두 점뿐이다.
- 위성 비우기가 E3 결함을 늘린 몫과, 감점이 그것을 막은 몫은 감점 유무만 다른 비교에서 나온 해석이다. 셀 근거를 다 열어 보지는 않았다.
- 나눠 담기(threading)에서 위성 제목이 쪽마다 어떻게 반복되는지는 따로 재지 않았다.
- 글자가 든 도형은 위성 규칙상 deco 로 가서 frame 에 오르지 않는다. 그 수는 세지 않았다.
- 사람 검수 대체 40장은 에이전트 판정이다. 사람 판정으로 확정하지 않았다.
5. L3 조합(⑤ 합성기)
실험 코드는 compose-l3.ts 다(원격 미반영).
5-1. 알고리즘
- 부품 만들기. L3 형 문서마다 질의를 둘로 나눈다.
- 부모 질의: 자식을 뗀 컴포넌트, 문서 title 유지.
- 자식 질의: 자식 컴포넌트마다 L1 문서, title = 그 entity label.
- 둘 다 ② 와 같은 서버 · 풀 · 대치 규칙으로 검색해 1위 장을 대치 · 렌더한다(부품 11장, 실패 0).
- 부모 장에서 entity 상자 찾기.
- label 바인딩(글이 같은 것, 없으면 깊이 0 label 순번)으로 entity 의 unit 을 찾는다.
- 그 unit 에 묶인 RLSC 잎 노드 전부의 렌더 bbox 합집합을 구한다(루트 그룹 기준, 중간 그룹 오프셋을 더함).
- 변형 A · B.
- A(strict): 2 의 합집합 그대로.
- B(넓힘): 폭은 entity 상자 중 가장 넓은 폭, 높이는 아래 이웃 entity 위까지. 마지막 entity 는 줄 간격만큼만 늘린다.
- 자리 비우기.
- 그 unit 의 label 말고 글 노드(items · value)를 지운다.
- 자식 자리는 label 아래와 오른쪽 중 넓은 쪽이다. 그 영역이 상자의 20% 미만이면 상자 전체를 쓴다.
- 자식이 여럿이면 세로로 나눈다.
- 축소 · 배치.
- 자식 장 루트 그룹(w × h)을 s = min(Rw/w, Rh/h) 로 줄인다.
- 모든 후손의 bbox · tightBoundingBox · curveBoundingBox 에 s 를 곱한다.
props.text.textTree의 fontSize · letterSpacing 에도 s 를 곱한다(TextItem 과 도형 글 모두). LineItem 두께도 같다. - 가운데에 놓고, 부모 루트 그룹의 맨 위(마지막 자식)로 넣는다.
- 판정. 합성 장 JSON 을 판정 CSV 한 행으로 내고, 같은 원문의 ② 장과 짝 선호로 비교한다.
5-2. 변형 A · B 의 차이와 축척
| 변형 A | 변형 B | |
|---|---|---|
| 자식 자리 | entity 글 상자 그대로 | 열 폭 × 다음 entity 까지 높이 |
| 축척(전량 3원문) | 0.06–0.15 | 0.06–0.22 |
| 그림 | 자식이 점 크기라 읽을 수 없다 | 0.20–0.22 장은 자식 글이 작게나마 읽힌다. 0.06–0.13 장은 엄지손톱 크기라 읽히지 않는다 |
| 짝 선호 대 ② | 3/3 패 | 3/3 패 |
5-3. 남은 약점
- entity label 중복. 자식 질의 title 을 entity label 로 두었다. 그래서 자식 장 맨 위에 부모 label 과 같은 글이 한 번 더 나온다.
- 자식 배경 사라짐. 장 바탕색은 장 데이터에 있어 따라오지 않는다. 자식은 투명 바탕으로 얹힌다.
- 크기. 부모 entity 상자는 원래 짧은 글 크기라 자식이 아주 작아진다.
- 내용 · 상자. 짝 선호 사유에 내용 누락 · 깨진 상자가 있었다.
- 넷 모두 ⑤ 를 불리하게 기울인다.
5-4. 실제 조합 설계라면 필요한 것 (제안)
- 크기 하한. 자식 글이 읽히는 최소 축척(또는 최소 글자 크기)을 정하고, 그 아래면 포함 대신 병치로 내린다.
- 위계. 부모 label · 자식 제목 · 자식 본문의 글자 크기 순서를 정한다. 같은 글이 두 번 나오지 않게 자식 제목 규칙을 정한다.
- 레이아웃 재배치. 부모 entity 상자를 자식이 들어갈 만큼 키우고, 이웃 entity 를 다시 배치한다. 지금처럼 부모 장을 고정한 채 줄여 넣는 방식으로는 하한을 지키기 어렵다.
- 배경 · 장식. 자식 장의 바탕과 카드 테두리를 가져올지 정한다.
- Page Layout DB. entity 칸마다 들어갈 수 있는 자식 크기 · 종횡비를 미리 알아야 한다. 로드맵의 09 Page Layout DB 가 이것을 담는 자리이고, 05 조합 단계가 그것을 쓴다.
- 이 다섯이 L3 조합 포함의 작업량을 「대」로 만든다(본문 1-2).