yiming-0120 commited on
Commit
921bcac
·
verified ·
1 Parent(s): 3f7fe38

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +135 -0
app.py ADDED
@@ -0,0 +1,135 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import openai
3
+ import os
4
+
5
+ openai.api_key = os.getenv("OPENAI_API_KEY")
6
+
7
+ # 10位哲學家與流派
8
+ PHILOSOPHERS = [
9
+ "蘇格拉底 (辯證法)",
10
+ "尼采 (權力意志)",
11
+ "老子 (道家思想)",
12
+ "阿蘭·狄波頓 (現代生活哲學)",
13
+ "康德 (義務倫理學)",
14
+ "西蒙娜·德·波伏娃 (女性主義)",
15
+ "卡繆 (荒謬主義)",
16
+ "馬克思 (批判理論)",
17
+ "維根斯坦 (語言哲學)",
18
+ "佛陀 (緣起觀)"
19
+ ]
20
+
21
+ # 風格提示對應表
22
+ STYLE_MAPPING = {
23
+ "蘇格拉底 (辯證法)": "以連續提問解構概念,採用對話體與反詰法",
24
+ "尼采 (權力意志)": "使用宣言式語句與悖論,強調生命力的超越性",
25
+ "老子 (道家思想)": "運用自然意象與二元辯證,以簡約格言呈現",
26
+ "阿蘭·狄波頓 (現代生活哲學)": "結合當代生活案例與心理學洞察",
27
+ "康德 (義務倫理學)": "強調道德律令與義務,採用三段論證結構",
28
+ "西蒙娜·德·波伏娃 (女性主義)": "從社會建構角度分析,帶有存在主義色彩",
29
+ "卡繆 (荒謬主義)": "以文學隱喻探討存在困境,保持疏離筆調",
30
+ "馬克思 (批判理論)": "結合歷史唯物論與階級分析,帶革命呼籲",
31
+ "維根斯坦 (語言哲學)": "聚焦語言邊界與概念釐清,採用分析哲學方法",
32
+ "佛陀 (緣起觀)": "以因果鏈結解釋現象,包含禪宗公案元素"
33
+ }
34
+
35
+ def generate_philosophy(feeling, philosopher):
36
+ # 根據哲學家調整提示詞
37
+ base_prompt = f"""以{philosopher.split(' ')[0]}的核心思想為基礎,針對「{feeling}」心境,
38
+ 1. 必須包含:{STYLE_MAPPING[philosopher]}
39
+ 2. 創造一個原創比喻連結當代情境
40
+ 3. 以100-200字寫成一段短文
41
+ 4. 結尾提出一個開放式哲學問題
42
+ """
43
+ # 流派專屬要求
44
+ if "尼采" in philosopher:
45
+ base_prompt += "5. 需使用至少一個希臘神話典故\n"
46
+ elif "維根斯坦" in philosopher:
47
+ base_prompt += "5. 需包含語言遊戲概念的例子\n"
48
+ elif "佛陀" in philosopher:
49
+ base_prompt += "5. 需融入四聖諦或緣起觀的元素\n"
50
+ elif "卡繆" in philosopher:
51
+ base_prompt += "5. 需帶有荒謬與反抗的氛圍\n"
52
+ elif "馬克思" in philosopher:
53
+ base_prompt += "5. 需提及社會階級或歷史變遷\n"
54
+ elif "西蒙娜·德·波伏娃" in philosopher:
55
+ base_prompt += "5. 需提及性別、自由或主體性\n"
56
+
57
+ response = openai.ChatCompletion.create(
58
+ model="gpt-4o",
59
+ messages=[{"role": "user", "content": base_prompt}],
60
+ temperature=0.7
61
+ )
62
+ return response.choices[0].message['content']
63
+
64
+ def generate_questions(text):
65
+ prompt = f"""根據以下文本,生成兩個引導深入思考的問題:
66
+ 1. 第一個問題聚焦文本核心概念
67
+ 2. 第二個問題聯繫日常生活
68
+ 文本:{text}
69
+ """
70
+ response = openai.ChatCompletion.create(
71
+ model="gpt-4o",
72
+ messages=[{"role": "user", "content": prompt}],
73
+ temperature=0.5
74
+ )
75
+ return response.choices[0].message['content']
76
+
77
+ def generate_all(feeling, philosopher):
78
+ philosophy_text = generate_philosophy(feeling, philosopher)
79
+ questions = generate_questions(philosophy_text)
80
+ return philosophy_text, questions
81
+
82
+ with gr.Blocks(theme=gr.themes.Soft(), title="每日哲學生成器") as demo:
83
+ gr.Markdown("## 🌄 今日哲學訂製工坊")
84
+
85
+ with gr.Row():
86
+ with gr.Column(scale=1):
87
+ # 區塊A:心情/主題
88
+ feeling = gr.Radio(
89
+ label="選擇當下心境或主題",
90
+ choices=["迷茫", "感恩", "焦慮", "渴望", "平靜", "自由", "時間", "人際關係", "孤獨", "希望"],
91
+ value="平靜"
92
+ )
93
+ # 區塊B:哲學風格
94
+ philosopher = gr.Dropdown(
95
+ label="選擇哲學風格",
96
+ choices=PHILOSOPHERS,
97
+ value="阿蘭·狄波頓 (現代生活哲學)"
98
+ )
99
+ generate_btn = gr.Button("生成今日哲學文本", variant="primary")
100
+
101
+ with gr.Column(scale=2):
102
+ # 區塊C:哲思顯示
103
+ output_text = gr.Markdown(
104
+ label="今日哲學",
105
+ value="點擊按鈕生成你的專屬哲學..."
106
+ )
107
+ # 區塊D:引導問題
108
+ questions = gr.Textbox(
109
+ label="引導思考問題",
110
+ placeholder="你的問題將顯示於此",
111
+ lines=3
112
+ )
113
+
114
+ generate_btn.click(
115
+ fn=generate_all,
116
+ inputs=[feeling, philosopher],
117
+ outputs=[output_text, questions]
118
+ )
119
+
120
+ with gr.Accordion("哲學流派簡介", open=False):
121
+ gr.Markdown("""
122
+ - **蘇格拉底 (辯證法)**:以對話與提問引導思辨。
123
+ - **尼采 (權力意志)**:強調生命力、批判傳統道德。
124
+ - **老子 (道家思想)**:順應自然、無為而治。
125
+ - **阿蘭·狄波頓 (現代生活哲學)**:貼近日常、關注心理與幸福。
126
+ - **康德 (義務倫理學)**:道德律令、理性義務。
127
+ - **西蒙娜·德·波伏娃 (女性主義)**:性別、自由與主體性。
128
+ - **卡繆 (荒謬主義)**:存在的荒謬與反抗精神。
129
+ - **馬克思 (批判理論)**:階級、歷史與社會批判。
130
+ - **維根斯坦 (語言哲學)**:語言界限、意義分析。
131
+ - **佛陀 (緣起觀)**:因緣、無常、內觀自省。
132
+ """)
133
+
134
+ if __name__ == "__main__":
135
+ demo.launch(debug=True)