들어가며
이번 강의에서는 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가 찰떡처럼 알아듣고 원하는 텍스트를 생성해줍니다. 프롬프트 엔지니어링의 핵심을 확실히 이해하고 넘어갔으면 좋겠습니다.
'교육과정 > chatGPT API로 AI 서비스 개발하기' 카테고리의 다른 글
[13] 자기소개서 도우미 - 프로젝트 소개 (0) | 2023.10.23 |
---|---|
[12] AI 카피라이터 만들기 - 코드 분리 (0) | 2023.10.23 |
[10] AI 카피라이터 만들기 - UI 폼 자동완성 (0) | 2023.10.23 |
[9] AI 카피라이터 만들기 - UI 폼 구현하기 (0) | 2023.10.23 |
[8] AI 카피라이터 만들기 - 프롬프트 엔지니어링 (2) (0) | 2023.10.23 |