인공지능/LLM 서비스 개발
Gradio
Ryuzy
2024. 11. 29. 17:39
728x90
반응형
1. Gradio
머신러닝 모델을 간단히 웹 애플리케이션 형태로 배포할 수 있게 해주는 파이썬 라이브러리입니다. 이를 통해 사용자는 인터랙티브 웹 인터페이스를 통해 모델을 테스트하고 공유할 수 있습니다. Gradio는 머신러닝 엔지니어, 데이터 과학자, 연구자들이 복잡한 웹 개발 지식 없이도 직관적인 UI를 생성할 수 있도록 설계되었습니다. 모델의 입력과 출력을 정의하면 Gradio가 자동으로 웹 기반 인터페이스를 생성하며, 이를 로컬에서 실행하거나 웹에 배포할 수 있습니다.
pip install gradio
import gradio as gr
with gr.Blocks() as demo:
gr.Markdown("# 안녕하세요")
gr.Markdown("## 여기는 제목을 입력합니다")
gr.Markdown("- 첫번째 아이템\n- 두번째 아이템\n- 세번째 아이템")
demo.launch()
def handle_input(text):
return text
with gr.Blocks() as demo:
text_input = gr.Textbox(label="문자입력", lines=1)
output_text = gr.Textbox(label="출력")
text_input.submit(handle_input, inputs=text_input, outputs=output_text)
demo.launch()
def handle_checkbox(selected):
if selected:
return "동의했습니다!"
return "동의하지 않았습니다!"
with gr.Blocks() as demo:
checkbox = gr.Checkbox(label='개인정보 사용에 동의하겠습니까?')
output_checkbox = gr.Textbox(label='출력')
checkbox.change(handle_checkbox, inputs=checkbox, outputs=output_checkbox)
demo.launch()
def handle_fruit(fruit):
return f'선택한 과일: {fruit}'
with gr.Blocks() as demo:
fruit_dropdown = gr.Dropdown(label="과일", choices=['사과', '오렌지', '바나나', '메론'])
output_fruit = gr.Textbox(label='구입한 과일')
fruit_dropdown.change(handle_fruit, inputs=fruit_dropdown, outputs=output_fruit)
demo.launch()
def add(num1, num2):
return num1 + num2
interface = gr.Interface(
fn=add,
inputs = ['number', 'number'],
outputs = 'number',
title='계산기',
description='숫자 두 개를 입력하세요',
flagging_mode="never" # flag를 하지 않음
)
interface.launch()
※ Flag 버튼
기본적으로 생성된 인터페이스에서 사용자가 앱의 입력이나 출력을 플래그(flagging)할 수 있도록 제공되는 기능입니다. 플래그 버튼을 누르면 해당 입력과 출력이 기록되어 문제 상황이나 유용한 사례를 저장하거나 분석하는 데 활용됩니다. Flag 버튼을 원하지 않는 경우 flagging_options를 비활성화하거나 설정을 변경하여 제거할 수 있습니다.
flagging_dir=None
def favorite_language(language):
messages = {
"Python": "Python은 데이터 과학, 웹 개발, AI에 아주 적합한 언어입니다!",
"JavaScript": "JavaScript는 웹 개발에 강력하며, 프론트엔드와 백엔드에서 모두 사용됩니다.",
"Java": "Java는 안정성과 성능으로 유명하며, 대규모 시스템에 적합합니다.",
"C++": "C++는 고성능 애플리케이션과 게임 개발에 자주 사용됩니다."
}
return messages.get(language, '선택된 언어에 대한 정보가 없습니다')
interface = gr.Interface(
fn=favorite_language,
inputs = gr.Radio(['Python', 'JavaScript', 'Java', 'C++'], label='좋아하는 언어'),
outputs = 'text',
title='좋아하는 언어',
description='라디오 버튼에서 좋아하는 프로그래밍 언어를 선택하세요'
)
interface.launch()
import gradio as gr
import os
from openai import OpenAI
from dotenv import load_dotenv
load_dotenv()
client = OpenAI(
api_key = os.getenv("API_KEY")
)
# 예제 데이터
example = {
"한국어":["오늘 날씨 어때?", "최근 멀티모달 AI 기술이 인기를 끌고 있다"],
"영어":["How is the weather today?", "Recently, multimodal AI technology has become popular"],
"일본어":["今日の天気はどう?", "最近マルチモーダルAI技術が人気を集めている"]
}
def translate_text_chatgpt(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_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 = client.chat.completions.create(
model="gpt-3.5-turbo-0125",
messages=messages
)
return response.choices[0].message.content
def gradio_translate(text, src_lang, trg_lang):
if not text.strip():
return "번역할 내용을 입력하세요"
if src_lang == trg_lang:
return "원본 언어와 번역 언어가 같습니다. 다른 언어를 선택하세요"
return translate_text_chatgpt(text, src_lang, trg_lang)
with gr.Blocks() as demo:
gr.Markdown("# 초간단 번역 앱")
text_input = gr.Textbox(label="번역할 내용을 입력하세요", placeholder="여기에 내용을 입력하세요")
src_lang_dropdown = gr.Dropdown(choices=["한국어", "영어", "일본어"], value="영어", label="번역할 언어를 선택하세요")
trg_lang_dropdown = gr.Dropdown(choices=["영어", "한국어", "일본어"], value="한국어", label="번역된 언어를 선택하세요")
translate_botton = gr.Button("번역하기")
output_text = gr.Textbox(label="번역 결과", placeholder="번역된 결과가 여기에 표시됩니다", interactive=False)
translate_botton.click(
gradio_translate,
inputs=[text_input, src_lang_dropdown, trg_lang_dropdown],
outputs=output_text
)
demo.launch()
728x90
반응형