绩效面谈 / 1on1 话术准备器
适用场景
- 季度绩效面谈前,想讲的问题攒了一堆,但一开口就变成「你最近态度有问题」——对方一句「我没有」就谈崩
- 要谈改进,却只有模糊印象:没有具体时间、没有可观察行为、没有证据,被反问「凭什么这么说」时接不住
- 1on1 不知道怎么开场、怎么接话、对方不说话时怎么破冰、对方情绪激动时怎么收
- 薪酬/调薪面谈,压力下随口承诺「明年一定给你涨」,事后兑现不了反而更被动
- 差评 / 低绩效告知,担心谈完留不下证据、被申诉时举证不足
- 面谈全是负面反馈,对方全程防御,聊完没有共识、没有行动项
核心能力
- SBI 完整性体检:对每条「改进点」强制校验 情境 / 行为 / 影响 / 证据 四要素,缺任一项即判「材料不全,本次不建议提出」,避免带着模糊印象上谈判桌。
- 人身标签与绝对化措辞识别:命中「态度差 / 不主动 / 能力不行 / 格局 / 情商」等不可观察、无法申辩的评价,以及「总是 / 从来 / 每次都 / 根本」等绝对化措辞,给出改写为具体行为的建议。
- 红线扫描:检测年龄 / 性别 / 婚育 / 健康追问 / 宗教籍贯 / 变相劝退等 🔴 法律红线,以及口头承诺、横向比较同事、人身指责等 🟠 风险级别表述。
- 时间盒议程:按场景与反馈点数量自动分配 开场 / 逐点反馈 / 倾听追问 / 共识收尾 的分钟数,时长不够时主动提示拆到两次。
- 分段话术脚本:开场 → 先讲认可 → 逐点(情境→行为→影响→交还话语权)→ 共识收尾,材料不全的点直接标注「不建议提出」。
- 追问清单 + 反应预案:按场景给追问问题,附 6 类常见员工反应的应对话术(否认归因、情绪化、沉默、反问、讨价还价、敷衍)。
- 准备度评分(0-100):硬伤 −8 / 提示 −3 / 法律红线 −12 / 其他风险 −8,结合全负面无认可、缺目标、缺复盘等维度,给出「可直接开谈 / 补齐后再谈 / 移除红线」三档结论。
- 话术风格档位:
--style(标准 / 正式 / 温和 / 直接)控制开场与整体语气——正式偏流程感、温和先接情绪、直接省去客套。 - 难度场景分支:
--difficulty(默认 / 高对抗 / 沉默型 / 情绪化)自动注入对应议程节奏与应对侧重要点(如高对抗强调「回到事实不争输赢」、沉默型改用封闭式问题、情绪化先处理情绪)。
输入规范
输入为 JSON 文件,字段详见 references/input_template.json。关键约定:
- 至少提供
feedback_points/achievements/goal之一,全空则报错退出(exit code 1)。 scene(面谈场景)可选:认可表扬 / 改进反馈 / 晋升沟通 / 差评告知 / 离职挽留 / 新人融入 / 常规1on1 / 薪酬沟通;不填或无法识别则按「常规1on1」处理。style(话术风格)可选:标准 / 正式 / 温和 / 直接,默认「标准」;影响开场与整体语气。difficulty(难度场景)可选:默认 / 高对抗 / 沉默型 / 情绪化,默认「默认」;自动注入对应议程节奏与应对要点。feedback_points为数组,每条含id / type / topic / situation / behavior / impact / evidence:type取「改进」或「认可」(也接受 表扬/肯定→认可、批评/纠偏→改进)。- 改进点要求
situation + behavior + impact + evidence四项齐全,缺任一项为硬伤。 - 认可点要求
behavior必填,impact缺失仅提示,仍可输出。 achievements(认可事实数组)与feedback_points中的认可点共同平衡负面反馈;全负面且无认可会触发提示。constraints(本次不可承诺事项)建议填写,薪酬类面谈必填,否则触发「易被追问出无法兑现承诺」提示。next_review(复盘时间)建议填具体日期;不填则体检提示。
CLI 用法:
python scripts/prep_1on1.py input.json # markdown 输出到 stdout
python scripts/prep_1on1.py input.json -o guide.md # 写入文件(自动建目录)
cat input.json | python scripts/prep_1on1.py # 从 stdin 读取(管道)
python scripts/prep_1on1.py --input input.json # 等价写法
python scripts/prep_1on1.py input.json --audit-only # 只输出准备度体检
python scripts/prep_1on1.py input.json --script-only # 只输出话术脚本
python scripts/prep_1on1.py input.json --scene 改进反馈 # 覆盖面谈场景
python scripts/prep_1on1.py input.json --style 温和 # 话术风格档位
python scripts/prep_1on1.py input.json --difficulty 高对抗 # 难度场景分支
python scripts/prep_1on1.py --selftest # 运行内置自检
处理流程
- 载入归一:校验 JSON 根节点为对象(否则 exit 2),归一
scene、员工信息、会议时长,逐条解析feedback_points(重复 id 自动重命名)。 - SBI 体检(
check_points):逐条判定情境/行为/影响/证据完整度;命中人身标签判硬伤、命中绝对化措辞判提示;改进点影响缺量化信号给提示。 - 红线扫描(
check_redlines):对目标、约束、信号、反馈点全文做关键词匹配,区分 🔴 法律红线 / 🟠 风险级别,去重记录出处。 - 整体评估(
check_overall):全负面无认可、缺目标、缺复盘、时长不足、薪酬无约束、差评缺材料——分别给提示。 - 渲染输出:时间盒议程 → 分段话术脚本 → 追问清单 → 反应预案 → 准备度体检(含 SBI 表、问题表、红线表、综合评分与结论)。
输出格式
输出为结构化 Markdown:
- 头部元信息:场景、岗位、职级、周期、评级、时间、形式、本次目标。
- 时间盒议程:表格列出各时段分钟数与要点,标注场面基调与最大风险。
- 分段话术脚本:开场白(带员工名与时长)→ 先讲认可 → 逐点话术(材料不全的点标注「不建议提出」并列出缺项)→ 共识收尾(含复述确认与复盘时间)。
- 追问清单:当前场景的追问问题 + 已观察信号。
- 员工反应应对预案:6 类反应的应对话术表 + 预判反应。
- 准备度体检:SBI 完整性表、逐条问题表、红线扫描表、综合评分(0-100)与结论。
完整示例见 examples/sample_input.json 与 examples/sample_output.md。
异常处理
- 空输入(三点全空):提示至少提供一条反馈点或目标,exit 1。
- JSON 解析失败 / 根节点非对象:提示错误(行号列号)并 exit 2。
- 编码兜底:输入先按 UTF-8(带/不带 BOM)解码,失败再按 GBK 解码;都失败提示清晰中文报错并 exit 3。
scene无法识别:回退「常规1on1」并在体检备注说明可选值。style无法识别:回退「标准」并备注可选值。difficulty无法识别:回退「默认」并备注可选值。feedback_points非数组、单条非对象、achievements/employee_signals/expected_reactions/constraints写成对象或数字:明确中文报错并 exit 2(不再静默忽略——避免认可环节被悄悄吞掉)。- 反馈点 id 重复:自动重命名为
F1#2并备注。 duration_min无法解析:取场景建议时长并备注。- 时长不足以展开反馈点:体检提示延长或拆分到两次面谈。
--audit-only与--script-only同时指定:报错 exit 2。--selftest:运行内置自检,全部通过 exit 0,否则 exit 4。- 字段超长:单条文本超过 500 字自动截断并标注原始长度,避免撑爆文档。
- 列表 / 反馈点过多:achievements 等列表超过 60 条、反馈点超过 30 条时收敛到上限并备注。
duration_min异常:负数或过小按场景建议时长、超过 480 分钟按上限 480,均备注。- 无可用反馈点 / 全空列表:议程与评分均做除零保护,不会崩溃,仅给出对应提示。
适用限制与免责声明
- 本技能是反馈材料的「结构体检器」,不构成 HR 建议、不构成法律意见、不评价员工真实表现,更不能替代公司正式的人事与法律流程。
- 涉及绩效评级、调岗、降薪、劝退、辞退、离职协商等具有法律后果的谈话,须经 HR 与法务书面确认口径后方可进行,并全程留痕;脚本扫描出的法律红线(年龄/性别/婚育/宗教/变相劝退等)为硬性风险,命中即「不可直接开谈」。
- 所有输入仅在本地被脚本读取并生成文档,不联网、不回传、不存储员工数据;输出文档包含敏感人事信息,请按公司保密要求妥善保管与销毁。
- 话术脚本为参考框架,实际谈话需结合具体情境与对方反应灵活调整,禁止照搬逐字稿。