1. 项目概述为AI助手注入企业HR数据洞察力如果你正在使用Claude、Cursor这类AI助手来提升工作效率但每次问到公司内部的人事信息比如“下周后端团队谁在休假”或者“我们还有哪些高级iOS岗位空缺超过30天了”得到的回答往往是“我无法访问实时数据请查看你的HR系统”。这种割裂感让人头疼。今天要聊的这个开源项目peopleforce-mcp就是为了彻底解决这个问题而生的。简单来说它是一个桥梁一个专门为PeopleForce HR系统打造的Model Context ProtocolMCP服务器。MCP你可以理解为AI世界的“USB协议”它定义了AI助手如何安全、标准化地连接和使用外部工具与数据。peopleforce-mcp实现了这个协议让Claude、Cursor等任何兼容MCP的AI客户端能够直接、只读地查询你公司PeopleForce系统中的实时数据。这意味着你的AI助手从此“认识”你公司的组织架构、员工状态、假期排期和招聘进展回答将基于事实而非猜测。这个项目由乌克兰的定制软件开发公司Empat构建并开源维护。他们的初衷很实在既然PeopleForce官方还没有推出MCP连接器而市场又有强烈的需求那就自己动手让每个PeopleForce客户都能用上AI赋能的HR自动化把这变成一项普惠技术。对于技术负责人、HR运营人员或者任何想通过AI提升内部信息查询效率的团队来说这个工具的价值在于它把静态的AI对话变成了一个能调用真实业务数据的智能体而且部署过程比想象中简单得多。2. 核心设计思路与架构解析2.1 为什么选择MCP协议与只读设计在决定为PeopleForce构建连接器时Empat团队面临几个关键选择。首先是协议选型。在AI智能体生态中存在多种让模型调用外部功能的方式比如OpenAI的Function Calling、LangChain Tools等但这些方案往往与特定模型或框架绑定。MCPModel Context Protocol由Anthropic提出并逐渐成为开放标准其核心优势在于客户端无关性。只要AI客户端如Claude Desktop、Cursor、Windsurf实现了MCP它们就能以同样的方式发现和使用任何MCP服务器提供的工具。这避免了为每个客户端单独开发适配器极大地提升了工具的可复用性和生态活力。选择MCP就是选择了未来更广泛的兼容性。其次是至关重要的安全边界设定只读。在项目初始版本0.x系列中所有27个工具都被严格设计为仅执行GET请求不包含任何创建、更新或删除操作。这是一个经过深思熟虑的架构决策。HR数据高度敏感包含员工个人信息、薪酬、合同状态等。在AI代理的上下文中授予其写入权限风险极高——一个误解的指令可能导致错误地批准假期、修改员工状态或删除记录。通过强制只读项目在提供巨大价值信息查询的同时将风险降至最低。这为团队赢得了信任让管理员可以更放心地部署。未来如果增加写操作也一定会通过显式的功能开关feature flag让用户自主选择启用。2.2 工具集的设计哲学覆盖核心场景与提供逃生舱门浏览项目提供的27个工具你会发现它们并非简单地将PeopleForce API接口一对一暴露而是经过了精心设计以匹配AI助手与人类自然对话的查询模式。场景化封装例如find_employee_by_email工具并不是一个简单的API映射。PeopleForce API可能没有直接的“按邮箱查员工”接口或者需要结合多个端点。这个工具在内部封装了可能的查找逻辑比如先尝试按工作邮箱匹配再尝试个人邮箱并自动处理分页遍历最终返回一个明确的结果。这对AI助手来说极其友好模型只需要知道“我想找这个邮箱对应的人”而不必理解后端API的细节和分页机制。数据聚合与分类工具被清晰地分为几大类员工信息、休假与日历、招聘ATS、基础数据。这种分类方式直接对应了HR管理的几个核心模块。当AI助手被问到“销售团队有多少人在试用期”时它可以组合调用list_departments找到销售部ID和list_employees过滤statusprobation从而给出精准答案。这种设计引导AI进行结构化思考。逃生舱门api_request这是架构中一个非常聪明的设计。PeopleForce的API可能会更新或者用户有某些未被预建模的特定查询需求。api_request工具允许AI助手直接向任何/api/public/v3/下的端点发起原始GET请求。这保证了工具的可扩展性和即时可用性。当遇到未覆盖的API时用户或AI本身可以立即通过这个通用工具进行查询同时开发者鼓励用户就此提交PR将常用的新端点“升级”为一等公民工具。这形成了一个良性的开源协作循环。3. 从零开始的部署与配置实战3.1 环境准备与依赖安装部署peopleforce-mcp的第一步是准备一个合适的运行环境。项目要求Node.js 18或更高版本这是为了保证能使用现代的JavaScript特性和稳定的运行时API。我建议直接使用Node.js 20 LTS版本它在性能和稳定性上达到了很好的平衡。你可以通过node -v命令来检查当前版本。接下来是获取代码。由于项目是纯开源、自托管的模式你不需要注册任何云服务或市场账号直接从GitHub克隆即可。这里有一个细节需要注意选择一个合适的、有权限的目录进行克隆因为后续MCP客户端配置时需要指向构建产出的绝对路径。我通常会在用户家目录下创建一个~/mcp-servers的文件夹专门管理这类自托管工具保持整洁。# 创建专用目录并克隆项目 mkdir -p ~/mcp-servers cd ~/mcp-servers git clone https://github.com/EmpatDevelopment/peopleforce-mcp.git cd peopleforce-mcp进入项目目录后运行npm install安装依赖。这个项目的依赖相对精简主要是MCP的核心SDK (modelcontextprotocol/sdk) 和一些用于HTTP请求、环境变量解析的辅助库。安装过程通常很快。安装完成后执行npm run build。这个命令会调用TypeScript编译器将源代码编译成纯JavaScript文件输出到dist/index.js。这个文件就是最终需要被MCP客户端加载的入口文件。确保构建过程没有报错这是后续一切工作的基础。3.2 获取并安全配置PeopleForce API密钥这是整个流程中最关键也最需要谨慎的一步。你需要一个具有足够权限的PeopleForce API密钥。登录PeopleForce以管理员身份进入你的PeopleForce实例。导航至API设置在设置Settings中找到“Open API keys”或类似选项。选择密钥类型务必选择“Company API key”。PeopleForce可能提供另一种“Career key”但那个权限范围仅限于招聘相关的公开数据如空缺职位对于查询员工信息、假期等工具会返回404错误。Company key才提供了项目所需的全公司只读权限。生成与保存点击生成密钥系统会创建一串长字符。立即将其复制到安全的地方比如本地的密码管理器。PeopleForce的界面可能只显示一次这个密钥。重要安全警告这个API密钥等同于能读取你公司所有员工HR数据的凭证。必须像保护数据库密码一样保护它。绝对不要将其直接写入代码、提交到Git仓库、粘贴到非加密的聊天工具或笔记中。泄露此密钥意味着他人可以无限制地访问你公司的敏感组织信息。配置的核心原则是通过环境变量传递密钥。项目设计就是读取PEOPLEFORCE_API_KEY这个环境变量。你永远不会在命令行或配置文件中明文写出它而是让MCP客户端在启动服务器进程时动态注入。3.3 配置主流MCP客户端不同的MCP客户端配置方式略有不同但核心逻辑一致告诉客户端当需要调用peopleforce-前缀的工具时去启动一个特定的Node.js进程我们的服务器并为该进程设置包含API密钥的环境变量。对于Claude Desktop推荐给大多数非开发者用户 Claude Desktop的配置是一个JSON文件。你需要找到对应操作系统的配置文件路径macOS:~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:%APPDATA%\Claude\claude_desktop_config.jsonLinux:~/.config/Claude/claude_desktop_config.json用文本编辑器打开如果不存在则创建这个文件添加mcpServers配置节。特别注意args中的路径必须是绝对路径。{ mcpServers: { peopleforce: { command: node, args: [/Users/你的用户名/mcp-servers/peopleforce-mcp/dist/index.js], env: { PEOPLEFORCE_API_KEY: 你的实际API密钥在这里 } } } }保存文件后必须完全重启Claude Desktop应用程序配置才会生效。重启后你可以在Claude的输入框尝试问一个HR相关问题如果配置成功Claude会在思考时显示正在调用peopleforce_工具。对于Cursor或Windsurf等编辑器插件 这些工具通常将MCP服务器配置放在用户目录下的独立文件中。例如Cursor配置文件路径是~/.cursor/mcp.json。其格式与Claude Desktop完全兼容你可以将上面mcpServers对象内的内容原样复制过去。同样修改配置后需要重启编辑器。对于Claude Code命令行工具 如果你使用Claude Code CLI可以通过一行命令直接添加服务器这非常适合自动化脚本或Docker环境。claude mcp add peopleforce --scope user \ --env PEOPLEFORCE_API_KEY你的密钥 \ -- node /绝对路径/peopleforce-mcp/dist/index.js--scope user表示该配置对当前用户生效。这种方式将密钥直接传递给了命令行请确保你的终端历史记录安全。3.4 高级配置与环境调优除了必需的API密钥项目还提供了几个环境变量用于调优这些都可以在MCP客户端的配置env里一并设置。PEOPLEFORCE_BASE_URL如果你的公司使用的是PeopleForce的定制化部署或私有化版本API入口可能不同。你可以通过这个变量覆盖默认的https://app.peopleforce.io/api/public/v3。PEOPLEFORCE_TIMEOUT_MS默认15000毫秒15秒。如果你们的PeopleForce实例响应较慢或者网络延迟较高可以适当调大这个值避免频繁超时。但也不宜设置过长否则会拖慢AI助手的整体响应速度。PEOPLEFORCE_MAX_RETRIES和PEOPLEFORCE_RETRY_BASE_MS这两个参数控制了重试策略。当遇到网络波动或PeopleForce API返回5xx错误或429请求过多时服务器会自动进行指数退避重试。默认重试3次基础等待500毫秒。在生产环境中如果遇到偶发性问题保持默认即可。如果处于非常不稳定的网络环境可以适当增加重试次数。配置完成后一个验证配置是否生效的简单方法是在AI助手中问一个简单明确的问题例如“列出我们公司所有的部门。” 观察AI的思考过程它应该会显示正在调用peopleforce_list_departments工具。4. 工具深度使用指南与场景化案例4.1 员工信息查询从模糊问到精准答员工数据是HR系统的核心peopleforce-mcp提供了多维度查询工具让AI助手能像HR专家一样回答人员相关问题。场景一快速定位同事“帮我找一下邮箱是 li.leicompany.com 的同事。” 面对这个问题AI会调用find_employee_by_email工具。这个工具的强大之处在于其容错性和便利性。它内部会处理分页逻辑遍历员工列表比对工作邮箱和个人邮箱字段。你不需要知道这个人的员工ID直接用最自然的沟通方式——邮箱——即可找到。返回的结果会包含员工ID、姓名、部门、职位等基本信息为后续更深入的查询打下基础。场景二团队状态盘点“显示目前处于‘试用期’状态的所有员工并按部门分组。” 这个查询稍微复杂一些AI助手需要组合多个工具。首先它会调用list_employees并传入参数status: probation。PeopleForce API可能会分页返回结果MCP服务器会自动处理分页将所有结果收集起来。然后为了按部门分组AI可能需要再调用list_departments来获取部门名称或者直接利用员工数据中返回的部门ID进行归类汇总。最终它能生成一个清晰的列表“后端开发部2人市场营销部1人...”。场景三员工全貌视图“我想了解张三的完整在职信息包括他的岗位历史、分配的资产和关联文档。” 这涉及到获取一个员工的立体画像。AI可以顺序调用get_employee传入张三的员工ID获取个人基本信息、联系方式、入职日期等。list_employee_positions获取他的岗位变动历史了解其职业发展路径。list_employee_assets查看公司分配给他的硬件资产如笔记本电脑、手机等。list_employee_documents列出与他相关的合同、证书、考核表等文档注意隐私边界。通过这样的组合查询AI助手能够提供一个远超简单通讯录的、丰富的员工背景报告这对于新经理快速了解团队成员或者HR进行个案分析非常有帮助。4.2 假期管理与日历集成让排期一目了然假期管理是团队协作中的高频痛点peopleforce-mcp让AI成为了一个智能的假期日历助手。场景四团队假期规划“下个月我们产品团队有谁已经申请了休假” AI会使用list_leave_requests工具。这里的关键在于过滤参数的运用。首先它需要确定“产品团队”的员工ID范围这可能需要先查询部门或团队列表。然后调用list_leave_requests时可以组合多个过滤条件employee_id(可数组): 传入产品团队的所有员工ID。时间范围虽然工具参数可能不直接支持“下个月”但AI可以计算下个月的起止日期并通过查询结果中的start_date和end_date字段进行逻辑过滤。state: approved只查询已批准的申请排除待审批或已拒绝的。最终AI可以汇总出一份清晰的列表“李四年假8月15-19日王五病假8月22日...”场景五假期余额查询“王五今年还剩多少天年假” 这个查询可能无法通过单一工具直接完成因为假期余额可能是通过计算或特定接口获取。这时api_request这个“逃生舱门”工具就派上用场了。熟悉PeopleForce API的管理员可以指导AI或者AI可以根据常见API设计模式尝试查询如/api/public/v3/employees/{id}/leave_balances这样的端点。这正是api_request的设计初衷在官方工具未覆盖的领域提供一条灵活的路径。场景六公司假日日历“把公司今年的法定假日列表给我。” 直接调用list_holidays工具即可。这个工具通常返回一个包含假日名称、日期和类型的列表。AI不仅可以列出它们还可以进一步分析比如“今年有多少个假期落在周末”、“国庆节后连续上几天班”通过结合日期计算逻辑提供更有洞察力的信息。4.3 招聘流程透视掌握人才管道状态对于管理者或招聘负责人实时了解招聘进展至关重要。peopleforce-mcp将ATS申请人追踪系统数据开放给了AI。场景七招聘漏斗分析“我们目前所有‘进行中’的招聘岗位每个岗位到了哪一面试阶段分别有多少候选人” 这是一个典型的漏斗分析查询。AI需要执行一个多步查询list_recruitment_vacancies过滤state: active获取所有开放职位及其ID。对每个职位调用list_recruitment_candidates可能通过vacancy_id过滤并分析每个候选人的pipeline_stage_id。list_recruitment_pipelines获取管道和阶段定义将ID映射为“电话筛选”、“技术面试”、“HR面试”等可读名称。 最终AI可以生成一个可视化程度很高的摘要“高级后端工程师职位ID: 101共15名候选人。其中5人在‘简历筛选’6人在‘技术面试’4人在‘终轮面试’。”场景八识别长期空缺职位“有哪些职位发布已经超过30天但还没有关闭” 这需要AI计算职位创建日期created_at与当前日期的差值。首先获取所有空缺职位列表然后进行日期过滤和判断。AI可以这样回答“‘市场总监’职位已开放45天‘初级UI设计师’职位已开放38天。建议招聘负责人复查这些职位的招聘策略或渠道。”场景九候选人来源效果评估“上一季度哪个招聘渠道给我们带来了最多的进入‘终面’阶段的候选人” 这涉及到关联候选人与来源并按阶段过滤。AI可以查询list_recruitment_sources获取来源列表然后分析list_recruitment_candidates中的数据统计每个来源下、处于特定管道阶段的候选人数。这个分析能帮助HR团队优化招聘预算的分配。4.4 基础数据与参考数据构建查询的基石部门、职位、地点等基础数据表是几乎所有关联查询的基石。这些工具虽然看起来简单但至关重要。list_departments,list_positions,list_locations等工具它们通常返回的是ID和名称的映射列表。当AI助手回答“销售部有多少人”时它内部需要先调用list_departments找到“销售部”的ID然后再用这个ID去过滤list_employees。这些工具确保了AI对话中的“销售部”能和系统后台的ID正确关联起来。使用技巧对于大型组织这些列表可能很长。虽然工具支持分页但在AI的上下文中通常第一次查询就会获取所有数据并缓存在本次对话的上下文中以提高后续查询的速度。作为用户你可以直接问“我们公司有哪些办公地点”AI就能给出完整列表无需关心分页细节。5. 安全实践、运维与故障排查5.1 密钥安全管理全流程再强调一次PEOPLEFORCE_API_KEY是最高级别的敏感信息。以下是贯穿密钥生命周期的安全实践生成阶段在PeopleForce后台生成时立即复制到密码管理器如1Password、Bitwarden。关闭浏览器标签页前确认已妥善保存。存储阶段绝对禁止写入项目内的.env文件除非该文件被严格加入.gitignore且仅在安全服务器上使用、硬编码在脚本中、提交到任何版本控制系统。正确做法仅存储在MCP客户端的配置文件中如Claude Desktop的json该文件应位于受操作系统保护的本地用户目录下。或者使用操作系统的密钥环工具如macOS的Keychain、Windows的Credential Manager来存储并通过脚本在运行时读取注入环境变量。使用阶段配置MCP客户端时确保运行客户端的机器环境是可信的。避免在公共或共享电脑上进行配置。监控与轮换定期在PeopleForce后台查看API密钥的使用日志如果有此功能。如果发生任何可疑活动或团队成员离职应立即在PeopleForce设置中**撤销Revoke**旧密钥并生成新密钥。更新密钥后别忘了同步更新所有MCP客户端的配置并重启它们。网络限制高级如果PeopleForce实例支持IP白名单强烈建议将API密钥的访问权限限制在运行MCP客户端的服务器或电脑的IP地址上。这样即使密钥意外泄露攻击者也无法从其他位置访问。5.2 日常更新与维护peopleforce-mcp是一个活跃的开源项目Empat团队会持续修复问题、添加新工具或适配API变更。保持更新能获得更好的稳定性和功能。更新步骤非常简单# 进入项目目录 cd ~/mcp-servers/peopleforce-mcp # 拉取最新代码 git pull origin main # 安装可能新增的依赖 npm install # 重新构建 npm run build更新完成后必须重启你的MCP客户端如Claude Desktop以便它重新加载新的服务器代码。建议关注项目的GitHub Release页面或Star仓库以便及时收到更新通知。5.3 常见问题与故障排查实录在实际部署和使用中你可能会遇到一些问题。下面是我在测试和帮助他人部署时遇到的典型情况及其解决方法。问题一AI助手完全不响应或提示“没有可用工具”。检查点1客户端配置路径。这是最常见的问题。确保Claude Desktop配置中args数组里的JS文件路径是绝对路径并且路径完全正确。在macOS/Linux上可以使用ls -la /你的/路径/peopleforce-mcp/dist/index.js命令确认文件存在。在Windows上仔细检查盘符和文件夹名。检查点2客户端重启。修改了Claude Desktop的JSON配置文件后必须完全退出并重启Claude Desktop应用配置才会被重新读取。仅仅关闭窗口可能不够需要从任务栏/程序坞彻底退出。检查点3环境变量注入。确认PEOPLEFORCE_API_KEY在配置的env对象中设置正确且密钥本身有效。可以尝试在终端中手动用同样的密钥运行服务器进行测试PEOPLEFORCE_API_KEY你的密钥 node dist/index.js。如果服务器能正常启动没有立即报错退出说明密钥和Node环境基本正常。问题二AI助手尝试调用工具但返回“权限错误”或“未找到”。错误信息401 Unauthorized几乎可以肯定是API密钥错误或已失效。请登录PeopleForce后台确认密钥是否被意外撤销或重新生成过。复制最新的密钥更新配置。错误信息404 Not Found可能原因有两个。一是你使用的API密钥类型是“Career key”它权限不足请换用“Company API key”。二是你请求的特定端点尤其是使用api_request时在你的PeopleForce实例版本中不存在。请对照PeopleForce官方API文档确认端点路径。错误信息429 Too Many Requests你或你的AI助手在短时间内发送了过多请求触发了PeopleForce API的速率限制。peopleforce-mcp服务器会尊重API返回的Retry-After头信息并自动进行指数退避重试。如果持续出现可能需要放慢查询频率或者检查是否有多个AI客户端实例在同时运行造成了重复请求。问题三查询结果不完整或缺失数据。分页问题PeopleForce API的列表接口通常都是分页的。peopleforce-mcp的工具如list_employees虽然接收page和per_page参数但AI助手在发起查询时可能会默认只请求第一页。对于需要全量数据的查询如“列出所有员工”更智能的做法是使用像find_employee_by_email这样内部处理了分页的工具或者引导AI进行多次分页查询并汇总结果。作为用户你可以更精确地提问例如“列出市场部的前20名员工”来获得可控范围的结果。数据延迟AI助手查询到的是PeopleForce数据库中的实时数据但任何系统都可能存在几秒到几分钟的缓存或同步延迟。对于财务结算等对实时性要求极高的场景请以PeopleForce主界面数据为准。问题四服务器启动失败Node.js报错。Error: Cannot find module通常是因为依赖没有安装完整。请进入项目目录删除node_modules文件夹和package-lock.json文件然后重新运行npm install和npm run build。Node版本过低使用node -v检查版本。如果低于18需要升级Node.js。推荐使用nvmNode Version Manager来管理多个Node版本。问题五连接超时或网络错误。检查PEOPLEFORCE_BASE_URL如果你公司使用自定义的PeopleForce域名请确保这个环境变量设置正确。检查网络代理如果你的电脑处于企业代理之后可能需要为Node.js进程配置代理。这通常比较复杂涉及到在启动命令或系统环境变量中设置HTTP_PROXY和HTTPS_PROXY。一个更简单的方法是确认你的Claude Desktop或浏览器能正常访问PeopleForce网页版如果能则说明网络是通的问题可能出在其他地方。调整超时设置如果网络较慢可以尝试在配置中增加PEOPLEFORCE_TIMEOUT_MS的值例如设为3000030秒。6. 扩展思路与最佳实践6.1 将AI助手深度融入HR工作流部署好peopleforce-mcp只是第一步如何让它真正产生价值在于你如何设计提问和构建工作流。实践一制作定期报告自动化脚本。你可以让AI助手在每周一早上自动生成一份简报“请总结上周公司的新入职员工、即将开始的休假以及招聘岗位的状态变化。” 虽然当前的MCP服务器是只读的但AI可以查询数据、进行分析、格式化然后通过其他方式如邮件插件、消息推送将结果发送给你。这相当于有了一个免费的、懂业务的HR数据分析助手。实践二为新经理快速生成团队档案。当一位新经理上任时他可以问AI“给我一份我直接下属的简要档案包括姓名、职位、入职日期、当前项目如果系统有记录和最近一次绩效评估时间。” AI通过组合查询员工信息、岗位历史等能快速生成一份 onboarding 文档帮助新经理快速建立对团队的认知。实践三合规与审计支持。在进行内部审计时可以询问AI“列出所有在过去一年内岗位发生变动的员工并显示变动前后的部门与职位。” 这类查询通过list_employee_positions工具可以轻松实现并能导出为结构化数据辅助合规检查。6.2 性能优化与大规模部署考量对于员工数量众多例如数千人的大型企业一些查询可能会返回大量数据影响AI助手的响应速度。优化查询尽量使用过滤条件缩小查询范围。例如不要总是问“所有员工”而是问“技术部门的所有员工”或“本月生日的员工”。利用好工具提供的status、department_id等过滤参数。分页策略意识到AI助手的一次调用可能只获取一页数据默认数量。对于需要全量数据的复杂分析可能需要拆分成多个更具体的查询或者接受基于部分数据的趋势性分析。服务器部署目前描述的是在个人电脑上运行。对于团队共享使用可以考虑将peopleforce-mcp部署在一台内部服务器或容器如Docker中。让所有团队成员的MCP客户端都配置连接到这台中央服务器。这样做的好处是密钥集中管理API密钥只需在服务器上配置一次无需分发给每个人。便于更新维护只需在服务器上更新一次所有人立即生效。利用缓存高级可以在服务器前增加一个缓存层如Redis对不常变的数据如部门列表、职位列表进行短期缓存减少对PeopleForce API的直接调用提升响应速度并避免触发速率限制。6.3 贡献与社区peopleforce-mcp是一个开源项目其生命力来源于社区。如果你在使用中发现某个常用的API端点没有被封装成工具或者遇到了bug最有效的做法是参与到项目中。报告问题在GitHub仓库的Issues页面清晰描述你遇到的问题包括错误信息、你的查询方式、期望结果等。贡献代码如果你发现了一个缺失的工具可以参考现有工具的代码结构实现一个新的工具并提交Pull Request。项目代码是TypeScript编写的结构清晰有完整的测试套件便于上手。分享用例在GitHub Discussions或相关社区分享你是如何使用这个工具解决实际问题的。你的用例可能会启发开发者增加新功能或者帮助其他用户更好地利用这个工具。这个项目的价值在于它切中了一个非常具体的痛点——让AI理解企业内部数据。它的成功部署不仅能提升你个人的工作效率更能为你的团队带来一种全新的、与业务数据自然交互的方式。从查询一个简单的员工电话分机到分析整个部门的离职率趋势中间只隔着一个好问题。