import gradio as gr from openai import OpenAI import os client=OpenAI(api_key=os.environ.get('OPENAI_API_KEY')) #상담봇 def counseling_bot_chat(message, chat_history): if message == '': return "", chat_history else: completion=client.chat.completions.create( model='gpt-3.5-turbo', messages=[ {"role":'system','content':'당신은 경제 전문 기자 입니다. 경제분야와 관련되지 않는 질문에는 정중히 거절하세요.'}, {'role':'user','content':message} ] ) chat_history.append([message, completion.choices[0].message.content]) return '', chat_history def counseling_bot_undo(chat_history): if len(chat_history) > 1: chat_history.pop() return chat_history def counseling_bot_reset(messaage, chat_history): chat_history=[[None, "안녕하세요. 경제 전문기자입니다. 궁금한 점 물어보세요."]] return chat_history # 번역봇 def translate_bot(output_conditions, output_language, input_text): if input_text =='': return '' else: if output_conditions == '': output_conditions='' else: output_conditions='번역할 때의 조건은 다음과 같습니다.'+output_conditions completion=client.chat.completions.create( model='gpt-3.5-turbo', messages=[ {'role':'system','content':'당신은 번역가입니다. 입력한 언어를 다른 설명 없이 곧바로 {0}로 번역해서 알려주세요. 번역이 불가능한 언어라면 번역이 불가능하다고 말한 후 그 이유를 설명해 주세요.{1}'.format(output_language,output_conditions)}, {'role':'user','content':input_text} ] ) return completion.choices[0].message.content # 소설봇 def novel_bot(model, temperature, detail): completion=client.chat.completions.create( model=model, temperature=temperature, messages=[ {'role':'system','content':'당신은 소설가 입니다. 요청하는 조건에 맞춰 소설을 작성해 주세요'}, {'role':'user','content':detail} ] ) return completion.choices[0].message.content with gr.Blocks(theme=gr.themes.Default()) as app: with gr.Tab('상담봇'): gr.Markdown( value=""" #
상담봇
헤이마트 상담봇입니다. 마트에서 판해하는 상품과 관련된 질문에 답변드립니다.
""" ) cb_chatbot=gr.Chatbot( value=[[None, '안녕하세요. 경제 전문기자입니다. 궁금한 점 물어보세요.']], show_label=False ) with gr.Row(): cb_user_input=gr.Text( lines=1, placeholder='입력 창', container=False, scale=9 ) cb_send_btn=gr.Button( value='보내기', scale=1, variant='primary' ) with gr.Row(): gr.Button(value='되돌리기').click(fn=counseling_bot_undo, inputs=cb_chatbot,outputs=cb_chatbot) gr.Button(value='초기화').click(fn=counseling_bot_reset, inputs=cb_chatbot,outputs=cb_chatbot) cb_send_btn.click(fn=counseling_bot_chat, inputs=[cb_user_input, cb_chatbot],outputs=[cb_user_input, cb_chatbot]) cb_user_input.submit(fn=counseling_bot_chat, inputs=[cb_user_input,cb_chatbot],outputs=[cb_user_input,cb_chatbot]) with gr.Tab('번역봇'): gr.Markdown( value=""" #
번역봇
다국어 번역봇입니다.
""" ) with gr.Row(): tb_output_conditions=gr.Text( label='번역 조건', placeholder="예시: 자연스럽게", lines=1, max_lines=3, ) tb_output_language=gr.Dropdown( label='출력 언어', choices=['한국어','영어','일본어','중국어'], value='한국어', allow_custom_value=True, interactive=True ) tb_submit=gr.Button( value='번역하기', variant='primary' ) with gr.Row(): tb_input_text=gr.Text( placeholder='번역할 내용을 적어 주세요.', lines=10, max_lines=20, show_copy_button=True, label='' ) tb_output_text=gr.Text( lines=10, max_lines=20, show_copy_button=True, label='', interactive=False ) tb_submit.click( fn=translate_bot, inputs=[tb_output_conditions, tb_output_language, tb_input_text], outputs=tb_output_text ) with gr.Tab('소설봇'): gr.Markdown( value=""" #
소설봇
소설을 생성해 주는 봇입니다.
""" ) with gr.Accordion(label='사용자 설정'): with gr.Row(): with gr.Column(scale=1): nb_model=gr.Dropdown( label='모델 선택', choices=['gpt-3.5-turbo','gpt-3.5-turbo-16k'], value='gpt-3.5-turbo', interactive=True ) nb_temperature=gr.Slider( label='창의성', info='숫자가 높을 수록 창의적', minimum=0, maximum=2, step=0.1, value=1, interactive=True ) nb_detail=gr.Text( container=False, placeholder='소설의 세부적인 설정을 작성합니다.', lines=8, scale=4 ) nb_submit=gr.Button( value='생성하기', variant='primary' ) nb_output=gr.Text( label='', placeholder='이곳에 소설의 내용이 출력됩니다.', lines=10, max_lines=200, show_copy_button=True ) nb_submit.click( fn=novel_bot, inputs=[nb_model, nb_temperature, nb_detail], outputs=nb_output ) app.launch()