AWS 기술 블로그

미리캔버스 AI 프레젠테이션 생성 서비스: Amazon Bedrock으로 그려낸 미리캔버스의 미래

미리디는 디자인 생태계를 혁신하여 간편한 디자인 문화를 만들어가는 회사입니다. 미리디가 제공하고 있는 미리캔버스는 무료 디자인 템플릿으로 저작권 걱정 없이, 누구나 간편하게 사용할 수 있는 웹 기반의 디자인 툴 입니다. 디자인을 몰라도, 문구만 바꿔도, 이미지가 없어도 누구나 쉽게 나만의 디자인을 자유롭게 편집하고 완성할 수 있습니다.

이 블로그에서는 미리캔버스‘AI 프레젠테이션 생성’ 서비스를 소개합니다. 이 서비스는 사용자가 프레젠테이션의 주제, 슬라이드 수, 그리고 원하는 디자인 템플릿을 선택하면 Claude 3 Sonnet 모델을 통해 해당 주제에 맞는 내용을 생성하고, 선택한 템플릿에 자동으로 입력하여 즉시 발표 가능한 수준의 고품질 프레젠테이션을 제공합니다.

미리캔버스의 사용자들은 일반적으로 자신의 메시지를 효과적으로 전달할 수 있는 프레젠테이션 디자인 템플릿을 먼저 선택한 후, 해당 디자인에 맞춰 내용을 채워넣습니다. 그러나 이 내용 작성 과정은 많은 시간과 노력을 요구하는 어려운 작업입니다. 사용자들의 이러한 어려움을 해소하고 프레젠테이션 제작 시간을 단축하기 위해, 미리캔버스는 ‘AI 프레젠테이션 생성’ 서비스를 개발하게 되었습니다.

서비스 기능 살펴보기

AI 프레젠테이션 자동 생성 기능의 전체적인 작동 과정을 살펴보겠습니다. 이를 통해 각 단계가 어떻게 연결되어 최종 프레젠테이션 결과물을 만들어내는지 이해할 수 있을 것입니다.

1. 개요 작성

사용자가 원하는 프레젠테이션의 주제를 입력하면, 자동으로 그에 맞는 개요를 생성합니다.

이렇게 생성된 개요의 내용과 순서는 사용자의 필요에 따라 자유롭게 수정할 수 있습니다. 이를 통해 사용자는 AI가 제안한 구조를 기반으로 하되, 자신이 의도에 맞게 프레젠테이션의 흐름을 최적화할 수 있습니다.

2. 레이아웃 결정

이전 단계에서 자동으로 생성된 각 개요 항목에 가장 적합한 페이지 레이아웃이 추천됩니다. 이 과정에서 내용의 특성과 템플릿의 디자인이 조화롭게 어우러지도록 고려됩니다. 사용자는 추천된 템플릿 중에서 원하는 템플릿을 선택합니다.

3. 내용 생성

생성된 개요와 선택된 템플릿의 레이아웃을 기반으로, 프레젠테이션에 포함될 구체적인 내용이 생성됩니다. 필요에 따라 텍스트 뿐만 아니라 관련 이미지도 함께 포함됩니다.

4. 결과

AI가 생성한 프레젠테이션 초안이 완성되면, 사용자는 이를 검토하고 필요에 따라 세부 내용을 수정할 수 있습니다. 텍스트 편집, 이미지 교체, 레이아웃 조정 등 다양한 편집 작업을 통해 최종 프레젠테이션을 완성합니다. 특히 이미지의 경우, AI가 제안한 이미지를 그대로 사용하거나 미리캔버스에서 제공하는 다른 이미지로 대체할 수 있으며, 사용자가 직접 파일을 업로드하여 커스터마이즈 할 수도 있습니다. 이러한 과정을 통해 사용자는 AI가 생성한 기본 구조를 토대로 자신만의 독특하고 효과적인 프레젠테이션을 완성할 수 있습니다.

솔루션 요약 및 구성 요소 설명

