brunch

You can make anything
by writing

C.S.Lewis

by SeaWolf Jan 03. 2023

AI, 마법의 레시피

프롬프트 마법의 레시피, AI의 능력을 극대화하는 비밀을 공유하다.

"마법의 레시피"


얼마나 설레는 표현인가?

저 표현과 이상에 얼마나 많은 모험이 탄생했겠는가.


마법의 레시피를 독점하고 싶지 않은가?

그렇다면, 나만의 AI를 소유하세요.

목적과 목표에 따라 다르겠지만, 비용과 시간을 충분히 지불한다면 적절한 방법이 있다


만인이 다 아는 밀레의 '이삭 줍기'라는 명화에 대해 과연 보이는 이미지가 다 가 아니고 파노라마 형태였다면 어땠을까?라는 상상을 해보자.


<밀레의 이삭 줍기>


<밀레의 이삭 줍기를 필자가 AI를 통해 파노라마 형태로 확장/ 재생성 한 이미지> 

어떤가? 그럴싸하지 않은가?


일른 머스크의 최고 투자 포인트는 ChatGPT를 만든 OpenAI라고 할 것이다.

토큰(AI 입장에서 한 글자가 1 토큰이라고 생각하고 이것이 비용의 기준으로 이해하면 된다.) 이코노미의 진정한 가치는 AI가 이끌어 갈 것이다.


이러한 능력을 지닌 AI를 소유하고 싶지 않은가?

소유에 그치지 않고 나만의 커스텀을 적용하여 보다 우수하고 특화된 영역(Expert 데이터셋 학습)으로 발전시키고 싶을 것이다.


이러한 첫 단계로 ChatGPT와 Streamlit을 결합한 방법이 있다.

Streamlit은 데이터 분석 등에 유용한 파이썬 지원 대쉬보드 & 웹서비스 플랫폼이다.

매우 쉽고 유용하며, 간단하게 파이썬 기반의 코드들을 즉시 웹서비스화 할 수 있고 다양한 플러그인들이 지원된다.


Streamlit 공식 사이트 참조: https://streamlit.io/ 


<Streamlit 사이트 안내 동영상>



Streamlit가 준비되었다면, 

ChatGPT의 'API Secret Key'를 준비해야 한다.

ChatGPT는 현재 무료 서비스 버전이 존재하지만 이를 커스터마이징 한 자신만의 서비스를 만든다거나 확장해서 쓰거나 상업적 용도로 활용하려면 당연히 '결제 Card'를 등록하고 유료 서비스를 이용해야 한다.


<ChatGPT의 'API Secret Key'가 생성된 화면>


Streamlit의 ChatGPT 적용 예시(깃허브 검색)를 다운로드하여, 

코드에 ChatGPT의 'API Secret Key'를 삽입하고 일부 내용 수정하여 이를 실행한 결과이다.  

우선은 '로컬호스트'로 실행하였다.

Streamlit의 장점은 '로컬호스트' 테스트 후 언제든 Streamlit의 Cloud 서비스를 통해 퍼블릭 서비스로 전환할 수 있다는 것이다.


적용 코드는 Python 기반이라 가독성과 수정이 용이하며 주로 한국인이 활용할 것이니 최대한 한글 친화적인 구성과 사용성을 갖게 수정하였다.


<Streamlig + ChatGPT 웹서비스 실행 화면>

 

'한국의 brunch.co.kr 서비스 분석해 줘.'라는 지시어에 대해 ChatGPT가 응답한 결과이다.


적절하지 않은가?




이번에는 난이도를 높여 '작곡'을 해보자.


ChatGPT는 Text 기반 아닌가? 

어떻게 작곡을 하지? 

악보를 어떻게 표현하지?


걱정하지 마라.


프롬프트에 마법의 레시피 한소끔 이면 된다.


프롬프트 엔지니어 또는 프롬프트 기획자는 AI 시대 미래의 새로운 마법사들이 될 것이다.

 

실제 필자가 사용한 프롬프트를 보자.


'상쾌한 아침을 주제로 작곡을 하라. 코드는 music xml로 작성할 것'


'상쾌한 아침'이 [주제어]로 주어졌고, 

[코드] - [Music xml] - [작성]이 방향성으로 지시되었다.

프롬프트가 [주제어] - {방향성: 코드/ Music XML/ 작성}이란 단순하지만 명확한 체계로 구성되었다.


'Music XML'은 악보를 Text 기반의 XML로 담은 구성이다.

 다음은 AI가 실제 작성한 곡이 담긴 XML이다.


