街道办惠企政策匹配 Skill(street-policy-matcher)
> 街道经济发展办 + 辖区企服专员的工作助手:把"找不到、读不懂、来不及报"的惠企政策堵点,平移到「AI 给建议 + 专员签发 + 4 档匹配度 + 互斥研判」的可执行链路上。
① 不可突破的红线
- 政策条款 100% 引用原文:不在原文出现的条件 / 门槛 / 金额 / 文号,必须标「待核实·需查政策原文」或「本地政策库未收录」。
- 匹配结果是「建议」而非「承诺」:禁止输出「该企业一定能拿到 X 万元补贴」;匹配度严格用 high / medium / low / unknown 四档,禁用伪精确百分比。
- 不代替企业申报:Skill 仅输出申报指引,不替企业填写 / 提交。
- 政策库专人维护:拿不准的字段保留原文 +
needs_manual_review=true,结构化阶段禁止编造条款。 - 专员人工签发为必经环节:未签发版本不得推送企业;批量 ≥ 10 条推送必须有经济办负责人复签;已签发版本标
immutable=true。 - 敏感字段本地处理 + 字段级脱敏:营收 / 利润 / 专利 / 信用 / 电话等敏感字段,调用外部 LLM 前强制
<REDACTED:*>替换。
| 红线 | 7 条红线扫描:python scripts/redline_scan.py(目标词从config/brand-tokens.json注入) |
② 一、核心能力速查
| 功能 | 描述 | 触发关键词 |
|---|---|---|
| 政策原文录入与结构化 | 政策入库 + 三档切分(mandatory / weighted / disqualifying) | ingest-policy |
| 企业画像构建 | 一企一档 + 四类标签 + 数据来源溯源 | build-portrait |
| 三档打分 + 4 档匹配度 | 高 / 中 / 低 / 待核实 | match |
| 互斥 / 叠加研判附签 | 🟢🟡🔴 + 默认 cap 规则 | annotate |
| 企业告知单(HTML) | 通俗版告知材料 | render |
| 专员比对表(HTML) | 条款级核对 + 签发 checklist | render |
| md 简版报告 | 验收自检用 | render |
| 专员人工签发 | 不可篡改留痕 | signoff |
| 推送留痕 | 渠道 + 接收对象 + 时间 | push |
| 反向扫描(以政策找企业) | 批量场景 + 切分 by_tier | reverse-scan |
| 批量签发 | specialist 单条 + director 批量复签 | batch-signoff |
| 政策看板 | 时效 / 匹配度 / 推送转化三视角 | dashboard |
| 申报节点时间线 | 30/15/3 天三级提醒 | timeline |
| 状态机引擎 | 8 段合法转移 + 不可变回滚 | state-machine |
| 政策 RAG 接入 | 5 类来源白名单 + 段落级 hash 比对 | rag |
| 复盘卡 | pushed → applied_pending → fulfilled | replay |
| 政策版本比对 | 字段 + 条款差异 | version-compare |
| CLI 版本查询 | 元信息返回 | version |
③ 二、标准工作流程
3.1 前置
- Python 3.9+
- 第三方依赖:仅
pyyaml(用于加载 yaml 配置);如未装,匹配阶段退化但能跑 - 角色:至少具备 enterprise_specialist 或 policy_librarian 之一
3.2 主流程
S01 采集 → S02 画像 → S03 政策结构化 → S04 匹配 → S05 研判 → S06 签发 → S07 推送 → S08 复盘
各阶段 CLI:
python scripts/cli.py ingest-policy <policy.json>
python scripts/cli.py build-portrait <portrait.json>
python scripts/cli.py match <policy.json> <portrait.json>
python scripts/cli.py annotate <matches.json> <portrait.json>
python scripts/cli.py render <annotated.json> <portrait.json>
python scripts/cli.py signoff <annotated.json> <specialist.json>
python scripts/cli.py push <signoff_id> <channel> <recipient>
python scripts/cli.py reverse-scan <policy.json> <portraits.json>
python scripts/cli.py batch-signoff <batch_items.json> [director.json]
python scripts/cli.py dashboard <policies.json> [matches.json] [pushes.json]
python scripts/cli.py timeline <policy.json>
python scripts/cli.py state-machine demo
python scripts/cli.py rag <source_id> <query> [limit]
python scripts/cli.py replay <push_record.json> [application.json] [fulfillment.json]
python scripts/cli.py version-compare <old.json> <new.json>
3.3 红线卡口
- 任一阶段失败 → 不进入下一阶段;
- 硬字段缺失 → 阻断匹配并返回
needs_collection清单; - 任一条款
needs_manual_review=true→ 整条判 unknown,请专员人工解读。
④ 三、任务状态机
8 状态:S00 初始化 / S01 采集 / S02 画像 / S03 结构化 / S04 匹配 / S05 研判 / S06 签发 / S07 推送 / S08 复盘。
| 状态 | 入口 | 出口 | 异常恢复 |
|---|---|---|---|
| S00 | 收到任务 | 完成版本与角色检查 → S01 | 版本不匹配 → 阻断 |
| S01 | 提供企业基本识别 | 硬字段完整 → S02 | 暂存 → resume |
| S02 | 采集完整 | 画像构建 → S03 | 缺标签 → 标「待补」 |
| S03 | 选定政策原文 | 结构化 + 锚点 → S04 | 结构化失败 → 原文 + 标【需人工解读】 |
| S04 | 画像 + 政策就绪 | 三档打分 + 排序 → S05 | 无候选 → 明示「未收录」 |
| S05 | 候选 + 历史 | 附签 → S06 | 命中互斥 → 标 🔴 |
| S06 | 候选 + 研判 | 专员勾选 → S07 | 未签发 → 阻断推送 |
| S07 | 已签发 | 推送 + 留痕 → S08 | 推送失败 → 重试 + 警告 |
| S08 | 申报反馈 | 复盘卡沉淀 → 终止 | 漏斗异常 → 触发政策库复核 |
详见 references/state-machine.md。
⑤ 四、数据合规与安全
- 数据使用范围限定为政策匹配;不得用于投融资 / 信用评价等扩展用途;
- 字段级脱敏:调用外部 LLM 前替换为
<REDACTED:*>; - 访问日志保留 ≥ 180 天;
- 政策档案原文保留 ≥ 5 年(废止后);
- 角色权限矩阵见
references/permissions-guide.md。
⑥ 五、性能与容量
| 场景 | 单次耗时(基线) |
|---|---|
| ingest_policy | < 50 ms |
| build_portrait | < 50 ms |
| match(单政策) | < 30 ms |
| annotate(10 条匹配) | < 20 ms |
| render_docs(双 HTML + md) | < 200 ms |
| signoff | < 20 ms |
容量基线:单条政策 ≤ 200 clauses;单条画像 ≤ 4 类标签各 20 字段;批量上限 10000 条政策档案。
⑦ 六、交付形态
| 输出 | 格式 | 用途 |
|---|---|---|
| 企业告知单 | HTML | 走政务短信 / 微信送达 |
| 专员比对表 | HTML + xlsx(未来 P1) | 内部核对 + 批量推送决策 |
| md 简版 | md | 验收自检 |
| 签发留痕 | JSON | immutable 永久保存 |
| 推送留痕 | JSON | immutable 永久保存 |
⑧ 七、交付前自检
| 维度 | 检查项 |
|---|---|
| 红线 | 7 条红线扫描:python scripts/redline_scan.py(目标词从 config/brand-tokens.json 注入) |
| 测试 | python -m pytest tests/ -v 全部通过 |
| 端到端 | python examples/sample_run.py 返回 0 |
| 元数据 | skill.json / _skillhub_meta.json / config/shawn.json 字段齐全 |
| 命名 | references/naming-conventions.md |
| 错误码 | 8 段模块覆盖 E0100-E0899 |
⑨ 八、何时不用本 Skill
| 边界 | 处置 |
|---|---|
| 政策原文未带官方权威源 | 拒绝录入,引导 policy_librarian 索取原文 |
| 企业无统一社会信用代码 | 拒绝建档 |
| 主管部门明确需「人工」审核 | 仍走人工;Skill 仅作辅助 |
| 政策金额涉及具体资质核算 | 提示「以主管部门核定为准」,不展示具体数字 |
| 跨街道 / 跨地区复用 | 模板注入地区变量后启用(P1 落地) |
⑩ 九、常见问题
Q1:匹配失败怎么处理?
返回 tier=unknown + red_lines_hit=[...]。请专员按 references/red_lines.md § 红线 1 / 4 排查。
Q2:互斥命中会怎样?
annotate 在 stacking_notes 输出 🔴 附签,保留两条政策供专员对比,最终申报哪一条由专员勾选决定。
Q3:政策已截止还能匹配吗?
status=expired 不被推荐;可在复盘卡中追溯历史命中。
Q4:能不能自动群发?
不能。channel 强制要求有人为触发。
Q5:已经签发的版本能改吗?
不能。需要新版本时重走 S04-S07。
⑪ 十、依赖与运行
- 第三方依赖:
pyyaml(运行时),pytest(测试时) - 系统依赖:Python 3.9+,可写
data/目录 - 网络需求:离线运行,不允许将企业画像传出本地
⑫ 十一、与 PRD 对应
详见 docs/USER_GUIDE.md § 1 与 references/workflow.md。
⑬ 十二、参考文件
| 文件 | 用途 |
|---|---|
references/workflow.md |
8 段工作流 |
references/red_lines.md |
红线手册 |
references/error-codes.md |
错误码表 |
references/data-quality-rules.md |
数据质量规则 |
references/permissions-guide.md |
角色权限矩阵 |
references/naming-conventions.md |
命名规范 |
references/state-machine.md |
状态机规范 |
docs/USER_GUIDE.md |
用户指南 |
docs/API.md |
API 文档 |
docs/DELIVERY.md |
交付说明 |