Phase H: 스토리라인 설계 기반 파이프라인 전환

H-1: KEI_PROMPT 재설계
  - "꼭지 추출" → "슬라이드 스토리라인 설계"
  - 핵심 메시지(core_message) 먼저 파악
  - 각 위치의 목적(purpose) 부여: 문제제기/근거사례/핵심전달/용어정의/결론강조/구조시각화
  - 원본 텍스트 범위(source_hint) 명시
  - 원본 보존 원칙 강조

H-2: EDITOR_PROMPT 수정
  - "세련된 편집" → "원본 최대 보존, 약간만 축약"
  - "빈 슬롯 금지" 명시
  - purpose 기반 텍스트 배치

H-3: STEP_B_PROMPT 보강
  - purpose 기반 블록 선택 가이드 추가 (참고, 강제 아님)
  - 출력 JSON에 purpose 필드 추가

H-4: fill_content()에서 purpose 전달
  - slot_requirements에 목적(purpose) 1줄 추가

코드 구조 변경 없음. 프롬프트만 수정. persona_agent 수정 0건.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-26 06:24:21 +09:00
parent af07d247f6
commit 113ec4ce22
5 changed files with 306 additions and 26 deletions

View File

@@ -18,36 +18,45 @@ from src.config import settings
logger = logging.getLogger(__name__)
KEI_PROMPT = (
"다음 콘텐츠 슬라이드로 정리하려고 해.\n\n"
"## 1단계: 정보 구조 파악 (꼭지 추출 전에 먼저 수행)\n"
"- 이 콘텐츠가 하나의 흐름으로 읽히는가, 아니면 '본문 흐름''참조 정보'로 분리되는 구조인가?\n"
"- 독립적으로 참조되는 정보(용어 정의, 부록, 별도 설명)가 있는가?\n"
"- 상세히 다뤄야 하지만 본문 흐름을 끊는 내용(비교표, 상세 데이터)이 있는가?\n"
"- 정보 구조를 info_structure 필드에 기술해줘.\n\n"
"## 2단계: 꼭지 추출\n"
"- 1단계에서 파악한 정보 구조를 바탕으로 꼭지를 나눠줘\n"
"다음 콘텐츠 슬라이드 1장을 만들려고 해. 어떤 스토리로 구성할지 설계해줘.\n\n"
"## 1단계: 핵심 메시지 파악\n"
"- 이 콘텐츠가 전달하려는 **핵심 메시지**를 한 줄로 파악해줘.\n"
"- 슬라이드를 본 사람이 기억해야 할 단 하나의 문장.\n"
"- core_message 필드에 기록.\n\n"
"## 2단계: 정보 구조 파악\n"
"- 본문 흐름(flow)과 참조 정보(reference)로 분리되는 구조인가?\n"
"- 독립적으로 참조되는 정보(용어 정의, 부록)가 있는가?\n"
"- info_structure 필드에 기술.\n\n"
"## 3단계: 슬라이드 스토리라인 설계\n"
"핵심 메시지를 전달하기 위한 **흐름**을 설계해줘. 각 위치에 **목적(purpose)**을 부여:\n"
"- 문제제기: 왜 이 주제가 중요한가? 현재 무엇이 잘못되고 있는가?\n"
"- 근거사례: 문제의 근거, 사례, 증거 (출처 포함)\n"
"- 핵심전달: 그래서 사실은 이거다. 핵심 내용 전달.\n"
"- 용어정의: 사용된 용어를 구체적으로 설명 (보조 참조, sidebar 배치)\n"
"- 결론강조: 핵심 메시지 강조. 슬라이드 하단.\n"
"- 구조시각화: 관계도, 프로세스 등 시각화가 필요한 경우\n\n"
"## 원본 텍스트 보존 원칙\n"
"- 원본의 논리 흐름과 정보를 빠뜨리지 마라\n"
"- 원본 텍스트는 최대한 보존. 약간의 편집만.\n"
"- 원본에 있는 내용을 임의로 제거하거나 다른 의미로 바꾸지 마라\n"
"- 슬라이드에 맞게 정리하되, 원본이 말하려는 흐름은 유지\n"
"- 각 꼭지의 레이어(도입/핵심/보조/결론), 강조 여부, 배치 방향을 판단해줘\n"
"- 참조 정보는 role: 'reference', 본문 흐름은 role: 'flow' 표시\n"
"- reference 꼭지는 페이지 안에 사이드바로 배치한다. popup으로 빼지 않는다.\n"
"- 본문 흐름을 뒷받침하는 근거/사례도 페이지 안에 배치한다. popup으로 빼지 않는다.\n"
"- detail_target: true는 정말로 별도로 봐야 하는 상세 데이터(비교표, 상세 스펙)에만 사용한다.\n"
"- 근거, 사례, 용어 정의는 detail_target이 아니다.\n"
"- 이미지가 있으면: 몇 개인지, 어떤 꼭지 소속인지, 핵심(도표/차트)인지 보조(참고 사진)인지, 텍스트가 포함된 이미지인지 판단해줘\n"
"- 표가 있으면: 행/열 규모, 1페이지에 전체 표시 가능한지 판단해줘\n"
"- 이미지/표 판단 결과를 images[], tables[] 배열에 기록해줘\n"
"- 1페이지 적정 꼭지: 5개. 초과 시 2페이지 분리.\n"
"- 2페이지로 분리하는 기준: 꼭지 수가 아니라 콘텐츠 분량이 진짜 많을 때만.\n"
"- 꼭지가 5~6개라도 각 꼭지의 내용이 적으면 1페이지에 충분히 담을 수 있다.\n"
"- 억지로 2페이지로 나누지 마라. 1페이지로 담을 수 있으면 1페이지로.\n\n"
"- 각 꼭지의 source_hint에 원본의 어떤 부분이 가는지 명시\n\n"
"## 배치 규칙\n"
"- 참조 정보(용어 정의 등)는 role: 'reference'로 표시 → 사이드바 배치\n"
"- 본문 흐름은 role: 'flow' → 메인 영역 배치\n"
"- 결론은 layer: 'conclusion' → 하단 배치\n"
"- detail_target: true는 정말로 별도로 봐야 하는 상세 데이터에만 사용\n"
"- 이미지/표가 있으면 images[], tables[]에 기록\n"
"- 1페이지 적정 꼭지: 5개. 분량 적으면 1페이지로.\n\n"
"## 출력 형식 (JSON만)\n"
"```json\n"
'{"title": "제목", "total_pages": 1, '
'"info_structure": "콘텐츠의 정보 구조 설명 (본문 흐름 vs 참조 분리 등)", '
'{"title": "제목", '
'"core_message": "슬라이드의 핵심 메시지 한 줄", '
'"total_pages": 1, '
'"info_structure": "정보 구조 설명", '
'"topics": ['
'{"id": 1, "title": "꼭지 제목", "summary": "요약", '
'"purpose": "문제제기|근거사례|핵심전달|용어정의|결론강조|구조시각화", '
'"source_hint": "원본에서 이 위치에 가져올 텍스트 범위 설명", '
'"layer": "intro|core|supporting|conclusion", '
'"role": "flow|reference", '
'"emphasis": true, "direction": "vertical|horizontal|flexible", '