들어가며
지금까지 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를 그려주는 코드들만 남게 되어 훨씬 간결해지지 않았나요? 이상으로 카피라이터 프로젝트는 마무리하고, 다음 프로젝트로 넘어가보겠습니다.
'교육과정 > chatGPT API로 AI 서비스 개발하기' 카테고리의 다른 글
[14] 자기소개서 도우미 - 프롬프트 엔지니어링 (0) | 2023.10.23 |
---|---|
[13] 자기소개서 도우미 - 프로젝트 소개 (0) | 2023.10.23 |
[11] AI 카피라이터 만들기 - UI, chatGPT API 연동하기 (0) | 2023.10.23 |
[10] AI 카피라이터 만들기 - UI 폼 자동완성 (0) | 2023.10.23 |
[9] AI 카피라이터 만들기 - UI 폼 구현하기 (0) | 2023.10.23 |