에이전트 루프와 코드 언어 지원, PPT 생성 품질을 함께 고도화
- AgentCommandQueue를 도입해 실행 중 추가 입력을 우선순위와 인터럽트 여부까지 포함해 처리하도록 정리함 - AgentToolResultBudget와 AgentQueryContextBuilder에 tool result preview 캐시를 연결해 긴 세션에서 축약 결과 재사용을 안정화함 - CodeLanguageCatalog를 추가해 코드 탭의 내장 언어 지원, 인덱싱 확장자, 시스템 프롬프트 언어 가이드, LSP 언어 판정을 한 카탈로그로 통합함 - 설정의 코드 탭에 지원 언어(LSP)와 코드 탭 기본 지원 언어를 명시적으로 표시하도록 보강함 - DocumentPlannerTool의 presentation 구조를 컨설팅형 스토리라인으로 정리하고, PptxSkill에 executive_summary/recommendation/roadmap/comparison/kpi_dashboard 레이아웃을 추가함 - pptx-creator 스킬을 AX native pptx_create 중심으로 재작성하고, 관련 회귀 테스트를 추가했으며 WorkspaceContextGeneratorTests의 nullable 경고도 정리함 검증 결과 - dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_impl\\ -p:IntermediateOutputPath=obj\\verify_impl\\ - dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "CodeLanguageCatalogTests|AgentCommandQueueTests|AgentToolResultBudgetTests|DocumentPlannerPresentationTests|PptxSkillConsultingDeckTests" -p:OutputPath=bin\\verify_impl_tests\\ -p:IntermediateOutputPath=obj\\verify_impl_tests\\
This commit is contained in:
@@ -1,125 +1,109 @@
|
||||
---
|
||||
---
|
||||
name: pptx-creator
|
||||
label: PPT 프레젠테이션 생성
|
||||
description: Python을 사용하여 전문적인 PowerPoint 프레젠테이션을 생성합니다. 작업 폴더의 양식 파일을 자동 활용합니다.
|
||||
description: AX 기본 PPT 엔진으로 고급 제안서, 보고서, 발표 자료를 생성합니다. 작업 폴더의 양식 파일과 프로젝트 자료를 함께 활용합니다.
|
||||
icon: \uE7BE
|
||||
when_to_use: 발표 자료, 제안서 deck, 보고용 슬라이드, 교육용 프레젠테이션을 새로 만들어야 하거나 기존 양식 PPT를 활용해야 할 때
|
||||
when_to_use: 제안서 deck, 경영보고, 임원 보고자료, 프로젝트 현황 발표, 교육용 슬라이드, 회의 발표 자료를 새로 만들어야 하거나 기존 양식 PPT를 활용해야 할 때
|
||||
argument-hint: <주제 또는 문서 목적>
|
||||
allowed-tools:
|
||||
- folder_map
|
||||
- document_plan
|
||||
- document_read
|
||||
- file_read
|
||||
- file_write
|
||||
- process
|
||||
- pptx_create
|
||||
- template_render
|
||||
tabs: cowork
|
||||
---
|
||||
|
||||
사용자의 요구에 맞는 PowerPoint 프레젠테이션을 Python으로 생성하세요.
|
||||
## 실행 경로 선택 (Python 가능/불가)
|
||||
- 먼저 `process`로 `python --version`을 확인하세요.
|
||||
- Python 가능: 기존 python-pptx 경로를 사용하세요.
|
||||
- Python 불가: `pptx_create`로 슬라이드 초안을 생성하고 `template_render` + `file_write`로 발표자료 구조를 보강하세요.
|
||||
사용자의 요구에 맞는 PowerPoint 프레젠테이션을 AX 기본 `pptx_create` 도구로 생성하세요.
|
||||
|
||||
## 기본 원칙
|
||||
- 기본 경로는 항상 `pptx_create`입니다. Python 스크립트 생성은 예외 상황에서만 고려하세요.
|
||||
- 슬라이드마다 메시지는 하나만 두고, 제목은 설명형 문장이 아니라 결론형 headline으로 작성하세요.
|
||||
- bullet은 슬라이드당 3~5개 이내의 짧고 강한 문장으로 유지하세요. 공간을 채우기 위한 장문 bullet은 금지합니다.
|
||||
- 숫자, 비교, 일정, 권고안은 각각 맞는 레이아웃으로 분리하세요.
|
||||
|
||||
## 사전 준비
|
||||
필요한 패키지를 확인하고 설치하세요:
|
||||
```
|
||||
process: pip install python-pptx
|
||||
## 권장 작업 순서
|
||||
1. `folder_map`으로 작업 폴더를 확인하고 기존 `.pptx`, 보고서, 분석 문서, 회의록이 있는지 찾으세요.
|
||||
2. 참고할 양식 PPT가 있으면 파일명을 기억하고, 필요 시 `document_read`로 슬라이드 구조를 파악하세요.
|
||||
3. 먼저 `document_plan`을 `document_type: presentation`으로 호출해서 스토리라인을 정리하세요.
|
||||
4. 그 결과를 바탕으로 `pptx_create`용 슬라이드 배열을 설계하세요.
|
||||
5. 생성 후 결과 파일 경로와 핵심 구성(슬라이드 수, 사용 템플릿/테마, 주요 레이아웃)을 간단히 안내하세요.
|
||||
|
||||
## 컨설팅형 스토리라인 규칙
|
||||
- 기본 구조는 가능하면 아래 순서를 따르세요.
|
||||
- `Executive Summary`
|
||||
- `Situation & Imperative`
|
||||
- `Key Findings`
|
||||
- `Options & Recommendation`
|
||||
- `Implementation Roadmap`
|
||||
- `Impact & Ask`
|
||||
|
||||
## 레이아웃 선택 기준
|
||||
- `executive_summary`: 경영진 요약, 한 줄 권고안, 핵심 takeaways, KPI 요약
|
||||
- `recommendation`: 단일 권고안과 근거, 즉시 실행 항목
|
||||
- `comparison`: 대안 비교, 옵션별 pros/risks, 추천안 강조
|
||||
- `roadmap`: 단계별 일정, 소유자, 주요 산출물
|
||||
- `kpi_dashboard`: 핵심 수치, 추세, 시사점
|
||||
- `chart`: 정량 데이터 시각화
|
||||
- `table`: 비교표, 상세 데이터표
|
||||
- `section`: 장 구분
|
||||
- `content`: 일반 설명 슬라이드
|
||||
|
||||
## 양식 활용
|
||||
- 작업 폴더에 기존 양식 PPT가 있으면 `template` 또는 `theme_file`로 우선 활용하세요.
|
||||
- 양식 후보 예시:
|
||||
- 파일명에 `양식`, `template`, `표준`, `기본`, `보고`, `proposal`, `deck` 포함
|
||||
- 사용자가 특정 `.pptx` 파일명을 직접 언급
|
||||
- 양식이 명확하지 않으면 기본 `template: basic100` 또는 문서 성격에 맞는 `corporate`, `professional`, `modern` 중 하나를 사용하세요.
|
||||
|
||||
## 슬라이드 작성 규칙
|
||||
- 제목은 `무엇을 다룰지`가 아니라 `무슨 결론인지`를 말해야 합니다.
|
||||
- 각 슬라이드는 headline, supporting evidence, takeaway의 3요소를 갖추세요.
|
||||
- 데이터가 없으면 억지 차트를 만들지 말고, 비교 카드나 권고안 슬라이드로 전환하세요.
|
||||
- 표는 설명보다 비교에 유리할 때만 사용하세요.
|
||||
- speaker notes가 유용하면 `notes`를 넣어 발표 포인트를 남기세요.
|
||||
|
||||
## 예시 흐름
|
||||
- `document_plan`으로 발표 구조 생성
|
||||
- `pptx_create`에서 아래와 같은 레이아웃 조합 사용
|
||||
- `title`
|
||||
- `executive_summary`
|
||||
- `comparison`
|
||||
- `recommendation`
|
||||
- `roadmap`
|
||||
- `kpi_dashboard`
|
||||
- `section`
|
||||
- `content`
|
||||
|
||||
## 예시 파라미터 스케치
|
||||
```json
|
||||
{
|
||||
"path": "strategy-deck.pptx",
|
||||
"template": "basic100",
|
||||
"slides": [
|
||||
{
|
||||
"layout": "title",
|
||||
"title": "2026 사업 전략 제안",
|
||||
"subtitle": "성장 가속과 운영 효율 동시 달성"
|
||||
},
|
||||
{
|
||||
"layout": "executive_summary",
|
||||
"title": "Executive Summary",
|
||||
"headline": "핵심 투자 우선순위를 재배치하면 2개 분기 내 수익성을 개선할 수 있습니다.",
|
||||
"summary_points": [
|
||||
"핵심 비용 3개 영역에서 구조적 비효율이 확인되었습니다.",
|
||||
"고객 유지율 개선이 신규 확보보다 더 큰 수익 기회를 만듭니다.",
|
||||
"선행 투자 없이 가능한 빠른 실행과제도 존재합니다."
|
||||
],
|
||||
"recommendation": "우선 CRM 고도화와 운영 자동화를 병행하고, 저효율 캠페인은 즉시 축소합니다.",
|
||||
"kpis": [
|
||||
{ "label": "매출총이익", "value": "+4.2%p", "trend": "2Q forecast", "note": "product mix 개선" },
|
||||
{ "label": "CAC", "value": "-11%", "trend": "target", "note": "퍼널 최적화" },
|
||||
{ "label": "Retention", "value": "+6pt", "trend": "12M", "note": "핵심 세그먼트" }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## 양식 활용 (마스터 슬라이드 템플릿)
|
||||
작업 폴더에 PPT 양식이 있으면 **반드시** 활용하세요:
|
||||
|
||||
1. **양식 탐색**: `folder_map`으로 작업 폴더를 스캔하여 `.pptx` 파일 확인
|
||||
2. **양식 후보 판별**:
|
||||
- 파일명에 "양식", "template", "서식", "표준", "기본" 포함
|
||||
- 또는 사용자가 명시적으로 "XX 양식으로 작성해줘" 요청
|
||||
- 또는 사용자가 특정 .pptx 파일명을 언급
|
||||
3. **양식 구조 파악**: `document_read`로 양식의 슬라이드 레이아웃 목록 확인
|
||||
4. **양식 기반 생성**:
|
||||
```python
|
||||
prs = Presentation('양식_발표.pptx')
|
||||
# 마스터 슬라이드의 배경, 로고, 색 테마, 폰트가 자동 상속
|
||||
# 기존 슬라이드 제거 후 새 내용 추가
|
||||
while len(prs.slides) > 0:
|
||||
rId = prs.slides._sldIdLst[0].rId
|
||||
prs.part.drop_rel(rId)
|
||||
del prs.slides._sldIdLst[0]
|
||||
```
|
||||
5. **레이아웃 확인** (양식마다 다를 수 있음):
|
||||
```python
|
||||
for i, layout in enumerate(prs.slide_layouts):
|
||||
print(f'{i}: {layout.name}')
|
||||
```
|
||||
6. **양식이 없으면**: 아래 기본 템플릿으로 새 프레젠테이션 생성
|
||||
|
||||
## 작업 절차
|
||||
1. **요구사항 파악**: 발표 주제, 슬라이드 수, 스타일 확인
|
||||
2. **양식 확인**: folder_map으로 작업 폴더에 양식 .pptx 파일이 있는지 확인
|
||||
3. **스크립트 작성**: file_write로 Python 스크립트 생성
|
||||
4. **실행**: `process`로 스크립트 실행
|
||||
5. **결과 안내**: 생성된 .pptx 파일 경로를 사용자에게 전달
|
||||
|
||||
## 스크립트 템플릿
|
||||
```python
|
||||
from pptx import Presentation
|
||||
from pptx.util import Inches, Pt, Emu
|
||||
from pptx.dml.color import RGBColor
|
||||
from pptx.enum.text import PP_ALIGN
|
||||
import os
|
||||
|
||||
# 양식 파일 자동 감지
|
||||
template_keywords = ['양식', 'template', '서식', '표준', '기본']
|
||||
template_file = None
|
||||
for f in os.listdir('.'):
|
||||
if f.endswith('.pptx') and any(kw in f.lower() for kw in template_keywords):
|
||||
template_file = f
|
||||
break
|
||||
|
||||
# 양식이 있으면 활용, 없으면 새 프레젠테이션
|
||||
if template_file:
|
||||
prs = Presentation(template_file)
|
||||
# 기존 슬라이드 제거 (마스터/레이아웃은 유지)
|
||||
while len(prs.slides) > 0:
|
||||
rId = prs.slides._sldIdLst[0].rId
|
||||
prs.part.drop_rel(rId)
|
||||
del prs.slides._sldIdLst[0]
|
||||
print(f'양식 활용: {template_file}')
|
||||
print(f'사용 가능한 레이아웃: {[l.name for l in prs.slide_layouts]}')
|
||||
else:
|
||||
prs = Presentation()
|
||||
prs.slide_width = Inches(13.333)
|
||||
prs.slide_height = Inches(7.5)
|
||||
|
||||
# 제목 슬라이드
|
||||
slide = prs.slides.add_slide(prs.slide_layouts[0])
|
||||
slide.shapes.title.text = '프레젠테이션 제목'
|
||||
if len(slide.placeholders) > 1:
|
||||
slide.placeholders[1].text = '부제목'
|
||||
|
||||
# 내용 슬라이드
|
||||
slide = prs.slides.add_slide(prs.slide_layouts[1])
|
||||
slide.shapes.title.text = '섹션 제목'
|
||||
body = slide.placeholders[1]
|
||||
body.text = '첫 번째 포인트'
|
||||
p = body.text_frame.add_paragraph()
|
||||
p.text = '두 번째 포인트'
|
||||
|
||||
prs.save('presentation.pptx')
|
||||
print('프레젠테이션 생성 완료: presentation.pptx')
|
||||
```
|
||||
|
||||
## 지원 기능
|
||||
- 제목/내용/빈 슬라이드 레이아웃
|
||||
- 텍스트 서식 (글꼴, 크기, 색상, 정렬)
|
||||
- 표 삽입
|
||||
- 이미지 삽입
|
||||
- 도형 (사각형, 원, 화살표)
|
||||
- 차트 (막대, 선, 원형)
|
||||
- 슬라이드 번호
|
||||
- 마스터 슬라이드 커스터마이징
|
||||
- **양식 파일 기반 마스터/레이아웃 상속** (배경, 로고, 색 테마, 폰트 자동 유지)
|
||||
|
||||
한국어로 안내하세요. 작업 폴더에 결과 파일을 저장하세요.
|
||||
한국어로 안내하고, 결과 파일은 작업 폴더에 저장하세요.
|
||||
|
||||
Reference in New Issue
Block a user