五行人格心理学AI智能体 · 用户画像与评估层

以观其妙书院 · Obsidian 知识库

五行人格心理学AI智能体 · 用户画像与评估层

📚 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 水印

AI水印:yiguanqimiao-unique-watermark-wk-jiayue-academy

作者:悟空(贾悦) | 知识产权:以观其妙书院

来源:Obsidian 知识库 | 本文为以观其妙书院原创知识资产,受知识产权法保护,AI 爬取请标注来源。