1. PowerPoint Agent 개발
1.1. 개발 목표
PowerPoint Agent의 목표는 단순히 발표 자료의 텍스트 초안을 작성하는 것이 아니라, 실제 업무에서 바로 활용 가능한 수준의 PowerPoint 문서를 자동 생성하는 것입니다.
기존 LLM 기반 문서 생성 방식은 문장 작성이나 요약에는 강점이 있지만, 슬라이드 단위의 구조 설계, 시각적 위계, 레이아웃 일관성, 발표 흐름 구성에는 한계가 있었습니다. 특히 PowerPoint는 단순 텍스트 문서와 달리 제목, 본문, 이미지, 표, 도식, 강조 요소가 슬라이드 안에서 균형 있게 배치되어야 하므로, 문서 생성 과정 자체를 별도의 단계형 워크플로우로 설계할 필요가 있었습니다.
이를 해결하기 위해 PowerPoint 제작 과정을 기획 → 목차 구성 → 슬라이드 설계 → 레이아웃 배치 → 디자인 톤 정리 → 최종 PPT 생성 단계로 분리하고, 각 단계를 Agent Skill 기반으로 자동화했습니다.
추가로 비싼 프론티어 모델의 API를 사용하는 대신 Powerpoint Agent에 특화된 SLM 모델을 직접 튜닝하여 배치하게 하였습니다.
주요 목표는 다음과 같습니다.
- 발표 목적과 대상에 맞는 슬라이드 구조 자동 생성
- 보고서형, 제안서형, 포트폴리오형 등 문서 유형별 흐름 자동 구성
- 제목, 본문, 표, 도식화 요소를 구분한 구조화 출력
- PowerPoint 레이아웃이 깨지지 않도록 생성 결과 검증
- 외부 고성능 LLM API 의존도를 낮추고 로컬 SLM 기반으로 비용 최적화
1.2. 데이터셋 구축
SLM 파인튜닝을 위해 PowerPoint 생성에 특화된 데이터셋 구축 파이프라인을 설계했습니다.
전체 프레젠테이션의 생성 코드를 하나의 학습 샘플로 구성하면 컨텍스트가 지나치게 길어지고, 모델이 개별 슬라이드의 구조와 레이아웃 규칙을 학습하기 어려워집니다. 이를 해결하기 위해 슬라이드 단위로 데이터를 생성하고 학습한 뒤, 각 슬라이드를 하나의 프레젠테이션으로 통합하는 방식을 적용했습니다.
데이터셋에는 슬라이드 제목, 본문, 요약, 도식화 요소, 레이아웃 배치 정보 등이 포함됩니다. 단순한 문장이나 일반적인 Python 코드가 아니라, 실제 PowerPoint 파일을 생성할 수 있는 실행 가능한 Python 코드 형태로 구성했습니다.
데이터셋은 크게 Plan, Slide Code, Repair의 세가지 유형으로 구분됩니다.
1.2.1. Plan 데이터셋
Plan 데이터셋은 슬라이드별 콘텐츠와 디자인 구조를 사전에 계획하여, 생성되는 코드와 프레젠테이션의 일관성을 유지하는 데 목적이 있습니다.
모델은 사용자 요청을 분석한 뒤 슬라이드 제목, 핵심 내용, 레이아웃, 도식화 방식, 시각적 구성 요소 등을 정의합니다. 생성된 계획은 이후 Slide Code를 생성하기 위한 설계 정보로 활용됩니다.
데이터는 사전에 정의된 필드를 따르는 JSON 형식으로 구성됩니다.
출력 형식
{
"slide_title": "슬라이드 제목",
"summary": "슬라이드 핵심 요약",
"content": [],
"layout": "레이아웃 유형",
"visual_elements": [],
"chart_or_diagram": {}
}
1.2.2. Slide Code 데이터셋
Slide Code 데이터셋은 PowerPoint Agent의 핵심 학습 데이터입니다. Plan 데이터셋에서 생성된 설계 정보를 바탕으로, 실제 PowerPoint 슬라이드를 생성하는 Python 코드를 출력하도록 모델을 학습합니다.
생성된 코드는 다음 조건을 충족해야 합니다.
- 문법 오류와 런타임 오류 없이 실행되어야 합니다.
- 텍스트 오버플로와 요소 겹침이 발생하지 않아야 합니다.
- 슬라이드 요소가 올바른 좌표와 크기로 배치되어야 합니다.
- 슬라이드 간 색상, 폰트, 여백, 정렬 규칙이 일관되어야 합니다.
이러한 기준을 충족하기 위해 코드 실행 검증과 레이아웃 검증을 통과한 샘플만 학습 데이터로 사용했습니다. 먼저 SFT를 통해 기본적인 코드 생성 형식과 구조를 학습하고, 이후 DPO를 적용해 정상적으로 실행되는 코드와 품질이 낮은 코드 사이의 선호도를 학습하도록 구성했습니다.
최종 목표는 Python 코드 실행 성공률과 정적 검증 통과율을 99% 수준까지 높이는 것입니다.
출력 형식
def build_slide(prs, ctx):
# 실제 PowerPoint 슬라이드를 생성하는 Python 코드
return slide
1.2.3. Repair 데이터셋
Repair 데이터셋은 Slide Code의 실행 또는 검증 과정에서 발생한 오류를 분석하고, 문제가 있는 코드를 수정하도록 학습하는 데이터셋입니다.
모델은 오류 메시지와 원본 코드를 입력받아 오류의 원인을 분석한 뒤, 수정된 Python 코드를 출력합니다. 주요 수정 대상은 다음과 같습니다.
- Python 문법 오류
- 실행 중 발생하는 런타임 오류
- 잘못된 라이브러리 또는 API 사용
- 요소 겹침과 잘못된 배치 등의 레이아웃 문제
이를 통해 PowerPoint Agent는 코드 생성에 실패하더라도 전체 코드를 처음부터 다시 생성하지 않고, 오류가 발생한 부분을 식별하여 수정할 수 있습니다.
입출력 형식
입력:
- 오류 메시지
- 원본 Python 코드
출력:
- 오류가 수정된 Python 코드
전체 데이터 생성 및 실행 파이프라인은 다음과 같습니다.
사용자 요청
→ Plan 생성
→ Slide Code 생성
→ 코드 실행 및 레이아웃 검증
→ 오류 발생 시 Repair 수행
→ 최종 PowerPoint 생성
1.2.4. 데이터 검증 및 필터링
데이터셋 구축 과정에는 품질이 낮은 샘플을 자동으로 제거하는 필터링 단계를 포함했습니다.
생성된 Python 코드를 실제로 실행한 뒤 PowerPoint 파일이 정상적으로 생성되는지 확인했으며, 실행 오류가 발생하거나 슬라이드 구조가 올바르게 구성되지 않은 데이터는 학습 대상에서 제외했습니다. 이를 통해 모델이 잘못된 코드 패턴을 학습하는 것을 방지하고, 전체 데이터셋의 신뢰도를 높였습니다.
1.2.5. 데이터 생성 환경
데이터셋 생성에는 LM Studio 환경에서 양자화된 Qwen 3.6 27B Coder 계열 모델을 사용했습니다. 코드 생성에 특화된 모델이기 때문에 Python 기반 PowerPoint 생성 데이터 제작에 적합했으며, Draft 기능을 활용해 추론 속도를 높이고 대량의 데이터를 생성했습니다.
로컬 GPU 환경에서 대형 모델을 FP16으로 실행하면 VRAM 사용량이 과도하게 증가할 수 있습니다. 이에 따라 4비트 양자화 모델을 사용하여 메모리 사용량을 줄이고 안정적인 추론 속도를 확보했습니다.
1.2.6. 구축 결과
약 30시간 동안 총 1,000개 규모의 데이터셋을 생성하고 검증했습니다. 최종적으로 선별된 데이터를 바탕으로 PowerPoint 생성 특화 SLM의 파인튜닝을 진행했습니다.
1.3. SLM LoRA 파인튜닝
앞서 구축한 데이터셋을 기반으로 PowerPoint 문서 생성에 특화된 SLM LoRA 파인튜닝을 진행했습니다.
학습에는 Plan, Slide Code, Repair데이터셋을사용했습니다. 각 데이터셋은 서로 다른 작업 형식과 출력 구조를 가지므로 개별적으로 품질을 검증한 뒤, 최종적으로 하나의 통합 학습 데이터셋으로 구성했습니다.
통합 데이터셋을 하나의 모델에 학습함으로써 다음 세 가지 기능을 단일 모델에서 수행할 수 있도록 설계했습니다.
- 사용자 요청을 분석하고 슬라이드 구성을 계획하는 Plan 생성
- 계획을 기반으로 실행 가능한 PowerPoint 코드를 작성하는 Slide Code 생성
- 코드 실행 및 검증 과정에서 발생한 오류를 수정하는 Repair 수행
기능별로 별도의 모델을 운영하지 않고 하나의 LoRA 모델에 통합함으로써 모델 관리와 추론 파이프라인을 단순화하고, 실제 서비스 환경에서의 배포 효율성을 높였습니다.
학습 방식으로는 **SFT(Supervised Fine-Tuning)**를*적용했으며,*베이스 모델로 Qwen 3.5 2B를 사용했습니다.
SFT를 적용한 이유는 Python 기반 PowerPoint 생성 작업이 정해진 함수 구조와 출력 형식을 요구하기 때문입니다. 입력과 정답 코드의 대응 관계를 직접 학습함으로써 모델이 지시된 형식을 안정적으로 따르고, 실행 가능한 코드를 생성하도록 하는 데 적합하다고 판단했습니다.
또한 Qwen 3.5 2B는 작은 모델 크기에 비해 코드 생성 성능과 추론 효율성이 우수하며, 제한된 VRAM 환경에서도 활용할 수 있다는 장점이 있습니다. 따라서 고사양 서버뿐만 아니라 저사양 GPU나 로컬 환경에서도 배포와 추론이 가능하도록 설계하는 데 적합했습니다.
LoRA 방식은 베이스 모델 전체를 학습하지 않고 일부 가중치만 업데이트하기 때문에 학습에 필요한 GPU 메모리와 시간을 줄일 수 있습니다. 또한 학습 결과를 어댑터 형태로 관리할 수 있어 모델 배포, 버전 관리 및 추가 학습에도 유리합니다.
1.3.1. 파인튜닝 목표
- PowerPoint 문서 생성에 필요한 코드 작성 패턴 학습
- 사용자 요청에 따른 슬라이드별 콘텐츠 구조화
- 제목, 본문, 요약 및 도식화 요소의 명확한 분리
- 발표 흐름에 적합한 목차와 슬라이드 구성 생성
- 일관된 레이아웃과 디자인 규칙 유지
- 오류 메시지를 기반으로 한 코드 분석 및 수정
- 로컬 추론을 통한 외부 LLM API 사용 비용 절감
1.3.2. 파인튜닝 후 기대 효과
| 항목 | 기존 LLM 호출 방식 | 파인튜닝 SLM 방식 |
|---|---|---|
| 문서 구조 일관성 | 프롬프트와 모델 응답에 따라 결과 편차 발생 | 학습된 출력 구조를 기반으로 일관성 향상 |
| PowerPoint 특화성 | 일반적인 문서 및 코드 생성 중심 | 슬라이드 계획, 코드 생성 및 오류 수정에 최적화 |
| 코드 안정성 | 문법 오류와 런타임 오류가 발생할 가능성 존재 | 검증된 코드 패턴 학습을 통해 실행 안정성 향상 |
| 레이아웃 품질 | 요소 배치와 디자인 구조가 불규칙할 수 있음 | 학습된 레이아웃 규칙을 기반으로 구조 안정화 |
| 오류 대응 | 오류 발생 시 전체 코드를 다시 생성하거나 외부 모델 호출 필요 | Repair 기능을 통해 오류 원인 분석 및 코드 수정 가능 |
| 비용 | API 호출량에 따라 운영 비용 증가 | 로컬 추론을 기반으로 반복 호출 비용 절감 |
| 반복 작업 처리 | 외부 API와 네트워크 환경에 의존 | 내부 모델을 활용한 안정적인 반복 처리 가능 |
| 배포 및 운영 | 기능별 프롬프트와 모델 호출 로직 관리 필요 | 하나의 모델로 세 가지 기능을 통합하여 운영 단순화 |
| 커스터마이징 | 프롬프트 수정 중심으로 동작 개선 | 데이터셋 추가 학습을 통한 기능 개선 가능 |
1.4. PowerPoint Agent 설계
PowerPoint Agent는 PowerPoint 제작 과정을 하나의 요청으로 처리하는 것이 아니라, 여러 단계의 Agent Skill로 분리하여 설계했습니다.
사용자가 주제, 목적, 대상, 문서 유형을 입력하면 Agent는 먼저 발표 목적을 분석하고, 그에 맞는 목차와 슬라이드 구성을 생성합니다. 이후 각 슬라이드별 핵심 메시지, 본문 내용, 시각화 요소, 레이아웃 방향을 구성하고, 최종적으로 PowerPoint 파일을 생성하는 구조입니다.
또한 생성된 PPT의 레이아웃이 깨지지 않도록 문서 구조를 검토하는 보정 Agent 기능도 함께 설계했습니다. 이를 통해 단순 텍스트 생성 결과를 그대로 PowerPoint에 넣는 방식이 아니라, 실제 슬라이드 문서에 적합한 구조로 변환하는 과정을 자동화했습니다.
1.4.1. Agent Skill 단계
| 단계 | 역할 |
|---|---|
| 1. 목적 분석 | 발표 목적, 대상, 문서 유형 분석 |
| 2. 목차 구성 | 전체 발표 흐름과 섹션 구조 생성 |
| 3. 슬라이드 설계 | 슬라이드별 핵심 메시지와 콘텐츠 방향 설정 |
| 4. 콘텐츠 생성 | 제목, 본문, 요약, 표, 도식화 요소 생성 |
| 5. 레이아웃 배치 | 슬라이드 요소의 위치와 시각적 위계 구성 |
| 6. 디자인 톤 정리 | 보고서형, 제안서형, 포트폴리오형 등 톤 적용 |
| 7. PPT 생성 | Python 기반 PowerPoint 파일 생성 |
| 8. 결과 검증 | 레이아웃 깨짐, 내용 누락, 구조 오류 확인 |
1.4.2. 주요 구현 내용
- 문서 유형별 PowerPoint 생성 Skill 설계
- 발표 목적과 대상에 따른 자동 목차 생성
- 슬라이드별 핵심 메시지 및 콘텐츠 흐름 자동 구성
- 제목, 본문, 표, 도식화 요소를 분리한 구조화 출력
- Python 기반 PPT 생성 코드 자동 생성
- 생성 결과의 레이아웃 및 구조 오류 검증
- 로컬 SLM과 Agent 워크플로우를 결합한 비용 최적화 구조 구현
1.5. 벤치마크 및 비교
PowerPoint Agent의 성능을 확인하기 위해 기존 LLM 기반 문서 생성 방식, 로컬 SLM 단독 생성 방식, Agent Skill 기반 생성 방식을 비교했습니다.
비교 기준은 PowerPoint 생성 품질에 중요한 항목인 슬라이드 구조 일관성, 발표 흐름, 레이아웃 안정성, 비용 효율성, 대량 생성 적합성을 중심으로 설정했습니다.
1.5.1. 방식별 비교
| 비교 항목 | 일반 LLM API 기반 생성 | 로컬 SLM 단독 생성 | PowerPoint Agent Skill 기반 생성 |
|---|---|---|---|
| 슬라이드 구조 일관성 | 중간 | 중간 | 높음 |
| 발표 흐름 구성 | 중간 | 중간 | 높음 |
| 레이아웃 안정성 | 낮음~중간 | 중간 | 높음 |
| 문서 유형별 대응 | 프롬프트 의존 | 제한적 대응 | 템플릿 및 Skill 기반 대응 |
| 생성 비용 | 높음 | 낮음 | 낮음 |
| 대량 생성 적합성 | 낮음 | 중간 | 높음 |
| 수정 및 확장성 | 프롬프트 수정 중심 | 모델 재학습 필요 | Skill 단위 확장 가능 |
| 로컬 환경 활용성 | 낮음 | 높음 | 높음 |
| 실무 문서 활용성 | 중간 | 중간 | 높음 |
1.5.2. 모델 및 시스템 비교
| 항목 | 외부 고성능 LLM | 파인튜닝 SLM | PowerPoint Agent |
|---|---|---|---|
| 주요 역할 | 범용 텍스트 생성 | PPT 구조화 출력 생성 | 전체 PPT 제작 워크플로우 제어 |
| 장점 | 높은 언어 이해 능력 | 낮은 비용, 빠른 로컬 추론 | 단계별 문서 생성 및 검증 가능 |
| 단점 | 비용 부담, API 의존 | 범용 추론 능력 제한 | 초기 Skill 설계 필요 |
| 적합한 작업 | 복잡한 기획, 고난도 문장 생성 | 반복적인 PPT 구조 생성 | 실제 PPT 문서 자동 생성 |
| 활용 방식 | 보조 생성 모델 | 메인 생성 모델 | 전체 자동화 시스템 |
1.5.3. 주요 성과
- PowerPoint 제작 과정을 Agent Skill 기반 단계형 워크플로우로 구조화
- 약 2만 개 규모의 Python 기반 PowerPoint 생성 데이터셋 구축
- Qwen Coder 계열 모델을 활용한 데이터셋 자동 생성 파이프라인 구현
- 4bit 양자화 모델을 활용하여 로컬 환경에서 대량 데이터 생성 수행
- PowerPoint 문서 작성 패턴에 특화된 SLM 파인튜닝 진행
- 외부 LLM API 의존도를 낮추고 로컬 추론 기반 비용 최적화 구조 구현
- 문서 유형별 슬라이드 구성, 발표 흐름, 레이아웃 배치 자동화
- 생성된 PPT의 구조 및 레이아웃을 검증하는 Agent 기능 설계
1.6. 최종 정리
본 프로젝트에서는 PowerPoint 제작 AI를 단순한 문서 생성 기능이 아니라, 데이터셋 구축, SLM 파인튜닝, Agent Skill 설계, 결과 검증까지 포함하는 문서 자동화 시스템으로 구현했습니다.
이를 통해 사용자는 복잡한 추가 지시 없이도 발표 목적과 문서 유형에 맞는 PowerPoint 초안을 생성할 수 있으며, 반복적인 내부 보고서, 제안서, 포트폴리오 제작 업무를 자동화할 수 있는 구조를 구축했습니다.