XBX-2 완료: overflow 프로세스 정상 동작
- slide_measurer: data URI → 임시파일 방식 (대용량 HTML 측정 가능) - pipeline: Type B zone 간 재배분 (top↔bottom 공간 이전) - pipeline: overflow 분기에 top/bottom zone 추가 - kei_client: 에스컬레이션 prompt 개선 - 텍스트 원문 보존 원칙 명시 (삭제/요약/압축 금지) - action을 popup만으로 제한 - 실제 역할명 목록을 prompt에 전달 - block_assembler: Kei popup 결정 반영 (해당 역할 콘텐츠 → 팝업 링크) 결과: 02번 상단 카드 3개 모두 표시, 하단 우측 표 → 팝업 분리 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1355,25 +1355,28 @@ JSON으로 응답하라:
|
||||
|
||||
KEI_FIT_ESCALATION_PROMPT = """당신은 슬라이드 설계 전문가이다.
|
||||
콘텐츠를 컨테이너에 배치하려 했으나, 일부 영역의 콘텐츠가 공간을 초과한다.
|
||||
재배분을 시도했지만 해결되지 않은 영역이 있다.
|
||||
|
||||
콘텐츠의 중요도와 전달 메시지를 기준으로, 어떻게 처리할지 결정하라.
|
||||
## 핵심 원칙
|
||||
- **텍스트 원문은 절대 수정/삭제/요약하지 않는다.**
|
||||
- 공간이 부족하면 **팝업으로 분리**하여 원문 전체를 팝업에 넣는다.
|
||||
- 슬라이드에는 제목 + "바로가기 →" 링크만 남긴다.
|
||||
- 중요도가 높은 영역의 공간을 우선 확보한다.
|
||||
|
||||
## 판단 기준
|
||||
- 핵심 메시지(본심)의 공간은 최대한 보장
|
||||
- 배경은 보조 역할 — 간결화 가능
|
||||
- 사례/근거는 인라인 축약 또는 팝업 분리 가능
|
||||
- 용어 정의는 sidebar에 맞게 조정 가능
|
||||
- 넘치는 영역 중 중요도가 낮은 콘텐츠를 팝업으로 분리
|
||||
- 표 데이터가 큰 경우 → 팝업 분리 1순위
|
||||
- 이미 팝업이 있는 콘텐츠 → 슬라이드에서 제거하고 팝업으로 통합
|
||||
|
||||
## 출력 (JSON만. 설명 없이.)
|
||||
- role에는 반드시 아래 "역할 목록"에 있는 **정확한 역할명**을 사용하라.
|
||||
|
||||
```json
|
||||
{
|
||||
"decisions": [
|
||||
{
|
||||
"role": "배경",
|
||||
"action": "merge|inline|popup|trim|restructure",
|
||||
"detail": "구체적 지시 (어떤 꼭지를 어떻게)",
|
||||
"role": "역할 목록에 있는 정확한 역할명",
|
||||
"action": "popup",
|
||||
"detail": "팝업으로 분리할 구체적 내용 (어떤 부분을 팝업으로 빼는지)",
|
||||
"reason": "판단 근거 1문장"
|
||||
}
|
||||
]
|
||||
@@ -1381,11 +1384,7 @@ KEI_FIT_ESCALATION_PROMPT = """당신은 슬라이드 설계 전문가이다.
|
||||
```
|
||||
|
||||
action 종류:
|
||||
- merge: 여러 꼭지를 하나의 블록 안에서 흐름으로 합침
|
||||
- inline: 사례/근거를 괄호 한 줄로 축약하여 인라인
|
||||
- popup: 상세 내용을 팝업으로 분리하고 링크만 남김
|
||||
- trim: 텍스트 분량을 줄임 (max_chars 지정)
|
||||
- restructure: 컨테이너 구조 자체를 변경 (배경 전체폭 등)
|
||||
- popup: 상세 내용을 팝업으로 분리하고 슬라이드에는 링크만 남김
|
||||
"""
|
||||
|
||||
|
||||
@@ -1393,6 +1392,7 @@ async def call_kei_fit_escalation(
|
||||
fit_report: str,
|
||||
topics: list[dict],
|
||||
content_summary: str,
|
||||
role_names: list[str] | None = None,
|
||||
) -> dict[str, Any] | None:
|
||||
"""Phase V: 적합성 검증 실패 시 Kei에게 판단 요청.
|
||||
|
||||
@@ -1414,10 +1414,16 @@ async def call_kei_fit_escalation(
|
||||
indent=2,
|
||||
)
|
||||
|
||||
# 실제 역할명 목록을 prompt에 명시 (Kei가 정확한 역할명을 사용하도록)
|
||||
role_list_text = ""
|
||||
if role_names:
|
||||
role_list_text = f"\n## 역할 목록 (role에 반드시 아래 이름을 사용)\n" + "\n".join(f"- {r}" for r in role_names)
|
||||
|
||||
prompt = (
|
||||
KEI_FIT_ESCALATION_PROMPT + "\n\n"
|
||||
f"## 적합성 검증 결과\n{fit_report}\n\n"
|
||||
f"## 꼭지 목록\n{topics_desc}\n\n"
|
||||
f"## 꼭지 목록\n{topics_desc}"
|
||||
f"{role_list_text}\n\n"
|
||||
f"## 원본 콘텐츠 요약\n{content_summary[:1500]}"
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user