Upload 2 files
Browse files- old/app_old.py +69 -0
- old/persona_alpha_old.py +80 -0
old/app_old.py
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# -*- coding: utf-8 -*-
|
| 2 |
+
"""gradio-demo
|
| 3 |
+
Automatically generated by Colaboratory.
|
| 4 |
+
Original file is located at
|
| 5 |
+
https://colab.research.google.com/drive/1-iBNAt-l2MLx1trpU5geyHS8RVyrMM5I
|
| 6 |
+
"""
|
| 7 |
+
|
| 8 |
+
import gradio as gr
|
| 9 |
+
import persona_alpha
|
| 10 |
+
import persona_beta
|
| 11 |
+
import persona_beta_schedule
|
| 12 |
+
|
| 13 |
+
persona_alpha_demo = gr.Interface(
|
| 14 |
+
description="人物誌生成器(Persona Generator),藉由選擇的CCS標籤資訊打造豐富的人物誌。",
|
| 15 |
+
fn=persona_alpha.generate_persona,
|
| 16 |
+
inputs=[
|
| 17 |
+
gr.Dropdown(label="性別", choices=["不指定", "男性", "女性", "非二元性別"], value="不指定"),
|
| 18 |
+
gr.Dropdown(label="年齡階層", choices=["不指定", "20歲以下","20-24", "25-29", "30-34", "35-39", "40-44", "45-49", "50-54", "55-59", "60歲以上"], value="不指定"),
|
| 19 |
+
gr.Dropdown(label="生命階段", choices=["不指定", "15-29歲單身(自己一人居住)", "30-44歲單身(自己一人居住)", "15-44歲頂客族(「未婚有同居伴侶」或「已婚」,但沒有小孩)", "45歲以上頂客族(「未婚有同居伴侶」或「已婚」,但沒有小孩)", "青年家庭(18歲以上,有12歲以下的小孩)", "成熟家庭(18歲以上,有13-17歲的小孩)", "空巢期(55歲以上,有同居伴侶或已婚,且小孩18歲+不與父母同住)", "多世代家庭(18歲以上,與父母、祖父母、成年的家人/親戚同住)"], value="不指定"),
|
| 20 |
+
gr.Dropdown(label="教育程度", choices=["不指定", "高中以下", "高中", "大學", "研究所", "博士"], value="不指定"),
|
| 21 |
+
gr.Dropdown(label="工作職稱", choices=["不指定", "基層主管", "職工/藍領工作者", "自由業", "雇員/白領工作者", "專業人士(例如:醫生、律師、會計師、老師)", "自營商老闆", "中高階主管", "C-Level(CEO, CFO)/專業經理人(含大企業負責人)", "中小企業負責人", "其他", "不適用"], value="不指定"),
|
| 22 |
+
gr.Dropdown(label="個人年收入", choices=["不指定", "沒有收入", "未滿25萬元", "25萬元以上,未滿30萬元", "30萬元以上,未滿35萬元", "35萬元以上,未滿40萬元", "40萬元以上,未滿45萬元", "45萬元以上,未滿50萬元", "50萬元以上,未滿55萬元", "55萬元以上,未滿60萬元", "60萬元以上,未滿70萬元", "70萬元以上,未滿80萬元", "80萬元以上,未滿90萬元", "90萬元以上,未滿100萬元", "100萬元以上,未滿120萬元", "120萬元以上,未滿140萬元", "140萬元以上,未滿160萬元", "160萬元以上,未滿180萬元", "180萬元以上,未滿200萬元", "200萬元以上,未滿240萬元", "240萬元以上,未滿280萬元", "280萬元以上,未滿320萬元", "320萬元以上,未滿360萬元", "360萬元以上"], value="不指定"),
|
| 23 |
+
gr.Dropdown(label="任何同意-廣告活動", choices=["不指定", "廣告幫助我了解市面上有什麼產品", "如果我喜愛的明星藝人有代言某項產品或服務,我會更有可能購買"], value="不指定"),
|
| 24 |
+
gr.Dropdown(label="任何同意-品牌與消費行為", choices=["不指定", "我喜歡別人認同我購買的品牌", "國際品牌通常代表一定的品味 / 地位", "我喜歡嘗試新的品牌", "我只購買知名的品牌", "我常在使用試用品後購買該產品", "我所購買的產品是不是原廠正品對我來說很重要", "我願意為頂級規格與功能的設備或服務支付更高的價格", "為了品質,我不介意多花錢", "在朋友中,我總是最先嘗試新產品或新服務的人"], value="不指定"),
|
| 25 |
+
gr.Dropdown(label="任何同意-人際互動", choices=["不指定", "我喜歡將時間用在與家人相處勝過於朋友", "在我的生活中最重要的是朋友", "我會主動地結交新朋友", "我對於自己的社交生活感到滿意"], value="不指定"),
|
| 26 |
+
gr.Dropdown(label="任何同意-金錢規劃", choices=["不指定", "對於我真的想要的東西,我寧願貸款或刷卡購買,而不願慢慢存錢", "我通常沒有多加思考就花錢", "若有想購買的物品,我會儲蓄以達到目標", "金錢是衡量成功的最佳指標", "我目前先將重大消費延後,直到我對整體經濟狀況更有信心為止", "我總是為金錢煩惱", "我對於目前生活品質感到滿意", "我認為懂得過生活比我賺多少錢還重要"], value="不指定"),
|
| 27 |
+
gr.Dropdown(label="任何同意-行為動機與處事準則", choices=["不指定", "我總是在與他人比較", "在社交場合中,我是比較沉默的類型", "我在派對中是屬於帶動氣氛的靈魂人物", "對我而言,樂在生活是最重要的", "我喜歡與他人分享我所知道的事情", "我總是在尋找接下來想買的東西", "當事物成為大眾主流時,我就會對它失去興趣", "比起和他人待在一起,我更喜歡獨處", "我不會去挑戰我認為會失敗的新事物"], value="不指定"),
|
| 28 |
+
gr.Dropdown(label="任何同意-個人特質", choices=["不指定", "我喜歡和朋友或家人分享每日生活點滴", "我喜歡面對挑戰並不斷超越自我", "我認為擁有個人特質,不隨波逐流是很重要的", "我很在乎別人對我的看法"], value="不指定"),
|
| 29 |
+
gr.Dropdown(label="任何同意-網路社群活動", choices=["不指定", "少了社群網站我會失落", "我喜歡在網路群組/論壇就我熟知的話題給予他人建議", "我喜歡上傳照片到社群媒體上,分享我的生活"], value="不指定"),
|
| 30 |
+
gr.Textbox(label="興趣愛好"),
|
| 31 |
+
gr.Textbox(label="性格特質"),
|
| 32 |
+
|
| 33 |
+
],
|
| 34 |
+
outputs=[gr.Textbox(label="角色人物描述",lines=25)],
|
| 35 |
+
allow_flagging="never", )
|
| 36 |
+
|
| 37 |
+
persona_beta_demo = gr.Interface(
|
| 38 |
+
description="人物誌生成器(Persona Generator),藉由選擇的CCS標籤資訊打造豐富的人物誌(不包含一日程)。",
|
| 39 |
+
fn=persona_beta.generate_persona,
|
| 40 |
+
inputs=[
|
| 41 |
+
gr.Dropdown(label="性別", choices=["不指定", "男性", "女性", "非二元性別"], value="不指定"),
|
| 42 |
+
gr.Dropdown(label="年齡階層", choices=["不指定", "20歲以下","20-24", "25-29", "30-34", "35-39", "40-44", "45-49", "50-54", "55-59", "60歲以上"], value="不指定"),
|
| 43 |
+
gr.Dropdown(label="生命階段", choices=["不指定", "15-29歲單身(自己一人居住)", "30-44歲單身(自己一人居住)", "15-44歲頂客族(「未婚有同居伴侶」或「已婚」,但沒有小孩)", "45歲以上頂客族(「未婚有同居伴侶」或「已婚」,但沒有小孩)", "青年家庭(18歲以上,有12歲以下的小孩)", "成熟家庭(18歲以上,有13-17歲的小孩)", "空巢期(55歲以上,有同居伴侶或已婚,且小孩18歲+不與父母同住)", "多世代家庭(18歲以上,與父母、祖父母、成年的家人/親戚同住)"], value="不指定"),
|
| 44 |
+
gr.Dropdown(label="教育程度", choices=["不指定", "高中以下", "高中", "大學", "研究所", "博士"], value="不指定"),
|
| 45 |
+
gr.Dropdown(label="工作職稱", choices=["不指定", "基層主管", "職工/藍領工作者", "自由業", "雇員/白領工作者", "專業人士(例如:醫生、律師、會計師、老師)", "自營商老闆", "中高階主管", "C-Level(CEO, CFO)/專業經理人(含大企業負責人)", "中小企業負責人", "其他", "不適用"], value="不指定"),
|
| 46 |
+
gr.Dropdown(label="個人年收入", choices=["不指定", "沒有收入", "未滿25萬元", "25萬元以上,未滿30萬元", "30萬元以上,未滿35萬元", "35萬元以上,未滿40萬元", "40萬元以上,未滿45萬元", "45萬元以上,未滿50萬元", "50萬元以上,未滿55萬元", "55萬元以上,未滿60萬元", "60萬元以上,未滿70萬元", "70萬元以上,未滿80萬元", "80萬元以上,未滿90萬元", "90萬元以上,未滿100萬元", "100萬元以上,未滿120萬元", "120萬元以上,未滿140萬元", "140萬元以上,未滿160萬元", "160萬元以上,未滿180萬元", "180萬元以上,未滿200萬元", "200萬元以上,未滿240萬元", "240萬元以上,未滿280萬元", "280萬元以上,未滿320萬元", "320萬元以上,未滿360萬元", "360萬元以上"], value="不指定"),
|
| 47 |
+
gr.Dropdown(label="任何同意-廣告活動", choices=["不指定", "廣告幫助我了解市面上有什麼產品", "如果我喜愛的明星藝人有代言某項產品或服務,我會更有可能購買"], value="不指定"),
|
| 48 |
+
gr.Dropdown(label="任何同意-品牌與消費行為", choices=["不指定", "我喜歡別人認同我購買的品牌", "國際品牌通常代表一定的品味 / 地位", "我喜歡嘗試新的品牌", "我只購買知名的品牌", "我常在使用試用品後購買該產品", "我所購買的產品是不是原廠正品對我來說很重要", "我願意為頂級規格與功能的設備或服務支付更高的價格", "為了品質,我不介意多花錢", "在朋友中,我總是最先嘗試新產品或新服務的人"], value="不指定"),
|
| 49 |
+
gr.Dropdown(label="任何同意-人際互動", choices=["不指定", "我喜歡將時間用在與家人相處勝過於朋友", "在我的生活中最重要的是朋友", "我會主動地結交新朋友", "我對於自己的社交生活感到滿意"], value="不指定"),
|
| 50 |
+
gr.Dropdown(label="任何同意-金錢規劃", choices=["不指定", "對於我真的想要的東西,我寧願貸款或刷卡購買,而不願慢慢存錢", "我通常沒有多加思考就花錢", "若有想購買的物品,我會儲蓄以達到目標", "金錢是衡量成功的最佳指標", "我目前先將重大消費延後,直到我對整體經濟狀況更有信心為止", "我總是為金錢煩惱", "我對於目前生活品質感到滿意", "我認為懂得過生活比我賺多少錢還重要"], value="不指定"),
|
| 51 |
+
gr.Dropdown(label="任何同意-行為動機與處事準則", choices=["不指定", "我總是在與他人比較", "在社交場合中,我是比較沉默的類型", "我在派對中是屬於帶動氣氛的靈魂人物", "對我而言,樂在生活是最重要的", "我喜歡與他人分享我所知道的事情", "我總是在尋找接下來想買的東西", "當事物成為大眾主流時,我就會對它失去興趣", "比起和他人待在一起,我更喜歡獨處", "我不會去挑戰我認為會失敗的新事物"], value="不指定"),
|
| 52 |
+
gr.Dropdown(label="任何同意-個人特質", choices=["不指定", "我喜歡和朋友或家人分享每日生活點滴", "我喜歡面對挑戰並不斷超越自我", "我認為擁有個人特質,不隨波逐流是很重要的", "我很在乎別人對我的看法"], value="不指定"),
|
| 53 |
+
gr.Dropdown(label="任何同意-網路社群活動", choices=["不指定", "少了社群網站我會失落", "我喜歡在網路群組/論壇就我熟知的話題給予他人建議", "我喜歡上傳照片到社群媒體上,分享我的生活"], value="不指定"),
|
| 54 |
+
gr.Textbox(label="興趣愛好"),
|
| 55 |
+
gr.Textbox(label="性格特質"),
|
| 56 |
+
|
| 57 |
+
],
|
| 58 |
+
outputs=[gr.Textbox(label="角色人物描述",lines=25)],
|
| 59 |
+
allow_flagging="never", )
|
| 60 |
+
|
| 61 |
+
persona_beta_demo_schedule = gr.Interface(
|
| 62 |
+
description="人物誌生成器(Persona Generator),藉由輸入的Persona生成人物的一日行程。",
|
| 63 |
+
fn=persona_beta_schedule.generate_persona_schedule,
|
| 64 |
+
inputs=[gr.Textbox(label="角色人物描述",lines=25)],
|
| 65 |
+
outputs=[gr.Textbox(label="角色人物日程",lines=25)],
|
| 66 |
+
allow_flagging="never", )
|
| 67 |
+
|
| 68 |
+
demo = gr.TabbedInterface([persona_alpha_demo,persona_beta_demo,persona_beta_demo_schedule], ["Persona生成器(aplha)","Persona生成器(beta)","Persona生成器(beta)_schedule"],theme='bethecloud/storj_theme')
|
| 69 |
+
demo.launch()
|
old/persona_alpha_old.py
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import openai
|
| 2 |
+
import os
|
| 3 |
+
|
| 4 |
+
from openai import OpenAI
|
| 5 |
+
client = OpenAI(
|
| 6 |
+
api_key= os.environ["gptkey"]
|
| 7 |
+
)
|
| 8 |
+
|
| 9 |
+
def generate_persona(gender, age_range, life_stage, education_level, job_title, annual_income, ad_agreement, brand_consumption_behavior, social_interaction, financial_planning, behavioral_motives, personal_traits, social_media_activity, interests, personality_traits):
|
| 10 |
+
|
| 11 |
+
total_prompt_tokens_used = 0
|
| 12 |
+
total_completion_tokens_used = 0
|
| 13 |
+
|
| 14 |
+
messages_base = [
|
| 15 |
+
{"role": "system", "content": "請扮演一個具備側寫專長的資深行銷企劃,協助我創建一個虛構的人物誌。"}
|
| 16 |
+
]
|
| 17 |
+
|
| 18 |
+
# Creating a prompt with a structured format for the Persona in Traditional Chinese
|
| 19 |
+
prompt_text = f"創建一個詳細的人物誌檔案,除非有另外說明否則排除行銷背景:\n\n" \
|
| 20 |
+
f"- 性別: {gender}\n" \
|
| 21 |
+
f"- 年齡階層: {age_range}\n" \
|
| 22 |
+
f"- 生命階段: {life_stage}\n" \
|
| 23 |
+
f"- 教育程度: {education_level}\n" \
|
| 24 |
+
f"- 工作職稱: {job_title}\n" \
|
| 25 |
+
f"- 個人年收入: {annual_income}\n" \
|
| 26 |
+
f"- 對廣告的看法: {ad_agreement}\n" \
|
| 27 |
+
f"- 品牌與消費行為: {brand_consumption_behavior}\n" \
|
| 28 |
+
f"- 人際互動: {social_interaction}\n" \
|
| 29 |
+
f"- 金錢規劃: {financial_planning}\n" \
|
| 30 |
+
f"- 行為動機與處事準則: {behavioral_motives}\n" \
|
| 31 |
+
f"- 個人特質: {personal_traits}\n" \
|
| 32 |
+
f"- 網路社群活動: {social_media_activity}\n" \
|
| 33 |
+
f"- 興趣愛好: {interests}\n" \
|
| 34 |
+
f"- 性格特質: {personality_traits}\n\n" \
|
| 35 |
+
f"請根據這些屬性,提供一個全面的人物誌描述,包括以下欄位:\n\n" \
|
| 36 |
+
f"[名稱]:\n" \
|
| 37 |
+
f"[年齡]:\n" \
|
| 38 |
+
f"[性別]:\n" \
|
| 39 |
+
f"[生活背景]:(請用長篇幅豐富完整)\n" \
|
| 40 |
+
f"[自我介紹](第一人稱介紹自己,並附上自傳與人生簡歷):\n" \
|
| 41 |
+
f"[生活方式]:\n" \
|
| 42 |
+
f"[人際關係]:\n" \
|
| 43 |
+
f"[個人目標與動機]:\n" \
|
| 44 |
+
f"[面臨的挑戰]:\n" \
|
| 45 |
+
f"[平日的日程](此為上班日的日程):\n" \
|
| 46 |
+
f"[假日的日程](此為放假日的日程):\n" \
|
| 47 |
+
f"對於平日與假日的日程,請先為每一個時間點設一個小標題【】,接著用根據小標題用長篇幅詳細描述每個時間點每個事件或行程的背後故事、人物的情感反應、與人的互動以及意外的轉折,讓日程充滿生動和意外性。並包含以下元素:1.情境背景:對於每個活動,可以加入背後的情境背景,比如為什麼會選擇這個活動,或者這個活動對人物有什麼特別的意義;2.情感描述:增加人物對於每個活動的情感描述,比如感到興奮、放鬆或是感慨等;3.互動細節:描述人物與家人、朋友或同事之間的具體互動,這些互動可以揭示人物的關係和性格特徵。;4.環境描寫:增加對活動環境的描寫,比如早餐的場景、鋼彈模型展覽的熱鬧氛圍等,讓讀者能夠更好地沉浸在故事中;5.意外事件:在日程中加入一些意外事件或轉折,比如偶遇老朋友、發現一個新興趣等,這些意外可以讓日程更加有趣和不可預測;6.連接人物的夢想和目標:將日常活動與人物的長期目標或夢想相連接,展示這些活動如何幫助人物接近他們的目標。例如,對於平日的某個活動,可以這樣描述: 08:00 【處理電子郵件和社群媒體】嘉豪啟動電腦,沉浸在清晨的寧靜中。他認真地回應每一位客戶,並與追蹤者分享業界趨勢。這不僅是工作的一部分,也是他與世界連接的方式。在回覆的過程中,他偶爾會遇到令人興奮的新機會,或是收到令人暖心的感謝信,這些都給他的工作日添加了意外的喜悅。\n" \
|
| 48 |
+
f"請注意!!!對於每一個時間段的日程,必須多於50個中文字,字數不足的話該日程的內容須退回重寫。"
|
| 49 |
+
|
| 50 |
+
|
| 51 |
+
messages_base.append({"role": "user", "content": prompt_text})
|
| 52 |
+
messages_base.extend([{"role": "user", "content": "請盡可能詳盡豐富,使用繁體中文"}])
|
| 53 |
+
|
| 54 |
+
full_text = ""
|
| 55 |
+
total_price = 0
|
| 56 |
+
|
| 57 |
+
|
| 58 |
+
#for _ in range(loop):
|
| 59 |
+
response = client.chat.completions.create(
|
| 60 |
+
model='gpt-4-0125-preview',
|
| 61 |
+
max_tokens=4096,
|
| 62 |
+
temperature=0.5,
|
| 63 |
+
messages=messages_base
|
| 64 |
+
)
|
| 65 |
+
completed_text = response.choices[0].message.content
|
| 66 |
+
total_prompt_tokens_used += response.usage.prompt_tokens
|
| 67 |
+
total_completion_tokens_used += response.usage.completion_tokens
|
| 68 |
+
price = total_prompt_tokens_used*0.03/1000 + total_completion_tokens_used*0.06/1000
|
| 69 |
+
|
| 70 |
+
full_text += completed_text + "\n\n----------\n\n"
|
| 71 |
+
total_price += price
|
| 72 |
+
|
| 73 |
+
|
| 74 |
+
price = "price:" + str(total_prompt_tokens_used*0.03/1000 + total_completion_tokens_used*0.06/1000) + "$"
|
| 75 |
+
|
| 76 |
+
full_text += "\n\n" + "price:" + str(total_price)
|
| 77 |
+
|
| 78 |
+
|
| 79 |
+
#return response.choices[0].message.content
|
| 80 |
+
return full_text
|