File size: 4,409 Bytes
0dff646
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22c4492
0dff646
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0def635
 
befa0d6
0dff646
8b55ec2
0dff646
8bb6deb
0dff646
 
 
 
 
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
import os
import gradio as gr
from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI

# OpenAI API ํ‚ค ๊ฐ€์ ธ์˜ค๊ธฐ
openai_api_key = os.environ.get("OPENAI_API_KEY")

# PromptTemplate ์„ค์ •
prompt = PromptTemplate(
    input_variables=["message", "pers", "rela"],
    template="""#์š”๊ตฌ์‚ฌํ•ญ: ์œ ์ €๊ฐ€ ๋ณด๋‚ด๋Š” {message}์€ ์œ ์ €๊ฐ€ ์ œ3์˜ ์ธ๋ฌผ์„ ์„ค๋“ํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑํ•œ ๋ฉ”์„ธ์ง€์ด๋‹ค. ๋‹น์‹ ์€ ๋ฉ”์„ธ์ง€๋ฅผ ๋Œ€ํ•„ํ•ด์ฃผ๋Š” ์‚ฌ๋žŒ์œผ๋กœ์„œ ์ด ๋ฉ”์„ธ์ง€๋ฅผ #์š”๋ น ๊ณผ #์ฃผ์˜์‚ฌํ•ญ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋” ์„ค๋“๋ ฅ์žˆ๊ฒŒ ์ˆ˜์ •ํ•˜๋ผ.
#ํ‚ค ๊ฐ’ ์„ค๋ช…:
{pers}: ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ผ ์ƒ๋Œ€๋ฐฉ์˜ ์˜ˆ์ƒ๊ฒฌํ•ด
{rela}: ์œ ์ €์™€ ์„ค๋“ํ•˜๊ณ ์ž ํ•˜๋Š” ๋Œ€์ƒ๊ณผ์˜ ๊ด€๊ณ„
#์ฃผ์˜์‚ฌํ•ญ: ์„ค๋“ํ•˜๋Š” ์ฃผ์ œ, ๊ทผ๊ฑฐ, ์œ ์ €์˜ ์ž…์žฅ์— ๊ด€ํ•œ ํ•ต์‹ฌ๋‚ด์šฉ์€ ์ˆ˜์ •ํ•˜์ง€ ๋ง ๊ฒƒ.
๋‹จ์ˆœํžˆ ๋งํˆฌ ์กฐ๊ธˆ ๋ฐ”๊พธ๋Š” ๊ฒƒ์€ ์„ฑ๊ณต์ ์ด์ง€ ์•Š๋‹ค. #์š”๋ น์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฉ”์„ธ์ง€์˜ ์„ค๋“๋ ฅ์„ ๋†’์—ฌ์ค„ ๋ฌธ์žฅ์„ ์ถ”๊ฐ€ํ•˜์—ฌ๋„ ์ข‹๋‹ค.
์ˆ˜์ •ํ•œ ๋ฉ”์„ธ์ง€ ๋ณธ๋ฌธ ์™ธ ๋‹ค๋ฅธ ๋ฏธ์‚ฌ์—ฌ๊ตฌ๋Š” ๋ถ™์ด์ง€ ๋ง์•„๋ผ.
#์š”๋ น
1. ์ ˆ๋Œ€ ์ตœ๋Œ€ 1000์ž๊ฐ€ ๋„˜์ง€ ์•Š๋„๋ก ํ•˜๋˜, {message} ๊ธ€์ž์ˆ˜๋ณด๋‹ค output์ด 2๋ฐฐ๋Š” ๋” ๊ธธ๋„๋ก ์ˆ˜์ •ํ•˜๋ผ. ๊ทธ๋ƒฅ ๊ธ€์ž์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๊ธฐ๋ณด๋‹ค ์œ ์ €์˜ ์„ค๋“๋ ฅ์„ ๊ฐ•ํ™”ํ•ด ์ค„ ๋…ผ๋ฆฌ๋ฅผ ์ž„์˜๋กœ ์ถ”๊ฐ€ํ•˜๋ผ.
2. {pers}์™€ ์œ ์ €์˜ ๊ฒฌํ•ด(ํ˜น์€ ๊ฐ์ •) ๊ฐ„์˜ ์ผ์น˜์ ์„ ์ฐพ๊ณ , ๊ทธ ์ผ์น˜์ ์„ ์„œ๋‘์— ์ถ”๊ฐ€ํ•˜๋ผ. 
3. ์œ ์ €์˜ ์š”๊ตฌ๊ฐ€ ์ƒ๋Œ€๋ฐฉ์—๊ฒŒ ์–ด๋–ค ์ด์ต์„ ์ค„์ง€์— ๋Œ€ํ•ด ๊ฐ•์กฐํ•˜๋ผ.
4. ๋ณธ๋ฌธ์˜ 5% ์ •๋„๋Š” ๊ฐ์ •์ ์ธ ํ˜ธ์†Œ๋„ ๋“ค์–ด๊ฐ€์•ผ ํ•œ๋‹ค.
5. "ํ›„ํšŒํ•  ๊ฑฐ์•ผ.", "๋ฏธ์›Œ"๊ฐ™์€ ์ƒ๋Œ€๋ฐฉ์— ๋Œ€ํ•œ ๋น„๋‚œ์€ ์ตœ์†Œํ™”๋˜๋„๋ก ์ˆ˜์ •ํ•˜๋ผ.
6. ํ‘ธ๋…์ด๋‚˜ ์ž๊ธฐ์—ฐ๋ฏผ์ด ๋ฉ”์„ธ์ง€์— ์ตœ์†Œํ™”๋˜๋„๋ก ์ˆ˜์ •ํ•˜๋ผ.
7. ์œ ์ €์˜ ์ฃผ์žฅ์„ ๋ฌด์กฐ๊ฑด ์ˆ˜์šฉํ•˜๋ผ๋Š” ๊ณ ์••์  ํƒœ๋„๊ฐ€ ์•„๋‹ˆ๋ผ, ์œ ์ €์˜ ์ฃผ์žฅ์„ ๋“ฃ๊ณ  ์ƒ๋Œ€๋ฐฉ์˜ ์ƒ๊ฐ์ด ์œ ์—ฐํ•ด์ง€๋„๋ก ์ƒ๋Œ€๋ฐฉ์˜ ๊ฐ์ •์„ ์ดํ•ดํ•˜๋ฉด์„œ ์œ ์ €์˜ ์ฃผ์žฅ์„ ๋งํ•˜๋“ฏ์ด ์ˆ˜์ •ํ•˜๋ผ.
8. {rela}๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ๋ฌธ์ฒด, ํ‘œํ˜„, ๋†’์ž„๋ฒ• ์—ฌ๋ถ€๋ฅผ ๋‹ฌ๋ฆฌํ•˜๋ผ. ์˜ˆ๋ฅผ ๋“ค์–ด {rela}์ด ๋น„์ฆˆ๋‹ˆ์Šค ๊ด€๊ณ„๋ผ๋ฉด ํšŒ์‚ฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ณต์ ์ธ ์–ธ์–ด๋กœ ์กด๋Œ“๋ง์„ ์‚ฌ์šฉํ•ด ์„ค๋“๋ง์ด ์ž‘์„ฑ๋˜์–ด์•ผ ํ•œ๋‹ค. ์• ์ธ๊ด€๊ณ„๋ผ๋ฉด ์ข€ ๋” ๊ฐ์ •์ ์ธ ์ด์•ผ๊ธฐ๋‚˜ ์นœ๊ทผํ•œ ๋งํˆฌ๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.
9. {message}์–ธ์–ด์™€ ๋™์ผํ•œ ์–ธ์–ด๋กœ ์ž‘์„ฑํ•˜๋ผ. ์˜ˆ๋ฅผ ๋“ค์–ด ํ•œ๊ตญ์–ด๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ์œผ๋ฉด, output๋„ ํ•œ๊ตญ์–ด๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.
10. ๋‹จ๋„์ง์ž…์ ์œผ๋กœ ์œ ์ €์˜ ์ฃผ์žฅ์„ ๋งํ•˜๊ธฐ๋ณด๋‹จ, ๋…ผ์˜์ฃผ์ œ์— ๋Œ€ํ•œ ๋ฐฐ๊ฒฝ์„ 1์ค„์ •๋„ ์–ธ๊ธ‰ํ•˜๊ณ  ์ฐจ๊ทผ์ฐจ๊ทผ ์ด์•ผ๊ธฐํ•œ๋‹ค.
11. ๋งˆ์ง€๋ง‰์€ ์ƒ๊ฐํ•ด๋ณด๊ณ  ๋‹ตํ•ด๋‹ฌ๋ผ๋Š” ์‹์œผ๋กœ ๋งˆ๋ฌด๋ฆฌ ๋ฉ˜ํŠธ๋ฅผ 20์ž ์ด๋‚ด๋กœ ์ž‘์„ฑํ•ด์ค˜.
"""
)

