갈루아의 반서재

728x90

애드온이 아닌 스크립트를 통해 블로그 포스팅을 작성해주는 시트를 만들어보자. 

새로운 스프레드시트 파일을 하나 만든 다음 확장프로그램 > Apps Script 메뉴로 이동한다.

아래와 같이 스크립트를 입력한다. 

첫 줄의 SECRET_KEY 부분에는 앞서 발급받은 OpenAI API 키를 입력한다.

  • MAX_TOKENS : 최대길이. 현재 선택한 davinci-003 의 경우 4,000 이다. 
  • gpt_model : 여기서 선택한 다빈치 모델 외에 ChatGPT, Davinci, Curie, Babbage, Ada 등의 모델이 있다.
  • temperature : 답변의 랜덤한 정도를 나타내는 것으로 0 과 1사이의 값을 가진다. 큰 값으로 갈수록 예측에서 벗어나고 다양한 특성이 있으며 작은 값으로 갈수록 전형적이고 보수적인 답변을 내놓는다.

토큰의 최대값을 초과하는 값을 입력하면 다음과 같이 Exception  오류가 발생한다. 

text-davinci-003 외에 다양한 모델을 선택해서 테스트할 수 있다.

샘플코드는 다음과 같으며, 적절히 조정해서 사용한다. 

const SECRET_KEY = "YOUR_API_KEY";
const MAX_TOKENS = 200;
const gpt_model = "text-davinci-003"

function GPT(prompt, temperature = 0.7, model = gpt_model) {
  const url = "https://api.openai.com/v1/completions";
  const payload = {
    model: model,
    prompt: prompt,
    temperature: temperature,
    max_tokens: MAX_TOKENS,
  };
  const options = {
    contentType: "application/json",
    headers: { Authorization: "Bearer " + SECRET_KEY },
    payload: JSON.stringify(payload),
  };
  const res = JSON.parse(UrlFetchApp.fetch(url, options).getContentText());
  return res.choices[0].text.trim();
}

위의 코드를 붙여넣은 다음 실행을 눌러 선택한 기능을 실행한다.

이제 스프레드시트로 돌아와서 함수를 작성해보자. 기본적인 절차는 다음과 같다. 각각의 실행과정을 살펴보기 위해 각 실행단계 첫 컬럼에 체크박스를 두었고, 체크박스가 선택되면 해당 함수가 실행되는 방식이다. 

  1. 제목란에 작성하고자하는 주제를 입력한다. 이를 영어로 번역한다.
  2. 해당 영어 주제에 적합한 영어로 된 컨텐츠를 생성한다.
  3. 해당 영어 컨텐츠에 적합한 Meta Description, 해시태그, 이미지 URL 을 생성한다. 
  4. 그리고 나서 영어로 된 컨텐츠를 이제 한국어로 번역한다.
  5. 영어로 된 Meta Description 도 한국어로 번역한다.
  6. 그리고 앞선 이미지 URL 에서 이미지를 가져온다.

 

 

각 단계에서 사용된 함수는 다음과 같다.

제목 함수
제목번역 =if(A3=TRUE,GOOGLETRANSLATE(D2,"ko","en"),"")
컨텐츠 =if(A3=TRUE,GPT("Write a long blog articles in markdown format. Length is about 8000 words and include title and subtitles. Writing Style is Professional,Length is about 8000 words.The title of the blog is:"&D2),"")
Meta Description =if(A4=TRUE,GPT("Write a meta description of SEO optimization for the blog post. The blog post is:"&D3),"")
해시 태그/키워드 =if(A5=TRUE,GPT("Find only 10 SEO-optimized hashtags or keywords for the blog . The blog post is:"&D3),"")
이미지 URL =if(A6=TRUE,GPT(" [INFO: Use the Unsplash API (https://source.unsplash.com/1600x900/?). the query is just some tags that describes the image. Write the final Image URL.] ## DO NOT RESPOND TO INFO BLOCK ## Give me a blog cover image url fit to this subject:"&D3),"")
컨텐츠 =if(A7=TRUE,GOOGLETRANSLATE(D3,"en","ko"),"")
Meta Description =if(A8=TRUE,GOOGLETRANSLATE(D4,"en","ko"),"")
이미지 =if(A9=TRUE,image(D6),"")

위의 과정으로 작성된 글은 다음 링크에 게시했으니 참고하세요. 어색한 부분이 있어, 당연히 후공정이 필요하지만 겉보기에는 외형은 그럴듯하게 나오네요. 하지만 뭐 내용 자체는 하나마나한 소리라 별로 도움이 안됩니다. 해당 실행에 소요된 자원은 다음과 같습니다.

 

728x90