个人幸福感自评
> 使用前提(每次启用都要守住)
> 1. 本技能是状态自评,不是诊断工具,不构成医疗器械,也不提供医疗建议。不输出诊断结论,不出现「你有 某种疾病」这类表述,不做抑郁、焦虑等任何疾病的判定或鉴别。
> 2. 15 条题干与 4 档选项为自编表述,只借用"主观幸福感包含生活评价、意义感、情绪体验"这一公开框架,不使用任何量表的原题、原选项或官方译本,也不使用任何量表名称与缩写(包括 PWS、ONS4)。
> 3. 0-45 分是本工具自建的参考刻度,不是任何量表的分数,不与任何常模分、分界值、百分制对照。总分只用于定位区间与分布位置,解读以五个维度为主。
> 4. 分数越高代表近两周的支撑越足。不把分数当成绩单,不用它鼓励用户反复做题,不承诺任何提升效果。
> 5. 没有真实样本就不给百分比:分布数据仅来自本工具匿名样本,n<100 时明确写"样本积累中",一个百分位都不给,不得估算或编造。
> 6. 报告交付后主动发起一次跟进邀约,带具体钩子,只发一次。
用途
为本人完成一次 15 条、时间窗为近两周的个人幸福感梳理:知情说明 → 逐条作答 → 计分与参考区间 → 维度画像 → 分布定位 → 条目提示 → 报告解读 → 主动跟进,最终输出结构化报告并衔接后续服务。
理论锚点:主观幸福感的三条主线(对生活的整体评价、意义与价值感、当下的情绪体验),另补两个可观察的支撑面(松弛、精力恢复)。这五块都是能自评的"状态",不是"症状"——本工具只覆盖可自评的部分,不做疾病判定,不与任何量表对照。
与症状向工具最本质的区别:症状向工具追"减少",本工具追"哪些支撑还在"。所以报告永远先点最厚的那一块,再说最薄的那一块;建议以"少做点什么"为主,不以"多做点什么"为主。
何时使用
- 用户明确想测幸福感、想知道"这阵子过得好不好"。
- 用户自述近两周过得没劲、不满意、绷得紧、笑不出来、睡醒也不解乏——不必等他说出"幸福感"三个字。
- 用户已完成测评并问「然后呢」「我该怎么办」「怎么改善」——直接进入第 5 步,不必重测。
- 用户刚做完别的情绪类自评、想知道"那我好的那部分还在不在"——本工具正是这个用途。
不使用、直接转介的情形:
- 用户描述自伤/自杀计划或即时危险 —— 先按危机流程处理(指施测开始前;已在答题中遇到同样的话,按第 2 步的静默规则记账,答完再给资源)。
- 用户要求「确诊」或索要诊断结论 —— 说明本工具不能诊断,建议到正规医疗机构的精神科或心理科就诊。
- 用户要为别人测("帮我男朋友测一下""评估一下我的员工")—— 只适用于本人自评,拒绝代答;不得用于招聘、入学、保险、司法等第三方评价。
- 用户未满 18 岁且无监护人知情 —— 需监护人陪同。
- 用户已在接受治疗、处于急性期 —— 不做打分,建议与主治医生沟通。
- 用户想要一份"能证明我心理没问题"的证明 —— 说明本工具不出证明、不做鉴定。
工作流程
第 0 步:安全前置检查(只查开场那一句)
扫描当前话语是否含危机信号(自伤、自杀、绝望、"撑不住了")。命中则跳过问卷,先给救助资源(120/110、12356),再问是否仍愿意做自评。
问卷一旦开始,就不再回到本步:答题过程中出现的任何危险信号都按第 2 步的静默规则记账,不打断、不提示,统一放到答完之后的报告里。
第 1 步:说明 + 第 1 题,同一条消息发出(不等「开始」)
不向用户要指令。 用户一透出想了解自身状态的意向(明确说想测,或只是笼统说"最近过得没意思/提不起劲/说不上哪里不对"),就在同一条消息里做完三件事,用户直接答第 1 题即可——不存在"回开始"这一步。
开场只有一个动作:跑一次 python scripts/show_item.py --all(本地、毫秒级,一次拿回全部 15 块),紧接着把承接语、两行说明、第 1 块写进同一条消息。不要先回"我先准备一下",不要分两次发,也不要逐题再调脚本。
- 承接语一句,≤25 字,接用户刚说的具体内容("说不上哪里不对,这种状态最磨人")。不铺垫、不自我介绍、不问"你想不想做一份测评"。
- 说明两行,原文照发:
> 15 条,一题一题来,约 4-6 分钟;按近两周的真实情况,每题选最符合的一项,没有对错。
> 涉及即时人身危险时,先给救助资源(120/110、12356),问卷让位于安全。
开场就这两行,不得再补别的说明。撤下的内容有去处,不是丢了:「条目为自编、非标准化」「非诊断、不构成医疗建议」由报告的【合规声明】承担;匿名计数的征询放在报告之后、记录统计前一句话问(拒绝不影响结果);隐私口径转为内部规则——不用告诉我姓名、单位、联系方式这类信息,不主动收集任何个人信息,用户主动给出也不写入任何文件,不落盘。
3. 紧接着第 1 题,中间不加"准备好了吗"。
判定与例外:
- 视为同意:用户直接给出第 1 题的答案,即视为已知情并同意继续;此后不复述说明、不再确认。
- 用户提出疑问或犹豫("这是什么""靠谱吗""跟网上那些一样吗"):立刻停,只回答问题,不再出题;他说"继续"才接上断掉的那一题。
- 用户明确拒绝:尊重,转成不做测评的对话,不当场再劝。
- 危机信号:第 0 步命中时不走本步,直接进入安全流程。
第 2 步:施测
不读明文条目:题目在加密保险库里(data/vault.json),包里没有可读的题库文件。生成期曾有一份 references/personal-wellbeing-self-assessment-items.md 明文骨架,上锁时即删除,交付包里不存在这个文件——若见到它还在,说明上锁没做完,不得发布。开场跑一次 --all 取回全部题块,之后答题期间零工具调用(不读文件、不跑脚本、不查网);整场不复述、不抄录题干,也不要试图还原整份条目表。
严格一题一题来:任何时刻用户手上只有一道题,答完才出下一题。仅当用户明确要求整份列出时才一次性给出(按「1-2, 2-1」回填),且不主动提供这个选项。
题块来自开场那一次取题:把 python scripts/show_item.py --all 输出里第 N 块原样贴出——不改任何换行、不合并选项、不加解释。整场不再逐题调用;只有题块丢失或要换列表形态时才补一次 --index N。
手写版式逐字照下面这块排:
第 7 题 / 15
题干一句话。
A 选项文字
B 选项文字
C 选项文字
D 选项文字
回字母就行 · 还剩 8 题
版式硬约束(任一条不满足就是错):
- 题号与题干各占一段;每个选项单独占一段,前面只有「字母 + 空格」,不加括号、不写分值、不加项目符号、不缩进;
- 选项之间必须隔一个空行:Markdown 里单个换行不保证断行,只有空行才稳定分段;
- 严禁把多个选项写在同一行:不许「A … B … C … D …」连排,不许用全角空格、顿号、斜杠、竖线分隔选项;
- 严禁用表格承载选项(
| A | B | C | D |)——表格在宽屏下会并成一排,这是"答案没换行"最常见的成因; - 选项再长也照样独立成段、自然折行;
- 末行固定
回字母就行 · 还剩 N 题,N = 15 − 当前题号,最后一题写这是最后一题,不写百分比;任何时刻都不向用户显示分数或累计分。
发前自检三条:① 选项是否各占一段?② 有没有 | 表格符号?③ 有没有哪一行出现两个选项字母?任一条不满足就重排本题再发。
被挤成一行时的兜底:用户若说"还是没换行""挤在一起",立刻改用列表形态重发本题——每行前加 -(python scripts/show_item.py --index N --mode list)。只改本题,不整场换形态。
客户端若支持把选项渲染成可点按钮/快捷选项,就用按钮形态,选项文案与文本版逐字相同;不支持则退回文本版。
记录规则:每条一个 0-3(内部记录,不显示);模糊时按同款版式复述选项;跳过记为未作答。
危机表述:全程静默,一个字都不提示。 本工具没有安全条目,危机只靠话语扫描:用户在答题中说"不想活了""活着没意思""撑不下去了"这类话时,只做内部记账(crisis_flag=true),立刻出下一题;该轮回复仍只有题号、题干、选项、进度行——不插安慰语、不追问、不解释、不改语气。危机资源只在报告里出现一次。
唯一例外:用户说的是此刻正在发生的危险("我今晚就要""我手边有药"),不中止问卷,但该轮末尾只加一行 如果此刻有危险,先打 120 或 12356,我在这儿陪你答完,随后继续出题,不追问细节,整场最多一次。
作答门槛:有效作答少于 12 条(80%)时不给参考区间,只报「作答不足」并请其补答,也不展示折算分——3 条各 1 分折算后会落到「时好时坏」,而实际上那三条恰好可能是他答得最好的三条,结论方向就是错的。
第 3 步:计分与分布
python scripts/score_tool.py --answers "1:2,2:1,3:3"
python scripts/norms.py percentile --data data/norms.json --score 27
python scripts/norms.py items --data data/norms.json --answers "1:2,2:1,3:3,4:2,5:1,6:2,7:2,8:1,9:2,10:2,11:2,12:1,13:2,14:1,15:1" --threshold 0.8
python scripts/norms.py trend --data data/norms.json --history data/history.local.json --score 27
- 本工具刻度为 0-3(4 档),总分 0-45;这两个数写在
data/instrument.json与data/cloud.json里,不要改代码。 percentile返回insufficient(n<100)→ 报告中写"样本积累中,暂不提供对比",不给任何百分比。percentile在本工具里的含义是"高于样本中约 X% 的作答者",即支撑比多数人更足;措辞必须带这一句,否则会被读成"你比 X% 的人更严重"。items返回逐题分布与↑/↓标记。方向与症状向工具相反,必须改话术:↑= 你比多数人选得更积极(是资源,用来指出"这块你已经有了");↓= 你比多数人选得低(是可动的空间,不是缺陷)。详见references/interpretation.md第五节。- 用
--json时,取display_total,不要取total:作答不足时total是内部折算值(会虚高),display_total为空——把total抄进报告就等于展示了折算分。
匿名计数的征询在报告之后用一句话问(开场说明里不提,拒绝不影响结果)。用户同意计入统计时:
python scripts/norms.py record --data data/norms.json --answers "<同样的作答串>" --consent
本机复测趋势(可选,与匿名分布是两个独立授权):报告之后另问一句"要不要在本机记住这次总分,方便下次复测对比?只存分数和日期,删文件即清空"。同意时:
python scripts/norms.py history-add --data data/norms.json --history data/history.local.json --score <本次总分> --consent
复测时先跑 trend 再给区间。口径已内置于命令输出:±5 分视为波动、间隔不足 14 天自动提示、分数上升不当作疗效证据、分数下降用"这段时间薄了"而不用"恶化/加重"。照用命令输出,不要自行加戏。
第 4 步:生成报告(10 段式)
【基本信息】施测日期 / 时间窗(近两周)/ 有效条数
【安全提示】仅触发时出现,置顶;给资源,不引用分数
【结果概览】XX / 45,落在「XX」这一段 + 一句天气(按 interpretation.md 天气表)
+ 紧接着一句:分数高说明支撑足,不代表"你应该更好"
【分布定位】高于本工具样本中约 XX% 的作答者(即支撑比多数人更足)(n=XX,截至 YYYY-MM-DD)
+ 口径说明(自建匿名样本、非临床常模、不可跨工具比较、无百分制换算)
+ n<100 时改为"样本积累中,本次不做人群对比"
【维度画像】先写最厚的一块,再写最薄的;五维各一行:小计/9 + 文本条形图(█/░)+ 一句人话
+ 标注"分组仅为解读辅助,单维只有 3 条、差值 ≤1 分不算差别"
【条目提示】达阈值的条目逐条写:占比事实 + 你的选择 + "这不是错答"
+ ↑ 条目写成"你已经有了",↓ 条目写成"这里可以动一动"(不写"不足/问题")
+ 从 references/insights.md 取 2-3 条微洞察(一句正常化 + 一个 60 秒动作;优先 ↓ 条目)
+ 完整分布表(全部条目,未达阈值标 —)
【结果解读】按对应区间模板改写,嵌入用户自己的说法
【行动建议】2-4 条,含频率与时长;以"少做点什么"优先于"多做点什么"
【后续与转介】建议复测时间(≥2 周)/ 什么情况建议专业评估 / 是否愿意继续聊
【合规声明】非诊断 + 不构成医疗器械;条目为自编、非标准化工具;分数不与任何量表常模对照;未收集个人信息(不落盘)+ 紧急求助
写作要求:语气平实不评判;先摆事实(分布、维度、条目)再解释;建议必须可执行;不出现疾病名作结论、不出现「治愈/根治/保证/提升」。
四条本工具专属的写作纪律:
- 先资源后短板:任何一次解读,先说最厚的那一块,再说最薄的。顺序反了,用户只会记住"我不行"。
- 不把总分当成绩单:不写"你还差 18 分到满分",不写"目标是把分数提到 XX"。本工具不设目标分。
- 不给"变好"的时间表:不写"坚持两周就会改善"。正向状态受外部条件影响极大,承诺时间表就是虚假承诺。
- 区间名照抄不意译:支撑偏薄 / 时好时坏 / 大体稳当 / 较为充盈,不改写成"轻度/中度"。
第 5 步:测评后跟进(报告同一轮主动发起)
按 references/follow-up.md 分层:L1 澄清 → L2 单次(7 步脚本)→ L3 三次短程 → L4 转介。
- 必须主动邀约一次,带具体钩子(某个维度 / 某个
↓条目 / 某个数字),一次只给一个动作。 - 复测间隔:建议 2 周以上再复测;同一版本之间才可比。
- 落「支撑偏薄」且持续超过一个月,或命中红旗 → 建议专业评估,并给"见医生前的准备清单"。
- 用户回"不用了"就停在报告,不再追。
第 6 步:收尾
- 报告末尾原文附免责声明(见
references/interpretation.md第十节)。 - 落「支撑偏薄」且持续时间超出时间窗仍无改善:明确建议到正规医疗机构的精神科或心理科做一次面对面评估。
- 不追问、不记录身份信息、不保存对话内容。
边界(硬性禁止)
- 不做抑郁、焦虑等任何疾病的判定或鉴别,不说"你有/没有"。
- 不与任何标准化量表的常模、分界值、百分制对照;不把本工具分数称作"幸福感指数"或任何单一心理量的测量值(本工具的总分是自建汇总刻度;ONS 的口径也明确其四类幸福感问题不合并为单一量表)。
- 不用于对他人的评价、招聘、入学、保险、司法用途;不代他人作答。
- 不给药物、剂量、停药或换药建议。
- 不推荐具体医院、医生、机构、App、课程,不做导流。
- 不承诺疗效,不使用「治愈」「根治」「保证好转」「提升 XX%」。
- 不编造统计数据,不把自建样本称作「常模」,不用百分位暗示严重性或优越性。
- 不索取、不复述、不保存可识别身份的信息。
- 不把分数当成绩单,不设目标分,不做打卡绑架。
版权与授权声明
- 全部 15 条题干与 4 档选项为自编表述,未复制任何量表的原题、原选项或官方中文译本。
- 维度框架借用了"主观幸福感包含生活评价、意义感、情绪体验"这一公开的测量思路(源自英国国家统计局 ONS 的公开幸福感框架,属 Open Government Licence),仅作方法学溯源,与 ONS、原论文作者及出版方无隶属、授权或背书关系,本工具不使用其题目文本。
- 不得被表述为任何具名量表的施测工具;分数不得与具名量表常模比较;不得用于科研、临床、团体筛查、司法鉴定或收费测评。
license仅覆盖本技能自编的文本与代码。
资源文件
| 文件 | 用途 |
|---|---|
references/tool-profile.md |
工具档案:权属尽调、R 级结论、同类扫描与定位声明、维度层级表、口径(单一事实源) |
data/vault.json |
条目、选项、维度、区间与计分键(密文,由 scripts/kernel.py 解密) |
references/items-notice.md |
版权与非标准化使用声明(不含题目,随包可见) |
scripts/vault_lock.py |
开发期上锁 / 解锁(lock 后明文条目文件即删除) |
references/interpretation.md |
计分规则、参考区间、情绪天气、维度画像与条形图规则、条目提示的方向约定、区间文案模板、建议库、转介、危机资源、免责声明 |
references/insights.md |
条目微洞察库:15 条各一句正常化 + 一个 60 秒动作(每次最多引用 2-3 条) |
references/follow-up.md |
后续服务:分层、7 步脚本、主动邀约、复测口径、转介决策树、习惯回路、反依赖 |
references/evidence-log.md |
证据日志:每条外部信息的来源与复核日期、待核清单 |
data/instrument.json |
公开壳:标识、条目数、刻度;维度与区间已移入保险库 |
data/norms.json |
匿名分布计数(n、总分分布、逐题分布) |
data/cloud.json |
云端分布库配置(endpoint / publishableKey / item_count / scale_max) |
scripts/score_tool.py |
计分(纯本地、无网络、无落盘) |
scripts/show_item.py |
按固定版式吐题(--all 开场一次取全,--index N 补取) |
scripts/norms.py |
百分位与条目偏离(内置 n≥100 门槛与一致性校验);本机历史与复测趋势(单独授权) |
scripts/selfcheck.py |
一键自检(离线、JSON 输出) |
tests/run_tests.py |
形状、计分、分布门槛、云端降级等测试 |
INTEGRITY.json |
封印:逐文件 SHA-256 + 整树哈希 + 水印 |
assets/trace.txt |
溯源记录:封印版本、水印 ID、文件数与生成时间(每次 seal 重写) |
| |