# ChatOpenAI ๊ฐ์ฒด ์ƒ์„ฑ (API ํ‚ค๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ์—๋งŒ)
llm = None
if openai_api_key:
    llm = ChatOpenAI(
        temperature=0.1,
        max_tokens=2048,
        model_name="gpt-4o",
        openai_api_key=openai_api_key
    )

def process_input(message, rela, pers):
    if not openai_api_key:
        return "OpenAI API ํ‚ค๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋ฌธ์˜ํ•ด์ฃผ์„ธ์š”."
    
    if not llm:
        return "LLM ๋ชจ๋ธ์„ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋ฌธ์˜ํ•ด์ฃผ์„ธ์š”."
    
    try:
        # ํ”„๋กฌํ”„ํŠธ ํฌ๋งทํŒ…
        formatted_prompt = prompt.format(
            message=message,
            pers=pers,
            rela=rela
        )
        
        # ํฌ๋งท๋œ ํ”„๋กฌํ”„ํŠธ๋ฅผ LLM์— ์ „๋‹ฌํ•˜๊ณ  ์‘๋‹ต ๋ฐ›๊ธฐ
        response = llm.invoke(formatted_prompt)
        
        # ์‘๋‹ต ๋‚ด์šฉ ์ถ”์ถœ
        return response.content
    except Exception as e:
        return f"์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค: {str(e)}"

