1. ChatGPT
- OpenAI가 개발한 자연어 처리 모데로, 인간과 유사한 방식으로 대화를 나눌 수 있는 인공지는 시스템
- GPT(Generative Pre-trained Transformer) 아키텍처를 기반으로 현재는 GPT-4 버전을 사용
- 기본적으로 영어로 세팅 -> 다국어를 이용시 영어에 비해 느리고 정보량이 부족
- 상황을 구체적으로 기술할 수록 좋은 결과를 기대할 수 있음
- chatGPT에게 역할을 부여할수록 좋은 결과를 기대할 수 있음
- 새로운 파일 생성
- 화면구성
import streamlit as st
st.title("초간단 번역 서비스앱")
text = st.text_area("번역할 내용을 입력하세요", "")
src_lang = st.selectbox("번역할 언어를 선택하세요", ["한국어", "영어", "일본어"])
trg_lang = st.selectbox("번역될 언어를 선택하세요", ["영어", "한국어", "일본어"])
if st.button("번역하기"):
pass
- openai 모듈 설치 후 사용, 학습시키기
import openai
openai.api_key = "sk-proj-VptnRRkv1xMQsRGpiXjmT3BlbkFJLsO6Fv6gtbvPA8qVvm9H"
example = {
"한국어" : ["오늘 날씨 어때?", "딥러닝 기반의 AI기술이 인기를 끌고 있다"]
"영어" : ["How is the weather today?", "AI technology based on deep learning is gaining popularity"]
"일본어" : ["今日の天気はどう?","ディープラーニングベースのAI技術が人気を集めている"]
}
- 설치
- 번역함수 작성
# 번역 요청을 처리하는 함수.
def translate_text_chatgpe(text, src_lang, trg_lang):
"""
text (str): 번역할 텍스트.
src_lang (str): 소스 언어 코드.
trg_lang (str): 대상 언어 코드.
"""
# 몇 가지 예제(few-shot) 메시지를 생성하는 함수
def build_fewshot(src_lang, trg_lang):
# 소스 언어와 대상 언어의 예제 문장들
src_examples = example[src_lang]
trg_examples = example[trg_lang]
fewshot_messages = []
# 각 예제를 사용자 입력과 번역된 출력으로 구성하여 리스트에 추가
for src_text, tag_text in zip(src_examples, trg_examples):
fewshot_messages.append({"role": "user", "content": src_text})
fewshot_messages.append({"role": "assistant", "content": tag_text})
return fewshot_messages
# 시스템 역할의 초기 명령 생성
system_instruction = f"assistant는 번역앱으로서 동작한다. {src_lang}을 {trg_lang}으로 적절하게 번역하고 번역된 텍스트만 출력한다."
# few-shot 예제 메시지 생성
fewshot_messages = build_fewshot(src_lang=src_lang, trg_lang=trg_lang)
# 메시지 리스트에 시스템 명령, few-shot 예제 메시지, 번역할 텍스트 추가
messages = [{"role":"system", "content": system_instruction}, *fewshot_messages, {"role": "user", "content": text}]
return messages
1. translate_text_chatgpe 함수이 함수는 번역 요청을 처리하며, 입력된 텍스트(text)를 소스 언어(src_lang)에서 대상 언어(trg_lang)로 번역하기 위해 필요한 메시지 구조를 만듭니다.2. build_fewshot 함수
3. 시스템 명령 생성system_instruction는 모델이 번역 앱으로서 동작할 수 있도록 지시합니다. 시스템 역할의 초기 명령을 생성합니다.이 함수는 몇 가지 예제(few-shot) 메시지를 생성합니다. 예제는 소스 언어와 대상 언어로 된 문장의 쌍으로 구성됩니다. 이러한 예제는 모델이 번역을 어떻게 해야 하는지 학습하는 데 도움이 됩니다. 4. 전체 메시지 생성messages 리스트에 시스템 명령과 few-shot 예제 메시지, 그리고 번역할 텍스트를 추가합니다.
|
|
- 번역한 것만 출력하기
response = openai.chat.completions.create(
model="gpt-3.5-turbo", messages=messages
)
# print(response)
# print(response.choices[0].message.content)
return response.choices[0].message.content
|
- 전체코드
import streamlit as st
import openai
openai.api_key = "sk-proj-VptnRRkv1xMQsRGpiXjmT3BlbkFJLsO6Fv6gtbvPA8qVvm9H"
example = {
"한국어" : ["오늘 날씨 어때?", "딥러닝 기반의 AI기술이 인기를 끌고 있다"],
"영어" : ["How is the weather today?", "AI technology based on deep learning is gaining popularity"],
"일본어" : ["今日の天気はどう?","ディープラーニングベースのAI技術が人気を集めている"]
}
def translate_text_chatgpe(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, tag_text in zip(src_examples, trg_examples):
fewshot_messages.append({"role": "user", "content": src_text})
fewshot_messages.append({"role": "assistant", "content": tag_text})
return fewshot_messages
system_instruction = f"assiatant는 번역앱으로서 동작한다. {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}]
# print(messages)
response = openai.chat.completions.create(
model="gpt-3.5-turbo", messages=messages
)
# print(response)
# 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_chatgpe(text, src_lang, trg_lang)
st.success(translated_text)
2. 광고문구를 생성해주는 앱
- FastAPI 설치
- terminal 실행 입력
더보기
- streamlit 실행
streamlit run app.py
- main.py 실행
uvicorn main:app --reload
- main.py
더보기
import openai
from fastapi import FastAPI
from pydantic import BaseModel
openai.api_key = 'sk-proj-VptnRRkv1xMQsRGpiXjmT3BlbkFJLsO6Fv6gtbvPA8qVvm9H'
app = FastAPI()
class AdGenerator:
def __init__(self, engine='gpt-3.5-turbo'):
self.engine = engine
def using_engine(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, tone_and_manner):
prompt = f'제품 이름: {product_name}\n주요 내용: {details}\n광고 문구의 스타일: {tone_and_manner} 위 내용을 참고하여 마케팅 문구를 만들어라'
result = self.using_engine(prompt=prompt)
return result
class Product(BaseModel):
product_name: str
details: str
tone_and_manner: str
@app.post('/create_ad')
async def create_ad(product: Product):
# print(product)
ad_generator = AdGenerator()
ad = ad_generator.generate(product_name=product.product_name,
details=product.details,
tone_and_manner=product.tone_and_manner)
return {'ad': ad}
- 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,
"tone_and_manner": ", ".join(options)})
ad = response.json()['ad']
st.success(ad)
except:
st.error("연결 실패!")
3. 과제
"광고 문구 서비스앱"에 "광고문구 생성하기" 실행마다 MongoDB에 저장하고 ,
저장된 내용을 json으로 반환하여 표로 뜨게 하기
< js >
< js >
< js >
< js >
< js >
< js >
< js >
< js >
< js >
1.
< js >
< js >
< js >
< js >
< js >
< js >
< js >
< js >
< js >
'Python > Fast Api' 카테고리의 다른 글
02. Streamlit (0) | 2024.06.04 |
---|---|
01. Fast API (0) | 2024.06.04 |