<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE score-partwise PUBLIC   "-//Recordare//DTD MusicXML 3.1 Partwise//EN"   "http://www.musicxml.org/dtds/partwise.dtd"> <score-partwise>   <part-list>     <score-part id="P1">       <part-name>Music</part-name>     </score-part>   </part-list>   <part id="P1">     <measure number="1">       <attributes>         <divisions>2</divisions>         <key>           <fifths>0</fifths>         </key>         <time>           <beats>3</beats>           <beat-type>4</beat-type>         </time>         <clef>           <sign>G</sign>           <line>2</line>         </clef>       </attributes>       <note>         <pitch>           <step>C</step>           <octave>4</octave>         </pitch>         <duration>2</duration>         <type>eighth</type>       </note>       <note>         <pitch>           <step>E</step>           <octave>4</octave>         </pitch>         <duration>2</duration>         <type>eighth</type>       </note>       <note>         <pitch>           <step>G</step>           <octave>4</octave>         </pitch>         <duration>2</duration>         <type>eighth</type>       </note>       <note>         <pitch>           <step>B</step>           <alter>1</alter>           <octave>4</octave>         </pitch>         <duration>2</duration>         <type>eighth</type>       </note>       <note>         <pitch>           <step>C</step>           <octave>5</octave>         </pitch>         <duration>2</duration>         <type>eighth</type>       </note>     </measure>     <measure number="2">       <note>         <pitch>           <step>B</step>           <alter>1</alter>           <octave>4</octave>         </pitch>         <duration>2</duration>         <type>eighth</type>       </note>       <note>         <pitch>           <step>G</step>           <octave>4</octave>         </pitch>         <duration>2</duration>         <type>eighth</type>       </note>       <note>         <pitch>           <step>E</step>           <octave>4</octave>         </pitch>         <duration>2</duration>         <type>eighth</type>       </note>       <note>         <pitch>           <step>C</step>           <octave>4</octave>         </pitch>         <duration>2</duration>         <type>eighth</type>       </note>       <note>         <pitch>           <step>G</step>           <octave>4</octave>         </pitch>         <duration>4</duration>         <type>quarter</type>       </note>     </measure>   </part> </score-partwise>


이 XML 텍스트를 XML 파일로 저장한다.


이제 Music XML을 재생할 수 있는 프로그램이나 사이트에 가서 업로드를 해보자.


<Music XML을 업로드할 수 있는 웹서비스(무료)>


AI가 만들어준 음악을 XML 코드로 작성케 하여 업로드를 하였다.

뭔가 베토벤과 모차르트의 음악성이 떠오르는 듯한 악보로 보이지 않는가?


실제 들어보자.

 

<AI로 만든 상쾌한 아침이란 주제의 짧은 곡>


많은 휴먼들이 ChatGPT에 열광을 하지만 ChatGPT가 갖고 있는 능력의 10%도 채 뽑아 쓰지 못하고 있다고 본다.

현재까지의 AI는 결국 휴먼들이 만들었기에 휴먼의 상상력을 통해 AI의 힘을 더욱 잘 끌어내야 할 것이다.

ChatGPT는 작곡도 하고 악보도 그리고 편곡도 할 수 있다. 


텍스트로만 당신 눈에 보일뿐, 

휴먼의 상상력으로 그 텍스트를 인터프리터 하여 아날로그인 휴먼의 귀와 눈에 그대로 임팩트를 줄 수 있다.


그럼 텍스트로 그림도 가능할까?

당연히 가능하지 않겠는가!

여기서도 프롬프트 마법의 레시피가 등장한다.

음악이 'MUSIC XML'이라는 '토큰'으로 신세계의 지평을 열었듯이, 


작화는 'data url text string'(이외에 여러 비슷하지만 조금씩 다른 표현이 존재한다.)이 마법의 레시피이자 길잡이다.


실제 필자의 사례를 보자.


'새를 주제로 로고 디자인을 하라. 코드는 data url text string으로 작성할 것'


잠시뒤 AI가 코드를 생성해 냈다. AI는 몇 가지 다른 방식으로 코드를 생산하는데 이걸 고이 복사해서 편집기에 붙여 넣고 HTML로 저장하자. 


<svg width="80" height="80" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink">

  <circle cx="40" cy="40" r="30" fill="#FFE400" />

  <path d="M25 50 a5 5 0 1 1 15 0 L 55 50 a5 5 0 1 1 -15 0 " stroke="black" stroke-width="4" fill="none" />

  <rect x="25" y="35" width="30" height="10" fill="black" />

 </svg>


저장한 HTML을 실행시켜 보니,


<새를 주제로 한 로고 디자인 생성 결과>


놀랍지 않은가?



더 많은 '마법의 레시피'가 필요하지 않은가 휴먼이여!



coming soon.



브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari