Upload persona_alpha_1_cl.py
Browse files- persona_alpha_1_cl.py +87 -0
persona_alpha_1_cl.py
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import anthropic
|
| 2 |
+
# import os
|
| 3 |
+
|
| 4 |
+
client = anthropic.Anthropic(
|
| 5 |
+
# defaults to os.environ.get("ANTHROPIC_API_KEY")
|
| 6 |
+
api_key="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",
|
| 7 |
+
)
|
| 8 |
+
|
| 9 |
+
def generate_detailed_persona(gender, age_range, life_stage, education_level, job_title, annual_income, CCS_statements, interests, other_interests, personality_traits, other_personality_traits):
|
| 10 |
+
# Function body remains the same as previously defined, updating the prompt text accordingly
|
| 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"- 價值觀描述: {', '.join(CCS_statements)}\n" \
|
| 27 |
+
f"- 興趣愛好: {', '.join(interests)} {other_interests}\n" \
|
| 28 |
+
f"請根據這些屬性,提供一個全面的角色描述,包括以下欄位:\n\n" \
|
| 29 |
+
f"[角色名稱]:\n" \
|
| 30 |
+
f"[角色年齡]:\n" \
|
| 31 |
+
f"[角色性別]:\n" \
|
| 32 |
+
f"[角色背景]:(請用長篇幅豐富完整)\n" \
|
| 33 |
+
f"[自我介紹](第一人稱介紹自己,並附上自傳與人生簡歷):\n" \
|
| 34 |
+
f"[生活方式]:\n" \
|
| 35 |
+
f"[日常活動]:\n" \
|
| 36 |
+
f"[人際關係]:\n" \
|
| 37 |
+
f"[個人目標與動機]:\n" \
|
| 38 |
+
f"[面臨的挑戰]:\n" \
|
| 39 |
+
f"[其他特殊事項]:\n" \
|
| 40 |
+
f"[平日的日程](此為上班日的日程):\n" \
|
| 41 |
+
f"[假日的日程](此為放假日的日程):\n" \
|
| 42 |
+
f"對於平日與假日的日程,請先為每一個時間點設一個小標題【】,接著用根據小標題用長篇幅詳細描述每個時間點每個事件或行程的背後故事、人物的情感反應、與人的互動以及意外的轉折,讓日程充滿生動和意外性。並包含以下元素:1.情境背景:對於每個活動,可以加入背後的情境背景,比如為什麼會選擇這個活動,或者這個活動對人物有什麼特別的意義;2.情感描述:增加人物對於每個活動的情感描述,比如感到興奮、放鬆或是感慨等;3.互動細節:描述人物與家人、朋友或同事之間的具體互動,這些互動可以揭示人物的關係和性格特徵。;4.環境描寫:增加對活動環境的描寫,比如早餐的場景、鋼彈模型展覽的熱鬧氛圍等,讓讀者能夠更好地沉浸在故事中;5.意外事件:在日程中加入一些意外事件或轉折,比如偶遇老朋友、發現一個新興趣等,這些意外可以讓日程更加有趣和不可預測;6.連接人物的夢想和目標:將日常活動與人物的長期目標或夢想相連接,展示這些活動如何幫助人物接近他們的目標。例如,對於平日的某個活動,可以這樣描述: 08:00 【處理電子郵件和社群媒體】嘉豪啟動電腦,沉浸在清晨的寧靜中。他認真地回應每一位客戶,並與追蹤者分享業界趨勢。這不僅是工作的一部分,也是他與世界連接的方式。在回覆的過程中,他偶爾會遇到令人興奮的新機會,或是收到令人暖心的感謝信,這些都給他的工作日添加了意外的喜悅。\n" \
|
| 43 |
+
f"請注意!!!對於每一個時間段的日程,必須多於50個中文字,字數不足的話該日程的內容須退回重寫。"
|
| 44 |
+
#f"- 性格特質: {', '.join(personality_traits)} {other_personality_traits}\n\n"
|
| 45 |
+
|
| 46 |
+
|
| 47 |
+
messages_base.append({"role": "user", "content": prompt_text})
|
| 48 |
+
messages_base.extend([{"role": "user", "content": "請盡可能詳盡豐富,使用繁體中文"}])
|
| 49 |
+
|
| 50 |
+
full_text = ""
|
| 51 |
+
total_price = 0
|
| 52 |
+
|
| 53 |
+
|
| 54 |
+
"""
|
| 55 |
+
response = client.chat.completions.create(
|
| 56 |
+
model='gpt-4-0125-preview',
|
| 57 |
+
max_tokens=4096,
|
| 58 |
+
temperature=0.5,
|
| 59 |
+
messages=messages_base
|
| 60 |
+
)
|
| 61 |
+
completed_text = response.choices[0].message.content
|
| 62 |
+
"""
|
| 63 |
+
|
| 64 |
+
message = client.messages.create(
|
| 65 |
+
model="claude-3-opus-20240229",
|
| 66 |
+
max_tokens=4096,
|
| 67 |
+
messages=[
|
| 68 |
+
{"role": "user", "content": messages_base}
|
| 69 |
+
]
|
| 70 |
+
)
|
| 71 |
+
|
| 72 |
+
"""
|
| 73 |
+
total_prompt_tokens_used += response.usage.prompt_tokens
|
| 74 |
+
total_completion_tokens_used += response.usage.completion_tokens
|
| 75 |
+
price = total_prompt_tokens_used*0.03/1000 + total_completion_tokens_used*0.06/1000
|
| 76 |
+
|
| 77 |
+
full_text += completed_text + "\n\n----------\n\n"
|
| 78 |
+
total_price += price
|
| 79 |
+
|
| 80 |
+
|
| 81 |
+
price = "price:" + str(total_prompt_tokens_used*0.03/1000 + total_completion_tokens_used*0.06/1000) + "$"
|
| 82 |
+
|
| 83 |
+
full_text += "\n\n" + "price:" + str(total_price)
|
| 84 |
+
"""
|
| 85 |
+
|
| 86 |
+
#return response.choices[0].message.content
|
| 87 |
+
return message.content
|