본문 바로가기

[12] AI 카피라이터 만들기 - 코드 분리

들어가며

🏫 전체 강의 영상 youtube

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

 ▶️  강의 영상 유튜브

 

지금까지 chatGPT API를 이용해서 마케팅 문구를 생성하는 서비스를 만들어보았습니다. 이어지는 실습 프로젝트들을 개발할 때 편하게 쓸 수 있도록 자주 사용하게 될 함수를 별도의 파일로 분리해보겠습니다.

공통 로직 분리

먼저 공통 로직을 분리할 common.py 파일을 생성해줍니다.

chatGPT API 요청 분리

ChatCompletion API를 요청하는 부분을 분리해보겠습니다. 모든 실습 프로젝트는 gpt-3.5-turbo를 사용할 예정이므로 고정하고, system role은 각 프로젝트마다 달리질 수 있으므로 파라미터로 빼주겠습니다. 그리고 system role이 주어지지 않을 경우를 대비해서 system role이 주어질 때에만 messages에 포함하도록 처리해보겠습니다.

# common.py
import openai


def request_chat_completion(prompt, stream=False, system_role=None):
    messages = [{"role": "user", "content": prompt}]
    if system_role:
        messages = [{"role": "system", "content": system_role}] + messages
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=messages,
        stream=stream
    )
    return response

그 다음 기존 코드로 돌아가서 원래 request_chat_completion 함수는 삭제해주고, 공통 로직으로 빼준 함수를 import해서 사용하도록 수정합니다.

# pages/1_✍️_copywriter.py
from common import request_chat_completion

if submitted:
    ...
    with st.spinner('AI 카피라이터가 광고 문구를 생성 중입니다...'):
        keywords = [keyword_one, keyword_two, keyword_three]
        keywords = [x for x in keywords if x]
        prompt = generate_prompt(name, desc, num, max_length, keywords)
        system_role = "당신은 전문 카피라이터입니다."
        response = request_chat_completion(prompt, stream=True, system_role=system_role)

streaming 응답 출력

다음으로 스트리밍 방식의 응답을 화면에 출력하는 코드도 공통 로직으로 빼주겠습니다.

# common.py
import streamlit as st

def write_streaming_response(response):
    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)

원래의 코드로 돌아가서 기존 코드를 공통화 한 함수로 대체해주겠습니다.

# pages/1_✍️_copywriter.py
from common import request_chat_completion, write_streaming_response

if submitted:
    ...
    with st.spinner('AI 카피라이터가 광고 문구를 생성 중입니다...'):
        keywords = [keyword_one, keyword_two, keyword_three]
        keywords = [x for x in keywords if x]
        prompt = generate_prompt(name, desc, num, max_length, keywords)
        system_role = "당신은 전문 카피라이터입니다."
        response = request_chat_completion(prompt, stream=True, system_role=system_role)
		write_streaming_response(response)

마치며

어떤가요? copywriter.py 파일에는 UI를 그려주는 코드들만 남게 되어 훨씬 간결해지지 않았나요? 이상으로 카피라이터 프로젝트는 마무리하고, 다음 프로젝트로 넘어가보겠습니다.