아키텍처

첨부된 이미지는 ‘AI 프레젠테이션 생성’ 서비스의 구조와 데이터 데이터 흐름을 도식화한 것입니다.

이제 전체 흐름을 단계별로 살펴보겠습니다.

[sync 동작]

1. 사용자 요청

Amazon ECS 서버를 통해 사용자의 API 요청을 받습니다.

2. 데이터베이스에 요청 데이터 저장

Amazon RDS에 사용자의 요청 데이터를 저장합니다.

3. 텍스트 생성을 위한 Amazon Bedrock API 호출

Amazon Bedrock API를 통해 Claude 3 Sonnet에게 프레젠테이션 내용 생성을 요청합니다.

4. 사용자 응답 전송

요청이 정상적으로 접수되었음을 사용자에게 API 응답으로 반환합니다.

5. Polling API

사용자는 Polling API를 통해 주기적으로 외부 API 처리 완료 여부를 확인합니다. 아래 async 동작이 완료된 이후 요청된 건에 대해서는 사용자에게 최종 응답 결과를 전달합니다.

[async 동작]

위 sync 동작 중 3. 텍스트 생성을 위한 Amazon Bedrock API 호출 이후 아래 순서대로 비동기적으로 동작합니다.

1. Amazon Bedrock API 응답

Claude 3 Sonnet으로부터 텍스트 생성 요청에 대한 응답을 받습니다.

2. 이미지 생성 요청 (optional)

필요시 생성된 텍스트 내 이미지에 대한 설명을 바탕으로 사내 AI 이미지 서버에 이미지 생성 요청 후 응답을 받습니다.

3. 데이터베이스에 외부 API 응답 데이터 업데이트

Amazon RDS에 저장된 요청 데이터를 찾아 그에 해당하는 외부 API(텍스트, 이미지 생성) 응답 데이터를 업데이트 합니다.

솔루션 구현 상세

모델 선정 이유: Anthropic Claude 3 Sonnet의 선택

AI 프레젠테이션 생성 툴 개발 초기, 미리캔버스 팀은 세 가지 주요 LLM 모델을 고려했습니다:

  • Anthropic Claude 3 Sonnet
  • OpenAI GPT-4-turbo
  • Google Gemini 1.5 Pro

각 모델의 기능과 성능을 철저히 평가한 결과, Claude 3 Sonnet을 프로덕션에 투입하기로 결정했습니다. 이 선택은 몇가지 기술적 우수성과 우리의 사용 사례에 대한 적합성을 바탕으로 이루어졌습니다.

[모델 평가 결과]

1. Anthropic Claude 3 Sonnet:

Claude 3 Sonnet은 자연어 이해와 처리 능력에서 뛰어난 성능을 보여줍니다. 사용자의 입력을 정확히 해석하고 적절한 내용을 생성하는데 특히 강점을 가집니다. 문장 구성의 일관성과 문체적 정확성이 뛰어나 사용자가 원하는 스타일과 톤에 맞춰 고도로 맞춤화된 프레젠테이션을 제작할 수 있게 합니다. 또한, 주어진 프롬프트에 대해 생각을 확장하고, 복잡한 사용자 요구사항을 해결할 수 있는 독특한 능력을 갖추고 있습니다. 이는 프레젠테이션의 목차와 내용을 자동으로 생성하는 과정에서 중요한 역할을 하며, 사용자의 애매모호한 요청을 명확한 결과로 전환할 수 있게 합니다. 안전성과 윤리적 사용을 중시하는 모델 설계로 인해 더 신뢰할 수 있는 결과물을 생성합니다.

2. OpenAI GPT-4-turbo:

GPT-4는 광범위한 지식 베이스와 함께 강력한 언어 생성 능력을 제공합니다. 이 모델은 특히 복잡한 주제에 대한 통찰을 제공하고, 이를 사용자가 이해하기 쉬운 형식으로 변환하는 능력이 탁월합니다. 그러나 때로는 필요 이상으로 방대한 정보를 생성하거나 과도한 창의성으로 인해 주어진 지침을 벗어나는 내용을 생성하는 경향이 있습니다.

