mcpField
G
generate-talking-points

generate-talking-points

github.com/happy-technologies-llc生产力4141 次安装2 天前更新
代码仓库

关于 generate-talking-points

generate-talking-points 是面向管理者的 ServiceNow 人才管理技能,可汇总员工档案、目标、反馈和评审记录,生成用于绩效讨论和发展规划的结构化要点。

主要功能

  1. 01获取员工技能与职业兴趣
  2. 02汇总目标进度和里程碑
  3. 03收集反馈与过往评审
  4. 04综合数据生成讨论主题
  5. 05按讨论场景组织谈话框架

适用场景

  1. 01准备年度或年中绩效评审
  2. 02为定期一对一会议收集背景
  3. 03开展职业发展或晋升讨论
  4. 04为人才校准准备依据

MCP 相关

该技能使用 ServiceNow MCP 工具查询员工档案、目标、反馈和评审记录,并可执行后台脚本生成摘要。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/happy-technologies-llc/happy-platform-skills --skill generate-talking-points

安装后在 Claude Code 中输入/generate-talking-points确认已加载。

详细介绍

生成经理谈话要点

概述

此技能可为准备与员工进行绩效讨论的经理生成结构化谈话要点。它涵盖:

  • 获取员工人才档案,包括技能、能力和职业抱负
  • 汇总目标进度数据,包括完成率和里程碑跟踪
  • 收集同事反馈、自我评估和以往的评审评分
  • 将绩效指标综合为可执行的讨论主题
  • 为评审、1:1 和发展规划会议生成对话框架

适用场景:

  • 年度或年中绩效评审前
  • 为与直属下属定期进行 1:1 会议做准备
  • 作为新任经理入职、需要了解团队背景时
  • 需要基于证据进行讨论的人才校准会议期间
  • 职业发展或晋升讨论前

前提条件

  • 角色: sn_hr_talent.manager、sn_hr_core.manager、sn_hr_talent.admin 或 admin
  • 插件: com.sn_hr_talent(人才管理)、com.sn_hr_core(HR 核心)
  • 访问权限: 对 sn_hr_talent_profile、sn_hr_talent_goal、sn_hr_talent_review、sn_hr_talent_feedback 表具有读取权限
  • 所需知识: 了解所在组织的绩效评级标准、能力框架和评审周期

主要人才表

表用途主要字段
sn_hr_talent_profile员工人才档案user、skills、competencies、career_interests、potential_rating、risk_of_loss、last_review_date
sn_hr_talent_goal员工目标和工作目的user、short_description、category、status、percent_complete、due_date、weight、metric_value
sn_hr_talent_review绩效评审记录user、review_cycle、overall_rating、reviewer、state、comments、review_date
sn_hr_talent_feedback同事和经理反馈user、feedback_type、provider、content、rating、created_on
sys_user员工档案name、title、department、manager、location、date_joined

操作步骤

步骤 1:获取员工人才档案

查询员工的人才档案,了解其技能、能力和职业信息。

使用 MCP(Claude Code/Desktop):

Tool: SN-Query-Table
Parameters:
  table_name: sn_hr_talent_profile
  query: user=[employee_sys_id]
  fields: sys_id,user,skills,competencies,career_interests,potential_rating,risk_of_loss,strengths,development_areas,last_review_date,current_role_tenure
  limit: 1

使用 REST API:

GET /api/now/table/sn_hr_talent_profile?sysparm_query=user=[employee_sys_id]&sysparm_fields=sys_id,user,skills,competencies,career_interests,potential_rating,risk_of_loss,strengths,development_areas,last_review_date&sysparm_limit=1&sysparm_display_value=true
步骤 2:收集目标进度

查询员工当前的目标及其完成状态。

使用 MCP:

Tool: SN-Query-Table
Parameters:
  table_name: sn_hr_talent_goal
  query: user=[employee_sys_id]^active=true^ORDERBYDESCdue_date
  fields: sys_id,short_description,category,status,percent_complete,due_date,weight,metric_value,metric_target,comments,created_on
  limit: 20

使用 REST API:

GET /api/now/table/sn_hr_talent_goal?sysparm_query=user=[employee_sys_id]^active=true^ORDERBYDESCdue_date&sysparm_fields=sys_id,short_description,category,status,percent_complete,due_date,weight,metric_value,metric_target,comments&sysparm_limit=20&sysparm_display_value=true
步骤 3:收集反馈和评审记录

提取同事反馈和以往的评审评分。

使用 MCP:

Tool: SN-Query-Table
Parameters:
  table_name: sn_hr_talent_feedback
  query: user=[employee_sys_id]^ORDERBYDESCsys_created_on
  fields: sys_id,feedback_type,provider,content,rating,sys_created_on
  limit: 20

使用 REST API:

GET /api/now/table/sn_hr_talent_feedback?sysparm_query=user=[employee_sys_id]^ORDERBYDESCsys_created_on&sysparm_fields=sys_id,feedback_type,provider,content,rating,sys_created_on&sysparm_limit=20&sysparm_display_value=true

提取以往的评审历史:

Tool: SN-Query-Table
Parameters:
  table_name: sn_hr_talent_review
  query: user=[employee_sys_id]^ORDERBYDESCreview_date
  fields: sys_id,review_cycle,overall_rating,reviewer,state,comments,review_date,strengths_noted,areas_for_improvement
  limit: 5
步骤 4:生成谈话要点

根据汇总的数据构建结构化谈话要点:

Tool: SN-Execute-Background-Script
Parameters:
  script: |
    var empSysId = '[employee_sys_id]'; // Replace with target employee
    var talkingPoints = {
      generated_date: new GlideDateTime().toString(),
      employee: {},
      goal_summary: { total: 0, on_track: 0, at_risk: 0, completed: 0, avg_completion: 0 },
      strengths: [],
      development_areas: [],
      feedback_themes: { positive: [], constructive: [] },
      review_history: [],
      discussion_topics: [],
      suggested_questions: []
    };

    // Employee info
    var user = new GlideRecord('sys_user');
    user.get(empSysId);
    talkingPoints.employee = {
      name: user.name.toString(),
      title: user.title.toString(),
      department: user.department.getDisplayValue(),
      manager: user.manager.getDisplayValue(),
      tenure: user.date_joined ? gs.dateDiff(user.date_joined.toString(), new GlideDateTime().toString(), true) + ' days' : 'Unknown'
    };

    // Goal progress
    var goals = new GlideRecord('sn_hr_talent_goal');
    goals.addQuery('user', empSysId);
    goals.addQuery('active', true);
    goals.query();
    var completionTotal = 0;
    while (goals.next()) {
      talkingPoints.goal_summary.total++;
      var pct = parseInt(goals.percent_complete.toString()) || 0;
      completionTotal += pct;
      if (pct >= 100) talkingPoints.goal_summary.completed++;
      else if (pct >= 50) talkingPoints.goal_summary.on_track++;
      else talkingPoints.goal_summary.at_risk++;
    }
    if (talkingPoints.goal_summary.total > 0) {
      talkingPoints.goal_summary.avg_completion = Math.round(completionTotal / talkingPoints.goal_summary.total);
    }

    // Talent profile
    var profile = new GlideRecord('sn_hr_talent_profile');
    profile.addQuery('user', empSysId);
    profile.query();
    if (profile.next()) {
      talkingPoints.strengths = profile.strengths.toString().split(',').map(function(s) { return s.trim(); }).filter(Boolean);
      talkingPoints.development_areas = profile.development_areas.toString().split(',').map(function(s) { return s.trim(); }).filter(Boolean);
    }

    // Feedback themes
    var fb = new GlideRecord('sn_hr_talent_feedback');
    fb.addQuery('user', empSysId);
    fb.addQuery('sys_created_on', '>=', gs.monthsAgo(6));
    fb.query();
    while (fb.next()) {
      var content = fb.content.toString().substring(0, 200);
      var rating = parseInt(fb.rating.toString()) || 3;
      if (rating >= 4) talkingPoints.feedback_themes.positive.push(content);
      else if (rating <= 2) talkingPoints.feedback_themes.constructive.push(content);
    }

    // Review history
    var review = new GlideRecord('sn_hr_talent_review');
    review.addQuery('user', empSysId);
    review.orderByDesc('review_date');
    review.setLimit(3);
    review.query();
    while (review.next()) {
      talkingPoints.review_history.push({
        cycle: review.review_cycle.getDisplayValue(),
        rating: review.overall_rating.getDisplayValue(),
        date: review.review_date.toString()
      });
    }

    // Generate discussion topics based on data
    if (talkingPoints.goal_summary.at_risk > 0)
      talkingPoints.discussion_topics.push('Address ' + talkingPoints.goal_summary.at_risk + ' at-risk goals and identify blockers');
    if (talkingPoints.goal_summary.completed > 0)
      talkingPoints.discussion_topics.push('Recognize completion of ' + talkingPoints.goal_summary.completed + ' goals');
    if (talkingPoints.development_areas.length > 0)
      talkingPoints.discussion_topics.push('Review progress on development areas: ' + talkingPoints.development_areas.join(', '));
    if (talkingPoints.feedback_themes.constructive.length > 0)
      talkingPoints.discussion_topics.push('Discuss constructive feedback themes (' + talkingPoints.feedback_themes.constructive.length + ' items)');

    // Suggested questions
    talkingPoints.suggested_questions = [
      'What accomplishments are you most proud of this period?',
      'What obstacles are slowing your progress on current goals?',
      'How can I better support your development in [development_area]?',
      'Where do you see yourself in the next 12-18 months?',
      'What skills would you like to develop next?'
    ];

    gs.info('MANAGER TALKING POINTS:\n' + JSON.stringify(talkingPoints, null, 2));
  description: "Talent: Generate manager talking points for performance discussion"
步骤 5:按主题搜索背景信息

使用编码查询获取更多背景信息:

