File size: 7,021 Bytes
2a01803 73cb1c2 2a01803 73cb1c2 2a01803 73cb1c2 2a01803 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | 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()
|