3. Google Gemini 1.5 Pro:

Gemini 1.5 Pro는 데이터 처리와 분석에 강점을 보이며, 특히 대량의 정보를 효과적으로 처리합니다. 이 모델은 구조화된 데이터와의 상호작용에 최적화되어 있지만, 텍스트 중심의 문서 작성에서는 Claude 3 Sonnet만큼의 유연성을 보이지 않습니다.

이 세 모델 중, Claude 3 Sonnet을 선택한 결정적인 이유는 높은 수준의 언어 이해력과 사용자 의도 반영 능력입니다. 이 모델은 입력 데이터를 바탕으로 사용자의 의도를 정확히 파악하고, 이를 충실히 반영한 콘텐츠를 생성합니다. AI 프레젠테이션 툴에 필요한 정밀한 텍스트 작성, 일관된 스타일 유지, 복잡한 사용자 요구 해석과 반영 측면에서 Claude 3 Sonnet의 성능이 우수하다고 판단했습니다.

이러한 기술적 이점을 바탕으로, Claude 3 Sonnet은 사용자 경험 최적화와 고품질 프레젠테이션 자동 생성 서비스 제공에 핵심적인 역할을 하고 있습니다. 이 선택은 프로젝트의 성공을 이끄는 주요한 요인이 되었으며, 향후 서비스 개선과 확장의 기반이 될 것입니다.

Spring 애플리케이션과 Amazon Bedrock 연동하기

Amazon Bedrock은 Amazon과 Anthropic, Cohere 등 제3자 모델 제공업체의 기본 모델을 API를 통해 접근할 수 있게 해주는 완전 관리형 서비스입니다. Amazon Bedrock API에 직접 접근하여 간단한 학습과 솔루션 개발을 할 수 있습니다. 하지만 생성형 AI애플리케이션 개발은 단순히 API를 통해 대규모 언어모델(LLM)을 사용하는 것 이상입니다. 순차적 워크플로우 조정(예: LLM 응답을 기반으로 다른 LLM 호출), LLM에 추가 컨텍스트를 제공하기 위한 데이터 소스(텍스트, PDF, 링크 등) 로딩, 대화형/챗봇/QA 솔루션을 위한 히스토리 컨텍스트 유지 등 솔루션의 다른 부분들도 고려해야 합니다. 이러한 기능들을 쉽게 구현하기 위해 LangChain, Spring AI 등의 프레임워크를 사용할 수 있습니다.

미리디에서는 Spring AI에서 Claude 3를 아직 지원하지 않았던 시기(Spring API 0.8.1 기준)에 프로젝트를 시작하였기 때문에 Spring Boot 프로젝트에 Amazon Bedrock 클라이언트 관련 클래스를 직접 구성하여 사용했습니다.

1. Spring AI 없이 Spring Boot 프로젝트에서 Claude 3 사용하기

1) Anthropic Claude Messages API 스펙에 맞춘 Java 클래스 구현

Amazon Bedrock 문서에서 제공하는 Anthropic Claude Messages API 의 스펙에 맞게 클래스를 구성하였습니다. 아래는 Claude 3 Sonnet(anthropic.claude-3-sonnet-20240229-v1:0)기준으로 구성한 java 클래스 예제입니다.

Request.java

public class Request {
    private String anthropicVersion;
    private Integer maxTokens;
    private List<Message> messages;
    private String system;
    private Float temperature;
    private Float topP;
    private Float topK;
    private List<String> stopSequences;

    ...
}

Response.java

public class Response {
    private String id;
    private String model;
    private String type;
    private String role;
    private List<Content> content;
    private StopReason stopReason;
    private String stopSequence;
    private Usage usage;

		...
}

2) BedrockRuntimeAsyncClient를 이용한 Amazon Bedrock 연동

