본문 바로가기
파이썬

Streamlit/GPT API 이용해보기

by 코낄2 2023. 11. 22.

1. Streamlit

파이썬으로 데이터 분석을 위한 웹앱을 쉽게 개발할 수 있게 도와주는 라이브러리입니다.
간단한 코드로 웹 애플리케이션을 만들고 빠르게 프로토타입을 구축하고 시각적으로 공유하기 위해 사용합니다.

설치  pip install streamlit
설치 확인 및 데모 확인 streamlit hello 

입력했을 때, 처음엔 이메일을 입력하라고 안내가 뜹니다. 이메일을 입력했을 때 Streamlit창이 열리면 설치 완료입니다.

실행 streamlit run app.py
https://streamlit.io/

 

Streamlit • A faster way to build and share data apps

Streamlit is an open-source app framework for Machine Learning and Data Science teams. Create beautiful web apps in minutes.

streamlit.io

import streamlit as st

st.title('Hello World!')
st.write('여기는 텍스트 구간')

"""
# 여기는 제목
## 여기는 작은 제목
- 첫번째
- 두번째
- 세번째
"""
# 주석문을 쓰고 내용을 입력하면 마크다운으로 입력 가능

text = st.text_input("text input")
st.write(text)

selected = st.checkbox("개인정보 사용에 동의하시겠습니까?")
if selected:
    st.success("동의했습니다!")

market = st.selectbox('시장', ('코스닥', '코스피', '나스닥'))
st.write(f"selected market: {market}")

options = st.multiselect('종목', ['카카오', '네이버', '삼성', '정다운'])
st.write(', '.join(options))

st.metric(label="카카오", value="40000원", delta="1000원")

2. ChatGPT

ChatGPT는 OpenAI에서 개발한 대화형 인공 지능 모델 중 하나입니다. 모델이 대규모 텍스트 데이터를 학습하고 그 학습 결과를 기반으로 문장을 생성하거나 이해하는 데 사용됩니다. ChatGPT는 이러한 GPT 모델 중에서도 대화형 응용에 특화된 버전으로, 사용자와의 대화를 주로 다룹니다.
ChatGPT는 대화에서 나오는 문맥을 이해하고, 자연어 처리와 생성 모델을 결합하여 사용자의 입력에 응답하는 등 다양한 대화 상황에서 활용될 수 있습니다. 하지만 ChatGPT는 특정 시점의 정보까지만 알고 있으며, 지식의 최신성은 2022년 1월까지의 것입니다.

[ prompt에 질문 잘 하는 법 ]

1. 영어로 질문
    - 기본적으로 영어로 세팅
    - 다국어를 이용시 영어에 비해 느리고 정보량이 부족
2. 상황을 구체적으로 기술
    - streamlit에 대해 설명해줘 -> 나는 AI 개발자야. 직원을 교육하고 있는데 streamlit에 대해 개념을 설명하는 자료를 만들어줘.
3. 챗GPT에게 역할을 부여
    - 너는 스타트업 개발 팀장이야. 팀장처럼 행동해줘. 네가 질문을 하면 내가 대답을 할게. 첫번째 질문을 생성해줘.

 

[문제]

GPT API를 이용하여 간단한 번역기를 만들어봅니다.

import openai
import streamlit as st

openai.api_key = "https://openai.com/pricing#language-models 사이트에서 발급받은 개인key"

example = {
    "한국어":["오늘 날씨 어때","딥러닝 기반의 AI기술이 인기를 끌고있다"],
    "영어":["How is the weather today","AI technology based on deep learning is gaining popularity"],
    "일본어":["今日の天気はどう","ディープラーニング基盤のAI技術が人気を集めている"]
}

def translate_text_using_chatgpt(text, src_lang, trg_lang):
	# 번역을 돌리기 전에 간단한 예시를 통해 gpt에 원하는 바를 좀 더 구체적으로 입력하게끔
    	# 예시 만드는 함수를 내부에 만듬
    def build_fewshot(src_lang, trg_lang): # 한국어, 영어일 경우
        src_examples = example[src_lang] 
        trg_examples = example[trg_lang]

        fewshot_messages = []

