user-research-user-modeling — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited user-research-user-modeling (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
🤖→👤 AI建议人类审批 — AI生成模型草案,人类审批确认后方可用于后续流程
| 输入项 | 类型 | 必填 | 来源 | 说明 |
|---|---|---|---|---|
| voice-analysis.json | JSON | 是 | output/pm-discovery/user-research-voice-analysis/voice-analysis.json | 用户声音洞察、痛点、主题、分群 |
| behavior-analysis.json | JSON | 是 | output/pm-discovery/user-research-behavior-analysis/behavior-analysis.json | 行为洞察、漏斗、路径、Aha Moment |
| survey_data | JSON | ○ | 用户提供 | 问卷数据,补充人口统计学信息和态度数据 |
| modeling_config | object | ○ | 用户提供 | 建模配置(最大Persona数、置信度阈值、旅程阶段等) |
{
"voice_analysis_path": "output/pm-discovery/user-research-voice-analysis/voice-analysis.json",
"behavior_analysis_path": "output/pm-discovery/user-research-behavior-analysis/behavior-analysis.json",
"survey_data": {
"available": "boolean",
"location": "string",
"sample_size": "number"
},
"modeling_config": {
"max_personas": "number",
"min_confidence_threshold": "number",
"journey_stages": ["string"],
"include_emotional_arc": "boolean"
}
}输入依赖:
voice-analysis.json:提供用户声音洞察、痛点、主题、分群behavior-analysis.json:提供行为洞察、漏斗、路径、Aha Moment输出文件:output/pm-discovery/user-research-user-modeling/persona.json
输出Schema:
{
"type": "object",
"required": ["personas", "metadata"],
"properties": {
"personas": {"type": "array", "description": "Persona列表,含目标、行为、痛点和JTBD"},
"metadata": {"type": "object", "description": "元数据,含时间戳、来源和聚类质量评分"}
}
}输出校验规则:
| 字段路径 | 类型 | 必填 | 说明 |
|---|---|---|---|
| personas | array | 是 | Persona列表,不可为空 |
| personas[].id | string | 是 | Persona唯一标识 |
| personas[].name | string | 是 | Persona名称 |
| personas[].core_goals | array | 是 | 核心目标列表,每项须含goal、confidence、data_source |
| personas[].core_goals[].data_source | string | 是 | 数据来源枚举:voice/behavior/survey/inferred |
| personas[].core_goals[].confidence | number | 是 | 目标置信度,0-1 |
| personas[].key_behaviors | array | 是 | 关键行为列表,每项须含behavior、confidence、data_source |
| personas[].key_behaviors[].data_source | string | 是 | 数据来源枚举:voice/behavior/survey/inferred |
| personas[].core_pain_points | array | 是 | 核心痛点列表,每项须含pain_point、severity、confidence、data_source |
| personas[].core_pain_points[].severity | string | 是 | 痛点等级枚举:P0/P1/P2/P3 |
| personas[].core_pain_points[].evidence_ref | string | 是 | 证据引用来源 |
| personas[].representative_quotes | array | 是 | 代表原声列表,每个Persona≥3条 |
| personas[].size_ratio | number | 是 | 规模占比,0-1 |
| personas[].confidence | number | 是 | Persona整体置信度,0-1 |
| personas[].jobs_to_be_done.functional_job | object | 是 | 功能性Job,须含description、confidence |
| personas[].jobs_to_be_done.emotional_job | object | 是 | 情感性Job,须含description、confidence |
| personas[].jobs_to_be_done.social_job | object | 是 | 社会性Job,须含description、confidence |
| personas[].low_confidence_fields | string[] | 是 | 低置信度字段列表 |
| metadata.analysis_timestamp | string | 是 | 分析时间戳 |
| metadata.input_sources | string[] | 是 | 输入来源列表 |
| metadata.clustering_quality_score | number | 是 | 聚类质量评分,0-1 |
| metadata.confidence_overall | number | 是 | 整体置信度,0-1 |
{
"personas": [
{
"id": "string",
"name": "string",
"core_goals": [
{
"goal": "string",
"confidence": "number",
"data_source": "voice|behavior|survey|inferred"
}
],
"key_behaviors": [
{
"behavior": "string",
"confidence": "number",
"data_source": "voice|behavior|survey|inferred"
}
],
"core_pain_points": [
{
"pain_point": "string",
"severity": "P0|P1|P2|P3",
"confidence": "number",
"data_source": "voice|behavior|survey|inferred",
"evidence_ref": "string"
}
],
"representative_quotes": [
{
"quote": "string",
"source": "string",
"sentiment": "string"
}
],
"size_ratio": "number",
"confidence": "number",
"jobs_to_be_done": {
"functional_job": {
"description": "string",
"confidence": "number"
},
"emotional_job": {
"description": "string",
"confidence": "number"
},
"social_job": {
"description": "string",
"confidence": "number"
}
},
"low_confidence_fields": ["string"]
}
],
"metadata": {
"analysis_timestamp": "string",
"input_sources": ["string"],
"clustering_quality_score": "number",
"confidence_overall": "number"
}
}输出文件:output/pm-discovery/user-research-user-modeling/empathy-map.json
输出Schema:
{
"type": "object",
"required": ["empathy_maps"],
"properties": {
"empathy_maps": {"type": "array", "description": "同理心地图列表,含Says/Thinks/Does/Feels四象限"}
}
}输出校验规则:
| 字段路径 | 类型 | 必填 | 说明 |
|---|---|---|---|
| empathy_maps | array | 是 | 同理心地图列表,不可为空 |
| empathy_maps[].persona_id | string | 是 | 关联Persona ID |
| empathy_maps[].persona_name | string | 是 | 关联Persona名称 |
| empathy_maps[].says | array | 是 | Says象限,每项须含content、source、confidence,≥2条 |
| empathy_maps[].thinks | array | 是 | Thinks象限,每项须含content、inference_basis、confidence,≥2条 |
| empathy_maps[].does | array | 是 | Does象限,每项须含content、source、confidence,≥2条 |
| empathy_maps[].feels | array | 是 | Feels象限,每项须含emotion、intensity、inference_basis、confidence,≥2条 |
{
"empathy_maps": [
{
"persona_id": "string",
"persona_name": "string",
"says": [
{
"content": "string",
"source": "string",
"confidence": "number"
}
],
"thinks": [
{
"content": "string",
"inference_basis": "string",
"confidence": "number"
}
],
"does": [
{
"content": "string",
"source": "string",
"confidence": "number"
}
],
"feels": [
{
"emotion": "string",
"intensity": "number",
"inference_basis": "string",
"confidence": "number"
}
]
}
]
}输出文件:output/pm-discovery/user-research-user-modeling/journey-map.json
输出Schema:
{
"type": "object",
"required": ["journey_maps"],
"properties": {
"journey_maps": {"type": "array", "description": "用户旅程地图列表,含阶段、情绪曲线和机会点"}
}
}输出校验规则:
| 字段路径 | 类型 | 必填 | 说明 |
|---|---|---|---|
| journey_maps | array | 是 | 旅程地图列表,不可为空 |
| journey_maps[].persona_id | string | 是 | 关联Persona ID |
| journey_maps[].persona_name | string | 是 | 关联Persona名称 |
| journey_maps[].stages | array | 是 | 旅程阶段列表,须覆盖核心阶段 |
| journey_maps[].stages[].stage_name | string | 是 | 阶段名称 |
| journey_maps[].stages[].user_behaviors | string[] | 是 | 用户行为列表 |
| journey_maps[].stages[].touchpoints | string[] | 是 | 触点列表 |
| journey_maps[].stages[].emotion_score | number | 是 | 情绪评分 |
| journey_maps[].stages[].emotion_confidence | number | 是 | 情绪置信度,0-1 |
| journey_maps[].stages[].pain_points | string[] | 是 | 痛点列表 |
| journey_maps[].stages[].opportunities | string[] | 是 | 机会点列表 |
| journey_maps[].emotional_arc | object | 是 | 情绪弧线,须含high_points、low_points、overall_trend |
{
"journey_maps": [
{
"persona_id": "string",
"persona_name": "string",
"stages": [
{
"stage_name": "string",
"user_behaviors": ["string"],
"touchpoints": ["string"],
"emotion_score": "number",
"emotion_confidence": "number",
"pain_points": ["string"],
"opportunities": ["string"]
}
],
"emotional_arc": {
"high_points": ["string"],
"low_points": ["string"],
"overall_trend": "string"
}
}
]
}| 条件 | 动作 |
|---|---|
| Persona整体置信度 < 0.5 | 升级至人类验证,标记"需人工确认",不自动进入后续流程 |
| Emotional Job推断置信度 < 0.5 | 升级至人类验证,标记"情感需求推断待确认" |
| Social Job推断置信度 < 0.5 | 升级至人类验证,标记"社交需求推断待确认" |
| 两个Persona区分度不足(特征重叠 > 70%) | 合并为1个Persona或标记"需人工判断是否拆分" |
| 聚类质量评分 < 0.4 | 标记"聚类质量不佳",建议调整聚类参数或补充数据 |
| 检查项 | 标准 | 不达标处理 |
|---|---|---|
| 至少1个Persona置信度 ≥ 0.7 | 满足 | 无高置信度Persona时标记"建模不充分",建议补充数据或访谈 |
| 每个Persona有数据支撑 | 每个字段标注数据来源 | 推断性字段占比 > 50%时标记"数据支撑不足" |
| Persona间区分度 | 特征重叠 < 70% | 重叠过高时建议合并或重新聚类 |
| 代表性原声 | 每个Persona ≥ 3条原声 | 不足时标记"原声支撑不足" |
| Empathy Map四象限完整 | 每个象限 ≥ 2条内容 | 缺失象限标记"数据不足" |
| Journey Map阶段完整 | 覆盖核心阶段 | 缺失阶段标记"数据缺失" |
| 所有输出标注置信度 | 100% | 缺失置信度的字段补填默认值0.3并标记 |
当上游文件不存在时,本Skill仍可独立执行:
| 缺失的上游输入 | 降级方案 | 输出影响 |
|---|---|---|
| voice-analysis.json | 基于用户口头描述的目标用户特征推断Persona,标注"缺乏声音数据支撑" | Persona声音特征和痛点基于推断,representative_quotes缺失,core_pain_points置信度降低 |
| behavior-analysis.json | 基于用户口头描述的用户行为推断Persona,标注"缺乏行为数据支撑" | Persona行为特征和Aha Moment基于推断,key_behaviors置信度降低,Journey Map行为数据缺失 |
| voice-analysis.json + behavior-analysis.json | 用户提供目标用户描述 → 基于描述推断Persona,整体置信度降低 | personas整体confidence降低,data_source多为inferred,low_confidence_fields增多 |
| 所有上游文件均缺失 | 提示用户先执行前序阶段,或基于用户口头描述执行轻量版Persona推断 | 输出为纯推断Persona,confidence_overall上限0.3,所有字段标注inferred |
| 若用户未提供survey_data | 跳过该输入相关步骤,Persona中人口统计学信息基于推断,标注"缺乏问卷数据" | 人口统计字段data_source为inferred,置信度降低 |
| 若用户未提供modeling_config | 跳过该输入相关步骤,使用默认建模配置(最大Persona数:4,置信度阈值:0.5) | 使用默认配置,Persona数量和阈值可能非最优 |
本Skill需要用户声音分析和行为分析数据,请通过以下方式之一提供:
| 上游Skill | 变更类型 | 影响范围 | 响应动作 |
|---|---|---|---|
| user-research-voice-analysis | voice-analysis.json结构变更 | 用户分群、痛点、主题数据格式变化 | 检查输入字段映射,适配新结构,不兼容时标记"上游数据格式异常" |
| user-research-voice-analysis | voice-analysis.json内容更新 | 痛点等级、情感分布、分群结果变化 | 重新执行聚类和Persona生成,标注"基于更新数据重建" |
| user-research-behavior-analysis | behavior-analysis.json结构变更 | 行为分群、Aha Moment、功能使用数据格式变化 | 检查输入字段映射,适配新结构,不兼容时标记"上游数据格式异常" |
| user-research-behavior-analysis | behavior-analysis.json内容更新 | 漏斗、路径、异常检测结果变化 | 重新执行聚类和Persona生成,标注"基于更新数据重建" |
| 下游Skill | 通知触发条件 | 通知方式 | 通知内容 |
|---|---|---|---|
| user-research-interview-assist | persona.json更新完成 | 写入output文件 | 通知Persona数据已就绪,可用于访谈脚本设计 |
| user-research-report | persona.json / empathy-map.json / journey-map.json更新完成 | 写入output文件 | 通知用户建模数据已就绪,可用于报告生成 |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.