AWS SDK for Java에서 제공하는 bedrockruntime 패키지를 활용하여 Amazon Bedrock과의 연동을 구현하였습니다. 아래는 BedrockRuntimeAsyncClient를 사용해 Claude 3 모델에 비동기 요청을 보내는 Java 코드 예시입니다.

InvokeModelRequest request = InvokeModelRequest.builder()
        .body(SdkBytes.fromUtf8String(MAPPER.writeValueAsString(request)))
        .modelId(model)
        .contentType(MediaType.APPLICATION_JSON_VALUE)
        .accept(MediaType.APPLICATION_JSON_VALUE)
        .build();
        
CompletableFuture<InvokeModelResponse> future = client.invokeModel(request);

2. 커스텀 SdkAsyncHttpClient 클래스 구현을 통한 타임아웃 설정 최적화

AWS SDK에서 기본 제공하는 클라이언트를 사용해도 기능적으로는 문제가 없었습니다. 그러나 기본 타임 아웃 설정이 우리의 서비스의 요구사항에 비해 짧다는 점이 확인되었습니다. 이 문제를 해결하기 위해 SdkAsyncHttpClient 클래스의 구현체를 커스터마이즈하여 타임아웃 설정을 최적화했습니다. 아래 코드는 BedrockRuntimeAsyncClient의 SdkAsyncHttpClient를 설정하는 Java 코드 예제입니다.

BedrockRuntimeAsyncClient client = BedrockRuntimeAsyncClient.builder()
            .httpClient(getAsyncHttpClient())
            ...
            .build();

private SdkAsyncHttpClient getAsyncHttpClient() {
    return NettyNioAsyncHttpClient.builder()
            .maxConcurrency(MAX_CONCURRENCY)
            .readTimeout(READ_TIMEOUT)
            .writeTimeout(WRITE_TIMEOUT)

						...
						
            .build();
}

현재는 Spring AI에서 Claude 3 모델을 공식 지원하고 있어, 이를 활용하면 복잡한 설정 없이도 Spring 애플리케이션과 Amazon Bedrock과의 연동을 더욱 간편하게 구현할 수 있습니다.

프롬프트 엔지니어링 과정

미리캔버스의 AI 프레젠테이션 생성 서비스는 Amazon Bedrock에서 Claude 3 Sonnet 모델을 활용하여 프레젠테이션 제작 과정을 자동화합니다. 이 서비스는 프레젠테이션의 목차 생성부터 시작하여 레이아웃 선택, 그리고 각 페이지별 텍스트 및 이미지 생성에 이르는 전체 과정을 포괄합니다.

전체 프로세스는 다음 세가지 주요 단계로 구성됩니다:

  1. 목차 생성
  2. 레이아웃 선택
  3. 각 페이지 별 텍스트 및 이미지 프롬프트 생성

이제 각 단계에서 사용되는 프롬프트와 그 역할에 대해 자세히 살펴보겠습니다.

1. 목차 생성

Claude 3 Sonnet 모델은 사용자가 입력한 주제와 페이지 수를 기반으로 프레젠테이션의 목차를 생성합니다. 이 과정에서 모델은 먼저 주제를 발표 형식에 적합하게 정제한 후 목차를 작성합니다. 사용자들이 종종 모호한 요구사항을 입력하는 경우가 많기 때문에, Chain of Thought(CoT) 방식으로 주제를 명확히 하고 체계적인 목차를 생성하도록 설계되었습니다.

다음은 주어진 주제와 페이지 수를 바탕으로 목차를 생성하는 프롬프트입니다.

[목차 생성 프롬프트]

Demonstrate excellent logic and intelligence with a grade of A+ or better in all areas. You need to create an outline for your PowerPoint slides. Creating a real outline is very important, so follow these steps.
Find all the details about the PowerPoint you need to create. Follow the '[STEPS]' below to create your answer.

[STEPS]
1. Write an appropriate presentation topic (or title) using the `TopicInfo`.
- `TopicInfo` is include various contents such as topics, tables of contents, or any sentences or words. Based on this, write an appropriate topic.
- Clearly identify the core message of the presentation.
- The topic should be expressed concisely and clearly.

