본문 바로가기

[11] AI 카피라이터 만들기 - UI, chatGPT API 연동하기

들어가며

🏫 전체 강의 영상 youtube

✍️ 마케팅 문구 생성기 사용해보기

 ▶️  강의 영상 유튜브

 

이번 강의에서는 UI에 chatGPT API를 연동해서 유저가 입력한 데이터로 마케팅 문구를 생성하고, 화면에 출력해보겠습니다.

 

프롬프트 템플릿 작성

이전에 만들었던 프롬프트 템플릿을 복사해서 form 위 쪽으로 붙여넣겠습니다.

prompt_template = """
제품 혹은 브랜드를 SNS에 광고하기 위한 문구를 {num}개 생성해주세요.
자극적이고 창의적으로 작성해주세요.
명사 위주로 간결하게 작성해주세요.
반드시 {max_length} 단어 이내로 작성해주세요.
키워드가 주어질 경우, 반드시 키워드 중 하나를 포함해야 합니다.
이모지를 적절하게 사용해주세요.
---
제품명: {product_name}
제품설명: {product_desc}
키워드: {keywords}
---
""".strip()

그 다음 submit 버튼을 누루고 예외 처리를 모두 통과했을 때, generate_prompt 함수를 호출해서 프롬프트를 생성해보겠습니다.

if submit:
    ...
    with st.spinner('AI 카피라이터가 광고 문구를 생성 중입니다...'):
        prompt = prompt_template.format(
            product_name=product_name, 
            product_desc=product_desc,
            max_length=max_length,
            num=num,
            keywords=keywords
    	)
    	print(prompt)

>>
제품 혹은 브랜드를 SNS에 광고하기 위한 문구를 10개 생성해주세요.
자극적이고 창의적으로 작성하세요.
명사 위주로 간결하게 작성하세요.
반드시 5 단어 이내로 작성해주세요.
키워드가 주어질 경우, 반드시 키워드 중 하나를 포함해야 합니다.
---
제품명: 카누
제품설명: 집에서도 카페 느낌의 아메리카노 맛이 나는 커피 믹스
키워드: ['브라질', '카페', '공유']
---

chatGPT API 요청

openai api key 설정

이제 생성된 프롬프트를 chatGPT에 요청하는 일만 남았습니다. 이를 위해선 openai 라이브러리를 import 하고, api key를 지정해주어야 합니다.

 

그런데 한 가지 주의 사항이 있습니다. 앞서서 api key를 환경 변수에 등록한 다음 사용을 했습니다만, streamlit 에서는 streamlit secrets라는 걸 이용해서 api key를 관리해주면 됩니다. 그 이유는 서비스 배포할 때 자세히 알아보겠습니다.

 

streamlit secrets를 사용하려면 먼저 .streamlit이란 폴더를 만들고 그 아래에 secrets.toml이라는 파일을 만들어주면 됩니다. 그 안에 API 키값을 복사해서 붙여넣어주겠습니다.

그 다음, 혹시라도 secrets.toml 파일이 유출되면 안되니까 git에 추적되지 않게 .gitignore를 추가하겠습니다. 아직 git에 익숙하지 않으신 분들은 지금은 넘어가도 좋습니다. 서비스 배포할 때 다시 한 번 알아보겠습니다. .streamlit 폴더 아래에 .gitignore 파일을 추가하고, secrets.toml을 적어주면 됩니다.

다시 코드로 돌아와서 이제 openai 라이브러리를 임포트하고 st.secrets를 이용해서 api key를 지정해주겠습니다.

import openai

openai.api_key = st.secrets["OPENAI_API_KEY"]

chatGPT API 요청

이제 프롬프트도 만들었겠다, openai 라이브러리를 이용해서 텍스트 생성 요청을 보내봐야겠죠? 마찬가지로 이전에 작성했던 코드를 복사해서 generate_prompt 함수 위쪽으로 붙여넣겠습니다.

def request_chat_completion(prompt, stream=False):
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "system", "content": "당신은 전문 카피라이터입니다."},
            {"role": "user", "content": prompt}
        ],
        stream=stream
    )
    return response

그 다음, submit 버튼을 누르고 프롬프트 생성까지 성공한 다음, 텍스트 생성을 요청하도록 코드를 작성해보겠습니다.

if submit:
    ...
    with st.spinner('AI 카피라이터가 광고 문구를 생성 중입니다...'):
        prompt = prompt_template.format(
            product_name=product_name, 
            product_desc=product_desc,
            max_length=max_length,
            num=num,
            keywords=keywords
        )
        response = request_chat_completion(prompt)
        generated_text = response["choices"][0]["message"]["content"]
        st.markdown(generated_text)

스트리밍 처리

지금도 물론 훌륭합니다만, 전체 텍스트가 다 생성될 때까지 유저가 대기하고 있어야 한다는 점이 아쉽습니다. 스트리밍 방식으로 요청을 보내고, 텍스트가 생성되는 족족 화면에 그려주도록 코드를 수정해보겠습니다.

if submit:
    ...
    with st.spinner('AI 카피라이터가 광고 문구를 생성 중입니다...'):            
        response = request_chat_completion(prompt, stream=True)
    message = ""
    placeholder = st.empty()
    for chunk in response:
        delta = chunk.choices[0]["delta"]
        if "content" in delta:
            message += delta["content"]
            placeholder.markdown(message + "▌")
        else:
            break
    placeholder.markdown(message)

마치며

지금까지 chatGPT API를 이용해서 마케팅 문구를 생성하는 웹 서비스를 만들어 보았습니다. 직접 만들어보니까 생각보다 어렵지 않았죠? 내가 원하는 조건만 자연어로 묘사해주면 chatGPT가 찰떡처럼 알아듣고 원하는 텍스트를 생성해줍니다. 프롬프트 엔지니어링의 핵심을 확실히 이해하고 넘어갔으면 좋겠습니다.