82 lines
5.8 KiB
Python
82 lines
5.8 KiB
Python
from app.services.analyzer_common import DISCLAIMER, BaseAnalyzer
|
||
|
||
USER_PROMPT_TEMPLATE = (
|
||
"请分析这张{hand_side}手掌照片,生成中文手相报告。"
|
||
"必须覆盖生命线、智慧线、感情线、命运线、手型与手指比例、特殊纹路与丘位特征。"
|
||
"写作要求:"
|
||
"1. overall_summary 用 2 到 4 句话,像给用户本人看的开场结论,要贴近日常生活。"
|
||
"2. dimensions 中每个 interpretation 不要只解释纹路含义,必须关联一个现实场景,例如学习效率、工作节奏、沟通方式、情绪恢复、计划执行、关系相处。"
|
||
"3. 每个 advice 必须是用户今天或本周能做的小建议,不要空泛。"
|
||
"4. strengths 写成用户容易感受到的优势,例如做事方式、学习方式、职场协作、情感表达。"
|
||
"5. challenges 写成温和提醒,不要吓人,不要宿命论。"
|
||
"6. suggestions 必须包含生活、学习/成长、事业/工作、关系沟通中的至少三个方向。"
|
||
"7. lucky_keywords 要短、有记忆点、生活化。"
|
||
"8. 如果照片不够真实或不够清晰,要诚实降低 confidence,并在 reason 里说明。"
|
||
)
|
||
|
||
class PalmAnalyzer(BaseAnalyzer):
|
||
async def analyze(self, image_bytes: bytes, content_type: str, hand_side: str) -> dict:
|
||
if not self.client:
|
||
return self._mock_report(hand_side)
|
||
|
||
return await self._create_image_report(
|
||
USER_PROMPT_TEMPLATE.format(hand_side=hand_side),
|
||
image_bytes,
|
||
content_type,
|
||
)
|
||
|
||
def _mock_report(self, hand_side: str) -> dict:
|
||
return {
|
||
"quality_check": {"can_analyze": True, "reason": "mock mode", "confidence": 0.72},
|
||
"overall_summary": f"这是一份{hand_side}手娱乐手相报告。整体看,你像是那种遇到事情会先稳住节奏的人,适合把目标拆小、慢慢推进。最近如果在学习、工作或关系里有点卡,不必急着推翻重来,先把手边一件具体的小事做好,会更容易找回状态。",
|
||
"dimensions": [
|
||
{
|
||
"name": "生命线",
|
||
"observations": ["弧度较完整", "线条延展感较强"],
|
||
"interpretation": "这类线条象征恢复力还不错。放到生活里,你可能不是一直满电的人,但只要睡眠、饮食和节奏回到正轨,状态通常能慢慢补回来。",
|
||
"confidence": 0.68,
|
||
"advice": "这周先固定一个睡前时间,别把恢复力浪费在反复熬夜上。",
|
||
},
|
||
{
|
||
"name": "智慧线",
|
||
"observations": ["走向偏平稳", "中段纹理较清晰"],
|
||
"interpretation": "智慧线偏稳,象征你适合用步骤感处理问题。学习或工作上,如果任务太大,你更适合列清单推进,而不是靠临场爆发。",
|
||
"confidence": 0.66,
|
||
"advice": "今天把最烦的一件事拆成 3 步,只完成第一步就算开局。",
|
||
},
|
||
{
|
||
"name": "感情线",
|
||
"observations": ["线条柔和", "末端略有分支感"],
|
||
"interpretation": "感情线柔和,象征你在关系里比较在意感受,也容易替别人想。好处是共情强,提醒是别把所有情绪都自己消化。",
|
||
"confidence": 0.64,
|
||
"advice": "这周有不舒服的地方,试着用一句具体的话说出来:我希望你下次可以怎样。",
|
||
},
|
||
{
|
||
"name": "命运线",
|
||
"observations": ["可见纵向纹理", "深浅变化较明显"],
|
||
"interpretation": "命运线有阶段变化感,象征你的事业或成长路径可能不是一条直线。你适合边做边调整,在变化里积累自己的方法。",
|
||
"confidence": 0.58,
|
||
"advice": "工作或学习上,优先做一件能留下作品、笔记或案例的事。",
|
||
},
|
||
{
|
||
"name": "手型与手指比例",
|
||
"observations": ["掌形比例均衡", "手指伸展感自然"],
|
||
"interpretation": "手型比例均衡,象征你在规则和灵感之间都有一点能力。适合做既要审美判断、也要实际落地的任务。",
|
||
"confidence": 0.61,
|
||
"advice": "如果最近有想法,别只停在脑子里,先做一个草稿或简单版本。",
|
||
},
|
||
{
|
||
"name": "特殊纹路与丘位特征",
|
||
"observations": ["局部细纹较丰富", "掌丘起伏需更清晰照片确认"],
|
||
"interpretation": "细纹较丰富,象征你对环境和他人反馈比较敏感。学习、工作或社交里,你可能很会察觉气氛,但也容易被杂音影响。",
|
||
"confidence": 0.52,
|
||
"advice": "给自己设一个免打扰时段,把注意力留给真正重要的任务。",
|
||
},
|
||
],
|
||
"strengths": ["适合按计划推进学习和工作", "能照顾到别人的感受", "遇到变化时有重新调整的能力"],
|
||
"challenges": ["想得多的时候,行动容易变慢", "太在意反馈时,会消耗自己的专注力"],
|
||
"suggestions": ["生活上先把作息拉回稳定线", "学习成长上把大目标拆成今天能完成的一页笔记", "事业工作上优先沉淀一个可展示的小成果", "关系沟通上把需求说具体,不要只等别人猜"],
|
||
"lucky_keywords": ["先做一步", "稳住节奏", "说清需求"],
|
||
"disclaimer": DISCLAIMER,
|
||
}
|