2. Create a PowerPoint slide outline using **the "topic" created in STEP 1**.
- The number of outline must be equal to the 'Number of Slides'
- You must clearly specify the page title and detailed content for each section.
- Each section title should be specific and clear. The page title must reflect the main content of the section.
- Detailed content should be included to demonstrate thorough preparation for the presentation.

## TopicInfo
- topic: {{topic}}
- Number of Slides: {{number}}

[Output]

{
  "topic": "완벽한 세계 여행을 위한 가이드",
  "outline": {
    "1": "프레젠테이션 제목",
    "2": "목차",
    "3": {
      "title": "여행 계획 수립",
      "contentList": [
        "여행 목적 설정",
        "예산 및 일정 계획",
        "필수 준비물 체크리스트"
      ]
    },
    "4": {
      "title": "여행지 선택",
      "contentList": [
        "인기 여행지 소개",
        "현지 문화 및 명소 정보",
        "교통 및 숙박 정보"
      ]
    },
    "5": {
      "title": "안전한 여행",
      "contentList": [
        "여행 보험 가입",
        "응급 상황 대처법",
        "현지 법규 준수"
      ]
    },
    "6": {
      "title": "여행 패킹",
      "contentList": [
        "가벼운 짐 싸기 팁",
        "필수 여행 용품",
        "기내 반입 수하물 규정"
      ]
    },
    "7": {
      "title": "여행 중 에티켓",
      "contentList": [
        "현지 문화 존중",
        "친절한 태도 유지",
        "환경 보호 실천"
      ]
    },
    "8": {
      "title": "결론",
      "contentList": [
        "여행 경험 공유",
        "향후 계획 수립",
        "질의응답"
      ]
    }
  }
}

2. 레이아웃 선택

미리캔버스는 AI 프레젠테이션 자동 생성에 활용할 수 있는 다양한 템플릿을 보유하고 있습니다. 이를 효과적으로 활용하기 위해, 각 템플릿의 특성을 텍스트로 정의하는 사전 작업을 수행했습니다. 각 페이지의 목적, 텍스트 박스 수, 이미지 프레임 등 템플릿의 세부 구조를 명확히 기술하였습니다. 이를 바탕으로 Claude 3 Sonnet 모델은 앞서 생성된 목차에 가장 적합한 레이아웃을 이 템플릿 라이브러리에서 선별합니다.

Figure 1 개요를 바탕으로 각 페이지 별 어울리는 레이아웃 선택

[각 템플릿의 특성을 텍스트로 정의한 템플릿 세트]

[1]
<Purpose of the page>
- This page is designed to be the title slide of the presentation, introducing the main topic or headline.
<Purpose, number of text boxes, and text length of the content>
- 1-1: To provide the primary title of the presentation. | 1 text box | 30 letters maximum
- 1-4: For information such as the presenting team, department, or individual names, and possibly the date or event name. | 1 text box | 15 letters maximum.
- 1-3: For information such as the presenting team, department, or individual names, and possibly the date or event name.| 1 text box | 15 letters maximum.
<Frames>
- There are no frames designated for images on this slide, which indicates that the slide is text-focused.

[2]
<Purpose of the page>
- This page is designed for a table of contents or an agenda slide, listing out the 5 main points or 5 topics to be covered in the presentation. This page is only used in table of contents slide, not in other slides.
<Purpose, number of text boxes, and text length of the content>
- 2-16: For the title of the slide, which in this case is likely "Contents" or "Agenda" | 1 text box | 8 letters maximum
- 2-11: For the title of each topic or main points. | 1 text box | 20 letters maximum
- 2-12: For the title of each topic or main points. | 1 text box | 20 letters maximum
- 2-13: For the title of each topic or main points. | 1 text box | 20 letters maximum
- 2-14: For the title of each topic or main points. | 1 text box | 20 letters maximum
- 2-15: For the title of each topic or main points. | 1 text box | 20 letters maximum
<Frames>
- There are no frames designated for images on this slide, which indicates that the slide is text-focused.

