[00:00]
오늘 여러분께 보여드릴 것은
[00:01]
AI 에이전트 하나로 구축한 AI 마케팅 팀입니다.
[00:03]
보시다시피 이 에이전트는
[00:05]
6가지 도구를 사용할 수 있습니다.
[00:07]
동영상, LinkedIn 게시물,
[00:09]
블로그 게시물 작성, 이미지 생성,
[00:11]
이미지 편집, 그리고
[00:12]
이미지 데이터베이스 검색이 가능합니다.
[00:14]
왼쪽에서 오른쪽으로
[00:16]
워크플로우가 이렇게 구성되어 있습니다.
[00:17]
동영상 제작, LinkedIn 게시물,
[00:19]
블로그 게시물, 이미지 생성,
[00:21]
이미지 편집,
[00:23]
그리고 이미지 데이터베이스 검색입니다.
[00:24]
이것을 구현하기 위해서는
[00:26]
필요한 리소스들이 많습니다.
[00:27]
다양한 템플릿들과
[00:29]
여러 워크플로우들이 필요한데,
[00:30]
이 모든 것을 무료로 다운로드하고
[00:31]
설정하는 방법을 영상 후반부에 보여드리겠습니다.
[00:33]
하지만 먼저 라이브 데모를 보여드리고,
[00:34]
그 다음 구축 과정을 설명하겠습니다.
[00:36]
물론 가격 정책과
[00:38]
전체 시스템 운영 비용도 다룰 예정입니다.
[00:39]
보시다시피
[00:41]
우리는 에이전트와
[00:42]
텔레그램을 통해 소통하며,
[00:44]
음성이나 텍스트로 입력할 수 있습니다.
[00:46]
이것을 옆으로 옮기고
[00:47]
텔레그램을 열어보겠습니다.
[00:49]
보시다시피 여기 이전에 만든 영상이 있는데,
[00:50]
이번에는 이미지를 만들어보겠습니다.
[00:52]
고양이 사료 전단지를 만들어보죠.
[00:53]
고양이 사료 플래시 세일 전단지를 만들어주세요.
[00:56]
자, 방금 요청을 보냈습니다.
[00:59]
보시다시피 음성이 텍스트로 변환되고,
[01:00]
마케팅 팀 에이전트가 처리하여
[01:02]
이미지 생성 도구를 사용할 것입니다.
[01:03]
지금 워크플로우가 처리 중이고,
[01:05]
잠시 후에 이미지가 완성되면
[01:07]
다시 확인해보겠습니다.
[01:08]
좋습니다, 방금 완성된 것 같네요.
[01:10]
보시다시피 메시지가 도착했습니다.
[01:11]
고양이 사료 플래시 세일 전단지가 완성되었네요.
[01:14]
꽤 멋진 고양이 이미지가 나왔습니다.
[01:16]
이제 이것을 편집해서
[01:18]
더 현실감 있게 만들어보죠.
[01:19]
편집을 요청하기 전에
[01:20]
먼저 로그를 확인해보겠습니다.
[01:22]
로그를 보면
[01:23]
새로운 이미지가 생성되었고
[01:26]
cat food/sale이라는 이름의 이미지입니다.
[01:28]
여기 프롬프트와
[01:29]
클릭 가능한 링크가 있습니다.
[01:30]
이 이미지는 우리의 구글 드라이브에
[01:32]
저장되어 있습니다.
[01:34]
이제 이것을 더 현실감 있게 만들어보죠.
[01:36]
이미지를 편집해서
[01:38]
더 현실적으로 만들어주세요.
[01:40]
에이전트가 이미지 데이터베이스에서
[01:42]
원본 이미지를 가져와서 편집할 것입니다.
[01:43]
편집이 완료되면 다시 확인해보겠습니다.
[01:45]
편집이 완료되었네요.
[01:48]
참고로 말씀드리면,
[01:49]
이미지 생성과 편집은
[01:50]
각각 약 1분 정도 소요됩니다.
[01:53]
결과를 보시죠.
[01:54]
보시다시피 더 현실감 있는 전단지가 완성되었습니다.
[01:56]
사료를 먹고 있는 주황색 고양이가
[01:58]
매우 실제같이 표현되었고, 플래시 세일 문구도 있네요.
[01:59]
마케팅 팀 로그에서
[02:01]
새로운 이미지를 확인할 수 있습니다.
[02:02]
편집 유형으로 기록되어 있고,
[02:04]
프롬프트와 함께
[02:06]
구글 드라이브 링크도 있습니다.
[02:08]
새로운 이미지와 함께요. 자, 이제
[02:10]
콘텐츠 생성 기능 중 하나를 시도해볼까요?
[02:12]
수면이 생산성에 미치는 영향에 대한
[02:14]
블로그 포스트를 작성해주세요
[02:16]
좋아요, 실행해보겠습니다.
[02:18]
이 워크플로우는 제가 며칠 전에 만든
[02:20]
전체 워크플로우 영상에서 영감을 받았어요.
[02:22]
위쪽에 링크를 걸어두었습니다.
[02:23]
기본적으로 LinkedIn 콘텐츠를 만드는 것이었는데
[02:26]
당연히 리서치도 하고,
[02:27]
포스트를 작성하고,
[02:29]
이미지 프롬프트를 만들고
[02:30]
그 이미지를 가져오죠.
[02:32]
로그를 기록하고 콘텐츠를 전송하는
[02:33]
모든 작업을 수행합니다.
[02:34]
전체 과정을 보고 싶으시다면
[02:36]
위의 영상을 확인해주세요. 자, 에이전트가
[02:38]
작업을 완료했네요.
[02:39]
텔레그램을 클릭해서 결과를 확인해보겠습니다.
[02:40]
여기 그래픽이 있네요. '충분한 휴식을 취한 마음이
[02:42]
더 많은 일을 해낸다'라고 되어있고
[02:44]
위쪽 화살표 등이 보이시죠.
[02:46]
그리고 실제 블로그 포스트도 있습니다.
[02:48]
하단에는 참고 자료도 포함되어 있고요.
[02:49]
로그를 클릭하면 실제 블로그 포스트를
[02:51]
확인할 수 있습니다.
[02:53]
보시다시피 앞서 같은 예시로
[02:55]
테스트했었는데, 이게 그때의 이미지예요.
[02:56]
이건 좀 다른 스타일의 그래픽으로
[02:58]
통계 자료가 더 많이 포함되어 있죠.
[02:59]
방금 만든 이미지는 이렇게 생겼고
[03:01]
둘 다 블로그에 올리기에
[03:03]
매우 훌륭한 그래픽입니다.
[03:04]
자신있게 사용할 수 있을 정도로요.
[03:06]
보시다시피 이게 가장 최근 실행 결과인데
[03:08]
제목이 있고,
[03:09]
타입은 포스트로 되어있으며
[03:11]
실제 포스트 내용이 여기 있습니다.
[03:13]
마지막으로 영상을 한번 빠르게 만들어볼게요.
[03:15]
비버가 집을 짓는 영상을
[03:17]
만들어달라고 해보겠습니다.
[03:19]
실행해보고 어떻게 되는지 보죠.
[03:21]
실행되는 동안
[03:22]
설명을 좀 드리자면
[03:24]
지금 이렇게 생긴
[03:25]
비디오 워크플로우를 호출하고 있는데요
[03:27]
이 실행 과정은 보통
[03:30]
2-3분, 때로는 더 걸릴 수 있습니다.
[03:32]
대기 시간이 있는 이유는
[03:33]
이미지 생성을 기다려야 하고
[03:34]
영상도 생성되어야 하기 때문입니다.
[03:36]
실제로 일어나는 일은
[03:37]
여기 마케팅 에이전트가
[03:40]
보시다시피
[03:41]
대기하다가 시간 초과가 되어
[03:44]
여기서 응답을 받지 못하게 됩니다.
[03:45]
그래서 제가 한 방법은
[03:47]
이 워크플로우 형태로 응답을 받는 거예요.
[03:49]
여기서 영상을 다운로드하고
[03:50]
텔레그램으로 보내고
[03:52]
출력을 로그로 남깁니다. 현재 n8n의
[03:55]
서브플로우가 작동하는 방식이
[03:57]
대기 단계에서 도구 레벨이 아닌
[03:59]
에이전트 레벨에서 대기하기 때문에
[04:00]
이렇게 처리하고 있습니다.
[04:02]
여기서 에러가 발생하겠지만
[04:04]
텔레그램에서는 실제 영상을 받을 수 있어요.
[04:06]
실행이 완료되면 보여드리겠습니다.
[04:08]
좋아요, 방금 완료됐네요.
[04:11]
보시다시피 텔레그램 노드는
[04:12]
에이전트 에러로 실패했지만
[04:14]
영상은 정상적으로 받았습니다.
[04:16]
이제 이걸 클릭해서
[04:17]
영상을 확인해보겠습니다.
[04:19]
잠깐 영상을 보시죠.
[04:21]
좋은 음향 효과가 들어갔네요.
[04:25]
음, 비버가 댐을 만들고 있네요,
[04:27]
집을 짓는 게 아니라.
[04:29]
실제 집을 기대했는데,
[04:31]
뭐 어쨌든...
[04:35]
마지막에는 집이 완성되었네요.
[04:38]
여러분께 실행이
[04:39]
실제로 완료되었다는 것을
[04:40]
보여드리기 위해
[04:41]
페이스리스 비디오 탭의 실행 결과로 전환하겠습니다.
[04:43]
여기서 새로고침을 해보면,
[04:45]
이 작업이 성공적으로 완료되었고
[04:46]
메시지를 보면 '비버가 집을 짓는
[04:48]
모습을 보여주는데, 비버가 나뭇가지를
[04:49]
모으는 것부터 등등'이라고 나와있죠.
[04:51]
그리고 이제 프로세스를 거쳐
[04:52]
음향 효과와 함께 실제 영상이 만들어집니다.
[04:54]
물론 완벽하지는 않은데,
[04:55]
이 부분은 현재
[04:57]
개선 중인 것으로 알고 있습니다.
[04:59]
또한 비버가 네 개의 클립에서
[05:01]
완전히 동일하게 보이지 않는 점도 있죠.
[05:02]
이는 프롬프트 조정과 다른 요소들로
[05:04]
개선할 수 있습니다.
[05:06]
하지만 이것은 시작하기에
[05:07]
좋은 템플릿입니다.
[05:09]
자, 이제 데모를 보았고
[05:10]
이 도구들이 어떻게 작동하는지 봤으니
[05:12]
모든 워크플로우를 분석해보겠습니다.
[05:13]
하지만 그전에 한 가지 말씀드릴 것은,
[05:15]
이 모든 리소스를 무료로
[05:16]
받으시려면 제 무료 스쿨 커뮤니티에
[05:18]
가입하시면 됩니다. 링크는
[05:19]
설명란에 있습니다. 영상 제목으로
[05:21]
검색하시거나
[05:22]
YouTube 리소스를 클릭하시면
[05:24]
이 영상과 관련된 게시물을 찾을 수 있습니다.
[05:25]
클릭하시면 다운로드할 수 있는
[05:27]
JSON이 여기 있고,
[05:29]
필요한 구글 시트 템플릿 링크와
[05:30]
Creatmate 렌더링 템플릿
[05:32]
링크도 있습니다.
[05:34]
영상 후반부에서는
[05:35]
실제로 무엇을 해야 하고
[05:36]
어떻게 설정해야 하는지
[05:38]
보여드릴 건데요,
[05:39]
이 여섯 가지 워크플로우를
[05:40]
다운로드하고 제대로
[05:41]
연결되어 있는지 확인해야 합니다.
[05:43]
자, 이제 실제 분석을 시작해보겠습니다.
[05:45]
먼저 실제 마케팅 팀 에이전트와
[05:47]
어떤 입력을 받고 무엇을 하도록
[05:49]
지시하는지 이야기해보겠습니다.
[05:50]
음성이나 텍스트를 입력받을 수 있습니다.
[05:53]
우리가 한 일은 이 두 출력을
[05:55]
표준화해서 에이전트에
[05:57]
'text'라는 필드로 전달하는 것입니다.
[05:59]
JSON.ext로 참조하는데,
[06:01]
이는 기본적으로 음성이든
[06:03]
타이핑이든 에이전트가 동일한 방식으로
[06:05]
처리할 수 있다는 의미입니다.
[06:08]
그리고 실제 시스템 프롬프트를 보면
[06:09]
도구가 많은 것에 비해 그리 복잡하지 않습니다.
[06:11]
개요를 보면 '당신은 마케팅 팀 AI 에이전트입니다.
[06:14]
사용자가 이미지를 생성하고 편집하며
[06:15]
요청에 따라 콘텐츠를 만드는 것을
[06:17]
돕는 것이 당신의 임무입니다.'라고 되어있죠.
[06:20]
다음으로 제가 항상 하는 것은
[06:21]
어떤 도구가 있고
[06:22]
각각 언제 사용하는지 알려주는 것입니다.
[06:24]
보시다시피 매우 간단하게 설명되어 있습니다.
[06:26]
이미지 생성: 이미지를 만들 때 사용하세요.
[06:28]
이미지 편집: 이미지를 편집할 때 사용하세요.
[06:30]
사용자가 '편집' 대신 '수정'이라고 할 수도 있습니다.
[06:32]
예를 들어, 제가 이미지를 만들어달라고 요청하고
[06:33]
나서
[06:35]
'더 사실적으로 만들어줘'라고 하면
[06:36]
에이전트는 편집 명령으로 인식합니다. 그 다음에는
[06:38]
이미지 데이터베이스를 검색할 수 있게 했죠.
[06:40]
블로그 포스트, 링크드인 게시물,
[06:42]
비디오, 그리고 생각 도구도 있는데
[06:44]
혹시 생각 도구를 모르시는 분들을 위해 설명하자면
[06:45]
여기 아래에 있는 도구입니다. 이에 대한
[06:47]
영상을 만들었는데, 위에 태그해두겠습니다.
[06:48]
어쨌든, 우리는 단순히
[06:50]
각각의 도구를 언제 사용할지
[06:52]
간단하게 지정했습니다. 그리고
[06:54]
몇 가지 지침을 추가했는데, 예를 들어 사용자가
[06:56]
이미지를 편집하거나 수정하라고 할 때
[06:58]
이는 데이터베이스의
[06:59]
가장 최근 이미지를 편집하고 싶다는 의미입니다.
[07:01]
따라서 우리는 두 가지 방법을 사용할 수 있는데
[07:03]
메모리에서 이미지 ID를 가져와서
[07:05]
편집에 사용하거나
[07:07]
데이터베이스를 검색해서
[07:08]
최신 이미지를 가져올 수 있습니다. 마지막으로, 사용자가
[07:10]
블로그나 링크드인 포스트를 요청하면
[07:12]
도구를 사용하고 '여기 요청하신
[07:14]
포스트입니다. 즐겨보세요'라고 출력합니다.
[07:16]
실제 워크플로우에서
[07:18]
포스트 내용이 전송되기 때문에
[07:19]
두 번 전송되는 것을
[07:21]
방지하고 싶었습니다. 마지막으로
[07:22]
텔레그램에서 모든 것을
[07:24]
클릭 가능한 링크로 반환하도록 했습니다. 보시다시피
[07:26]
텔레그램에서 모든 콘텐츠를
[07:27]
클릭할 수 있습니다. 이미지든
[07:29]
편집본이든 무엇이든
[07:31]
실제로 클릭해서
[07:32]
볼 수 있게 했죠. 좋습니다. 기본적으로
[07:34]
이게 전부입니다. 음,
[07:36]
텔레그램에서 입력을 받아
[07:37]
텔레그램으로 응답하는 건데요.
[07:38]
진짜 마법같은 일이 일어나는 건
[07:40]
이 여섯 가지 도구입니다. 먼저
[07:42]
이미지 생성 도구를 보겠습니다.
[07:43]
우리가 create image라고 이름 붙였죠.
[07:45]
이미지를 만들 때 이 도구를 호출합니다. 그리고
[07:46]
워크플로우를 연결했습니다.
[07:49]
여러분이 이미지 생성 워크플로우를
[07:50]
다운로드하면, 기본적으로
[07:52]
리스트에서 선택하고 검색하면 됩니다.
[07:54]
저는 제 것을
[07:55]
create image라고 이름 지었는데
[07:56]
검색해서 찾으시고
[07:58]
올바른 워크플로우를
[07:59]
연결하시기만 하면 됩니다. 그 다음으로 워크플로우
[08:02]
입력을 설정했습니다. 기본적으로 이
[08:04]
메인 에이전트에게 하위 워크플로우로
[08:05]
무엇을 보낼지 지정했습니다. 이미지 생성
[08:08]
하위 워크플로우에서 지정하는 방법은
[08:10]
'다른 워크플로우에 의해 실행될 때' 트리거로
[08:12]
시작해야 합니다.
[08:14]
메인 에이전트가 호출하기 때문이죠.
[08:16]
이 트리거에서
[08:18]
입력을 선택할 수 있습니다. 모든 데이터를
[08:19]
받아들이는 대신, 우리는 세 가지 필드를
[08:22]
정의했습니다. 이미지 제목,
[08:24]
이미지 프롬프트, 그리고 텔레그램 채팅
[08:26]
ID입니다. 이를 통해 텔레그램으로
[08:28]
다시 보낼 수 있죠. 실제로 이
[08:30]
트리거에서 세 필드를 정의하면
[08:32]
워크플로우 입력 옵션이
[08:34]
에이전트의 n8n 워크플로우 호출 도구에 나타납니다.
[08:36]
그리고 우리가 한 것은
[08:39]
여기 이 버튼을 사용했는데
[08:40]
모델이 파라미터를 어떻게
[08:42]
채울지 정의하도록 했습니다. 우리는
[08:44]
이미지 제목 파라미터를
[08:45]
이미지의 제목으로 채우는데,
[08:47]
4단어를 넘지 않도록 했습니다.
[08:49]
이미지 프롬프트는 사용자가 요청한
[08:50]
이미지로 채우도록 했고,
[08:52]
채팅 ID의 경우에는
[08:54]
텔레그램 채팅 트리거에서 오는
[08:56]
동적 변수를 사용합니다.
[08:57]
텔레그램에서 테스트를 해볼게요.
[08:59]
간단히 'hi'라고
[09:00]
입력해보겠습니다. 텍스트 입력이
[09:03]
들어오면 응답하는 것을 보실 수 있죠.
[09:05]
'hi'라고 응답하는데,
[09:07]
여기서 중요한 건 텔레그램의 채팅 ID가
[09:10]
여기에 있다는 겁니다. 그리고
[09:12]
이 값을 현재 워크플로우로
[09:14]
전달하게 됩니다. 보시다시피
[09:16]
이 동적 변수가 전달되어
[09:17]
나중에 이 워크플로우에서
[09:19]
사진을 올바른 위치로 다시 보낼 때
[09:21]
참조할 수 있습니다.
[09:23]
자, 이제 라이브 데모에서
[09:24]
실행했던 내용을 살펴보겠습니다.
[09:26]
데이터가 어떻게 흐르는지 보시죠.
[09:28]
첫 번째는 이미지 프롬프트 에이전트입니다.
[09:30]
보시다시피 이것은 고양이 사료
[09:31]
플래시 세일이었죠. 메인 워크플로우에서
[09:33]
이미지 프롬프트를 받아옵니다.
[09:36]
그리고 여기 시스템 프롬프트가 있는데
[09:37]
이것은 기본적으로
[09:38]
이미지 프롬프트 텍스트를 만드는 방법을 알려줍니다.
[09:41]
전체를 다 읽지는 않겠지만
[09:42]
템플릿을 다운로드하시면
[09:43]
이 내용이 모두 들어있습니다.
[09:45]
우리가 원했던 것은
[09:47]
매우 상세하고, 주요 주제와
[09:49]
배경, 스타일, 그리고 추가적인
[09:51]
세부사항을 포함하는 것이었죠.
[09:52]
여기서 보시면 '밝고 시선을 사로잡는
[09:54]
반려동물 주인을 위한 전단지' 등
[09:56]
다양한 설명이 출력됩니다.
[09:57]
이는 이미지 모델에 전달되는데,
[10:00]
우리는 ChatGPT의 새로운 이미지 모델을 사용하고 있습니다.
[10:02]
정말 대단한 성능을 보여주죠.
[10:04]
여기서 OpenAI의 이미지 생성 모델에
[10:06]
HTTP 요청을 포맷팅합니다.
[10:09]
이 요청 설정에 대해
[10:10]
너무 자세히 설명하지는 않겠습니다만,
[10:12]
이에 대한 전체 영상을 만들어놨고
[10:13]
위에 링크를 걸어두었으니
[10:14]
확인해보시기 바랍니다.
[10:16]
어쨌든, 우리는 기본적으로
[10:17]
이미지 프롬프트를
[10:19]
여기로 전달하고 있습니다.
[10:20]
보시다시피 여기서
[10:21]
새로운 이미지 모델을 사용하고 있죠.
[10:23]
이전 에이전트에서 받은
[10:25]
이미지 프롬프트를 전달하면
[10:27]
매우 큰 base64 JSON 문자열이 출력됩니다.
[10:30]
너무 커서 컴퓨터가 좀 버벅이네요.
[10:31]
우리가 하고 싶은 것은
[10:33]
이 JSON 문자열을 실제 이미지인
[10:35]
바이너리 데이터로 변환하는 것입니다.
[10:38]
그래서 이 파일 변환 노드를
[10:39]
사용합니다. 이 필드를 끌어다 놓으면
[10:41]
이렇게 되는거죠.
[10:42]
그리고 출력을
[10:44]
'data'라는 필드로
[10:45]
지정하면 여기서 받을 수 있고,
[10:47]
'보기'를 클릭하면
[10:49]
생성된 실제 이미지를 볼 수 있습니다.
[10:51]
바이너리로 두 가지를 하고 싶어서
[10:53]
경로를 분기했습니다.
[10:54]
첫 번째로 할 일은
[10:56]
n8n에서 경로를 분할할 때
[10:58]
위에서 아래로 순차적으로 작동하게 됩니다.
[10:59]
첫 번째로 하는 것은
[11:01]
텔레그램으로 이미지를 다시 보내는 것입니다.
[11:03]
그 다음으로 우리가 하고 싶은 것은
[11:05]
드라이브와 구글 시트에 데이터를 저장하는 것입니다.
[11:08]
여기서 우리가 한 것은
[11:10]
chat ID를 설정했습니다. 이것은
[11:11]
트리거에서 가져온 것입니다. 보시다시피
[11:13]
다른 워크플로우 트리거에서 실행된 것을 참조하고 있죠.
[11:14]
그리고 우리는
[11:17]
바이너리 파일을 보내기로 했습니다.
[11:18]
data라는 필드에 있는 바이너리 파일을
[11:20]
보시다시피 data가 바로 여기 있죠.
[11:21]
그리고 이것을 전송하기만 하면 됩니다.
[11:23]
정말 간단하죠. 그 다음으로 하는 것은
[11:25]
바이너리 데이터를 가져와서
[11:26]
구글 드라이브에 업로드하는 것입니다.
[11:28]
파일 이름의 경우, 기본적으로
[11:30]
메인 에이전트가 보낸 제목을 가져왔습니다.
[11:32]
제목.png로 설정하고 드라이브의 폴더를 선택했습니다.
[11:34]
만약 구글 자격 증명 설정에
[11:36]
어려움을 겪고 계신다면
[11:37]
제가 만든 이 튜토리얼을 확인해보세요.
[11:39]
어쨌든, 이것이 드라이브에 cat food/sale로 저장되었고
[11:41]
제 구글 드라이브를 보시면
[11:44]
cat food/flash sale 전단지가 있습니다.
[11:45]
클릭해보면 우리의 캣푸드 사진이 나옵니다.
[11:47]
그리고 여기 재미있는 점은
[11:49]
다른 버전도 볼 수 있는데
[11:51]
여기 수정된 버전이 있습니다.
[11:52]
더 사실적으로 만들어달라고 요청한 버전이죠.
[11:54]
더 현실감 있게 만든 버전입니다.
[11:55]
좋습니다. 구글 드라이브에 저장한 후에는
[11:57]
시트에 출력을 기록하고 싶었습니다.
[11:59]
다시 한 번, 구글에 로그인하고
[12:02]
marketing team log라는 문서의
[12:04]
첫 번째 시트를 참조합니다.
[12:05]
그리고 보내고 싶은 열들을 매핑했습니다.
[12:07]
제목, 유형, 요청, ID, 링크, 포스트가 있죠.
[12:09]
이번에는 포스트는 비워두었지만
[12:11]
제목은 첫 번째 트리거에서 가져왔습니다.
[12:14]
포스트는 비워두었고
[12:16]
제목은 첫 트리거에서 가져온 제목을 사용했습니다.
[12:17]
왼쪽 사이드바를 쭉 내려서
[12:19]
트리거까지 스크롤하고
[12:20]
여기에 있는 이미지 제목을 끌어다 놓았습니다.
[12:23]
유형은 항상 'image'로 고정했고
[12:25]
요청에는 이미지 프롬프트를 끌어다 놓았습니다.
[12:27]
ID의 경우에는 구글 드라이브
[12:29]
ID를 가져왔는데, 이는 나중에 수정할 때 필요합니다.
[12:31]
여기 아래에 ID를 끌어다 놓았죠.
[12:33]
나중에 수정할 때 필요한 것이죠.
[12:35]
ID를 여기 아래로 끌어다 놓았습니다.
[12:37]
링크의 경우에는 구글 드라이브의
[12:39]
웹 뷰 링크를 가져왔는데
[12:41]
구글 드라이브에서 찾을 수 있으며
[12:43]
실제로 볼 수 있게 해줍니다.
[12:44]
이것이 메인 에이전트가 텔레그램으로
[12:47]
다시 보내는 것이고
[12:48]
"여기 이미지가 있습니다.
[12:50]
보고 싶으시다면 이 링크를 클릭하세요"라고 말하죠.
[12:51]
좋습니다. 이것이 이미지 생성 워크플로우였고
[12:53]
이제 이미지 편집 워크플로우를 살펴보겠습니다.
[12:54]
워크플로우를 참조한다는 점에서 매우 비슷한데
[12:56]
이미지, 요청, 채팅 ID,
[12:58]
특정 입력값들을 정의하고
[12:59]
사진 ID를 정의합니다.
[13:02]
이것이 중요한 이유는 OpenAI의 이미지 편집
[13:04]
엔드포인트에서는 이미지를 보내고
[13:06]
"이것을 수정해주세요"라고 요청해야 하기 때문입니다.
[13:08]
좋은 예시를 보여드리자면
[13:10]
"이것을 수정해주시겠어요?"라고 하면 됩니다.
[13:12]
여기 좋은 예시가 있는데
[13:13]
일관성을 유지하도록
[13:15]
첫 번째로, 제가 역기를 드는 악어를
[13:16]
만들어달라고 요청했어요.
[13:18]
보시다시피 덤벨을 두 개 들고 있죠.
[13:20]
사실 이건 약간 이상한데,
[13:21]
뒤에 표지판들이 있고
[13:23]
그리고 나서 제가 할 수 있는 건
[13:25]
이미지 편집을 요청하는 거예요.
[13:26]
그러면 비슷한 느낌을 유지하면서
[13:28]
편집이 되죠. 여기서 보시면
[13:29]
편집 요청이었는데,
[13:31]
악어 머리에 헤드폰을 추가해달라고 했어요.
[13:33]
그러면 거의 같은 이미지인데
[13:35]
이제 헤드폰만 추가된 걸
[13:36]
볼 수 있죠. 이렇게 새 이미지를
[13:38]
만드는 대신 기존 이미지를
[13:40]
편집할 수 있습니다. 자, 이제
[13:42]
전달되는 내용을 보여드릴게요.
[13:43]
이 워크플로우를 열어서
[13:45]
실행 과정을 분석해보겠습니다.
[13:47]
자, 데모에서 보여드린
[13:48]
실행 과정입니다. 고양이 사료 특가 전단지였고
[13:51]
이미지를 더 사실적으로 만들어달라고 했죠.
[13:53]
데모에서 기억하시겠지만,
[13:54]
올바른 이미지 ID를 전달할 수 있었는데
[13:56]
이는 먼저 데이터베이스를 검색하고
[13:58]
그 다음 정확한 이미지 ID를
[14:00]
전송했기 때문입니다.
[14:02]
이제 올바른 ID가 있으니
[14:04]
구글 드라이브에서
[14:05]
파일을 다운로드할 수 있어요.
[14:07]
ID를 보내고 확인해보면
[14:10]
올바른 파일인 걸 알 수 있고
[14:11]
이제 이 파일을
[14:13]
OpenAI로 편집하기 위해 보낼 수 있죠.
[14:15]
다음 단계는 OpenAI의 엔드포인트를 호출하는 거예요.
[14:17]
이번에는 이미지 생성
[14:19]
엔드포인트 대신 편집
[14:21]
엔드포인트를 사용합니다.
[14:22]
여기서는 데이터라고 하는
[14:24]
바이너리 파일을 전송하고
[14:26]
프롬프트도 전송하는데, 프롬프트는
[14:28]
'실제 같은 고양이가 맛있는 사료를
[14:30]
즐기는 모습의 사실적인 전단지로
[14:32]
만들어주세요' 등의 내용이에요.
[14:34]
그러면 AI가
[14:35]
'여기 이미지가 있고, 요청사항이 이러하니
[14:37]
새로운 이미지를 만들어드리겠습니다'라고 하죠.
[14:39]
그리고 똑같은 방식으로
[14:41]
Base64 문자열을 출력합니다.
[14:44]
보시다시피 다시 한 번
[14:46]
변환하면 실제 편집된
[14:48]
이미지를 얻을 수 있고,
[14:50]
그 다음에는 이전과 동일하게
[14:52]
텔레그램으로 전송하고 드라이브와
[14:54]
스프레드시트에 저장합니다.
[14:57]
이제 이미지 검색 도구를
[14:59]
살펴보겠습니다. 꽤 흥미로운 기능이죠.
[15:01]
여기서는 두 가지를 할 수 있는데,
[15:03]
잠깐 열어보겠습니다.
[15:04]
한번 살펴보죠.
[15:05]
아이디어는 이렇습니다.
[15:08]
'예전에 만들었던 악어 이미지
[15:10]
기억나시나요?'라고 물어보면
[15:12]
'그걸 볼 수 있을까요?'라고 하고
[15:13]
'제 악어 사진을 보여주세요'라고
[15:15]
요청하면 보내줄 수 있죠. 또는
[15:18]
이미지를 편집해야 하는데
[15:19]
이미지 ID만 필요한
[15:21]
경우가 있습니다. 설명해드리자면,
[15:23]
이 워크플로우가 호출되면
[15:25]
의도를 전송하게 되는데,
[15:27]
사용자가 이미지를 가져올지
[15:28]
사용자가 이미지를 가져오기를 원하는지
[15:30]
또는 이미지를 편집하기를 원하는지를 결정합니다.
[15:32]
이것에 따라 워크플로우의
[15:33]
작동 방식이 달라지기 때문이죠. 그리고 물론
[15:35]
이미지 제목도 전달됩니다.
[15:37]
이미지를 가져오든
[15:38]
편집하든, 어떤 이미지를
[15:39]
다룰지 알아야 하니까요.
[15:41]
그리고 거의 항상
[15:42]
텔레그램 채팅 ID를 전달하여
[15:44]
사용자에게 결과를 보낼 수 있게 합니다.
[15:47]
자, 다시 워크플로우로 돌아가보죠.
[15:49]
데모에서 봤던 실시간 실행을
[15:51]
열어보겠습니다. 이것은 기본적으로
[15:53]
이미지를 가져와서 그 사진 ID를
[15:55]
메인 워크플로우로 전달하는 것이었죠.
[15:57]
이 워크플로우가 트리거되면
[16:00]
의도가 '편집'이라는 것을 받았고
[16:02]
이미지는 '고양이 사료/특가 세일'이었으며
[16:05]
채팅 ID도 받았습니다.
[16:06]
그런 다음 이미지 검색 에이전트로 전달하여
[16:08]
"여기 이미지 제목이 있습니다."라고 말합니다.
[16:10]
당신이 해야 할 일은 이미지 검색
[16:12]
에이전트로서 이미지 데이터베이스 도구에서
[16:14]
검색하여 이름, ID,
[16:16]
그리고 이미지 링크를 반환하는 것입니다.
[16:19]
만약 찾을 수 없다면
[16:20]
'찾을 수 없음'을 출력하게 됩니다.
[16:22]
여기서는 이름, ID,
[16:24]
이미지, 그리고 상태를 출력하는데
[16:26]
데이터베이스에서 이미지를 찾을 수 없다면
[16:28]
상태가 '찾을 수 없음'이 됩니다.
[16:29]
그래서 우리는
[16:31]
구조화된 출력을 아래에 정의하여
[16:32]
정보를 어떻게 출력해야 하는지
[16:34]
명시했습니다. 그리고 여기 이미지
[16:36]
데이터베이스 도구가 있는데
[16:38]
기본적으로 시트에 접근할 수 있게
[16:39]
해줍니다. 실제로는
[16:41]
마케팅 팀 로그라고 불립니다. 이름을 바꿨는데
[16:43]
단순히 이를 검색하고
[16:44]
필요한 모든 정보를
[16:45]
가지게 됩니다. 그리고
[16:47]
기본적으로 우리가 찾는 것을
[16:48]
출력합니다. 그리고 두 개의
[16:50]
조건문이 있습니다. 첫 번째는 기본적으로
[16:52]
상태가 '찾을 수 없음'인지 확인합니다.
[16:55]
만약 그렇다면, 위로 가서
[16:56]
메인 에이전트에 이미지를
[16:58]
데이터베이스에서 찾을 수 없다고 알립니다.
[17:01]
하지만 이미지를 찾으면
[17:02]
다음 확인으로 넘어가는데
[17:03]
이는 기본적으로 사용자의 의도를 확인합니다.
[17:05]
만약 의도가 단순히 이미지를 가져오는 것이라면
[17:07]
이 분기로 내려가서
[17:09]
파일을 다운로드하고 콘텐츠만 전송합니다.
[17:10]
하지만 의도가 실제로 이미지를
[17:13]
편집하는 것이라면, 사진을
[17:14]
보낼 필요가 없고 단순히
[17:16]
이미지 ID를 메인 워크플로우로
[17:19]
보내면 됩니다. 이 경우에는 의도가
[17:21]
편집이었으므로 이쪽으로 내려가고
[17:23]
메인 에이전트로 다시 보내는 것은
[17:25]
이미지 ID와 이미지 이름입니다.
[17:27]
그러면 기본적으로
[17:29]
"좋아, 여기 이미지 ID가 있어.
[17:31]
이걸 편집 이미지 도구로
[17:32]
보내기만 하면 돼."라고 할 수 있죠.
[17:34]
이제 실제로 편집을 하는 데 필요한
[17:36]
모든 정보를 가지게 된 거죠. 좋습니다.
[17:38]
계속 진행해보죠. 저는 이것들 중
[17:40]
하나만 리뷰할 건데, 기본적으로
[17:42]
똑같기 때문입니다.
[17:43]
프롬프트만 조금 다릅니다.
[17:44]
물론 두 가지 모두 다운로드할 수 있고,
[17:45]
LinkedIn 포스트 관련 전체 영상은
[17:47]
여기에 링크를 걸어두겠습니다.
[17:49]
그럼 이제 블로그 포스팅 워크플로우를 살펴보겠습니다.
[17:50]
매우 비슷한데요, 우리가 연결했던
[17:53]
워크플로우를 참조합니다.
[17:54]
모델이 정의한 블로그 주제를
[17:56]
전송하고 있습니다.
[17:58]
타겟 독자층을 정의하고 있는데,
[18:00]
이 타겟 독자층은
[18:02]
블로그의 타겟 독자이며
[18:03]
콘텐츠가 이 타겟 독자층에
[18:05]
맞춤화되어 작성됩니다.
[18:06]
그리고 물론
[18:07]
채팅 ID도 전송합니다. 이것이
[18:09]
워크플로우의 모습입니다.
[18:11]
트리거에서 보시다시피,
[18:12]
다른 것들과 마찬가지로
[18:14]
여기서 이러한 것들을 정의합니다.
[18:16]
데모에서 본 실행 내용을 클릭해 보겠습니다.
[18:18]
여기서 전달된 것은 '수면이 생산성에
[18:20]
미치는 영향'이었고,
[18:22]
직장인과 학생들을 대상으로 했으며,
[18:24]
우리의 채팅 ID가 있습니다. 먼저
[18:26]
웹 검색을 위해 Tavali에 접근 권한이 있는
[18:28]
블로그 포스팅 에이전트를 실행합니다.
[18:30]
시스템 프롬프트에서
[18:32]
무엇을 받고 있는지 빠르게 살펴보겠습니다.
[18:34]
블로그 주제와 타겟 독자층을
[18:36]
전달하고 있습니다.
[18:37]
여기서 보시는 것이 바로 그것입니다.
[18:40]
그리고 실제로 블로그 포스트를
[18:42]
작성하기 위해서는 시스템
[18:43]
프롬프트를 읽어야 하는데, 이는
[18:45]
"당신은 전문적이고 교육적이며
[18:47]
흥미로운 블로그 글을 작성하는
[18:49]
AI 에이전트입니다"라고 되어 있습니다.
[18:52]
항상 Tavali를 사용하여
[18:54]
실시간 웹 검색을 먼저 수행하는 것이
[18:55]
목표입니다. 블로그 글은
[18:57]
제공된 타겟 독자층에 맞춰
[18:59]
작성되어야 합니다. 그래서
[19:01]
연구 방법, 블로그 시작 방법 등
[19:03]
이런 것들을 지시하고
[19:04]
하단에 출처를
[19:06]
클릭 가능한 링크로 사용하도록
[19:08]
하며, 작업 순서와 같은
[19:09]
간단한 예시 워크플로우도
[19:11]
제공합니다.
[19:13]
보시다시피 완성된 블로그
[19:14]
포스트가 출력되고,
[19:16]
하단에 몇 가지 출처와
[19:17]
'잘 쉰 정신이 생산적인 정신이다'라는
[19:19]
리마인더가 있습니다.
[19:21]
이 블로그 포스트를 가져와서
[19:23]
다음 에이전트인
[19:24]
이미지 프롬프트 에이전트에 전달합니다.
[19:26]
여기 블로그 포스트가 있고,
[19:28]
보시다시피 전체 블로그 포스트를
[19:29]
받아서 해당 포스트를 사용하여
[19:32]
포스트와 잘 어울리는 그래픽이나
[19:35]
시각자료를 만들라고 합니다.
[19:36]
그래서 일부 예시에서
[19:38]
통계가 포함된 시각자료나
[19:39]
실제 콘텐츠와 잘 맞는
[19:41]
이미지를 볼 수 있었던 것이죠.
[19:44]
이것이 전체적인 목표입니다.
[19:46]
전부 읽지는 않겠지만,
[19:47]
기본적으로 포스트를 읽고
[19:48]
분석하여 주요 메시지를
[19:50]
파악하고, 주요
[19:51]
핵심 내용을 찾아 블로그 포스트에 맞는
[19:54]
텍스트 이미지 프롬프트를 만듭니다.
[19:56]
기본적으로 여기에 이미지 프롬프트를 출력할 거예요.
[19:57]
하지만 나중에 사용하기 위해
[19:59]
제목도 함께 출력하도록 설정했어요.
[20:01]
제목은 나중에 사용할 예정이거든요.
[20:02]
그래서 우리는 다시 한 번
[20:05]
구조화된 출력 파서를 사용해서
[20:06]
제목과 프롬프트를 출력하도록 했고
[20:08]
정확히 그대로 실행됐어요.
[20:09]
나중에 이것들을 어떻게 사용하는지 보여드릴게요.
[20:11]
아래에서 자세히 설명할 텐데요.
[20:13]
네.
[20:14]
다음 단계는 이미지 생성과 정확히 동일해요.
[20:16]
이미지를 생성하기 위해 같은 엔드포인트를 사용하고
[20:18]
이전 단계에서 받은 프롬프트를 전달하죠.
[20:20]
여기 보이는 이 작은 함수들은
[20:21]
변수와 dotreplace가 있는데
[20:23]
이것들을 모두 변경해야 해요.
[20:25]
기본적으로 HTTP 요청에서
[20:27]
큰따옴표를 전달하면 실패하기 때문에
[20:29]
이렇게 작은따옴표로 바꿔줘야 해요.
[20:31]
이 함수가 없었다면 큰따옴표가 생성되어
[20:34]
아마 실패했을 거예요.
[20:37]
여기 보시면 작은따옴표가 있죠.
[20:38]
이 함수가 없었다면
[20:39]
큰따옴표가 생성되어
[20:40]
아마 실패했을 거예요.
[20:42]
그래서 이렇게 작은따옴표로
[20:43]
바꿔주는 체크가 필요한 거죠.
[20:45]
보시다시피 이것을 바이너리로 변환하고 있어요.
[20:47]
여기 보시면 블로그용 그래픽이
[20:49]
생성된 것을 확인할 수 있죠.
[20:51]
이걸 전송하고 있어요.
[20:54]
사진과 블로그 내용을 함께 보내는데
[20:55]
이건 두 개의 다른 단계로 이루어져 있어요.
[20:57]
첫 번째는 바이너리 데이터를 보내고
[20:59]
두 번째는 실제 텍스트 내용을 보내요.
[21:01]
둘 다 같은 채팅 ID를 사용하지만
[21:02]
실제 내용은 다르죠.
[21:04]
물론 같은 채팅 ID를 사용하고
[21:06]
블로그 포스트 에이전트의 출력과
[21:07]
이전의 바이너리 데이터를 사용해요.
[21:09]
그리고 나중에 접근할 수 있도록
[21:11]
드라이브와 시트에 저장하고 있어요.
[21:12]
나중에 이미지에 접근하기 위해서죠.
[21:14]
같은 방식으로 드라이브에 업로드하고
[21:16]
여기서 제목을 사용해
[21:18]
이미지의 제목을 지정해요.
[21:20]
이것이 바로 이미지 프롬프트 에이전트가
[21:22]
제목과 프롬프트를 출력하도록 한 이유예요.
[21:23]
여기 제목이 있고
[21:26]
시트에 다시 기록할 때도 같은 방식을 사용해요.
[21:28]
말씀드렸듯이 LinkedIn용 플로우도
[21:29]
정확히 같은 방식이에요.
[21:32]
유일한 차이점은
[21:33]
이 에이전트에서 LinkedIn 포스트에 맞는
[21:35]
다른 작성 스타일을 사용한다는 거예요.
[21:37]
그리고 텍스트 이미지 생성에도
[21:38]
다른 작성 스타일을 사용하죠.
[21:40]
LinkedIn 그래픽은
[21:42]
일반적인 블로그 그래픽과는
[21:43]
좀 다르게 만들어져요.
[21:45]
좋아요. 마지막으로 비디오 생성이 있는데
[21:47]
이걸 클릭해서 어떤 내용을 전달하는지 볼까요?
[21:49]
이 부분은 앞쪽은 좀 더 단순하지만
[21:51]
실제 워크플로우는 아마도
[21:52]
가장 복잡할 거예요.
[21:54]
우리는 단순히 비디오 주제와
[21:56]
채팅 ID만 전달하고 있어요.
[21:57]
워크플로우가 어떻게 생겼는지 보여드릴게요.
[22:00]
이건 제가 예전에 했던 다른 프로젝트에서
[22:02]
영감을 받았어요. 얼굴 없는 쇼츠를
[22:05]
만드는 전체 영상을 만들었었는데
[22:06]
그걸 보시고 싶다면
[22:08]
그 영상을 확인하고 싶다면, 여기에 표시해둘게요.
[22:09]
자, 이제 데모의 실행 과정을
[22:11]
클릭해서 데이터가 어떻게 이동하는지
[22:13]
살펴보겠습니다. 우리가 전송한 내용은
[22:15]
비버가 집을 짓는 모습으로, 비버가 나뭇가지를
[22:17]
모으고 강가에서 정리하며
[22:18]
댐을 만드는 과정과
[22:20]
이와 관련된 모든 내용,
[22:21]
그리고 채팅 ID입니다.
[22:23]
우리가 하고자 하는 것은
[22:25]
보시다시피
[22:27]
네 개의 항목이 통과되는데
[22:28]
기본적으로 네 개의 이미지와
[22:30]
각각 5초 길이의 영상 네 개를 만들어
[22:32]
전체를 20초 클립으로
[22:34]
렌더링하는 것입니다. 이미지 프롬프트 에이전트에는
[22:38]
기본적으로 비디오 주제를 입력하고
[22:39]
긴 시스템 프롬프트를 제공했는데
[22:41]
여기서는 마스터 비주얼 스토리
[22:43]
구조화 에이전트의 역할을 합니다.
[22:45]
주어진 짧은 비디오 주제를
[22:47]
받아서 비버가 집을 짓는 내용을
[22:49]
네 부분으로 나누어
[22:51]
일관성 있게 구성하고
[22:53]
이 네 부분을 텍스트-이미지 생성
[22:55]
프롬프트로 변환합니다. 또한
[22:58]
출력 파서도 제공해야 했죠.
[23:00]
이를 위해서는 여기
[23:01]
이 작은 상자를 체크해야 하는데
[23:03]
'특정 출력 형식 요구'라고 되어 있습니다.
[23:05]
파트 1, 2, 3, 4로
[23:07]
나누었고, 여기서 보시는 것처럼
[23:08]
출력됩니다. 그리고
[23:11]
네 부분이 있지만
[23:12]
아직 하나의 항목이에요. 그래서
[23:13]
분할을 사용해서 하나의 항목에 있는
[23:15]
네 부분을
[23:17]
실제로 네 개의 다른 항목으로 만들어
[23:19]
각각 다른 이미지와
[23:20]
비디오를 만들 수 있게 했습니다.
[23:22]
다음에 일어나는 일이 바로 그겁니다.
[23:24]
PI API의 엔드포인트를 호출해서
[23:26]
이미지를 생성합니다. 제가 말씀드린 대로
[23:28]
페이스리스 쇼츠에 대한 전체 영상에서
[23:29]
이것을 어떻게 설정했는지
[23:31]
더 자세히 보실 수 있는데
[23:32]
기본적으로 우리는
[23:34]
Flux 이미지 생성 엔드포인트를 호출하고 있습니다.
[23:37]
이미지 프롬프트를 전송하고
[23:39]
보시다시피
[23:40]
네 개의 요청을 보냅니다. 첫 번째는
[23:41]
통통한 비버입니다. 두 번째는
[23:44]
같은 비버를 자세히 보여주고, 세 번째는
[23:46]
나뭇가지를 배치하는
[23:47]
클로즈업 장면이고, 네 번째는
[23:48]
실제 완성된 집입니다.
[23:50]
이렇게 네 개의 다른
[23:51]
이미지를 만듭니다. 여기서 보시면
[23:53]
출력되는 것을 볼 수 있는데
[23:55]
모두 아직 대기 중이에요.
[23:56]
실제로 생성하는 데
[23:57]
시간이 좀 걸립니다. 그래서 90초를 기다리고
[23:59]
기본적으로
[24:01]
다른 엔드포인트에 요청을 보내서
[24:03]
이 요청들의 상태를
[24:05]
확인하러 가는 거죠.
[24:07]
이제 보시면
[24:08]
모두 완료되었고 실제 이미지의
[24:10]
링크가 생겼는데, 바로
[24:12]
여기 이미지 URL이 있습니다. 제가 이동해보면
[24:14]
우리의 비버에 대한
[24:15]
이미지 중 하나를 볼 수 있죠. 한 가지
[24:17]
유의할 점은, 이상적으로는
[24:19]
이상적으로는 폴링 방식으로 설정하여
[24:20]
단순히 90초를 기다리고 추측하는 것이 아니라
[24:22]
왜냐하면 90초 후에도 완료되지 않으면
[24:24]
워크플로우가 완료되지 않은 상태에서
[24:26]
예를 들어 세 개의 이미지는 완료되었지만
[24:28]
네 번째 이미지가 아직 생성되지 않아
[24:30]
하나를 놓칠 수 있기 때문입니다.
[24:31]
폴링은 기본적으로 계속 확인하면서
[24:32]
완료되지 않았다면 다시 루프를 돌면서
[24:34]
잠시 기다렸다가 다시 확인하는 방식입니다.
[24:35]
이렇게 하면 모든 네 개의 이미지가
[24:37]
완료될 때까지 다음 단계로 넘어가지 않습니다.
[24:38]
이에 대한 간단한 예시를 보고 싶다면
[24:39]
파이어콜 영상에서 예시를 보여드렸습니다.
[24:41]
위쪽에 태그해두었으니 참고하세요.
[24:43]
어쨌든, 이미지들이 URL 형태로 생성되면
[24:45]
runway를 사용해서 이 URL 이미지들을
[24:46]
비디오로 변환합니다.
[24:48]
여기서 body 요청에 전달하는 것은
[24:50]
프롬프트 이미지입니다. 보시다시피
[24:52]
URL을 전송하고 있고, 총 네 개의
[24:54]
서로 다른 URL이 있습니다.
[24:56]
그리고 프롬프트 텍스트도 전송하는데,
[24:58]
이는 모델이 이미지를 비디오로
[24:59]
변환하는 데 도움을 줍니다.
[25:01]
이 프롬프트 텍스트는 앞서 텍스트-이미지
[25:02]
생성에 사용했던 것과 동일합니다.
[25:04]
이제 이것을 이미지-비디오 생성에
[25:06]
다시 사용하고 있습니다.
[25:09]
왜냐하면 여기에는 작은 스토리가
[25:10]
포함되어 있기 때문입니다.
[25:12]
이 프로세스는 네 개의 ID를 출력하고
[25:13]
나중에 다시 이들이 실제로 생성될 때까지
[25:14]
기다려야 합니다.
[25:17]
그리고 나서 이 ID들이 완료되었는지
[25:19]
확인하게 됩니다.
[25:21]
약 60-90초 후에 완료되면
[25:22]
모든 상태가 '성공'으로 표시됩니다.
[25:24]
그러면 링크 형태로 출력물을 받게 되는데
[25:26]
이 링크를 클릭하면 실제 비디오를 볼 수 있습니다.
[25:28]
물론 아직 사운드 효과는 없습니다.
[25:30]
다음 단계는 각 클립에 사운드 효과를 추가하고
[25:31]
모든 것을 함께 렌더링하는 것입니다.
[25:34]
이를 위해 사운드 에이전트를 사용합니다.
[25:36]
각 장면을 개별적으로 전달했습니다.
[25:37]
첫 번째, 두 번째, 세 번째, 네 번째 장면을
[25:39]
시스템 프롬프트에서는
[25:41]
마스터 사운드 프롬프트 생성기로서
[25:42]
주어진 장면에 기반하여 생생하고 몰입감 있는
[25:44]
사운드 프롬프트를 만들도록 지시했습니다.
[25:46]
장면 1, 장면 2, 장면 3, 장면 4에 대해
[25:48]
모두 배경 사운드 효과가 되도록 했습니다.
[25:50]
보시다시피 네 가지 다른 출력물이 생성되는데
[25:52]
이들은 모두 다른 사운드 효과 프롬프트입니다.
[25:53]
이것들을 11 Labs에 입력하여
[25:55]
텍스트를 5초 길이의 사운드로 변환합니다.
[25:57]
그래서 여기서 11 Labs에 요청을 보내면서
[25:59]
"이 텍스트를 사운드 효과로 바꿔주세요"라고
[26:00]
지시하는 것입니다.
[26:02]
그러면 여기서 볼 수 있듯이
[26:03]
각각 5초 길이의 네 개의 서로 다른
[26:05]
사운드 효과 클립이 생성됩니다.
[26:07]
작업 속도를 빠르게 설명하고 있지만
[26:09]
영상이 너무 길어지는 것을 피하고 싶습니다.
[26:12]
그래서 11 Labs로 요청을 보내면서
[26:14]
"여기 텍스트를 사운드 효과로
[26:16]
변환해주세요"라고 전달하면
[26:18]
여기서 볼 수 있듯이
[26:19]
네 개의 각각 5초짜리 사운드 효과 클립이 생성됩니다.
[26:20]
조금 빠르게 설명하고 있는데
[26:22]
영상이 너무 길어지는 것을 피하고 싶어서입니다.
[26:26]
빠르게 진행하고 있지만, 영상이 너무 길어지는 걸
[26:28]
원하지 않아서입니다. 앞서 언급한 영상에 대한
[26:29]
전체 세부 내용이 있으니
[26:31]
자세한 내용을 알고 싶으시다면
[26:32]
꼭 확인해 보시기 바랍니다.
[26:34]
여기 마지막 단계에서는
[26:36]
렌더링을 하고 로그를 기록합니다.
[26:37]
모든 것을 병합하여
[26:39]
네 개의 항목을 만들어내는데,
[26:40]
각각 비디오와 오디오가 포함되어 있습니다.
[26:43]
바로 여기서 확인할 수 있죠.
[26:45]
여기 결과가 나왔네요.
[26:46]
보시다시피 네 개의 항목이 있고
[26:49]
각각의 성공 메시지와
[26:50]
필요한 링크들이 있습니다. 그리고
[26:51]
이를 정리하고 분리했습니다.
[26:53]
여기 첫 번째 항목이 있고
[26:55]
첫 번째 항목의 오디오와
[26:57]
첫 번째 항목의 비디오가 있습니다.
[26:59]
이런 식으로 네 개가 모두 있어서
[27:01]
Create a Mate 템플릿에
[27:03]
쉽게 전달할 수 있습니다.
[27:05]
우리가 하는 것은
[27:06]
네 개의 변수를 여기로
[27:07]
전달하는 것뿐입니다. Create Mate
[27:09]
템플릿 스크립트를 가지고 있다면
[27:11]
Create Mate에서 해야 할 일은
[27:12]
여기 소스 에디터로 가서
[27:14]
스크립트를 여기에 붙여넣기 하는 것입니다.
[27:16]
그리고 템플릿 API 통합 사용을 클릭하고
[27:18]
이 curl 명령어를 누르면 됩니다.
[27:19]
그리고 n8n에서는
[27:21]
HTTP 요청에 curl을
[27:23]
가져와서 붙여넣기만 하면 됩니다.
[27:25]
그러면 템플릿이 준비됩니다.
[27:27]
그 다음에는 기본적으로
[27:28]
네 개의 비디오 소스와
[27:29]
네 개의 오디오 소스를 드래그하면 되는데,
[27:31]
이것들은 웹 콘텐츠 링크
[27:33]
소스입니다.
[27:35]
보시다시피 0부터 3까지
[27:37]
번호가 매겨져 있어서
[27:39]
네 개가 모두 있다는 뜻이고,
[27:40]
모든 것을 연결하고
[27:42]
Create Mate를 만드는 데 필요한
[27:44]
모든 것이 있습니다.
[27:45]
이것은 이미지와 비디오를 만들 때와
[27:48]
매우 비슷한데,
[27:49]
처리 중이라는 메시지가 나타납니다.
[27:51]
기본적으로 '처리 중입니다'
[27:52]
라고 나오죠. 25초 정도
[27:54]
기다려야 하고, 그 다음
[27:55]
URL을 다운로드할 엔드포인트를 호출합니다.
[27:57]
이전 단계에서 받은 URL을 사용하고
[27:59]
그러면 결과가 돌아오는데
[28:03]
보시다시피 사운드 효과가 포함된
[28:06]
완성된 비디오가
[28:07]
렌더링되어 있습니다. 그래서 여기
[28:09]
바이너리 형태로 비디오가 있으니
[28:11]
텔레그램으로 보내기만 하면 됩니다.
[28:12]
그리고 제목을 빠르게 만들어서
[28:14]
그 제목과 필요한 모든 것을
[28:16]
로그에 기록합니다.
[28:19]
자, 이렇게 모든 도구들이
[28:21]
작동하는 방식입니다.
[28:23]
좀 빠르게 설명해서 죄송합니다.
[28:24]
영상이 너무 길어지지 않게 하려고요.
[28:26]
이제 가격에 대해 얘기해보고
[28:28]
여러분의 n8n에서 어떻게 설정하는지
[28:30]
알아보겠습니다. 자, 제가 만든
[28:32]
시스템 가격에 대한 문서가 여기 있습니다.
[28:34]
당연히 n8n이 가장 중요한 부분이고
[28:36]
여기서 모든 것을 호스팅하게 됩니다.
[28:38]
이 모든 것을 호스팅하는 비용에 대해 말씀드리면,
[28:39]
이 영상에서는 클라우드를 사용하고 있는데,
[28:41]
클라우드 비용은 한 달에
[28:43]
27달러 정도의 요금제를 사용하고 있습니다.
[28:44]
우선 이미지 생성 비용부터
[28:46]
말씀드리겠습니다.
[28:48]
우리는 기본적으로 OpenAI의 새로운
[28:50]
GPT 이미지 모델을 사용하고 있는데,
[28:52]
이는 ChatGPT 4.0과 동일한
[28:54]
생성 모델을 사용합니다.
[28:57]
이미지 한 장당 19~20센트 정도이며,
[28:59]
이미지 편집도 마찬가지로 19~20센트가 듭니다.
[29:01]
또한 이 모델은 LinkedIn과
[29:04]
블로그 포스팅 에이전트에서도 사용됩니다.
[29:06]
이 점을 염두에 두시고,
[29:09]
실행당 약 20센트의 비용이
[29:10]
든다는 것을 기억하세요. 하지만 이미지 생성 엔드포인트에서는
[29:12]
DALL-E 2나 DALL-E 3와 같은
[29:14]
다른 모델을 사용할 수도 있는데,
[29:16]
이들은 좀 더 저렴합니다.
[29:18]
가격은 여기에 모두 나와 있습니다.
[29:19]
요청 부분을 보시면
[29:21]
'model'이라는 파라미터가 있는데,
[29:23]
여기서 모델을 변경할 수 있습니다.
[29:24]
더 저렴한 모델로 바꾸고 싶다면
[29:26]
동적으로 설정할 수도 있어서
[29:27]
에이전트가 상황에 따라
[29:28]
자동으로 선택하게 할 수 있죠.
[29:30]
어떤 작업을 하느냐에 따라
[29:31]
저렴한 모델을 선택할 수 있습니다.
[29:33]
비디오 생성 워크플로우에서는
[29:35]
이미지를 생성할 때
[29:36]
Stability AI API를 사용하는데,
[29:39]
이미지당 약 1.5센트로
[29:41]
훨씬 더 저렴한 방법입니다.
[29:43]
비디오 생성의 경우,
[29:45]
Runway를 사용하는데, 5초짜리 비디오 클립당
[29:47]
약 25센트가 듭니다.
[29:49]
10초짜리는 50센트인데,
[29:51]
우리는 5초짜리 클립 4개를 만들기 때문에
[29:53]
실행당 약 1달러가 듭니다.
[29:55]
여기에 이미지 비용도
[29:56]
추가로 들어갑니다.
[29:59]
Create의 경우 현재 무료 체험판을 사용 중인데,
[30:01]
50개의 무료 크레딧을 제공합니다.
[30:03]
보시다시피 지금까지
[30:05]
3번의 성공적인 렌더링에
[30:08]
50개 중 3개의 크레딧을 사용했습니다.
[30:10]
20초 렌더링당 1크레딧이
[30:12]
필요한 것 같습니다. 그리고 여기
[30:14]
조사해본 바로는
[30:15]
2,000 크레딧으로
[30:17]
약 200개의 비디오를 만들 수 있다고 합니다.
[30:19]
Create 메이트로 돌아가서
[30:21]
요금제 업그레이드를 확인해보면,
[30:23]
2,000 크레딧으로 200개 이상의 비디오나
[30:25]
2,000개의 이미지를 만들 수 있습니다.
[30:27]
정확한 수치는 모르겠지만, 지금까지
[30:29]
3번의 렌더링에 3크레딧이 사용됐네요.
[30:30]
음향 효과는 Eleven Labs를 사용하는데,
[30:32]
스타터 플랜이 월 5달러이고
[30:34]
꽤 많은 크레딧을 제공합니다.
[30:35]
아마 다 쓰지도 못할 거예요.
[30:37]
아직 플랜을 업그레이드할 필요가 없었어요.
[30:38]
그래서 월 5달러 정도입니다.
[30:40]
그리고 모든 텍스트 생성과
[30:41]
워크플로우와 에이전트의 추론을 위해
[30:43]
전체 워크플로우에서
[30:45]
GPT-4와 GPT-4 Mini를 사용하고 있습니다.
[30:47]
Open Router를 통해 사용하고 있는데,
[30:49]
비용이 그리 많이 들지 않습니다.
[30:52]
GPT-4는 백만 토큰당 2달러 정도입니다.
[30:54]
입력 토큰 100만 개당 2달러이고, 출력 토큰
[30:56]
100만 개당 8달러입니다. 41 미니는 입력 토큰
[30:59]
100만 개당 40센트, 출력 토큰은
[31:01]
100만 개당 1.60달러입니다.
[31:03]
이 문서는 프리스쿨 커뮤니티에
[31:05]
다른 필요한 리소스들과 함께
[31:06]
첨부되어 있을 거예요.
[31:08]
자, 이제 실제로 이것을 설정하는 방법을
[31:09]
알아볼게요. 첫 번째 단계는
[31:11]
프리스쿨 커뮤니티에 가서
[31:13]
리소스를 받아야 합니다. 먼저
[31:15]
프리스쿨 커뮤니티에 가입하세요.
[31:17]
비디오 제목으로 검색하거나
[31:18]
YouTube 리소스를 클릭하고
[31:19]
이 비디오와 관련된 게시물을 찾으면
[31:21]
모든 JSON 템플릿을 찾을 수 있습니다.
[31:23]
이것들을 다운로드해야 합니다.
[31:25]
총 7개의 워크플로우가 있는데,
[31:27]
메인 에이전트와 6개의 도구가 있습니다.
[31:28]
각각을 개별 워크플로우로 가져와야 해요.
[31:30]
여기 위로 와서 '파일에서 가져오기'를 클릭하세요.
[31:31]
워크플로우를 클릭하면
[31:32]
JSON 워크플로우가 이렇게 나타날 거예요.
[31:34]
워크플로우를 클릭하면,
[31:36]
JSON 워크플로우가 이렇게 표시되고 모두 설정됩니다.
[31:38]
또한 여기 어딘가에 설정 가이드가 있을 텐데,
[31:39]
거기에는 API 키와 같은
[31:41]
필요한 다양한 항목들이
[31:42]
설명되어 있을 거예요.
[31:44]
그리고 워크플로우를 구성해야 합니다.
[31:45]
예를 들어, 이미지 검색 워크플로우를
[31:47]
가져올 때는 여기 들어와서
[31:49]
원하는 참조가 맞는지 확인해야 합니다.
[31:51]
당신의 인스턴스에서 지정한
[31:52]
이름이 무엇이든,
[31:54]
예를 들어 'search images'라고
[31:55]
이름을 지정했다면,
[31:57]
클릭해서 연결되어 있는지
[31:58]
확인해야 합니다.
[31:59]
이것을 클릭해서 확인할 수 있는데,
[32:01]
새 탭에서 해당 워크플로우가 열립니다.
[32:03]
물론 OpenAI, Open Router,
[32:05]
Google Drive, Google Sheets 등
[32:06]
다양한 API 키를 입력해야 합니다.
[32:08]
다음 단계는 Google Sheets 템플릿입니다.
[32:10]
커뮤니티에 이 템플릿 링크도
[32:12]
올려두었습니다. '파일'을 클릭하고
[32:14]
복사본을 만들면 됩니다.
[32:16]
그러면 당신의 Google Suite에서
[32:17]
모든 것을 기록하는데 사용할 수 있습니다.
[32:19]
이름들은 항상 일관성 있게 유지될 거예요.
[32:21]
실행하면 자동으로 업데이트될 것입니다.
[32:23]
그리고 당연히
[32:24]
실행하면,
[32:26]
자동으로 업데이트되어
[32:27]
바로 사용할 수 있습니다.
[32:28]
그리고 물론, Creatate 템플릿도
[32:30]
받아야 하는데, 이렇게 생겼습니다.
[32:32]
이것도 커뮤니티에 올려두었어요.
[32:33]
CreativeMate에서 새 템플릿을 열고,
[32:35]
처음부터 시작해서, 소스 에디터를 열고
[32:36]
거기에 붙여넣으면 됩니다.
[32:38]
그다음 템플릿 API 통합 사용을 클릭하고,
[32:40]
아래쪽에 있는 페이스리스 비디오 단계에
[32:41]
curl을 가져와서 실제로 비디오를
[32:43]
렌더링하게 됩니다.
[32:45]
curl 명령을 가져오면 모든 것이
[32:47]
채워져 있을 거예요. 변수들만
[32:49]
드래그해서 넣으면 됩니다. 또는
[32:50]
모든 변수를 여기에 두고
[32:51]
creatate의 템플릿 ID만
[32:53]
바꾸면 됩니다.
[32:54]
그리고 Telegram 인증 정보만
[32:56]
추가로 입력하면 될 것 같네요.
[32:59]
다른 것은 없을 것 같은데,
[33:00]
설정 가이드를 참고하시면
[33:01]
잘 진행하실 수 있을 겁니다.
[33:04]
혹시 빠진 게 있더라도,
[33:05]
설정 가이드가 있으니
[33:06]
이 에이전트를 실행하고 사용하는 데
[33:07]
문제없을 거예요.
[33:09]
완전 초보이거나
[33:11]
약간의 경험이 있지만
[33:12]
지식을 더 넓히고 싶다면,
[33:13]
제 유료 커뮤니티를
[33:14]
확인해보세요. 링크는
[33:16]
설명란에 있습니다. 현재 1100명 이상의
[33:17]
멤버들이 매일 Nen을 사용하고
[33:19]
자동화를 구축하고 있습니다.
[33:21]
에이전트 구축에 대한 전체 과정이 있는
[33:22]
강의실 섹션이 있고,
[33:24]
벡터 데이터베이스와 API,
[33:25]
HTTP 요청과 같은 심화 주제들도 다룹니다.
[33:27]
또한 단계별 구축 과정도 있어요.
[33:29]
주간 라이브 콜을 5번 진행하는데,
[33:31]
모두 녹화되어 있어서
[33:32]
막히는 부분 없이
[33:34]
진행할 수 있습니다. 현재
[33:35]
완전 초보자를 위한
[33:37]
새로운 과정들을 준비 중인데,
[33:38]
기초부터 시작해서
[33:40]
프로세스 자동화까지 배울 수 있습니다.
[33:41]
커뮤니티에서 여러분을
[33:43]
만나보고 싶네요. 라이브 콜에서도
[33:44]
뵙고 싶습니다. 이번 영상은
[33:46]
여기까지입니다. 이 영상이 도움이 되었거나
[33:47]
새로운 것을 배우셨다면,
[33:48]
좋아요 눌러주세요. 큰 도움이 됩니다.
[33:49]
항상 끝까지 시청해 주셔서
[33:51]
감사합니다.
[33:52]
다음 영상에서 뵙겠습니다. 감사합니다.