Tool: SN-Query-Table
Parameters:
  table_name: sn_hr_talent_feedback
  query: user.nameLIKE[employee_name]^rating>=4^123TEXTQUERY321=leadership collaboration^sys_created_on>=javascript:gs.daysAgoStart(90)
  limit: 10

工具用法

操作MCP 工具REST 端点
查询人才档案SN-Query-TableGET /api/now/table/sn_hr_talent_profile
查询目标SN-Query-TableGET /api/now/table/sn_hr_talent_goal
查询反馈SN-Query-TableGET /api/now/table/sn_hr_talent_feedback
查询评审记录SN-Query-TableGET /api/now/table/sn_hr_talent_review
按主题搜索SN-Natural-Language-SearchN/A
生成摘要SN-Execute-Background-ScriptPOST /api/now/table/sys_trigger
架构发现SN-Discover-Table-SchemaGET /api/now/table/sys_dictionary

最佳实践

  • 数据隐私: 切勿将未经处理的同事反馈原文分享给员工;应综合归纳为主题,以保护反馈者的保密性
  • 平衡观点: 始终兼顾优势与待发展领域,避免近因偏差或光环效应
  • 目标对齐: 在团队和组织目标的背景下讨论目标
  • 基于证据: 每个讨论要点都应以具体数据(目标指标、反馈引文、评审评级)为依据,而非主观印象
  • 面向未来: 至少将 40% 的讨论要点用于未来发展,而不只是回顾过往表现
  • 校准背景: 评审前,查看员工的评级与团队及部门平均水平的对比情况
  • 文化敏感性: 根据组织文化和个人沟通偏好调整讨论要点的语气和结构
  • 后续跟踪: 将讨论中商定的行动项记录为新的目标或任务

故障排除

人才档案未返回数据

症状: 查询已知员工时未返回人才档案
原因: 人才档案可能不会自动创建;需要经理或 HR 执行初始化操作
解决方案: 改为检查员工是否在 sn_hr_core_profile 中有 HR 档案。某些组织使用不同的档案表,或者人才模块可能尚未完全部署。

所有目标的完成百分比均为零

症状: 尽管已有进展,所有目标的完成度仍显示为 0%
原因: 目标跟踪可能采用基于里程碑的完成方式,而非百分比;也可能在相关任务表中跟踪进度
解决方案: 检查是否存在用于计算完成度的 sn_hr_talent_goal_task 或 sn_hr_talent_milestone 表。使用 sys_db_object 查询 nameLIKEgoal,查找相关表。

反馈内容已加密或受限

症状: 反馈内容字段返回空值或编码后的值
原因: HR 反馈可能受到字段级加密保护,或受 ACL 限制而无法被经理访问
解决方案: 确认查询用户拥有 sn_hr_talent.manager 角色。检查内容字段是否通过 sys_dictionary 中的 encryption 属性启用了加密。

示例

示例 1:年度评审准备

场景: 经理为年度绩效评审做准备

Tool: SN-Query-Table
Parameters:
  table_name: sn_hr_talent_goal
  query: user=[employee_sys_id]^active=true^due_dateONThis year@javascript:gs.beginningOfThisYear()@javascript:gs.endOfThisYear()
  fields: short_description,status,percent_complete,weight,metric_value,metric_target
  limit: 15

生成的讨论要点:

  • 开场:“感谢你今年作出的贡献。让我们回顾一下你的进展,并规划下一步。”
  • 目标进展: 设定了 8 个目标,已完成 5 个(63%),2 个进展顺利,1 个有风险(Q4 营收目标完成度为 35%)
  • 优势(来自反馈): 团队间协作和技术指导能力持续获得认可
  • 待发展领域: 演讲能力(在 3 条反馈中提及)、授权能力(本人认定)
  • 评级背景: 上次评审:超出预期。当前趋势:达到/超出预期
  • 讨论问题:“Q4 营收目标进度落后;你需要哪些支持才能缩小差距?”
  • 发展计划: 建议参加公开演讲培训;考虑安排一项具有挑战性的任务,由其负责下一次全员会议
示例 2:每周 1:1 快速准备

场景: 经理需要在 30 分钟的 1:1 前快速了解背景

Tool: SN-Query-Table
Parameters:
  table_name: sn_hr_talent_feedback
  query: user.nameLIKE[employee_name]^sys_created_on>=javascript:gs.daysAgoStart(14)
  limit: 5

生成的快速笔记:

  • 目标跟进: API 迁移项目完成度为 70%(上周为 55%);预计能赶上 3 月截止期限
  • 近期反馈: QA 负责人肯定了测试覆盖率文档的改进
  • 上次 1:1 的待办事项: 员工申请了云认证培训预算
  • 建议开场:“API 迁移进展很棒。新的测试方法用起来怎么样?”

相关技能

  • hrsd/case-summarization - 用于绩效讨论的 HR 案例背景
  • hrsd/sentiment-analysis - 员工情绪分析
  • hrsd/resume-skill-extraction - 用于发展规划的技能清单
  • hrsd/persona-assistant - 基于 HR 角色的协助
  • admin/workflow-creation - 自动化评审周期工作流

评论

支持 Markdown