# {"role": "user", "content": }{"role":"assistant", "content": }는 gpt가 요구하는 질문형식
        for src_text, trg_text in zip(src_examples,trg_examples):
        # example에 있는 문장 하나씩 text로 들어감.
            fewshot_messages.append({"role": "user", "content": src_text})
            fewshot_messages.append({"role":"assistant", "content": trg_text})
        return fewshot_messages

번역을 돌리기 전에 gpt에게 좀 더 정확하게 원하는 답을 얻기 위해 간단한 예시를 만드는 함수를 번역 함수 내부에 만들어줍니다. src_lang을 한국어, trg_lang을 영어로 설정하면 예시에는 아래와 같은 문장들이 담기게 됩니다.

src_examples = ["오늘 날씨 어때","딥러닝 기반의 AI기술이 인기를 끌고있다"]

trg_examples= ["How is the weather today","AI technology based on deep learning is gaining popularity"]

 {"role": "user", "content": }{"role":"assistant", "content": }는 gpt에게 입력할 질문 형식입니다.

import openai
import streamlit as st

openai.api_key = "https://openai.com/pricing#language-models 사이트에서 발급받은 개인key"

example = {
    "한국어":["오늘 날씨 어때","딥러닝 기반의 AI기술이 인기를 끌고있다"],
    "영어":["How is the weather today","AI technology based on deep learning is gaining popularity"],
    "일본어":["今日の天気はどう","ディープラーニング基盤のAI技術が人気を集めている"]
}

def translate_text_using_chatgpt(text, src_lang, trg_lang):
    def build_fewshot(src_lang, trg_lang): # 한국어, 영어일 경우
        src_examples = example[src_lang] 
        # src_examples = ["오늘 날씨 어때","딥러닝 기반의 AI기술이 인기를 끌고있다"]
        trg_examples = example[trg_lang]
        # trg_examples= 
        ["How is the weather today","AI technology based on deep learning is gaining popularity"]

        fewshot_messages = []

# {"role": "user", "content": }{"role":"assistant", "content": }는 gpt가 요구하는 질문형식
        for src_text, trg_text in zip(src_examples,trg_examples):
        # example에 있는 문장 하나씩 text로 들어감.
            fewshot_messages.append({"role": "user", "content": src_text})
            fewshot_messages.append({"role":"assistant", "content": trg_text})
        return fewshot_messages
    
    #gpt에게 입력할 명령문
    system_instruction = f"assistant는 번역앱으로서 동작한다. 
    					{src_lang}을 {trg_lang}으로 적절하게 변역하고 번역된 텍스트만 출력한다."
	
    # 위에 만들어둔 예시 함수 실행
    fewshot_messages = build_fewshot(src_lang=src_lang, trg_lang=trg_lang)

    messages = [{"role": "system", "content": system_instruction}, *fewshot_messages, {"role":"user", "content": text}]

    response = openai.chat.completions.create(
        model = "gpt-3.5-turbo",
        messages= messages
    )
    # print(response)

    return response.choices[0].message.content

# streamlit 이용
st.title("간단 번역 서비스")
text = st.text_area("번역할 내용을 입력하세요", "")
src_lang = st.selectbox("번역 전 언어",["영어", "일본어", "한국어"])
trg_lang = st.selectbox("번역 후 언어",["한국어", "일본어", "영어"])

if st.button("번역하기"):
    translated_text = translate_text_using_chatgpt(text, src_lang, trg_lang)
    st.success(translated_text)

완성된 번역 함수 모습입니다!!

'파이썬' 카테고리의 다른 글

파이썬 예외처리  (0) 2023.09.17
파이썬 스페셜 메소드  (0) 2023.09.17
파일 입출력 라이브러리2  (0) 2023.09.14
파일 입출력 라이브러리  (0) 2023.09.14
super()메소드와 다중상속  (0) 2023.09.13