[3]
<Purpose of the page>
- This page is designed to be a detailed content slide within a presentation, likely used to provide an in-depth explanation of a topic, including supporting details or arguments. This page has 1 Main Title text box with 1 Detailed Explanation text box. Also there is 1 Hightlight text box for Detailed Explanation text box.
<Purpose, number of text boxes, and text length of the content>
- 3-2: For the title of the section or the specific topic being introduced. | 1 text box | 20 letters maximum
- 3-4: To provide an in-depth description or detailed information about the Main topic. | 1 text box | 500 letters minimum and 550 letters maximum
- 3-5: To emphasize a key point or a call-to-action related to the slide's content | 1 text box | 25 letters maximum
<Frames>
- 3-1: To explain about Detailed Explantion for the Main Title Text Box's main message or theme more easily. | 1 image

...

이를 바탕으로 Claude 3 Sonnet 모델은 앞서 생성된 목차에 가장 적합한 레이아웃을 이 템플릿 라이브러리에서 선별합니다.

[레이아웃 선택 프롬프트]

As a skilled presentation designer, your task is to select the most suitable slide layout based on the provided information. Follow these guidelines:

1. Review the "Topic", "Number of Slides" and "Outlines" provided.
- Outlines include the text to be written before slide design begins.
- The format is typically a table of contents.
- It includes the page title and subtitles for each slide's content.

2. Check the slide layout information.
- `## Layout`: Describes the types of layouts available for the slides.
- Provides details on the purpose of the slide.
- Indicates how many text boxes are used and the intended content for each box.

3. Select the layout number that best suits the outline's content.
- Match the provided outline to the most appropriate layout based on the "Number of Slides" and content.
- Choose only from the provided slide layout options, without considering other layouts.

## TopicInfo
- Topic: {{topic}}
- Number of Slides" {{number}}
- Outlines: {{outline}}

## Layout:
{{layuout}}

[Output]

{"1":1,"2":4,"3":5,"4":11,"5":8,"6":13,"7":16,"8":18}

3. 각 페이지 별 텍스트 및 이미지 프롬프트 생성

최종 단계에서는 앞서 선택된 레이아웃에 맞춰 각 슬라이드의 텍스트와 이미지를 생성합니다. Claude 3 Sonnet 모델은 주어진 정보를 바탕으로 완성도 높은 프레젠테이션 자료를 자동으로 구성합니다. 이 과정은 다음과 같이 세부적으로 진행됩니다:

1) 사용 언어 확인

먼저, 사용자가 입력한 프레젠테이션 주제와 개요를 분석하여 사용된 언어를 식별합니다. 예를 들어, 입력된 내용이 한국어인 경우 “Language: Korean”으로 출력됩니다. 이는 LLM이 콘텐츠 작성 방향을 설정하고, 어떤 정보를 중점적으로 다룰지 결정하는 데 중요한 요소로 작용합니다.

2) 슬라이드 텍스트 생성

각 슬라이드의 텍스트는 주제, 소주제, 그리고 선택된 레이아웃 정보를 기반으로 작성됩니다. 레이아웃마다 슬라이드의 목적, 사용 가능한 텍스트 박스의 개수, 각 텍스트 박스의 글자 수 제한 등이 명시되어 있습니다. 이러한 제약 조건을 엄격히 준수하면서, 각 페이지에 적합한 텍스트를 생성합니다.

3) 이미지 설명 생성

레이아웃에 이미지 프레임이 포함된 경우, 해당 프레임에 들어갈 이미지를 설명하는 텍스트를 생성합니다. 이 설명은 슬라이드의 주제와 레이아웃 내 이미지의 위치를 고려하여, 적절한 시각적 요소를 표현할 수 있도록 작성됩니다. 생성된 텍스트 설명은 후속 단계에서 이미지 생성 모델을 통해 실제 이미지로 변환됩니다.