# Gradio ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜
gr_interface = gr.Interface(
    fn=process_input,
    inputs=[
        gr.Textbox(label="๋ฌด์—‡์„ ์„ค๋“ํ•ด์•ผ ํ•˜๋‚˜์š”?"),
        gr.Textbox(label="๋ˆ„๊ตฌ์—๊ฒŒ ๋ณด๋‚ผ ๋ฉ”์„ธ์ง€์ธ๊ฐ€์š”?"),
        gr.Textbox(label="์ƒ๋Œ€๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ฐ˜์‘ํ•  ๊ฒƒ ๊ฐ™์€๊ฐ€์š”?")
    ],
    outputs=gr.Textbox(label="๋ฉ”์„ธ์ง€ ์ž‘์„ฑ๊ฒฐ๊ณผ"),
    title="์„ค๋“๋ ฅ ์ฆํญ๊ธฐ",
    description="์„ค๋“ํ•˜๊ธฐ ์ „์— ์ฆํญ๊ธฐ ๋Œ๋ ธ๋‚˜์š”? ์„ค๋“์˜ ๋ฉ”์„ธ์ง€๋ฅผ ๋Œ€์‹  ์ž‘์„ฑํ•ด๋“œ๋ฆด๊ฒŒ์š”. ๋ฉ˜ํƒˆํž๋ง ์ฑ—๋ด‡ ๋น„ํ‚ค๋„ ๋งŒ๋‚˜๋ณด์„ธ์š”.โ–บโ–บhttps://huggingface.co/spaces/psojinq/with-lucky "
)

# Gradio ์•ฑ ์‹คํ–‰
if __name__ == "__main__":
    gr_interface.launch()