| name | survey-checker |
| description | 网易问卷(国内 survey-game.163.com / 国外 survey-game.easebar.com)全流程管理工具: 质量检查、自动修复、问卷复制、题目录入。 当用户说"检查问卷"、"审查问卷"、"问卷有没有问题"、"帮我看看问卷"、"review 问卷"、 "问卷质检"、"问卷校验"、"问卷有错别字吗"、"问卷逻辑对不对"等类似表达时触发此 skill。 当用户说"复制问卷"、"复制国内问卷"、"把问卷xxx复制一份"、"基于xxx问卷创建新版本"等 涉及问卷复制/克隆的表达时也应触发。 当用户说"标红"、"标记重点"、"highlight"、"突出关键词"、"标记文本"等 涉及问卷文本样式的表达时也应触发。 即使用户没有明确说"检查"或"复制",只要涉及问卷质量审核、问卷纠错、问卷优化建议、 问卷管理操作等场景也应触发。
|
Survey Checker — 问卷质量检查 & 管理工具
概述
这个 skill 通过网易问卷平台的 API 接口,提供两大核心能力:
能力一:问卷质量检查 & 自动修复
获取指定问卷的完整内容(题目、选项、逻辑设置等),进行三维度质量检查:
- 错别字检查 — 找出所有题目、选项、说明文字中的错别字和语病
- 逻辑检查 — 发现跳转逻辑、选项互斥、必填设置、量表一致性等问题
- 设计专业性评估 — 从问卷研究方法论角度评估问题措辞、量表设计、题序安排等
检查完成后生成 Excel 报告,并可通过 calibrate(问卷校准)命令按 R1-R8 规则自动修复。
能力二:问卷创建、复制与题目录入
- 新建问卷 — 创建空白问卷并录入题目(
create + import)
- 复制问卷 — 基于已有问卷克隆(保留所有题目、选项、逻辑设置),支持自定义新名称
- 题目录入 — 任意格式文件(md/txt/xlsx)统一转化为标准格式后高精度录入,支持跳转逻辑自动写入
- 典型场景:基于国内版问卷创建海外版、基于上期问卷创建本期版本、从零新建问卷等
能力三:文本样式(标红关键词)
通过 style --red 命令,自动识别题干中的通用关键词并标红(HTML <span> 红色高亮),提升问卷的视觉可读性:
- 自动识别 — 内置 5 类语义规则(评价/态度、功能模块、技术/性能、时间范围、行动/反馈),按优先级匹配
- 通用化设计 — 只标记通用功能/评价类关键词(如满意度、界面使用、性能问题等),不标记游戏专有名词
- 每题限 2 个 — 每道题最多标记 2 个关键词,避免视觉过载
- 支持
--dry-run 预览、--questions Q1,Q3 指定范围
环境
- Python: 系统默认
python(如不可用,尝试 python3)
- 脚本目录:
{SKILL_DIR}/
- 核心依赖:
requests(必须);openpyxl(生成报告);playwright(Cookie 自动刷新)
- 依赖安装:
pip install -r {SKILL_DIR}/requirements.txt
工作流程
Step 0: 确认问卷平台
⚠️ 重要:执行任何操作前,必须先确认平台! 工具同时支持国内和国外两个平台,认证和 Cookie 完全独立:
| 平台 | 系统地址 | CLI 参数 |
|---|
| 国内 | survey-game.163.com | --platform cn(默认,可省略) |
| 国外 | survey-game.easebar.com | --platform global 或 -p global |
如果用户没有明确说明是国内还是国外问卷,必须先询问用户:
请问这是哪个平台的问卷?
- 国内问卷(survey-game.163.com)
- 国外问卷(survey-game.easebar.com)
确认平台后,所有命令都带上对应的 --platform 参数:
python {SKILL_DIR}/survey_checker.py check
python {SKILL_DIR}/survey_checker.py -p global check
python {SKILL_DIR}/survey_checker.py -p global fetch --id 44583
python {SKILL_DIR}/survey_checker.py -p global calibrate --id 44583
国内国外各有独立的 Cookie 文件:国内 → config.json,国外 → config_global.json。
Step 1: 收集信息 & 认证
向用户确认问卷名称或关键词(用于搜索定位目标问卷)。
认证完全自动化,无需向用户要 Cookie 或密码。 脚本内置与 survey_download 相同的 Cookie 自动管理机制:
- Cookie 保存在
{SKILL_DIR}/config.json(国内)/ config_global.json(海外)
- 失效时自动通过 Playwright 刷新
- 首次运行会打开浏览器窗口,用户在浏览器中登录后自动保存 session 到
.browser_profile
- 后续运行自动复用 session,全自动无需人工操作
快速认证检查:
python {SKILL_DIR}/survey_checker.py check
Step 2: 搜索并获取问卷内容
使用脚本通过 API 搜索并抓取问卷内容:
python {SKILL_DIR}/survey_checker.py search --name "问卷关键词"
python {SKILL_DIR}/survey_checker.py fetch --id 问卷ID
多个匹配时用 ask_user_question 让用户选择,然后用选定的 --id 抓取。
stdout 输出 JSON 结果,stderr 输出日志。解析 stdout 获取结果。
Windows 路径含 & 等特殊字符时用双引号包裹。
重要:题型分类和编号规则
问卷系统中的题目按类型分为三类,各有独立编号序列:
| 前缀 | 类型 | type_code | 说明 |
|---|
| Y | 隐含题 | imply | 隐藏参数(如 uid、engine_ver),不算正式题目 |
| T | 说明题 | describe | 描述/说明文字,不算正式题目 |
| Q | 正式题目 | 其他所有(radio/checkbox/star/blank/rect-star/rect-radio 等) | 需要检查的题目 |
脚本输出的每道题都有 label(如 Q1、Y2、T1)和 prefix(Q/Y/T)字段。
- 统计"题目总数"时 只计 Q 题,使用
question_count 字段
- 在报告中引用题号时使用 Q编号(如 Q1、Q15),不要用原始序号
- Y 题和 T 题可以跳过检查,但 T 题(说明文字)仍需检查错别字
Step 3: 分析问卷内容
拿到问卷的结构化数据后,从以下三个维度进行全面检查(重点关注 Q 题和 T 题文字):
3.1 错别字检查
逐题、逐选项扫描文本内容,识别以下问题:
- 明显的错别字:如"消费这"→"消费者","问券"→"问卷"
- 同音/形近字混淆:如"以"与"已","在"与"再"
- 标点符号错误:中英文标点混用、多余空格、缺少句号等
- 格式不一致:部分选项有句号部分没有,编号格式不统一等
对每个发现的问题,记录:
3.2 逻辑检查
⚠️ 关键原则:一切判断必须基于 API 返回的实际数据字段,绝对不能靠猜测或推断。
脚本输出的数据中已包含以下关键配置信息,分析时必须先读取这些字段:
required:0=非必填,1=必填。判断必填状态时以此字段为准,不要仅凭题干中的"(非必填)"文字推测
options[].mutex:0=普通选项,1=互斥选项。判断多选题是否设置了互斥时,必须检查选项的 mutex 字段值,不要凭选项文本(如"以上都没有")猜测
options[].hasOther:0=普通选项,1=带"其他"填写框
logic:跳转/显示逻辑配置对象
分析问卷的结构和逻辑设置,识别以下问题:
- 选项完整性:选项是否覆盖所有可能情况,是否缺少"其他"选项(检查
hasOther 字段)
- 选项互斥性一致性:对于多选题中的否定/排除选项(如"以上都没有"、"我没遇到问题"),检查其
mutex 字段是否为 1。只有 mutex=0 时才报告"未设互斥"
- 必填合理性:检查
required 字段值。报告 required 值与题干文字不一致的情况(如题干写"非必填"但 required=1,或题干无"非必填"但 required=0)
- 选项区间重叠:单选题的数值区间选项是否有重叠(如"18-25岁"和"25-30岁"中25岁归属不明)
- 跳转逻辑:跳转条件是否合理、是否存在死循环或不可达题目
- 量表一致性:同一问卷中李克特量表的方向是否统一(如有的5分=非常满意,有的5分=非常不满意)
- 题目顺序:是否存在敏感题目(如收入、年龄)放置过早的问题
- 矛盾/重复检测:是否有两道题在问几乎相同的内容
⚠️ 以下 5 条为固定检查规则,每次检查必须逐条核查,发现问题时纳入报告:
规则 R1 — 多选题布局:多选题(type=checkbox)选项数 ≥ 8 且 < 20 时,layout 必须为 2(每行展示 2 列);选项数 ≥ 20 时,layout 必须为 3(每行展示 3 列)。若 layout 不满足以上要求,标记为需修改。
规则 R2 — 多选题选项随机:所有多选题(type=checkbox)必须开启选项全部随机(random=1)。同时,"其他"选项(文本为"其他"或 hasOther=1)和互斥选项(mutex=1)必须设为不随机(noRandom=1),确保它们固定在末尾。
规则 R3 — 互斥选项必须开启:多选题中含有排他性语义的选项(如"以上都没有"、"我没有不满意的地方"、"我没遇到问题"、"只玩XXX"等),其 mutex 字段必须为 1。识别关键词包括但不限于:"以上都没"、"都没有"、"我没有"、"我没在"、"只玩"、"我认为…没有问题"、"没遇到"。
规则 R4 — 文本题非必填:所有文本/填空题(type=blank)默认应为非必填(required=0)。如果 required=1,标记为需修改。
规则 R6 — 非文本题必填:除文本/填空题(type=blank)、说明题、分页题、隐含题外,所有正式题目(单选、多选、评分、矩阵等)都应设为必填(required=1)。如果 required=0,标记为需修改。
规则 R5 — 逻辑显示关系:明显存在从属关系的题目,必须设置显示逻辑(logic 字段)。注意:逻辑可能存储在父题(评分题)的 logic 字段中指向追问题,而非追问题自身——检查时需同时检查父题 logic 的 questions 列表是否包含追问题 ID。典型场景:
- 满意度评分题(如 1-5 星) → 不满意原因追问(应设为当评分 ≤ 3 时才显示)
- "是否参与过" → 参与感受追问
- "是否使用过" → 使用评价追问
检查所有可能的从属关系题对,若缺少
logic 配置,标记为建议添加。
规则 R7 — 异常标点符号:矩阵题(rect-star/rect-radio/rect-checkbox)的子问题标题末尾不应有多余标点符号(如 :、:、;、,、、等)。发现后自动去除末尾异常标点。
对每个发现的问题,记录:
3.3 设计专业性评估
从问卷方法论和用户体验角度评估:
- 题目措辞:是否存在引导性提问、双重否定、一题多问(double-barreled)
- 量表设计:量表级数是否合理(如满意度建议用5/7级)、标签是否清晰
- 问卷长度:题目总数是否过多(超过30题需警告)、预计作答时间
- 开头结尾:是否有欢迎语/说明、是否有感谢语
- 人口学题目:位置是否合理(通常建议放最后)、选项是否规范
- 整体结构:题目分组是否合理、分页是否恰当
- 视觉呈现:矩阵题是否过大(超过7列或10行应拆分)
对每项评估,给出:
- 评估维度
- 当前状态(✅ 良好 / ⚠️ 建议改进 / ❌ 需要修改)
- 具体说明和改进建议
Step 3.4: 自动修改问卷设置
检查发现问题后,可以通过 API 直接修改问卷设置。修改前必须与用户确认!
python {SKILL_DIR}/survey_checker.py modify --id 问卷ID --json '[{"question_label":"Q6","changes":{"required":0}}]'
python {SKILL_DIR}/survey_checker.py modify --id 问卷ID --json @modifications.json
支持的修改字段一览:
| 级别 | 字段 | 说明 | 值 |
|---|
| 题目级 | required | 必填设置 | 0=非必填, 1=必填 |
| 题目级 | random | 选项全部随机 | 0=不随机, 1=随机 |
| 题目级 | layout | 布局列数 | 0=默认1列, 2=每行2列 |
| 题目级 | randomColumn | 列随机(矩阵题) | 0/1 |
| 题目级 | title | 题目标题文本 | HTML字符串 |
| 题目级 | maxLength | 最大输入字数 | -1=不限 |
| 题目级 | maxRow | 输入框行高 | 数字 |
| 题目级 | validate | 文本验证 | null/email/phone等 |
| 选项级 | mutex | 互斥选项 | 0=普通, 1=互斥 |
| 选项级 | noRandom | 不参与随机 | 0=参与, 1=固定 |
| 选项级 | hasOther | 带"其他"填写框 | 0/1 |
| 选项级 | hidden | 隐藏选项 | 0/1 |
修改 JSON 格式示例:
[
{
"question_label": "Q22",
"changes": {
"required": 0
}
},
{
"question_label": "Q6",
"changes": {
"random": 1,
"option_mutex": [
{"text": "我没有不满意的地方", "mutex": 1, "noRandom": 1},
{"text": "其他", "noRandom": 1, "hasOther": 1}
]
}
}
]
定位题目时可以用 question_label(Q1/T1/Y1)或 question_id(如 "q-1772203290953407")。
选项修改通过 option_mutex 按选项文本模糊匹配,或通过 option_changes 按选项序号精确定位。
重要:修改操作会直接修改线上问卷,务必:
- 先用
ask_user_question 向用户确认每项修改
- 说明修改内容和影响
- 用户确认后再执行
Step 3.5: 复制问卷
当用户要求复制/克隆问卷时(如"复制国内问卷91044"、"基于上期问卷创建新版"、"把问卷复制一份"),使用 copy 命令:
python {SKILL_DIR}/survey_checker.py copy --id 源问卷ID
python {SKILL_DIR}/survey_checker.py copy --id 源问卷ID --name "新问卷名称"
返回结果包含:
new_id: 新问卷 ID
new_name: 新问卷名称
edit_url: 编辑页面链接(可直接打开)
典型使用场景:
- "复制国内问卷(91044)" →
copy --id 91044
- "基于91044创建海外版" →
copy --id 91044 --name "《我的世界》海外版调研"
- "把上期问卷复制一份改成本期" → 先
search 找到上期问卷 ID,再 copy
⚠️ 校准时机规则:
- 仅复制、不录入新题目的场景: 复制成功后,无需询问用户,直接对新问卷执行
calibrate 命令进行问卷校准(R1-R8 规则自动修复),并将校准结果一并告知用户。
- 复制 + 录入新题目的场景: 复制完成后 不要立即执行校准,等录入新题目全部完成后,再统一执行一次
calibrate。避免校准执行两次(复制后一次、录入后一次),浪费时间且可能产生冲突。
复制后的其他可选操作:
- 用
modify 批量修改题目内容(如把"26年"改为"27年")
- 告诉用户新问卷的编辑链接,让用户在浏览器中进一步编辑
⚠️ 复制 + 录入新题目的场景: 当用户同时要求"复制问卷"和"录入新题目"时,复制完成后、录入之前,必须用 ask_user_question 询问用户如何处理原有题目:
选项:
- 清空原有题目,仅保留新录入的题目(适合"基于模板创建全新问卷"的场景)
- 保留原有题目,将新题目追加到末尾(适合"在已有问卷基础上补充题目"的场景)
- 保留原有隐含题(Y题),清空其他题目后录入新题目(适合"模板中有隐含变量需要保留"的场景,推荐)
根据用户选择执行对应操作后再录入。清空题目时使用 clear 命令:
python {SKILL_DIR}/survey_checker.py clear --id 问卷ID
python {SKILL_DIR}/survey_checker.py clear --id 问卷ID --keep-imply
Step 3.5a: 新建问卷
当用户要求录入题目但没有明确指定目标问卷 ID 时,默认走此路径。包括:"帮我录入这份问卷"、"帮我上传这个文件"、"帮我新建问卷"、"创建一份新问卷"、"从零开始做问卷"等。使用 create 命令:
第一步:向用户确认必要信息
用 ask_user_question 依次确认:
- 问卷名称(如"《我的世界》4月版本调研")
- 所属游戏 — 对应问卷系统中的"所属游戏"下拉字段。提问时必须给出以下已知有效代号供参考(禁止编造不存在的代号,如 g100):
g79(漫威终极逆转)、h55(漫威终极逆转海外)、g94(蛋仔派对)、h79(蛋仔派对海外)、ba2(漫威终极逆转国内)、g84(一梦江湖)、h53(一梦江湖海外)、g89(逆水寒)、h75(逆水寒海外)
如果用户填写的代号不在以上列表中,应提示用户确认代号是否正确,但仍以用户填写的为准传参。
其他设置均使用默认值,无需向用户确认:
- 问卷类型 = 普通问卷
- 问卷语言 = 简体中文
- 协作群 = 不添加
- 发布确认人 = 不添加
- 投放范围 = 全网络
- 投放区域 = 全球
第二步:创建空白问卷
python {SKILL_DIR}/survey_checker.py create --name "问卷名称" --game "所属游戏"
python {SKILL_DIR}/survey_checker.py -p global create --name "问卷名称" --game "所属游戏"
返回结果包含:
survey_id: 新问卷 ID
edit_url: 编辑页面链接
第三步:进入 Step 3.6 录入题目流程
新建的问卷是空白的,无需清空,直接进入 Step 3.6 录入题目。
⚠️ 校准时机: 录入完成后执行一次 calibrate,无需询问用户。
Step 3.5b: 仅录入(到已有问卷)
仅当用户明确指定了目标问卷 ID 时才走此路径(如"帮我把这个文件录入到问卷 91780"、"往问卷 XXX 里录入题目")。无需新建问卷:
- 确认目标问卷 ID(用户已给则直接用,未给则通过
search 搜索确认)
- 询问如何处理问卷现有题目:清空后录入 / 保留并追加 / 保留隐含题清空其他
- 进入 Step 3.6 录入题目流程
- 录入完成后执行
calibrate,无需询问用户
Step 3.6: 录入题目
所有用户上传的问卷文件,无论格式,都必须先转化为标准格式再录入。 这是保证准确率的强制流程,不可跳过。
第一步:读取原始文件内容
python {SKILL_DIR}/convert_to_standard.py "原始问卷文件路径"
工具会输出:① 原始文件纯文本内容 ② 标准格式规范说明。AI 阅读输出内容后执行转化。
如果用户直接在对话中粘贴了题目文字(无文件),则跳过此步,直接进入第二步转化。
第二步:AI 转化为标准格式
逐题按以下规则转化,生成完整的标准格式 Markdown:
格式规范详见 convert_to_standard.py 输出的标准格式规范文档。以下仅列出补充规则:
题型推断规则(原文无明确标注时):
- 选项列表 + "可多选" →
[多选题]
- 选项列表(无"可多选")→
[单选题]
- 开放问答 / "请描述" / "请填写" →
[填空题]
- 评分 / 打分 / 满意度 + 数值范围 →
[量表题]
- 多子问题 × 评分 →
[矩形量表题]
- 多子问题 × 选项 →
[矩形单选题]
- NPS(0-10 推荐评分)→
[量表题] + [评分]NPS
格式补充规则:
5. 题干中的 * 提示说明必须拆为独立行(确保在问卷中自动换行显示)。例如:
- 隐含题/分页符保留原位置和编号
- 填空题标题保留"(非必填)"字样
跳转逻辑规则:
- 原文有明确跳转说明 → 转写为
[跳转逻辑] 块
- 原文无跳转但存在追问语义(满意度→原因、是否参与→参与感受)→ 推断并添加
[跳转逻辑],标记为"AI推断"
第三步:收集推断信息,与用户确认(如有)
转化完成后,检查以下情况。有任何一项存在,就必须在录入前与用户确认;全部不存在则直接进入第四步。
确认分为两部分:客观修复(告知即可)和 AI 推断(需用户勾选)。
Part A:客观格式修复 — 仅文字告知,无需用户选择
以下属于客观纠正,直接在对话中告知用户即可,不需要单独确认:
- NPS 标注修复(如原始评分 10 分 → 标注为 NPS)
- 拆行选项合并(如"欧米伽"和"(80-89级)"合并为一行)
- 编号重排、标点清理等格式规范化
告知格式示例(简洁即可):
转化完成,共 XX 题。格式修复 N 处(NPS 标注、选项合并等),详见标准文件。
Part B:AI 推断内容 — 必须用 ask_user_question 多选确认
⚠️ 核心规则:每类推断用一个独立的 ask_user_question 多选(multiSelect: true)呈现,每条推断作为一个独立选项,用户勾选哪些就应用哪些。
B1. AI 推断的跳转逻辑(最常见)
用 ask_user_question,设置 multiSelect: true,选项格式:
选项列表:
- "Q3 满意度 → 评分4-5分时显示 Q4(满意追问)"
- "Q3 满意度 → 评分1-2分时显示 Q5(不满意追问)"
- "Q8 界面满意度 → 评分1-3分时显示 Q9(不满意追问)"
- "Q11 赛季满意度 → 评分1-2分时显示 Q12(不满意追问)"
- "Q11 赛季满意度 → 评分4-5分时显示 Q13(满意追问)"
- "Q16 匹配满意度 → 评分1-3分时显示 Q17(不满意追问)"
- "以上全部应用(推荐)"
question 文本:以下是 AI 推断的跳转逻辑(原文无标注),请勾选需要应用的:
用户勾选的逻辑写入 [逻辑] 块,未勾选的不写入。如果用户选了"以上全部应用",则全部写入。
B2. AI 推断的题型(较少见)
同样用 ask_user_question,设置 multiSelect: true:
选项列表:
- "Q8:推断为多选题(含'可多选'字样)"
- "Q15:推断为填空题(含'请描述'字样)"
- "以上全部正确(推荐)"
question 文本:以下是 AI 推断的题型(原文无明确标注),请勾选正确的:
B3. 题目内容残缺 / 语义模糊(极少见)
如有残缺或模糊项,用 ask_user_question(非多选)逐个询问,让用户补充。
处理用户选择后,根据勾选结果调整标准格式文件中的 [逻辑] 块和题型标注,然后保存文件并继续下一步。
第四步:保存标准格式文件
将转化结果保存为 .standard.md 文件:
- 有原始文件:保存到原文件所在目录,文件名为
<原文件名>.standard.md
- 对话粘贴文字:保存到用户桌面
⚠️ 必须保存到原文件同目录,不得保存到 Temp 或其他临时路径。如原路径含特殊字符导致写入失败,用 Python 的 open() 写入而非 CLI 命令。
第五步:执行录入
python {SKILL_DIR}/survey_checker.py import --file "文件.standard.md" --id 问卷ID --dry-run
python {SKILL_DIR}/survey_checker.py import --file "文件.standard.md" --id 问卷ID
问卷标题和说明自动写入: import 命令在题目录入成功后,会自动从标准格式文件中提取 [问卷标题] 和 [问卷说明],分别写入问卷系统的展示标题(surveyTitle)和欢迎语(prefix)。无需额外操作。
逻辑规则自动写入: 如果标准格式文件末尾包含 [逻辑] 块,import 命令会在题目录入成功后自动解析并写入逻辑规则。支持三种条件类型:
- 选项文本匹配:
源题 Q16 选项 "组队开黑" → 显示 Q17,Q18
- 量表评分范围:
源题 Q1 选项 1,2 → 显示 Q2
- 矩阵量表子问题:
源题 Q28 子问题 1,2,3 子选项 1,2,3 → 显示 Q29
AI 在转化标准格式时,应在文件末尾生成 [逻辑] 块,汇总所有逻辑规则。
⚠️ 录入完成后必须自动执行校准: 题目录入成功后,无需询问用户,直接对该问卷执行 calibrate 命令(R1-R8 规则自动修复),并将校准结果一并告知用户。
Step 3.7: 设置逻辑规则
当用户要求单独设置逻辑规则时(不走 import 自动流程):
python {SKILL_DIR}/survey_checker.py logic --id 问卷ID --file "文件路径.standard.md"
python {SKILL_DIR}/survey_checker.py logic --id 问卷ID --rules "源题 Q1 选项 1,2 → 显示 Q2; 源题 Q16 选项 \"组队开黑\" → 显示 Q17"
规则语法:
源题 Q{n} 选项 {值1},{值2} → 显示 Q{m}[,Q{k}] # 选择题/量表题
源题 Q{n} 选项 "文本1","文本2" → 显示 Q{m} # 文本匹配(引号包裹)
源题 Q{n} 子问题 1,2,3 子选项 1,2,3 → 显示 Q{m} # 矩阵量表题
逻辑含义:当源题满足指定条件时,显示目标题。
Step 3.8: 文本样式(标红关键词)
当用户要求对问卷进行"标红"、"标记重点文本"、"highlight 关键词"、"突出关键词"、"标记文本"等操作时,使用 style --red 命令。
⚠️ 必须使用 style --red 命令,不要用 modify 修改 title 字段来实现标红。 style 命令通过 save_survey 整体保存,能正确处理 HTML 样式;modify 不支持 HTML title 的可靠保存。
python {SKILL_DIR}/survey_checker.py style --id 问卷ID --red --dry-run
python {SKILL_DIR}/survey_checker.py style --id 问卷ID --red
python {SKILL_DIR}/survey_checker.py style --id 问卷ID --red --color blue
python {SKILL_DIR}/survey_checker.py style --id 问卷ID --red --color "#e67e22"
python {SKILL_DIR}/survey_checker.py style --id 问卷ID --red --questions Q1,Q5,Q9
--color 预设颜色表:
| 名称 | HEX | 色彩 |
|---|
red | #ba372a | 🔴 红色(默认) |
blue | #2a6bba | 🔵 蓝色 |
green | #2a8c3e | 🟢 绿色 |
orange | #e67e22 | 🟠 橙色 |
purple | #8e44ad | 🟣 紫色 |
brown | #8b4513 | 🟤 棕色 |
gray | #7e8c8d | ⚫ 灰色 |
black | #000000 | ⬛ 黑色 |
也可以传入任意 HEX 值(如 --color "#ff6600")。不传 --color 时默认红色。
内置的语义标红规则(按 5 类优先级从高到低):
| 优先级 | 类别 | 关键词 |
|---|
| 1 | 评价/态度 | 整体满意度、满意度、满意程度、不太满意、不满意、愿意推荐、推荐 等 |
| 2 | 功能模块 | 界面使用、美术画面、付费体验、社交体验、玩法体验、操作体验、匹配机制、战斗平衡性、玩法乐趣 |
| 3 | 技术/性能 | 性能问题、卡顿、闪退、延迟、BUG、崩溃、黑屏、卡死、异常、发热 |
| 4 | 时间范围 | 近一个月、近两周、近一周、近半年、近一年、近期、本赛季、目前 |
| 5 | 行动/反馈 | 主要原因、建议、意见、频率、频繁 |
注意:不标记游戏专有名词(如游戏名、赛季名、活动名、卡牌名等),只标记通用的功能/评价类关键词。
每道题最多标记 2 个关键词,按优先级匹配。纯数字选项、短文字(< 4 字)自动跳过。
标红时机:
- 用户主动要求标红 → 直接执行
- 录入完成后 → 在"任务完成后展示"中提示用户可以标红(不自动执行)
Step 4: 生成报告
将分析结果整合为一份 Excel 报告文件(使用 openpyxl 库),包含以下 Sheet:
Sheet 1: 总览
| 字段 | 内容 |
|---|
| 问卷名称 | xxx |
| 检查时间 | yyyy-mm-dd HH:MM |
| 题目总数 | N |
| 发现问题总数 | N |
| 错别字问题数 | N |
| 逻辑问题数 | N |
| 设计建议数 | N |
| 整体评分 | X/100 |
Sheet 2: 错别字检查
Sheet 3: 逻辑检查
Sheet 4: 设计专业性
Sheet 5: 问卷原文
将抓取到的完整问卷内容按题目展开,方便用户对照查看。
报告文件命名:问卷检查报告_<问卷名称>_<日期>.xlsx
保存位置:默认保存到用户桌面,或用户指定的路径。
生成报告使用 Python openpyxl 库。如果用户环境未安装,先执行 pip install openpyxl。
Step 5: 展示结果
报告生成后:
- 告知用户报告已保存到哪个路径
- 在对话中给出一份简要的摘要,包括:
- 发现的关键问题(按严重程度排序,取 Top 5)
- 整体评分和主要扣分项
- 最需要优先修改的 1-2 个问题
⚠️ 任务完成后必须展示(适用于所有路径)
每次对问卷执行完操作后,必须在结果摘要中展示以下信息(如适用):
| 信息 | 何时展示 | 格式 |
|---|
| 编辑地址 | 新建 / 复制 / 录入后 | https://survey-game.163.com/index.html#/edit/<ID> |
| 预览地址 | 复制后(如返回了 preview_url) | https://research-game.163.com/htmls/<hash>/preview.html ⚠️ 预览地址直接打开可能没有内容,需在问卷系统中首次查看后才能正常显示 |
| 问卷 ID | 所有涉及问卷操作的场景 | 纯数字 |
| 题目数量 | 录入 / 清空 / 校准后 | 如"35 题" |
| 跳转逻辑数量 | 录入后(如文件含 [逻辑] 块) | 如"5 条已写入" |
| 校准结果 | calibrate 执行后 | 如"发现 3 个问题,已自动修复 2 个" |
| 问卷标题 | 录入后(如文件含 [问卷标题]) | 展示标题文本 |
| 问卷说明 | 录入后(如文件含 [问卷说明]) | 欢迎语前 50 字... |
示例(录入完成后的标准输出格式):
✅ 录入完成
| 项目 | 结果 |
|------|------|
| 问卷 ID | 91894 |
| 题目数量 | 35 题 |
| 跳转逻辑 | 4 条已写入 |
| 校准 R1-R8 | 0 问题 |
| 编辑地址 | https://survey-game.163.com/index.html#/edit/91894 |
| 问卷标题 | 《漫威终极逆转》S20赛季... |
| 问卷说明 | 亲爱的探员,感谢你一直以来... |
⚠️ 任务完成后提示可用功能
每次对问卷执行完主要操作(录入/复制/校准/检查)后,必须在结果摘要末尾附上后续可用功能提示:
💡 还可以继续操作:
- 📝 "标红关键词" — 自动识别并标红题干中的满意度、性能、界面使用等通用关键词
- 🔍 "检查问卷" — 三维度质量检查(错别字 + 逻辑 + 设计专业性)并生成 Excel 报告
- ⚙️ "修改设置" — 批量调整必填、随机、布局、互斥等题目配置
- 🔗 "设置逻辑" — 添加/修改题目间的显示/跳转逻辑
根据已完成的操作动态调整提示内容:
- 如果刚完成录入:提示标红、检查、设置逻辑
- 如果刚完成复制:提示录入、标红、检查
- 如果刚完成检查:提示校准修复、修改设置
- 如果刚完成标红:提示检查、修改设置
不要提示用户已经刚刚完成的功能(如刚做完校准,就不要再提示校准)。
前置依赖
运行此 skill 需要以下 Python 包:
playwright(浏览器自动化)
openpyxl(生成 Excel 报告)
首次使用时需要安装 Playwright 浏览器(脚本使用 Edge,需安装 chromium 内核):
pip install playwright openpyxl
playwright install msedge
注意事项
- Cookie 可能会过期,脚本会自动通过 Playwright 打开浏览器刷新(需关闭其他 Edge 窗口)
- 问卷平台的页面结构可能更新,抓取脚本需要相应调整
- 对于非常长的问卷(100+ 题),抓取和分析可能需要较长时间,要给用户预期
- 登录凭证属于敏感信息,不要在日志或报告中记录
- 如果问卷有图片题,目前只能检查文字部分,图片内容需要用户自行确认
- 预览地址(
preview_url)直接在浏览器打开可能显示空白,需先在问卷系统的编辑页面中点击"预览"首次查看后,该链接才能正常访问