아래는 “여행 목적지 선택하기”란 주제로 4개의 이미지 프레임에 대해 생성된 이미지 설명입니다.

"IMAGE": {
  "6-6": "Historical city with ancient architecture",
  "6-11": "Beautiful national park landscape",
  "6-16": "Person engaging in adventure sports",
  "6-21": "Modern cityscape with shopping and dining"
}

이제 각 설명을 이미지 생성 모델의 입력 프롬프트로 사용해 이미지를 생성한 후, 생성된 이미지를 해당 인덱스 번호의 프레임에 배치합니다

[내용&이미지 설명 생성 프롬프트]

You will be provided with two pieces of information: `TOPIC INFO`, `LAYOUT INFO`

[SETPS]
1. Check the given TOPIC INFO.
- `TOPIC INFO` includes the presentation topic, number of slides and outline.
- Check the language in which topic is written, and output the language as follows.

2. Check the given LAYOUT INFO.
- `LAYOUT INFO` includes the content and structure of each slide.
- The content and structure of each slide include page number, title and main content description, slide layout, purpose, the number and type of text boxes (e.g., header, keywords, description), and the number of frames.
- The user can choose the most suitable slide layout for each page's information.
- Complete the text and images of each slide according to the <page number, title, and main content description>.

4. Enter the topic text into all text boxes included in each slide.
- Check the unique index of the text box.
- Write the content of each text box in the <purpose, number of text boxes, text length> section.
  
5. Propose and fill in photos or images related to the content of the presentation page into the frame.
- Check the unique index of the frame that needs to be filled with a photo or image.
- Image selection guidelines: Select any image directly related to the topic.

## TOPIC INFO:
- Topic: {{topic}}
- Number of Slides" {{number}}
- Outlines: {{outline}}

## LAYOUT INFO:
{{layout}}

[Output]

