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에서 키 생성

 

OpenAI API

We’re releasing an API for accessing new AI models developed by OpenAI.

openai.com

 

 

 

# 번역서비스

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('오류')