ChatGPT
- OpenAI에서 공개한 GPT모델(자연어처리 모델)을 기반으로 만든 ChatGPT
- 인공지능 채팅 서비스
- 2021년까지의 지식까지만 학습됨
- 정보를 빠른시간에 정제된 텍스트로 표현
ChatGPT 프롬프트 엔지니어링
1. 영어로 질문
- 기본적으로 영어로 세팅
- 다국어를 이용시 영어에 비해 느리고 정보량이 부족
2. 상황을 구체적으로 기술
- streamlit에 대해 설명해줘 => 나는 AI개발자야. 직원을 교육하고 있는데 streamlit에 대해 개념을 설명하는 자료를 만들어줘
3. GPT에게 역할을 부여
- 너는 스타트업에 개발 팀장이야. 팀장처럼 행동해줘 네가 질문을 하면 내가 대답을 할게. 첫번째 질문을 생성해줘
https://wrtn.ai/
GPTAPI키 받는 순서
https://openai.com/blog/openai-api 에서 로그인 ▶ 왼쪽 메뉴에서 API key에서 키 생성
# 번역서비스
1_app.py
# 번역 서비스
import streamlit as st
import openai
openai.api_key = '' # 자신의 api키 작성
example = {
"한국어": ['오늘 날씨가 어때?', '최근 딥러닝 기반의 AI기술이 인기를 끌고 있다'],
"영어":['How is the weather today?', 'Recently, AI technology based on deep learning is gaining popularity'],
"일본어":['今日の天気はどう?','最近ディープラーニング基盤のAI技術が人気を集めている']
}
# 함수 생성
def translate_text(text, src_lang, trg_lang):
def build_fewshot(src_lang, trg_lang):
src_examples = example[src_lang]
trg_examples = example[trg_lang]
fewshot_messages = []
for src_text, trg_text in zip(src_examples, trg_examples):
fewshot_messages.append({'role':'user','content':src_text})
fewshot_messages.append({'role':'assistant','content':trg_text})
return fewshot_messages
system_instrunction = f'assistant는 번역앱으로서 동작한다. {src_lang}을 {trg_lang}으로 적절하게 번역하고 번역된 텍스트만 출력한다.'
fewshot_messages = build_fewshot(src_lang=src_lang, trg_lang=trg_lang)
messages = [{'role':'system', 'content':system_instrunction}, *fewshot_messages, {'role':'user', 'content':text}] # 시스템으로 명령/ 예를 두개 정도 보냄
#print(fewshot_messages)
response = openai.chat.completions.create(
model='gpt-3.5-turbo',
messages=messages
)
print(response.choices[0].message.content)
return response.choices[0].message.content
st.title('간단한 번역 서비스')
text = st.text_area('번역할 내용을 입력하세요', '')
src_lang = st.selectbox('번역할 언어', ['한국어','영어','일본어'])
trg_lang = st.selectbox('번역된 언어', ['영어','한국어','일본어'])
if st.button('번역하기'):
translated_text = translate_text(text, src_lang, trg_lang)
st.success(translated_text)
# 광고문구 만들기
main.py
import openai
from fastapi import FastAPI
from pydantic import BaseModel
openai.api_key = ''
class AdGenerator:
def __init__(self, engine='gpt-3.5-turbo'):
self.engine = engine # gpt-3.5-turbo
self.type = self.get_type_engine(engine) # chat
def get_type_engine(self, engine):
if engine.startswith('gpt-3.5'):
return 'chat'
elif engine.startswith('text-'):
return 'text'
raise Exception(f'알려지지 않은 모델: {engine}')
def using_chatgpt(self, prompt):
system_instruction = 'assistant는 마케팅 문구 작성 도우미로 동작한다. user의 내용을 참고하여 마케팅 문구를 작성해줘'
messages = [{'role':'system', 'content':system_instruction}, {'role':'user', 'content':prompt}]
response = openai.chat.completions.create(
model=self.engine, messages=messages
)
result = response.choices[0].message.content.strip()
return result
def generate(self, product_name, details, option):
prompt = f'제품 이름: {product_name}\n주요 내용: {details}\n광고 문구의 스타일: {option}\n위 내용을 참고하여 마케팅 문구를 작성해줘'
if self.type == 'chat':
result = self.using_chatgpt(prompt=prompt)
return result
app = FastAPI()
class Product(BaseModel):
product_name: str
details: str
option: str
@app.post('/create_ad')
def create_ad(product: Product):
adGenerator = AdGenerator()
ad = adGenerator.generate(product_name=product.product_name,
details=product.details,
option=product.option)
return {'ad': ad}
streamlit으로 웹 생성
2_app.py
import streamlit as st
import requests
st.title('광고문구 서비스')
generate_ad_url = 'http://127.0.0.1:8000/create_ad'
product_name = st.text_input('제품 이름')
details = st.text_input('주요 내용')
options = st.multiselect('광고 문구의 느낌', options=['기본','재밌게', '차분하게', '과장스럽게', '참신하게', '고급스럽게'], default=['기본'])
if st.button('광고 문구 생성'):
try:
response = requests.post(
generate_ad_url,
json = {"product_name": product_name,
"details": details,
"option": ", ".join(options)} #이렇게 해야 여러개 선택한 것을 다같이 보냄
)
ad = response.json()['ad']
st.success(ad)
except:
st.error('오류')