{
  "1page": {
    "TEXT": {
      "1-3": "완벽한 세계 여행",
      "1-8": "당신의 꿈을 현실로 만드는 가이드"
    },
    "IMAGE": "NO IMAGE"
  },
  "2page": {
    "TEXT": {
      "4-1": "목차",
      "4-5": "여행 계획",
      "4-9": "목적지",
      "4-13": "예산 관리",
      "4-17": "교통수단",
      "4-21": "숙박 시설",
      "4-25": "안전과 건강",
      "4-6": "효과적인 방법",
      "4-10": "스타일별 선택",
      "4-14": "절약 팁 제공",
      "4-18": "다양한 옵션",
      "4-22": "옵션과 주의점",
      "4-26": "대비와 대처법"
    },
    "IMAGE": "NO IMAGE"
  },
  "3page": {
    "TEXT": {
      "5-2": "여행 계획의 중요성",
      "5-8": "시간 절약",
      "5-10": "비용 절감",
      "5-12": "스트레스 감소",
      "5-13": "체계적인 계획으로 현지에서의 시간을 최대한 활용할 수 있습니다. 주요 관광지와 활동을 미리 정해 효율적으로 여행할 수 있습니다.",
      "5-14": "사전 예약과 할인 정보 확인으로 예산을 효과적으로 관리할 수 있습니다. 특히 성수기에는 미리 계획하면 큰 비용 절감 효과를 볼 수 있습니다.",
      "5-15": "여행 중 발생할 수 있는 문제들을 미리 예측하고 대비할 수 있어 불필요한 걱정을 줄일 수 있습니다. 이는 더 즐거운 여행 경험으로 이어집니다.",
      "5-19": "철저한 계획은 즐겁고 안전한 여행의 기본입니다."
    },
    "IMAGE": "NO IMAGE"
  },
  "4page": {
    "TEXT": {
      "6-2": "목적지 선택하기",
      "6-9": "문화 탐험: 역사적 도시나 유적지 방문으로 깊이 있는 경험",
      "6-14": "자연 체험: 국립공원이나 해변에서 아름다운 풍경 감상",
      "6-19": "모험 여행: 트레킹, 스키, 서핑 등 액티비티 중심의 여행",
      "6-24": "도시 여행: 현대적인 도시에서 쇼핑, 미식, 예술 즐기기"
    },
    "IMAGE": {
      "6-6": "Historical city with ancient architecture",
      "6-11": "Beautiful national park landscape",
      "6-16": "Person engaging in adventure sports",
      "6-21": "Modern cityscape with shopping and dining"
    }
  },
  "5page": {
    "TEXT": {
      "10-1": "예산 관리",
      "10-6": "1. 총 예산 설정: 항공권, 숙박, 식비, 교통비, 관광비, 쇼핑비 등 카테고리별로 예산을 나눠 책정합니다. 여행 기간과 목적지에 따라 적절한 금액을 설정하세요. 예상치 못한 지출을 위해 10-15%의 여유 자금을 추가로 확보하는 것이 좋습니다.",
      "10-8": "2. 비용 절감 팁: 항공권은 성수기를 피해 구매하고, 호텔 대신 에어비앤비나 호스텔을 이용해보세요. 현지 대중교통을 활용하고, 프리워킹 투어나 박물관 무료 입장 날짜를 확인하세요. 식비 절약을 위해 현지 시장에서 장을 보고 간단한 요리를 해 먹는 것도 좋은 방법입니다.",
      "10-7": "철저한 예산 계획과 현명한 소비로 더 풍성한 여행을!"
    },
    "IMAGE": "NO IMAGE"
}

마무리

지금까지 Amazon Bedrock과 Claude 3 Sonnet 모델을 활용하여, 사용자의 아이디어를 프레젠테이션 내용 생성부터 디자인까지 한 번에 구현하는 AI 프레젠테이션 생성 서비스 구현 과정을 소개해 드렸습니다. 현재 AI 프레젠테이션을 사용하는 유저 중 10%는 매주 다시 방문하여 AI 프레젠테이션으로 새로운 프레젠테이션을 만들고 있습니다. 더불어 약 3,500명의 유저들이 매주 AI 프레젠테이션 생성 기능을 사용하고 있습니다.

그리고 미리캔버스에서 자연어로 원하는 디자인 템플릿을 추천 받는 챗봇 서비스를 소개하는 아래 블로그도 읽어 보시는 것을 권장 드립니다.

미리디 알파 스쿼드는 현재 미리캔버스의 모든 프레젠테이션 템플릿을 대상으로 이 서비스를 확장하고 있습니다. 더불어, 보다 신뢰할 수 있는 프레젠테이션 내용 생성을 위해 구글 검색 엔진을 도입하여 최신 정보를 정확하게 반영하고자 노력하고 있습니다. 이를 통해 사용자들에게 더욱 풍부하고 정확한 프레젠테이션 제작 경험을 제공할 수 있을 것으로 기대합니다.

윤진

윤진

윤진 소프트웨어 엔지니어는 미리디 백엔드 챕터 소속으로 미리캔버스 유저들의 검색, 탐색 경험 개선을 위한 시스템을 개발하고 있습니다.

박현서

박현서

박현서 프로덕트 매니저는 미리디 PM 챕터 소속으로 미리캔버스의 유저들이 겪고 있는 문제들을 발굴하고 AI를 통해 해결하는 역할을 하고 있습니다.

김은성

김은성

김은성 프롬프트 엔지니어는 미리디 PPQ 챕터 소속으로 미리캔버스 유저들이 AI를 편리하게 사용할 수 있게끔 프롬프트를 개발하고 개선하고 있습니다.

Hyeryeong Joo

Hyeryeong Joo

주혜령 솔루션즈 아키텍트는 대규모 엔터프라이즈 시스템 개발과 운영 경험을 바탕으로, 현재는 ISV 고객들이 AWS 클라우드에 안정적이고 효율적인 아키텍처를 구성할 수 있게 돕고 있습니다.