Download app.py from Kims12/3-3_NBlog: direct link, hf CLI and curl.
- Browser
- Download file 7.02 kB
-
https://huggingface.co/spaces/Kims12/3-3_NBlog/resolve/main/app.py
- Command line
-
hf download hf://spaces/Kims12/3-3_NBlog/app.py
-
curl -L -o app.py https://huggingface.co/spaces/Kims12/3-3_NBlog/resolve/main/app.py
7.02 kB
| import gradio as gr | |
| import openai | |
| import os | |
| def respond_chatgpt_qna( | |
| question: str, | |
| system_message: str, | |
| max_tokens: int, | |
| temperature: float, | |
| top_p: float | |
| ): | |
| """ | |
| OpenAI์ gpt-4o-mini ๋ชจ๋ธ์ ์ด์ฉํด ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ ๋ฐํํ๋ ํจ์. | |
| """ | |
| openai_token = os.getenv("OPENAI_TOKEN") | |
| if not openai_token: | |
| return "OpenAI API ํ ํฐ์ด ํ์ํฉ๋๋ค." | |
| openai.api_key = openai_token | |
| messages = [ | |
| {"role": "system", "content": system_message}, | |
| {"role": "user", "content": question} | |
| ] | |
| try: | |
| response = openai.ChatCompletion.create( | |
| model="gpt-4o-mini", | |
| messages=messages, | |
| max_tokens=max_tokens, | |
| temperature=temperature, | |
| top_p=top_p, | |
| ) | |
| assistant_message = response.choices[0].message['content'] | |
| return assistant_message | |
| except Exception as e: | |
| return f"์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค: {str(e)}" | |
| def merge_and_call(tone: str, ref1: str, ref2: str, ref3: str): | |
| """ | |
| ์ฌ์ฉ์๊ฐ ์ ํํ ๋งํฌ์ ์ฐธ์กฐ๊ธ๋ค์ ํ๋์ ํ๋กฌํํธ๋ก ํฉ์ณ gpt-4o-mini ๋ชจ๋ธ์ ์ ๋ฌํ๋ ํจ์. | |
| ๊ฐ ๋งํฌ์ ๋ฐ๋ผ ๊ณ ์ ์ system_message(ํ๋กฌํํธ)๊ฐ ์ ์ฉ๋๋ฉฐ, ์๋์ ๊ธฐ๋ณธ ํ๋กฌํํธ ๊ท์น์ ๋ฐ๋์ ์ค์ํ๋ค. | |
| """ | |
| # ๊ธฐ๋ณธ ํ๋กฌํํธ ๊ท์น (๋ชจ๋ ๋งํฌ์ ๊ณตํต ์ ์ฉ) | |
| base_prompt = ( | |
| "๋๋ ๊ฐ์ฅ ์ฃผ๋ชฉ๋ฐ๋ ๋ง์ผํฐ์ด๋ฉฐ ๋ธ๋ก๊ทธ ๋ง์ผํ ์ ๋ฌธ๊ฐ์ด๋ค. " | |
| "ํนํ ๋๋ '์ ๋ณด์ฑ(Informative)' ์ ๋ฌธ ๋ธ๋ก๊ทธ ๋ง์ผํ ์ ๋ฌธ๊ฐ๋ก์, ์ ๋ณด ์ ๊ณต์ ์ด์ ์ ๋ง์ถ์ด ์์ฑํด์ผ ํ๋ค.\n" | |
| "๋ค์ ํ ์คํธ ์์ฑ ๊ท์น์ ๋ฐ๋์ ์ค์ํ๋ผ:\n" | |
| "1. ์์ฃผ์ ๋ฅผ 5๊ฐ๋ก ๊ตฌ๋ถํ์ฌ 2000์ ์ด์ ์์ฑํ๋ผ.\n" | |
| "2. ์ ์ฒด ๋งฅ๋ฝ์ ์ดํดํ๊ณ ๋ฌธ์ฅ์ ์ผ๊ด์ฑ์ ์ ์งํ๋ผ.\n" | |
| "3. ์ ๋๋ก ์ฐธ๊ณ ๊ธ์ ํ ๋ฌธ์ฅ ์ด์ ๊ทธ๋๋ก ์ถ๋ ฅํ์ง ๋ง๋ผ.\n" | |
| "4. ์ฃผ์ ์ ์ํฉ์ ๋ง๋ ์ ์ ํ ์ดํ๋ฅผ ์ ํํ๋ผ.\n" | |
| "5. ํ๊ธ ์ดํ์ ๋์ด๋๋ ์ฝ๊ฒ ์์ฑํ๋ผ.\n" | |
| "6. ์ ๋ ๋ฌธ์ฅ์ ๋์ '๋ต๋๋ค'๋ฅผ ์ฌ์ฉํ์ง ๋ง๋ผ.\n" | |
| "์ ๋ณด์ฑ ๋ธ๋ก๊ทธ ์์ฑ ๊ท์น:\n" | |
| "1. ๋ ์๊ฐ ์ป๊ณ ์ ํ๋ ์ ์ฉํ๊ณ ํฅ๋ฏธ๋ก์ด ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ผ.\n" | |
| "2. ๋ ์์ ๊ณต๊ฐ์ ์ด๋์ด๋ด๊ณ ๊ถ๊ธ์ฆ์ ํด๊ฒฐํ๋ผ.\n" | |
| "3. ๋ ์์ ๊ด์ฌ์ฌ๋ฅผ ์ถฉ์กฑ์ํค๋ผ.\n" | |
| "4. ๋ ์์๊ฒ ์ด๋์ด ๋๋ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ผ.\n" | |
| "์ ์ธ ๊ท์น:\n" | |
| "1. ๋ฐ๋์ ๋น์์ด ๋ฐ ์์ค์ ์ ์ธํ๋ผ.\n" | |
| "2. ๋ฐ๋์ ์ฐธ๊ณ ๊ธ์ ๋งํฌ(URL)๋ ์ ์ธํ๋ผ.\n" | |
| "3. '๋งํฌ๋ฅผ ํ์ธํด์ฃผ์ธ์' ๋ฑ์ ๋ฌธ๊ตฌ๋ ์ ์ธํ๋ผ.\n" | |
| "4. ์ฐธ๊ณ ๊ธ์ ์๋ ์์ฑ์, ํ์, ์ ํ๋ฒ, ๊ธฐ์์ ์ด๋ฆ, ์ ์นญ, ๋๋ค์์ ๋ฐ๋์ ์ ์ธํ๋ผ.\n" | |
| "5. ๋ฌธ์ฅ์ ๋๋ถ๋ถ์ ์ด์ํ ํํ(์: '์์', '๋ต๋๋ค', 'ํด์', 'ํด์ฃผ์ฃ ', '๋์ฃ ', '๋์ด์', '๊ณ ์' ๋ฑ)์ ์ฌ์ฉํ์ง ๋ง๋ผ." | |
| ) | |
| # ๋งํฌ๋ณ ์ถ๊ฐ ํ๋กฌํํธ ์ค์ | |
| if tone == "์น๊ทผํ๊ฒ": | |
| tone_prompt = ( | |
| "์น๊ทผํ๊ฒ:\n" | |
| "1. ํค๊ณผ ์ด์กฐ: ๋ํํ๋ฏ ํธ์ํ๊ณ ์น๊ทผํ ๋งํฌ๋ฅผ ์ฌ์ฉํ๋ผ.\n" | |
| "2. ๋ฌธ์ฅ ๋ฐ ์ดํฌ: ๋ฐ๋์ 'ํด์์ฒด'๋ก ์์ฑํ๋ฉฐ, '์ต๋๋ค'์ฒด๋ '~๋ค'๋ก ๋๋์ง ์๋๋ก ํ๋ผ. ๊ตฌ์ด์ฒด ํํ(์: '~ํ์ด์', '~์ธ ๊ฒ ๊ฐ์์')์ ์ฌ์ฉํ๋ผ.\n" | |
| "3. ์ฉ์ด ๋ฐ ์ค๋ช : ์ ๋ฌธ ์ฉ์ด ๋์ ์ฌ์ด ๋จ์ด๋ฅผ ์ฌ์ฉํ๊ณ , ๋น์ ๋ ์์ ๋ฅผ ํตํด ๋ณต์กํ ๊ฐ๋ ์ ์ค๋ช ํ๋ผ.\n" | |
| "4. ๋ ์์์ ์ํธ์์ฉ: ๋ ์์ ์๊ฒฌ์ ๋ฌป๋ ์ง๋ฌธ๊ณผ ๋๊ธ์ ์ ๋ํ๋ ๋ฌธ๊ตฌ๋ฅผ ํฌํจํ๋ผ.\n" | |
| "์ฃผ์: ๋๋ฌด ๊ฐ๋ฒผ์ด ํค์ ํผํ๋ ์ฃผ์ ์ ์ค์์ฑ์ ํด์น์ง ๋ง๋ผ." | |
| ) | |
| elif tone == "์ผ๋ฐ์ ์ธ": | |
| tone_prompt = ( | |
| "์ผ๋ฐ์ ์ธ:\n" | |
| "1. ํค๊ณผ ์ด์กฐ: ์ค๋ฆฝ์ ์ด๊ณ ๊ฐ๊ด์ ์ธ ํค์ ์ ์งํ๋ฉฐ, ์ ์ ํ ์กด๋๋ง(์: '~ํฉ๋๋ค', '~์ ๋๋ค')์ ์ฌ์ฉํ๋ผ.\n" | |
| "2. ๋ด์ฉ ๊ตฌ์กฐ: ๋ช ํํ ์ฃผ์ ์ ์์ ๋ ผ๋ฆฌ์ ์ธ ์ ๊ฐ, ์์ ๋ชฉ ๋ฐ ๋จ๋ฝ ๊ตฌ๋ถ์ ํ์ฉํ๋ผ.\n" | |
| "3. ์ฉ์ด ๋ฐ ์ค๋ช : ์ดํดํ๊ธฐ ์ฌ์ด ์ฉ์ด์ ๊ฐ๋จํ ์ค๋ช ์ ์ฌ์ฉํ๊ณ , ๊ฐ๊ด์ ์ธ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ผ.\n" | |
| "4. ๋ ์ ์ํธ์์ฉ: ๋ ์์ ์๊ฐ์ ๋ฌป๋ ์ง๋ฌธ๊ณผ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ํค์๋๋ฅผ ํฌํจํ๋ผ.\n" | |
| "5. ๋ง๋ฌด๋ฆฌ: ์ฃผ์ ๋ด์ฉ์ ๊ฐ๋ตํ ์์ฝํ๊ณ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์๋ดํ๋ผ." | |
| ) | |
| elif tone == "์ ๋ฌธ์ ์ธ": | |
| tone_prompt = ( | |
| "์ ๋ฌธ์ ์ธ:\n" | |
| "1. ํค๊ณผ ๊ตฌ์กฐ: ๊ณต์์ ์ด๊ณ ํ์ ์ ์ธ ํค์ ์ฌ์ฉํ๋ฉฐ, ๋ช ํํ ์๋ก , ๋ณธ๋ก , ๊ฒฐ๋ก ๊ตฌ์กฐ๋ก ์ฒด๊ณ์ ์ผ๋ก ์ ๊ฐํ๋ผ.\n" | |
| "2. ๋ด์ฉ ๊ตฌ์ฑ: ๋ณต์กํ ๊ฐ๋ ์ ์ ํํ๊ฒ ์ ๋ฌํ ์ ์๋๋ก ์ ๋ฌธ ์ฉ์ด์ ์ฌ์ธต ๋ถ์์ ํ์ฉํ๋ผ.\n" | |
| "3. ๋ฐ์ดํฐ ํ์ฉ: ํต๊ณ, ์ฐ๊ตฌ ๊ฒฐ๊ณผ, ์ ๋ฌธ๊ฐ ์๊ฒฌ ๋ฑ์ ์ธ์ฉํ์ฌ ์ ๋ขฐ์ฑ์ ๋์ด๋ผ.\n" | |
| "4. ํ ์คํธ ๊ตฌ์กฐํ: ๋ฒํธ ๋งค๊ธฐ๊ธฐ, ๊ธฐ์ธ์๊ผด, ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ํ์ฉํ์ฌ ๋ ผ๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์กฐํ๋ผ.\n" | |
| "5. ๋ง๋ฌด๋ฆฌ: ํต์ฌ ๋ ผ์ ์ ์ฌ๊ฐ์กฐํ๊ณ ํฅํ ์ฐ๊ตฌ๋ ์ค๋ฌด์ ํจ์๋ฅผ ์ ์ํ๋ผ." | |
| ) | |
| else: | |
| tone_prompt = "์๋์ ์ฐธ์กฐ๊ธ๋ค์ ์ฐธ๊ณ ํ์ฌ ๋ธ๋ก๊ทธ ๊ธ์ ์์ฑํ๋ผ." | |
| # ์ต์ข system_message๋ tone_prompt์ base_prompt๋ฅผ ๊ฒฐํฉํ์ฌ ๊ตฌ์ฑ | |
| system_message = tone_prompt + "\n" + base_prompt | |
| # ํ๋กฌํํธ์ ์ฐธ์กฐ๊ธ ๋ด์ฉ์ ๋ฐ์ (์ฐธ๊ณ ๊ธ์ ์ง์ ์ถ๋ ฅํ์ง ์๋๋ก ์ฃผ์) | |
| question = f"์ฐธ์กฐ๊ธ 1: {ref1}\n์ฐธ์กฐ๊ธ 2: {ref2}\n์ฐธ์กฐ๊ธ 3: {ref3}\n์ ๋ด์ฉ์ ์ฐธ๊ณ ํ์ฌ ์ฃผ์ ์ ์ํฉ์ ๋ง๋ ๋ธ๋ก๊ทธ ๊ธ์ ์์ฑํ๋ผ. ๋จ, ์ฐธ๊ณ ๊ธ์ ๋ด์ฉ์ ๊ทธ๋๋ก ์ธ์ฉํ์ง ๋ง๋ผ." | |
| # ๊ณ ๊ธ ์ค์ ์ ์ฝ๋ ๋ด๋ถ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ง์ | |
| max_tokens = 2000 | |
| temperature = 0.7 | |
| top_p = 0.95 | |
| return respond_chatgpt_qna( | |
| question=question, | |
| system_message=system_message, | |
| max_tokens=max_tokens, | |
| temperature=temperature, | |
| top_p=top_p | |
| ) | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# ๋ธ๋ก๊ทธ ์์ฑ๊ธฐ") | |
| tone_radio = gr.Radio( | |
| choices=["์น๊ทผํ๊ฒ", "์ผ๋ฐ์ ์ธ", "์ ๋ฌธ์ ์ธ"], | |
| label="๋งํฌ๋ฐ๊พธ๊ธฐ", | |
| value="์ผ๋ฐ์ ์ธ" | |
| ) | |
| ref1_text = gr.Textbox(label="์ฐธ์กฐ๊ธ 1", lines=5) | |
| ref2_text = gr.Textbox(label="์ฐธ์กฐ๊ธ 2", lines=5) | |
| ref3_text = gr.Textbox(label="์ฐธ์กฐ๊ธ 3", lines=5) | |
| answer_output = gr.Textbox(label="๊ฒฐ๊ณผ", lines=10, interactive=False) | |
| submit_button = gr.Button("์ ์ก") | |
| submit_button.click( | |
| fn=merge_and_call, | |
| inputs=[tone_radio, ref1_text, ref2_text, ref3_text], | |
| outputs=answer_output | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() | |