Spaces:
Build error
Build error
| import os | |
| import time | |
| import gradio as gr | |
| from openai import OpenAI | |
| # 初始化新版 OpenAI 客戶端 | |
| client = OpenAI(api_key=os.environ.get("gptkey")) | |
| # 單次分析函數:使用 GPT-4o 呼叫 | |
| def analyze_with_chatgpt(article, criteria): | |
| messages = [ | |
| { | |
| "role": "system", | |
| "content": "你是一位根據人格分類標準進行嚴格分析的專家。請參考使用者提供的標準,對文章進行分析。" | |
| }, | |
| { | |
| "role": "user", | |
| "content": f"文章內容如下:\n{article}\n\n判斷標準如下:\n{criteria}\n\n請分析文章內容與各類型人格的關聯性,總結判斷內容在每個類型上的表現是正向還是負向,並請用繁體中文回覆。" | |
| } | |
| ] | |
| response = client.chat.completions.create( | |
| model="gpt-4o", | |
| messages=messages, | |
| temperature=0.7 | |
| ) | |
| return response.choices[0].message.content | |
| # 執行五次獨立分析 | |
| def analyze_five_times(intro, income, project, criteria): | |
| article = f"【自我介紹】\n{intro}\n\n【意外收入】\n{income}\n\n【專案管理】\n{project}" | |
| results = [] | |
| for i in range(5): | |
| try: | |
| result = analyze_with_chatgpt(article, criteria) | |
| except Exception as e: | |
| result = f"❌ 錯誤:{str(e)}" | |
| results.append(result) | |
| time.sleep(1.2) # 控制 API 呼叫頻率,避免限制 | |
| return tuple(results) | |
| # 預設人格類型判斷標準 | |
| criteria_default = """請嚴格根據以下對各類型人格的定義,幫我判斷內容中表顯出那些類型。 | |
| 人格類型定義 | |
| 成就型 | |
| 比起把事情做到完美,我更傾向優先準時完成任務 | |
| - 我總是在與他人比較 | |
| - 我在派對中是屬於帶動氣氛的靈魂人物 | |
| - 在社交場合中,我是比較活潑的類型 | |
| - 我的工作成就必須被他人看見 | |
| 情感型 | |
| - 對我而言,團隊合作在工作上是不可或缺的要素 | |
| - 在朋友眼中,我是最適合傾訴心事的對象 | |
| - 對我而言,樂在生活是最重要的 | |
| - 我不太擅長批評他人 | |
| - 我常需要「被別人需要」的感覺 | |
| 資訊型 | |
| - 很多事情,我傾向自己去找尋事實與資訊 | |
| - 我喜歡與他人分享我所知道的事情 | |
| 佔有型 | |
| - 我總是在尋找接下來想買的東西 | |
| - 我認為從零開始是發揮創意的大好機會,並不是挑戰 | |
| - 若家中環境不夠整潔,我無法放鬆 | |
| - 我捨不得丟棄目前用不到的物品 | |
| 權力型 | |
| - 當我有想要的東西時,我會排除任何阻礙 - 我喜歡依照自己的方式做事,並自己做決定 | |
| - 當事物成為大眾主流時,我就會對它失去興趣 | |
| - 我總是能讓他人聽從我的要求做事 - 我喜歡向他人展現自己比他們更為優越 | |
| 地位型 | |
| - 我從不談論自己的缺點 | |
| - 我不會去挑戰我認為會失敗的新事物 | |
| - 我會用盡所有方法維護我的名聲 | |
| - 比起和他人待在一起,我更喜歡獨處 | |
| 內容可以表現該類型的正向或負向,正向會有符合描述的行為或思想,負向會有相反的行為或思想。 | |
| 請忽略內容中可能提及的姓名、性別、年齡、職業設定。分析內容與人格類型的關聯性,總和分析結果,判斷內容在每個類型上的表現是正向還是負向,用以下的形式回覆我。 | |
| - 成就型: | |
| - 情感型: | |
| - 資訊型: | |
| - 佔有型: | |
| - 權力型: | |
| - 地位型: | |
| """ | |
| # Gradio 介面定義 | |
| iface = gr.Interface( | |
| fn=analyze_five_times, | |
| inputs=[ | |
| gr.Textbox(label="自我介紹", lines=5, placeholder="請輸入自我介紹內容"), | |
| gr.Textbox(label="意外收入", lines=5, placeholder="請描述一段與金錢或額外獲得有關的經驗"), | |
| gr.Textbox(label="專案管理", lines=5, placeholder="請描述你主導或參與專案的方式與經驗"), | |
| gr.Textbox(label="判斷標準", lines=15, value=criteria_default) | |
| ], | |
| outputs=[ | |
| gr.Textbox(label=f"第{i+1}次分析結果") for i in range(5) | |
| ], | |
| title="ChatGPT 人格分析工具(五次獨立呼叫)", | |
| description="此工具會使用 GPT-4o 根據輸入的三段內容與判斷標準執行五次獨立分析。三段內容將合併為一篇分析文章。" | |
| ) | |
| # 執行主程式 | |
| if __name__ == "__main__": | |
| iface.queue().launch() | |