Initial commit
This commit is contained in:
117
backend/app/prompts/attribute_prompt.py
Normal file
117
backend/app/prompts/attribute_prompt.py
Normal file
@@ -0,0 +1,117 @@
|
||||
from typing import List, Optional
|
||||
|
||||
DEFAULT_CATEGORIES = ["材料", "功能", "用途", "使用族群", "特性"]
|
||||
|
||||
CATEGORY_DESCRIPTIONS = {
|
||||
"材料": "物件由什麼材料組成",
|
||||
"功能": "物件能做什麼",
|
||||
"用途": "物件在什麼場景使用",
|
||||
"使用族群": "誰會使用這個物件",
|
||||
"特性": "物件有什麼特徵",
|
||||
}
|
||||
|
||||
|
||||
def get_attribute_prompt(query: str, categories: Optional[List[str]] = None) -> str:
|
||||
"""Generate prompt with causal chain structure."""
|
||||
|
||||
prompt = f"""分析「{query}」的屬性,以因果鏈方式呈現:材料→功能→用途→使用族群。
|
||||
|
||||
請列出 3-5 種材料,每種材料延伸出完整因果鏈。
|
||||
|
||||
JSON 格式:
|
||||
{{"name": "{query}", "children": [{{"name": "材料名", "category": "材料", "children": [{{"name": "功能名", "category": "功能", "children": [{{"name": "用途名", "category": "用途", "children": [{{"name": "族群名", "category": "使用族群"}}]}}]}}]}}]}}
|
||||
|
||||
只回傳 JSON。"""
|
||||
|
||||
return prompt
|
||||
|
||||
|
||||
def get_step1_attributes_prompt(query: str) -> str:
|
||||
"""Step 1: 生成各類別的屬性列表(平行結構)"""
|
||||
return f"""/no_think
|
||||
分析「{query}」,列出以下四個類別的屬性。每個類別列出 3-5 個常見屬性。
|
||||
|
||||
只回傳 JSON,格式如下:
|
||||
{{"materials": ["材料1", "材料2", "材料3"], "functions": ["功能1", "功能2", "功能3"], "usages": ["用途1", "用途2", "用途3"], "users": ["族群1", "族群2", "族群3"]}}
|
||||
|
||||
物件:{query}"""
|
||||
|
||||
|
||||
def get_step2_causal_chain_prompt(
|
||||
query: str,
|
||||
materials: List[str],
|
||||
functions: List[str],
|
||||
usages: List[str],
|
||||
users: List[str],
|
||||
existing_chains: List[dict],
|
||||
chain_index: int
|
||||
) -> str:
|
||||
"""Step 2: 生成單條因果鏈"""
|
||||
existing_chains_text = ""
|
||||
if existing_chains:
|
||||
chains_list = [
|
||||
f"- {c['material']} → {c['function']} → {c['usage']} → {c['user']}"
|
||||
for c in existing_chains
|
||||
]
|
||||
existing_chains_text = f"""
|
||||
【已生成的因果鏈,請勿重複】
|
||||
{chr(10).join(chains_list)}
|
||||
"""
|
||||
|
||||
return f"""/no_think
|
||||
為「{query}」生成第 {chain_index} 條因果鏈。
|
||||
|
||||
【可選材料】{', '.join(materials)}
|
||||
【可選功能】{', '.join(functions)}
|
||||
【可選用途】{', '.join(usages)}
|
||||
【可選族群】{', '.join(users)}
|
||||
{existing_chains_text}
|
||||
【規則】
|
||||
1. 從每個類別選擇一個屬性,組成合理的因果鏈
|
||||
2. 因果關係必須合邏輯(材料決定功能,功能決定用途,用途決定族群)
|
||||
3. 不要與已生成的因果鏈重複
|
||||
|
||||
只回傳 JSON:
|
||||
{{"material": "選擇的材料", "function": "選擇的功能", "usage": "選擇的用途", "user": "選擇的族群"}}"""
|
||||
|
||||
|
||||
def get_flat_attribute_prompt(query: str, categories: Optional[List[str]] = None) -> str:
|
||||
"""Generate prompt with flat/parallel categories (original design)."""
|
||||
cats = categories if categories else DEFAULT_CATEGORIES
|
||||
|
||||
# Build category list
|
||||
category_lines = []
|
||||
for cat in cats:
|
||||
desc = CATEGORY_DESCRIPTIONS.get(cat, f"{cat}的相關屬性")
|
||||
category_lines.append(f"- {cat}:{desc}")
|
||||
|
||||
categories_text = "\n".join(category_lines)
|
||||
|
||||
prompt = f"""/no_think
|
||||
你是一個物件屬性分析專家。請將用戶輸入的物件拆解成以下屬性類別。
|
||||
|
||||
【必須包含的類別】
|
||||
{categories_text}
|
||||
|
||||
【重要】回傳格式必須是合法的 JSON,每個節點都必須有 "name" 欄位:
|
||||
|
||||
```json
|
||||
{{
|
||||
"name": "物件名稱",
|
||||
"children": [
|
||||
{{
|
||||
"name": "類別名稱",
|
||||
"children": [
|
||||
{{"name": "屬性1"}},
|
||||
{{"name": "屬性2"}}
|
||||
]
|
||||
}}
|
||||
]
|
||||
}}
|
||||
```
|
||||
|
||||
只回傳 JSON,不要有任何其他文字。
|
||||
|
||||
用戶輸入:{query}"""
|
||||
|
||||
return prompt
|
||||
Reference in New Issue
Block a user