user-research-interview-assist — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited user-research-interview-assist (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负责脚本设计、转录分析和洞察提取
| 输入项 | 类型 | 必填 | 来源 | 说明 |
|---|---|---|---|---|
| persona.json | JSON | ○ | output/pm-discovery/user-research-user-modeling/persona.json | 用户画像数据,用于定向访谈对象和脚本设计 |
| research_objectives | object | 是 | 用户提供 | 研究目标,定义本次访谈要验证的假设和探索的方向 |
| interview_config | object | 是 | 用户提供 | 访谈配置(目标人数、时长、形式、录音可用性) |
| 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 | 行为分析数据 |
{
"persona_path": "output/pm-discovery/user-research-user-modeling/persona.json",
"research_objectives": {
"primary_questions": ["string"],
"hypotheses_to_validate": ["string"],
"areas_to_explore": ["string"]
},
"interview_config": {
"target_count": "number",
"duration_minutes": "number",
"format": "in_person|video|phone",
"recording_available": "boolean"
},
"existing_analysis": {
"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"
}
}输入依赖:
persona.json(如已生成):用于定向访谈对象和脚本设计#### Step 1:生成目标清单
#### Step 2:生成半结构化访谈脚本
#### Step 3:推荐访谈对象
#### Step 4:转录与结构化
#### Step 5:关键洞察提取
#### Step 6:跨访谈聚类
#### Step 7:更新Persona
interview-validated / interview-revised / interview-discovered输出文件:output/pm-discovery/user-research-interview-assist/interview-script.json
输出Schema:
{
"type": "object",
"required": ["script_id", "research_objectives", "core_modules"],
"properties": {
"script_id": {"type": "string", "description": "访谈脚本唯一标识"},
"research_objectives": {"type": "array", "description": "研究目标列表"},
"target_personas": {"type": "array", "description": "目标Persona类型列表"},
"opening": {"type": "object", "description": "开场模块,含破冰问题和背景设定"},
"core_modules": {"type": "array", "description": "核心问题模块列表"},
"closing": {"type": "object", "description": "收尾模块"},
"recommended_participants": {"type": "array", "description": "推荐访谈对象列表"}
}
}输出校验规则:
| 字段路径 | 类型 | 必填 | 说明 |
|---|---|---|---|
| script_id | string | 是 | 脚本唯一标识 |
| research_objectives | string[] | 是 | 研究目标列表,不可为空 |
| target_personas | string[] | 否 | 目标Persona类型列表 |
| opening.icebreaker_questions | string[] | 是 | 破冰问题列表 |
| opening.context_setting | string | 是 | 背景设定描述 |
| core_modules | array | 是 | 核心问题模块列表,不可为空 |
| core_modules[].module_name | string | 是 | 模块名称 |
| core_modules[].objective | string | 是 | 模块目标 |
| core_modules[].hypothesis_to_validate | string | 是 | 待验证假设 |
| core_modules[].priority | string | 是 | 优先级枚举:must_validate/should_validate/optional |
| core_modules[].questions | array | 是 | 问题列表,每个核心问题≥2个追问方向 |
| core_modules[].questions[].main_question | string | 是 | 主问题(开放式) |
| core_modules[].questions[].follow_up_strategies | string[] | 是 | 追问策略,≥2个方向 |
| core_modules[].questions[].probes | string[] | 是 | 探针提示 |
| closing.open_ended_question | string | 是 | 收尾开放性问题 |
| recommended_participants | array | 否 | 推荐访谈对象列表 |
| recommended_participants[].persona_type | string | 是 | Persona类型 |
| recommended_participants[].priority | string | 是 | 优先级枚举:high/medium/low |
{
"script_id": "string",
"research_objectives": ["string"],
"target_personas": ["string"],
"opening": {
"icebreaker_questions": ["string"],
"context_setting": "string"
},
"core_modules": [
{
"module_name": "string",
"objective": "string",
"hypothesis_to_validate": "string",
"priority": "must_validate|should_validate|optional",
"questions": [
{
"id": "string",
"main_question": "string",
"follow_up_strategies": ["string"],
"probes": ["string"],
"target_objective": "string"
}
]
}
],
"closing": {
"open_ended_question": "string",
"wrap_up": "string"
},
"recommended_participants": [
{
"persona_type": "string",
"key_characteristics": ["string"],
"priority": "high|medium|low",
"reason": "string"
}
]
}输出文件:output/pm-discovery/user-research-interview-assist/interview-insights.json
输出Schema:
{
"type": "object",
"required": ["interviews_conducted", "validated_hypotheses", "new_discoveries", "metadata"],
"properties": {
"interviews_conducted": {"type": "number", "description": "已执行访谈数量"},
"validated_hypotheses": {"type": "array", "description": "已验证的假设列表"},
"refuted_hypotheses": {"type": "array", "description": "被推翻的假设列表"},
"new_discoveries": {"type": "array", "description": "新发现列表"},
"cross_interview_patterns": {"type": "array", "description": "跨访谈共同模式列表"},
"persona_updates": {"type": "array", "description": "Persona更新列表"},
"data_cross_validation": {"type": "object", "description": "与已有数据的交叉验证结果"},
"metadata": {"type": "object", "description": "分析元数据,含时间戳和整体置信度"}
}
}输出校验规则:
| 字段路径 | 类型 | 必填 | 说明 |
|---|---|---|---|
| interviews_conducted | number | 是 | 已执行访谈数量,须≥1 |
| validated_hypotheses | array | 是 | 已验证假设列表,每项须含hypothesis、supporting_evidence、supporting_quotes、interview_count、confidence |
| validated_hypotheses[].confidence | number | 是 | 验证置信度,0-1 |
| refuted_hypotheses | array | 是 | 被推翻假设列表,每项须含hypothesis、refuting_evidence、refuting_quotes、interview_count、confidence |
| refuted_hypotheses[].confidence | number | 是 | 推翻置信度,0-1 |
| new_discoveries | array | 是 | 新发现列表,每项须含discovery、evidence、quotes、interview_count、confidence、needs_further_validation |
| new_discoveries[].needs_further_validation | boolean | 是 | 是否需要进一步验证 |
| new_discoveries[].confidence | number | 是 | 发现置信度,0-1 |
| cross_interview_patterns | array | 否 | 跨访谈模式列表,每项须含pattern、frequency、interview_ids、confidence、saturation_level |
| cross_interview_patterns[].saturation_level | string | 是 | 饱和度枚举:saturated/near_saturated/needs_more |
| persona_updates | array | 否 | Persona更新列表,每项须含persona_id、updates |
| persona_updates[].updates[].update_type | string | 是 | 更新类型枚举:interview-validated/interview-revised/interview-discovered |
| data_cross_validation | object | 否 | 交叉验证结果,须含consistent_with_voice_analysis、consistent_with_behavior_analysis、contradictions_found |
| metadata.analysis_timestamp | string | 是 | 分析时间戳 |
| metadata.total_interviews | number | 是 | 访谈总数 |
| metadata.total_insights | number | 是 | 洞察总数 |
| metadata.confidence_overall | number | 是 | 整体置信度,0-1 |
{
"interviews_conducted": "number",
"validated_hypotheses": [
{
"hypothesis": "string",
"supporting_evidence": ["string"],
"supporting_quotes": ["string"],
"interview_count": "number",
"confidence": "number"
}
],
"refuted_hypotheses": [
{
"hypothesis": "string",
"refuting_evidence": ["string"],
"refuting_quotes": ["string"],
"interview_count": "number",
"confidence": "number"
}
],
"new_discoveries": [
{
"discovery": "string",
"evidence": ["string"],
"quotes": ["string"],
"interview_count": "number",
"confidence": "number",
"needs_further_validation": "boolean"
}
],
"cross_interview_patterns": [
{
"pattern": "string",
"frequency": "number",
"interview_ids": ["string"],
"confidence": "number",
"saturation_level": "saturated|near_saturated|needs_more"
}
],
"persona_updates": [
{
"persona_id": "string",
"updates": [
{
"field": "string",
"previous_value": "string",
"updated_value": "string",
"update_type": "interview-validated|interview-revised|interview-discovered",
"confidence": "number"
}
]
}
],
"data_cross_validation": {
"consistent_with_voice_analysis": ["string"],
"consistent_with_behavior_analysis": ["string"],
"contradictions_found": [
{
"data_source": "string",
"interview_finding": "string",
"existing_finding": "string",
"possible_explanation": "string",
"resolution": "string"
}
]
},
"metadata": {
"analysis_timestamp": "string",
"total_interviews": "number",
"total_insights": "number",
"confidence_overall": "number"
}
}| 条件 | 动作 |
|---|---|
| 推断需求置信度 < 0.5 | 标记"需人类验证",不直接更新Persona |
| 访谈发现与已有数据矛盾 | 记录矛盾,标记"需仲裁",列出双方证据 |
| 跨访谈聚类饱和度不足 | 建议增加访谈数量,标注"需补充验证" |
| 新发现仅1人提及 | 标记"孤立发现",置信度上限0.4,建议验证 |
| 访谈脚本偏离原目标 | 人类决策是否调整研究目标 |
| 检查项 | 标准 | 不达标处理 |
|---|---|---|
| 脚本包含追问策略 | 每个核心问题 ≥ 2个追问方向 | 补充追问策略 |
| 洞察与已有数据做了印证/矛盾分析 | 每个洞察有cross_validation记录 | 未做交叉验证的洞察标记"待验证" |
| 访谈对象覆盖主要Persona | 每个高优先级Persona ≥ 3人 | 标注"覆盖不足",建议补充 |
| 每个洞察有原声支撑 | 每个洞察 ≥ 1条引用 | 无原声的洞察标记"支撑不足" |
| 所有输出标注置信度 | 100% | 缺失置信度的字段补填默认值0.3并标记 |
| 非引导性问题检查 | 核心问题无引导性表述 | 发现引导性问题则标记并建议修改 |
当上游文件不存在时,本Skill仍可独立执行:
| 缺失的上游输入 | 降级方案 | 输出影响 |
|---|---|---|
| persona.json | 用户提供研究目标和用户描述 → 基于描述生成访谈脚本,标注"缺乏Persona数据定向" | target_personas为空,recommended_participants基于推断,访谈对象定向精度降低 |
| voice-analysis.json / behavior-analysis.json | 基于用户提供的研究目标直接生成脚本,标注"缺乏数据验证假设" | hypothesis_to_validate基于用户描述而非数据发现,data_cross_validation缺失 |
| 所有上游文件均缺失 | 提示用户先执行前序阶段,或基于用户口头描述的研究目标生成轻量版访谈脚本 | 脚本为纯探索性设计,验证性假设缺失,整体置信度降低 |
| 若用户未提供research_objectives | 提示用户提供研究目标,否则无法设计定向访谈脚本 | 无法生成interview-script.json,流程中断 |
| 若用户未提供interview_config | 提示用户提供访谈配置,否则使用默认配置(目标人数:5,时长:45分钟,形式:视频,录音可用) | 使用默认配置,访谈安排可能不符合实际条件 |
本Skill需要Persona和用户研究数据,请通过以下方式之一提供:
| 上游Skill | 变更类型 | 影响范围 | 响应动作 |
|---|---|---|---|
| user-research-user-modeling | persona.json结构变更 | Persona字段映射变化 | 检查输入字段映射,适配新结构,不兼容时标记"上游数据格式异常" |
| user-research-user-modeling | persona.json内容更新 | Persona特征、痛点、JTBD变化 | 重新生成访谈脚本和推荐对象,标注"基于更新Persona重建" |
| user-research-voice-analysis | voice-analysis.json结构变更 | 痛点、主题数据格式变化 | 检查输入字段映射,适配新结构,不兼容时标记"上游数据格式异常" |
| user-research-voice-analysis | voice-analysis.json内容更新 | 痛点等级、情感分布变化 | 更新待验证假设清单,标注"基于更新数据调整假设" |
| user-research-behavior-analysis | behavior-analysis.json结构变更 | 行为分群、Aha Moment数据格式变化 | 检查输入字段映射,适配新结构,不兼容时标记"上游数据格式异常" |
| user-research-behavior-analysis | behavior-analysis.json内容更新 | 漏斗、路径、异常检测结果变化 | 更新待验证假设清单,标注"基于更新数据调整假设" |
| 下游Skill | 通知触发条件 | 通知方式 | 通知内容 |
|---|---|---|---|
| user-research-report | interview-insights.json更新完成 | 写入output文件 | 通知访谈洞察和Persona更新数据已就绪,可用于报告生成 |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.