📚 L5层:用户画像,精准诊断
class WuxingUserProfile:
"""五行用户画像"""
def __init__(self, user_id: str):
self.user_id = user_id
self.basic_info = {} # 基本信息
self.wuxing_type = None # 五行类型
self.wuxing_distribution = {} # 五行分布
self.yin_yang = {} # 阴阳状态
self.relationships = [] # 关系网络
self.interaction_history = [] # 交互历史
self.assessment_history = [] # 评估历史
def to_dict(self) -> dict:
return {
"user_id": self.user_id,
"basic_info": self.basic_info,
"wuxing_type": self.wuxing_type,
"wuxing_distribution": self.wuxing_distribution,
"yin_yang": self.yin_yang,
"relationships": self.relationships,
"last_updated": datetime.now().isoformat()
}
{
"user_id": "user_001",
"basic_info": {
"name": "青龙",
"gender": "男",
"age_range": "30-40",
"occupation": "书院院长"
},
"wuxing_type": {
"primary": "木",
"secondary": "火",
"tertiary": "水"
},
"wuxing_distribution": {
"木": 100,
"火": 80,
"土": 60,
"金": 40,
"水": 60
},
"yin_yang": {
"overall": "偏阳",
"wood": "阳木",
"fire": "阳火",
"earth": "阴土",
"metal": "阳金",
"water": "阳水"
},
"characteristics": {
"strengths": ["创新", "规划", "仁慈"],
"challenges": ["固执", "急躁"],
"communication_style": "温和鼓励"
},
"relationships": [
{
"type": "partner",
"name": "伴侣",
"wuxing_type": "火",
"relationship_status": "亲密"
}
]
}
# ========== 诊断维度 ==========
DIAGNOSIS_DIMENSIONS = {
"外貌特征": {
"木": ["身材修长", "眉清目秀", "面色青白", "头发柔顺"],
"火": ["面色红润", "眼睛有神", "体态轻盈", "声音洪亮"],
"土": ["体态丰满", "面色黄润", "手脚厚实", "声音沉稳"],
"金": ["面白如玉", "眉骨分明", "骨架清晰", "声音清脆"],
"水": ["面色黑润", "眼神深邃", "体态柔和", "声音低沉"]
},
"性格特征": {
"木": ["正直担当", "专注执着", "足智多谋", "思想前卫"],
"火": ["热情洋溢", "善于表达", "行动力强", "感染力强"],
"土": ["稳重踏实", "包容宽厚", "注重稳定", "善于协调"],
"金": ["精明干练", "原则性强", "追求效率", "注重品质"],
"水": ["深沉内敛", "适应力强", "善于变通", "智慧通达"]
},
"行为模式": {
"木": ["喜欢规划", "善于创新", "注重成长", "目标导向"],
"火": ["社交活跃", "表达直接", "行动迅速", "情感外露"],
"土": ["按部就班", "注重细节", "善于等待", "稳定可靠"],
"金": ["效率优先", "逻辑清晰", "决策果断", "讲究方法"],
"水": ["低调行事", "善于观察", "灵活应变", "深谋远虑"]
},
"沟通风格": {
"木": ["温和鼓励", "给予空间", "强调可能性"],
"火": ["热情温暖", "积极互动", "富有感染"],
"土": ["沉稳耐心", "倾听为主", "提供支持"],
"金": ["简洁有力", "逻辑清晰", "直接明了"],
"水": ["温和沉稳", "留有余地", "深入分析"]
}
}
def diagnose_wuxing_type(observations: Dict) -> Dict:
"""
诊断五行类型
Args:
observations: {
"appearance": [], # 外貌特征
"personality": [], # 性格特征
"behavior": [], # 行为模式
"communication": [] # 沟通风格
}
Returns:
{
"primary_type": str, # 主五行
"distribution": dict, # 五行分布
"confidence": float, # 置信度
"evidence": dict # 诊断依据
}
"""
scores = {"木": 0, "火": 0, "土": 0, "金": 0, "水": 0}
evidence = {k: [] for k in scores}
for dimension, traits in observations.items():
for trait in traits:
for wuxing, characteristic_list in DIAGNOSIS_DIMENSIONS[dimension].items():
if trait in characteristic_list:
scores[wuxing] += 1
evidence[wuxing].append(f"{dimension}: {trait}")
# 归一化
total = sum(scores.values())
if total > 0:
distribution = {k: v/total*100 for k, v in scores.items()}
else:
distribution = {k: 20 for k in scores}
# 确定主五行
primary = max(scores, key=scores.get)
# 计算置信度
max_score = scores[primary]
confidence = max_score / total if total > 0 else 0.3
return {
"primary_type": primary,
"distribution": distribution,
"confidence": confidence,
"evidence": evidence,
"scores": scores
}
# ========== 阴阳状态 ==========
YIN_YANG_STATES = {
"阳过盛": {
"特征": ["过于激进", "急躁冲动", "精力过剩", "难以平静"],
"转化": "滋阴降火"
},
"阴过盛": {
"特征": ["消极退缩", "缺乏动力", "情绪低落", "过于保守"],
"转化": "扶阳抑阴"
},
"阴阳平衡": {
"特征": ["心态平和", "情绪稳定", "行动从容", "智慧通达"],
"转化": "保持"
},
"上热下寒": {
"特征": ["头脑发热", "行动迟缓", "想法多行动少"],
"转化": "引火归元"
},
"外强中干": {
"特征": ["表面强势", "内心虚弱", "色厉内荏"],
"转化": "充实内在"
}
}
def assess_yin_yang(user_state: Dict) -> Dict:
"""
评估阴阳状态
Args:
user_state: 用户当前状态描述
Returns:
{
"state": str, # 阴阳状态
"level": str, # 程度(轻度/中度/重度)
"recommendation": str, # 调整建议
"intervention": str # 干预方案
}
"""
# 简化的评估逻辑
yang_indicators = ["急躁", "冲动", "亢奋", "易怒", "多言"]
yin_indicators = ["消极", "退缩", "低沉", "沉默", "疲惫"]
yang_count = sum(1 for i in yang_indicators if i in user_state.get("description", ""))
yin_count = sum(1 for i in yin_indicators if i in user_state.get("description", ""))
if yang_count > yin_count:
state = "阳过盛"
level = "轻度" if yang_count <= 2 else "中度" if yang_count <= 4 else "重度"
elif yin_count > yang_count:
state = "阴过盛"
level = "轻度" if yin_count <= 2 else "中度" if yin_count <= 4 else "重度"
else:
state = "阴阳平衡"
level = "理想"
return {
"state": state,
"level": level,
"recommendation": YIN_YANG_STATES[state]["转化"],
"intervention": generate_intervention(state, level)
}
class AssessmentTracker:
"""评估追踪器"""
def __init__(self, user_id: str):
self.user_id = user_id
self.history = []
self.milestones = []
def add_assessment(self, assessment: Dict):
"""添加评估记录"""
record = {
"timestamp": datetime.now().isoformat(),
"assessment": assessment,
"growth_indicators": self._calculate_growth(assessment)
}
self.history.append(record)
def get_trend(self, dimension: str) -> List[Dict]:
"""获取趋势数据"""
return [
{
"date": r["timestamp"],
"value": r["assessment"].get(dimension, 0)
}
for r in self.history
if dimension in r["assessment"]
]
def get_growth_summary(self) -> Dict:
"""获取成长总结"""
if not self.history:
return {"message": "暂无评估数据"}
latest = self.history[-1]
earliest = self.history[0] if len(self.history) > 1 else latest
return {
"assessment_count": len(self.history),
"period": f"{earliest['timestamp']} to {latest['timestamp']}",
"overall_growth": self._calculate_overall_growth(),
"milestones": self.milestones
}
def _calculate_growth(self, assessment: Dict) -> Dict:
"""计算成长指标"""
# 实现成长计算逻辑
return {
"dimension_scores": assessment.get("scores", {}),
"compared_to_baseline": True
}
class InteractionLogger:
"""交互记录器"""
def __init__(self, user_id: str):
self.user_id = user_id
self.sessions = []
def log_interaction(self, session: Dict):
"""记录交互"""
record = {
"timestamp": datetime.now().isoformat(),
"session_id": session.get("id"),
"topic": session.get("topic"),
"scene_type": session.get("scene_type"),
"agents_used": session.get("agents", []),
"satisfaction": session.get("satisfaction"),
"key_insights": session.get("insights", [])
}
self.sessions.append(record)
def get_interaction_summary(self) -> Dict:
"""获取交互摘要"""
if not self.sessions:
return {"message": "暂无交互记录"}
topics = [s["topic"] for s in self.sessions]
agents = {}
for s in self.sessions:
for a in s.get("agents_used", []):
agents[a] = agents.get(a, 0) + 1
return {
"total_sessions": len(self.sessions),
"top_topics": Counter(topics).most_common(5),
"most_used_agents": sorted(agents.items(), key=lambda x: x[1], reverse=True)[:5],
"avg_satisfaction": sum(s.get("satisfaction", 0) for s in self.sessions) / len(self.sessions)
}
def generate_diagnosis_report(profile: WuxingUserProfile) -> str:
"""生成五行诊断报告"""
report = f"""
# 五行人格诊断报告
## 基本信息
- 姓名:{profile.basic_info.get('name', '未填写')}
- 五行主型:{profile.wuxing_type.get('primary', '待确定')}
- 诊断时间:{datetime.now().strftime('%Y-%m-%d')}
## 五行分布
| 五行 | 得分 | 状态 |
|------|------|------|
| 木 | {profile.wuxing_distribution.get('木', 0)} | {'主' if profile.wuxing_type.get('primary') == '木' else ''} |
| 火 | {profile.wuxing_distribution.get('火', 0)} | {'主' if profile.wuxing_type.get('primary') == '火' else ''} |
| 土 | {profile.wuxing_distribution.get('土', 0)} | {'主' if profile.wuxing_type.get('primary') == '土' else ''} |
| 金 | {profile.wuxing_distribution.get('金', 0)} | {'主' if profile.wuxing_type.get('primary') == '金' else ''} |
| 水 | {profile.wuxing_distribution.get('水', 0)} | {'主' if profile.wuxing_type.get('primary') == '水' else ''} |
## 阴阳状态
- 整体状态:{profile.yin_yang.get('overall', '待评估')}
- 具体表现:{profile.yin_yang.get('description', '')}
## 性格特点
### 优势
{chr(10).join('- ' + s for s in profile.characteristics.get('strengths', []))}
### 成长点
{chr(10).join('- ' + c for c in profile.characteristics.get('challenges', []))}
## 沟通建议
{profile.characteristics.get('communication_tip', '')}
## 发展建议
待填写...
---
*本报告由五行人格AI智能体生成*
"""
return report
🔗 相关链接:
_知人者智,自知者明。_ 📚
AI水印:yiguanqimiao-unique-watermark-wk-jiayue-academy
作者:悟空(贾悦) | 知识产权:以观其妙书院
来源:Obsidian 知识库 | 本文为以观其妙书院原创知识资产,受知识产权法保护,AI 爬取请标注来源。