팀장 2-Step 분리 + 실장 detail_target 기준 수정
팀장 (DA-13 → DA-13a + DA-13b):
- Step A: 레이아웃 프리셋 선택 (규칙 기반, LLM 불필요)
sidebar-right / two-column / hero-detail / single-column
- Step B: 프리셋 안에서 블록 매핑 (Sonnet, 프리셋 CSS 포함)
- 기존 DA-13b(편집자) → DA-13c로 변경
실장 (kei_client.py):
- detail_target 기준 수정: 근거/사례/용어는 popup이 아님
- reference는 sidebar에, 근거는 본문에
- popup은 진짜 상세 데이터(비교표 등)만
- 1페이지로 담을 수 있으면 억지로 2페이지 안 함
pipeline.py: import re 추가
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
74
CLAUDE.md
74
CLAUDE.md
@@ -16,10 +16,14 @@
|
|||||||
|
|
||||||
```
|
```
|
||||||
[1단계] Kei 실장 (Sonnet) — AI 사고
|
[1단계] Kei 실장 (Sonnet) — AI 사고
|
||||||
꼭지 추출 → 레이어 수준 → 강조 판단 → 배치 방향
|
꼭지 추출 → 정보 구조 파악 → 레이어/강조/배치/role 판단
|
||||||
↓
|
↓
|
||||||
[2단계] 디자인 팀장 (Sonnet) — AI 사고
|
[2단계] 디자인 팀장 — 2-Step
|
||||||
블록 매핑 + 공간 배분 + 글자 수 가이드 → 편집자에게 전달
|
Step A: 레이아웃 프리셋 선택 (규칙 기반, LLM 불필요)
|
||||||
|
- 실장의 role 분석을 보고 프리셋 자동 결정
|
||||||
|
Step B: 프리셋 안에서 블록 매핑 + 글자 수 가이드 (Sonnet)
|
||||||
|
- 선택된 프리셋의 CSS가 프롬프트에 포함됨
|
||||||
|
- flow → body/main, reference → sidebar
|
||||||
↓
|
↓
|
||||||
[3단계] Kei 텍스트 편집자 (Sonnet) — AI 사고
|
[3단계] Kei 텍스트 편집자 (Sonnet) — AI 사고
|
||||||
글자 수 가이드 참고하되 내용 의미 우선. 도메인 용어 보존하며 편집
|
글자 수 가이드 참고하되 내용 의미 우선. 도메인 용어 보존하며 편집
|
||||||
@@ -31,14 +35,34 @@
|
|||||||
전체 균형 재검토 → 공간 재배분 → 2차 조정 지시
|
전체 균형 재검토 → 공간 재배분 → 2차 조정 지시
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### 레이아웃 프리셋 (2단계 Step A)
|
||||||
|
|
||||||
|
실장의 role 분석을 보고 **규칙 기반**으로 프리셋을 자동 선택한다. LLM 호출 불필요.
|
||||||
|
|
||||||
|
| 프리셋 | 조건 | CSS grid |
|
||||||
|
|--------|------|----------|
|
||||||
|
| `sidebar-right` | reference 꼭지가 1개 이상 있음 | `"title title" "body sidebar" "footer footer"` / 65fr 35fr |
|
||||||
|
| `two-column` | 모든 flow 꼭지가 대등한 비교 | `"title title" "left right" "footer footer"` / 1fr 1fr |
|
||||||
|
| `hero-detail` | 고강조 꼭지 1개 + 나머지 보조 | `"title title" "hero hero" "detail detail" "footer footer"` |
|
||||||
|
| `single-column` | 모든 꼭지가 flow, 순차적 | `"title" "body" "footer"` / 1fr |
|
||||||
|
|
||||||
|
**선택 규칙:**
|
||||||
|
```
|
||||||
|
reference 꼭지 있음 → sidebar-right
|
||||||
|
모든 flow가 대등 비교 → two-column
|
||||||
|
고강조 1개 + 나머지 보조 → hero-detail
|
||||||
|
나머지 → single-column
|
||||||
|
```
|
||||||
|
|
||||||
### 역할 분리
|
### 역할 분리
|
||||||
|
|
||||||
| 역할 | 담당 | 방식 | 하는 일 | 하지 않는 일 |
|
| 역할 | 담당 | 방식 | 하는 일 | 하지 않는 일 |
|
||||||
|------|------|------|---------|------------|
|
|------|------|------|---------|------------|
|
||||||
| Kei 실장 | Sonnet | AI | 꼭지 추출, 레이어 판단, 강조 판단, 배치 방향, 이미지/표/상세 판단 | 디자인, 텍스트 편집 |
|
| Kei 실장 | Sonnet | AI | 꼭지 추출, 정보 구조 파악, 레이어/강조/배치/role 판단 | 디자인, 텍스트 편집 |
|
||||||
| 디자인 팀장 | Sonnet | AI | catalog에서 블록 선택, 공간 배분, 겹침 방지, 글자 수 가이드, 전체 재검토 | 텍스트 정리, 콘텐츠 의미 판단 |
|
| 디자인 팀장 Step A | 코드 | 규칙 | 실장의 role에 따라 레이아웃 프리셋 자동 선택 | AI 판단 불필요 |
|
||||||
| 텍스트 편집자 | Sonnet | AI | 도메인 용어 보존하며 편집, 출처 보존, 표 내용 편집 | 레이아웃 결정, 디자인 판단 |
|
| 디자인 팀장 Step B | Sonnet | AI | 프리셋 안에서 블록 매핑, 글자 수 가이드, zone 배정 | 레이아웃 구조 결정 (이미 정해짐) |
|
||||||
| 디자인 실무자 | Sonnet + 코드 | AI + 코드 | 텍스트에 맞게 디자인 조정, HTML/CSS 조립, 이미지 크기 조정, 표 스케일링 | 콘텐츠 의미 판단 |
|
| 텍스트 편집자 | Sonnet | AI | 도메인 용어 보존하며 편집, 출처 보존, 표 편집 | 레이아웃 결정 |
|
||||||
|
| 디자인 실무자 | Sonnet + 코드 | AI + 코드 | 텍스트에 맞게 디자인 조정, HTML/CSS 조립 | 콘텐츠 의미 판단 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -75,33 +99,35 @@
|
|||||||
상세 콘텐츠 판단:
|
상세 콘텐츠 판단:
|
||||||
- 너무 구체적/세부적인 내용은 "자세히보기" 대상
|
- 너무 구체적/세부적인 내용은 "자세히보기" 대상
|
||||||
↓
|
↓
|
||||||
[2단계] 디자인 팀장 — 레이아웃 설계
|
[2단계] 디자인 팀장 — Step A + Step B
|
||||||
|
|
||||||
블록 매핑:
|
Step A: 레이아웃 프리셋 선택 (규칙 기반, LLM 불필요)
|
||||||
- catalog 메뉴판에서 각 꼭지에 적합한 블록 선택
|
- 실장의 role 분석을 보고 자동 선택:
|
||||||
- 꼭지의 성격을 보고 판단 (출처 있으면 example-card, 정의면 card-grid 등)
|
reference 있음 → sidebar-right
|
||||||
|
대등 비교 → two-column
|
||||||
|
고강조 1개 → hero-detail
|
||||||
|
나머지 → single-column
|
||||||
|
- 선택된 프리셋의 CSS grid가 Step B 프롬프트에 포함됨
|
||||||
|
|
||||||
|
Step B: 프리셋 안에서 블록 매핑 (Sonnet)
|
||||||
|
- 선택된 프리셋의 zone(body/sidebar/footer)에 꼭지를 배정
|
||||||
|
- flow 꼭지 → body/main zone
|
||||||
|
- reference 꼭지 → sidebar zone
|
||||||
|
- detail_target 꼭지 → popup 연결
|
||||||
|
- catalog에서 각 꼭지에 적합한 블록 타입 선택
|
||||||
|
- 각 블록의 대략적 글자 수 가이드
|
||||||
|
|
||||||
이미지 배치:
|
이미지 배치:
|
||||||
- 원본 이미지 크기 확인 (Pillow Image.open().size)
|
- 원본 이미지 크기 확인 (Pillow Image.open().size)
|
||||||
- 가로/세로 비율에 따라 영역 결정
|
- 가로/세로 비율에 따라 영역 결정
|
||||||
(가로형이면 전체 너비, 세로형이면 텍스트 옆)
|
|
||||||
- 텍스트 포함 도표는 너무 작게 하면 안 됨
|
|
||||||
- 이미지는 원본 그대로 사용, 크기만 조절
|
- 이미지는 원본 그대로 사용, 크기만 조절
|
||||||
|
|
||||||
표 배치:
|
표 배치:
|
||||||
- 행×열 규모 보고 공간 안에 들어가는지 판단
|
- 행×열 규모 보고 공간 안에 들어가는지 판단
|
||||||
- 안 들어가면 실장에게 요약 요청 또는 2페이지 분리
|
- 안 들어가면 요약 요청 또는 popup
|
||||||
|
|
||||||
자세히보기 설계:
|
자세히보기:
|
||||||
- 상세 콘텐츠는 <details>/<summary> 영역으로 설계
|
- detail_target 꼭지는 <details>/<summary>로 popup 연결
|
||||||
|
|
||||||
공간 배분:
|
|
||||||
- 전체 공간에서 영역별 비율 결정
|
|
||||||
- 꼭지끼리 겹치지 않도록 grid-template 설계
|
|
||||||
- 각 블록의 대략적 글자 수 가이드
|
|
||||||
|
|
||||||
페이지 판단:
|
|
||||||
- 안 들어가면 2페이지로 분리
|
|
||||||
↓
|
↓
|
||||||
[3단계] Kei 텍스트 편집자 — 텍스트 정리
|
[3단계] Kei 텍스트 편집자 — 텍스트 정리
|
||||||
|
|
||||||
|
|||||||
45
PLAN.md
45
PLAN.md
@@ -93,21 +93,32 @@
|
|||||||
- **의존성:** DA-2
|
- **의존성:** DA-2
|
||||||
- **완료 기준:** 꼭지 목록 + 레이어 + 강조 + 배치 + 이미지/표/상세 판단 JSON
|
- **완료 기준:** 꼭지 목록 + 레이어 + 강조 + 배치 + 이미지/표/상세 판단 JSON
|
||||||
|
|
||||||
### DA-13: 2단계 — 디자인 팀장 (레이아웃 설계)
|
### DA-13a: 2단계 Step A — 레이아웃 프리셋 선택 (규칙 기반)
|
||||||
- **파일:** src/design_director.py
|
- **파일:** src/design_director.py (`select_preset()` 함수)
|
||||||
- **내용:** 블록 매핑 + 공간 배분 + 글자 수 가이드
|
- **내용:** 실장의 role 분석을 보고 레이아웃 프리셋을 자동 선택
|
||||||
- 블록 매핑: catalog 메뉴판에서 각 꼭지 성격에 맞는 블록 선택
|
- reference 꼭지 있음 → `sidebar-right` (65:35)
|
||||||
- 이미지 배치: Pillow로 원본 크기 확인 → 가로/세로에 따라 영역 결정 (크기만 조절, crop 안 함)
|
- 모든 flow가 대등 비교 → `two-column` (50:50)
|
||||||
- 표 배치: 행×열 규모 보고 공간 판단 (안 되면 요약 요청 또는 페이지 분리)
|
- 고강조 1개 + 나머지 보조 → `hero-detail`
|
||||||
- 자세히보기: 상세 콘텐츠는 `<details>` 영역으로 설계
|
- 나머지 → `single-column`
|
||||||
- 공간 배분: 영역별 비율, 겹침 방지
|
- **기술:** Python 규칙 코드 (LLM 불필요)
|
||||||
- 글자 수 가이드: 각 블록 공간에 맞는 대략적 글자 수 (하드코딩 아닌 판단)
|
|
||||||
- 페이지 판단: 안 들어가면 2페이지 분리
|
|
||||||
- **기술:** Anthropic API (Sonnet) + Pillow (이미지 크기)
|
|
||||||
- **의존성:** DA-12
|
- **의존성:** DA-12
|
||||||
- **완료 기준:** 블록 배치 + 이미지/표 배치 + 글자 수 가이드 JSON
|
- **완료 기준:** 프리셋 이름 + CSS grid 반환
|
||||||
|
|
||||||
|
### DA-13b: 2단계 Step B — 프리셋 내 블록 매핑 (Sonnet)
|
||||||
|
- **파일:** src/design_director.py
|
||||||
|
- **내용:** 선택된 프리셋의 zone에 꼭지를 배정 + 블록 타입 선택 + 글자 수 가이드
|
||||||
|
- 프롬프트에 선택된 프리셋의 CSS grid가 포함됨
|
||||||
|
- flow 꼭지 → body/main zone
|
||||||
|
- reference 꼭지 → sidebar zone
|
||||||
|
- detail_target → popup 연결
|
||||||
|
- catalog에서 블록 타입 선택
|
||||||
|
- 이미지/표 배치 판단
|
||||||
|
- **기술:** Anthropic API (Sonnet) + Pillow
|
||||||
|
- **의존성:** DA-13a
|
||||||
|
- **완료 기준:** zone별 블록 배정 + 글자 수 가이드 JSON
|
||||||
|
|
||||||
|
### DA-13c: 3단계 — Kei 텍스트 편집자 (텍스트 정리)
|
||||||
|
|
||||||
### DA-13b: 3단계 — Kei 텍스트 편집자 (텍스트 정리)
|
|
||||||
- **파일:** src/content_editor.py
|
- **파일:** src/content_editor.py
|
||||||
- **내용:** 팀장의 글자 수 가이드 참고하되 내용 의미 우선
|
- **내용:** 팀장의 글자 수 가이드 참고하되 내용 의미 우선
|
||||||
- 전체 컨텍스트와 핵심 용어 유지
|
- 전체 컨텍스트와 핵심 용어 유지
|
||||||
@@ -116,7 +127,7 @@
|
|||||||
- 표 내용 편집 (핵심 행/열 선택, 요약)
|
- 표 내용 편집 (핵심 행/열 선택, 요약)
|
||||||
- 자세히보기 대상: 요약 버전 + 상세 버전 둘 다 작성
|
- 자세히보기 대상: 요약 버전 + 상세 버전 둘 다 작성
|
||||||
- **기술:** Anthropic API (Sonnet)
|
- **기술:** Anthropic API (Sonnet)
|
||||||
- **의존성:** DA-13
|
- **의존성:** DA-13b
|
||||||
- **완료 기준:** 슬롯별 텍스트 JSON. 핵심 용어 보존. 자세히보기 포함.
|
- **완료 기준:** 슬롯별 텍스트 JSON. 핵심 용어 보존. 자세히보기 포함.
|
||||||
|
|
||||||
### DA-14: 4단계 — 디자인 실무자 (디자인 조정 + HTML 조립) + 5단계 재검토
|
### DA-14: 4단계 — 디자인 실무자 (디자인 조정 + HTML 조립) + 5단계 재검토
|
||||||
@@ -126,7 +137,7 @@
|
|||||||
+ Jinja2 HTML 조립, 이미지 object-fit:contain, 표 container query, `<details>` 접기, 인쇄 펼침 JS
|
+ Jinja2 HTML 조립, 이미지 object-fit:contain, 표 container query, `<details>` 접기, 인쇄 펼침 JS
|
||||||
- 5단계 (AI): 팀장이 전체 균형 재검토 → 채움 비율, 블록 균형, 이미지/표 크기 점검 → 2차 조정
|
- 5단계 (AI): 팀장이 전체 균형 재검토 → 채움 비율, 블록 균형, 이미지/표 크기 점검 → 2차 조정
|
||||||
- **기술:** Anthropic API Sonnet (디자인 조정 + 재검토) + Jinja2/CSS (조립)
|
- **기술:** Anthropic API Sonnet (디자인 조정 + 재검토) + Jinja2/CSS (조립)
|
||||||
- **의존성:** DA-11, DA-12, DA-13, DA-13b
|
- **의존성:** DA-11, DA-12, DA-13a, DA-13b, DA-13c
|
||||||
- **완료 기준:** 텍스트 입력 → 균형 잡힌 슬라이드 HTML (이미지/표/자세히보기 포함, 재검토 완료)
|
- **완료 기준:** 텍스트 입력 → 균형 잡힌 슬라이드 HTML (이미지/표/자세히보기 포함, 재검토 완료)
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -170,9 +181,9 @@
|
|||||||
## 의존 관계
|
## 의존 관계
|
||||||
|
|
||||||
```
|
```
|
||||||
DA-1 → DA-2 → DA-12(실장) → DA-13(팀장) → DA-13b(편집자) ─┐
|
DA-1 → DA-2 → DA-12(실장) → DA-13a(프리셋) → DA-13b(블록배치) → DA-13c(편집자) ─┐
|
||||||
├→ DA-14(조립+재검토) → DA-15 → DA-16
|
├→ DA-14(조립+재검토) → DA-15 → DA-16
|
||||||
DA-3 → DA-4~DA-10 → DA-11(렌더러) ─────────────────────────┘
|
DA-3 → DA-4~DA-10 → DA-11(렌더러) ──────────────────────────────────────────────┘
|
||||||
```
|
```
|
||||||
|
|
||||||
- Phase 1~2: AI 없이 진행 가능
|
- Phase 1~2: AI 없이 진행 가능
|
||||||
|
|||||||
15
PROGRESS.md
15
PROGRESS.md
@@ -4,11 +4,11 @@
|
|||||||
|
|
||||||
| 상태 | 개수 |
|
| 상태 | 개수 |
|
||||||
|------|------|
|
|------|------|
|
||||||
| done | 13 |
|
| done | 14 |
|
||||||
| in-progress | 0 |
|
| in-progress | 0 |
|
||||||
| todo | 3 |
|
| todo | 4 |
|
||||||
| blocked | 0 |
|
| blocked | 0 |
|
||||||
| **전체** | **16** |
|
| **전체** | **18** |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -37,10 +37,11 @@
|
|||||||
|
|
||||||
| 태스크 | 상태 | 담당 | 시작 | 완료 | 메모 |
|
| 태스크 | 상태 | 담당 | 시작 | 완료 | 메모 |
|
||||||
|--------|------|------|------|------|------|
|
|--------|------|------|------|------|------|
|
||||||
| DA-12: 1단계 Kei 실장 (꼭지 추출+분석) | todo | - | - | - | 2~5개 꼭지 + 레이어 + 강조 + 이미지/표/상세 판단. 페이지 분리 |
|
| DA-12: 1단계 Kei 실장 (꼭지+정보구조+role) | done | - | - | - | Kei API 연동. info_structure + role(flow/reference) |
|
||||||
| DA-13: 2단계 디자인 팀장 (레이아웃 설계) | todo | - | - | - | 블록 매핑 + 이미지/표 배치 + 공간 배분 + 글자 수 가이드 |
|
| DA-13a: 2단계A 프리셋 선택 (규칙 기반) | todo | - | - | - | reference→sidebar-right, 비교→two-column 등 자동 |
|
||||||
| DA-13b: 3단계 텍스트 편집자 (Kei 역할) | todo | - | - | - | 의미 우선 편집 + 표 편집 + 자세히보기(요약+상세) |
|
| DA-13b: 2단계B 블록 매핑 (Sonnet) | todo | - | - | - | 프리셋 CSS 포함 프롬프트. zone별 블록 배정 |
|
||||||
| DA-14: 4단계 실무자(AI+코드) + 5단계 재검토 | todo | - | - | - | 디자인 조정 + HTML 조립 + 팀장 균형 재검토 |
|
| DA-13c: 3단계 텍스트 편집자 (Kei 역할) | todo | - | - | - | 의미 우선 편집 + 표 편집 + 자세히보기(요약+상세) |
|
||||||
|
| DA-14: 4단계 실무자 + 5단계 재검토 | todo | - | - | - | 디자인 조정 + HTML 조립 + 팀장 균형 재검토 |
|
||||||
|
|
||||||
## Phase 4: UI + 출력
|
## Phase 4: UI + 출력
|
||||||
|
|
||||||
|
|||||||
@@ -31,9 +31,15 @@ KEI_PROMPT = (
|
|||||||
"- 슬라이드에 맞게 정리하되, 원본이 말하려는 흐름은 유지\n"
|
"- 슬라이드에 맞게 정리하되, 원본이 말하려는 흐름은 유지\n"
|
||||||
"- 각 꼭지의 레이어(도입/핵심/보조/결론), 강조 여부, 배치 방향을 판단해줘\n"
|
"- 각 꼭지의 레이어(도입/핵심/보조/결론), 강조 여부, 배치 방향을 판단해줘\n"
|
||||||
"- 참조 정보는 role: 'reference'로, 본문 흐름은 role: 'flow'로 표시\n"
|
"- 참조 정보는 role: 'reference'로, 본문 흐름은 role: 'flow'로 표시\n"
|
||||||
"- 본문 흐름을 끊는 상세 내용은 detail_target: true로 표시\n"
|
"- reference 꼭지는 페이지 안에 사이드바로 배치한다. popup으로 빼지 않는다.\n"
|
||||||
|
"- 본문 흐름을 뒷받침하는 근거/사례도 페이지 안에 배치한다. popup으로 빼지 않는다.\n"
|
||||||
|
"- detail_target: true는 정말로 별도로 봐야 하는 상세 데이터(비교표, 상세 스펙)에만 사용한다.\n"
|
||||||
|
"- 근거, 사례, 용어 정의는 detail_target이 아니다.\n"
|
||||||
"- 이미지/표가 있으면 그것도 판단해줘\n"
|
"- 이미지/표가 있으면 그것도 판단해줘\n"
|
||||||
"- 1페이지 적정 꼭지: 5개. 초과 시 2페이지 분리.\n\n"
|
"- 1페이지 적정 꼭지: 5개. 초과 시 2페이지 분리.\n"
|
||||||
|
"- 2페이지로 분리하는 기준: 꼭지 수가 아니라 콘텐츠 분량이 진짜 많을 때만.\n"
|
||||||
|
"- 꼭지가 5~6개라도 각 꼭지의 내용이 적으면 1페이지에 충분히 담을 수 있다.\n"
|
||||||
|
"- 억지로 2페이지로 나누지 마라. 1페이지로 담을 수 있으면 1페이지로.\n\n"
|
||||||
"## 출력 형식 (JSON만)\n"
|
"## 출력 형식 (JSON만)\n"
|
||||||
"```json\n"
|
"```json\n"
|
||||||
'{"title": "제목", "total_pages": 1, '
|
'{"title": "제목", "total_pages": 1, '
|
||||||
|
|||||||
Reference in New Issue
Block a user