街道办政策知识问答
把"窗口人员反复翻文件 + 跨领域找不到条款 + 政策过期靠记忆"变成"一句话提问 → 5 秒内拿到条款级可溯源答案 + 办事指引 + 可信度提示"。基于本地政策知识库生成结构清晰、来源可追溯、缺口诚实可处理的问答响应。本 Skill 不替用户答复市民、不调用模型训练数据、不发起任何外部网络请求。
不可突破的红线
- 答案只来自本地知识库条款: 检索不到时明确回答"未找到相关政策条款",绝不调用模型训练数据,绝不编造知识库外内容,绝不静默兜底。
- RAG 强约束 + 来源可溯源: 每条事实性陈述必须标注来源条款(文件名、条款号、发布机构、生效状态);不可溯源内容标"动态信息,请以窗口公示为准",绝不进入最终答复段。
- 可信度三档 + 强制人工确认: 答案必须标注可信度等级(高/中/低);中低可信度答案必须含"请人工核对后再告知市民"的提示,绝不直接对外。
- 缺口诚实 + SLA 闭环: 检索无结果必须明确返回"未找到",自动写入
knowledge_gaps表进入 SLA 流程(24h 响应 + 7d 补充),绝不静默"差不多给个答案"。 - 内部规定隔离: 内部规定(
is_internal=1)仅对业务办/管理员/街道领导可见,窗口人员检索不到,绝不跨权限返回。 - 数据本地化: 所有问答与数据在本地 SQLite + 本地 numpy 向量缓存处理,不发起任何外部 HTTP/HTTPS API 请求,无云端依赖。
- 审计可追溯: 所有问答与管理操作入
audit_logs表(操作人、时间戳、操作类型、对象、详情),保留 730 天,绝不静默绕过。
一、核心能力速查
| 功能 | 描述 | 触发关键词 |
|---|---|---|
| 政策知识库管理(F1) | PDF/Word/Markdown/TXT 上传,条款级切片,元数据校验 | 上传、入库、政策文件 |
| 自然语言问答(F2) | 5 秒返回直接回答 + 政策依据 + 办事指引 + 注意事项 | 怎么办、怎么申请、请问 |
| 条款级检索(F3) | 语义 + 关键词 + 时效性三维融合打分 | 查条款、检索、政策查询 |
| 场景化办事指南(F4) | 智能识别事项,结构化展示条件/材料/流程/时限/地点 | 办事指南、怎么办理 |
| 答案溯源(F5) | 每事实标注 [1][2] 编号 + 条款号 + 发布机构 + 状态 | 来源、依据、条款号 |
| 多轮对话(F6) | 10 轮滑动窗口,上下文关联,新主题自动重检索 | 接着问、追问、那个 |
| 知识缺口(F7) | 无结果入 SLA(24h 响应 + 7d 补充),四类用户反馈 | 找不到、没有、未收录 |
| 纯检索模式(F8) | CLI 检索 + 高级模式 + CSV/JSON 导出 | 检索、查询、搜索 |
| 问答历史(F9) | 滑窗上下文持久化 + 收藏 + 回放 | 历史、收藏、记录 |
| 统计看板(F10) | 高频问题 + 缺口热点 + 命中率 + 角色活跃度 | 看板、统计、命中率 |
| 版本对比(F11) | 新旧版本条款差异三类对比 | 旧版本、新版本、对比 |
| 管理员后台(F12) | 文件/缺口/反馈/审计的全生命周期管理 | 管理台、后台、审核 |
| OCR 接入(F13) | 扫描件预处理接口预留(本期未内置) | 扫描件、OCR、图片文件 |
| 可信度评分(F14) | 高/中/低三档 + 处置策略 | 可信度、置信度、可靠程度 |
| 权限矩阵 | 4 角色 × 10 操作权限隔离 | 权限、角色、操作权限 |
二、标准工作流程
前置:数据本地化 + 权限检查(最先做)
- 全部数据在本地 SQLite(运行时
data/policy_qa.db,init 时自动创建)+ 本地 numpy 向量缓存(运行时data/vector_cache.pkl,首次 ask 时自动构建)处理 - 不发起任何外部 HTTP / HTTPS API 请求(
audit_logger记录全部调用) - 调用方法前先校验角色权限(
scripts/permission.py配合config/permission_matrix.json)
步骤一:政策文件上传与解析(F1)
- 支持 PDF / Word / Markdown / TXT(限制见
config/file_parsing.json,单文件 ≤50MB、批量 ≤10 个) - 自动 SHA256 哈希去重
- 条款级切片(按章 / 节 / 条 / 款 / 项结构识别)
- 元数据校验:文件名、发布机构、生效日期、层级(国家/省/市/区/街道)、领域
- 内部规定标记(
is_internal字段) - 元数据缺失时拒绝入库并提示
步骤二:自然语言问答(F2)
scripts/qa_engine.py 主导,组合三步:
- 条款检索:调用 F3 拿到 Top-K 候选条款
- 可信度打分:调用 F14 计算高/中/低
- 答案生成:F11 按"直接回答 + 政策依据 + 办事指引 + 注意事项"四段式输出
输出字段:direct_answer / policy_basis / guide / confidence / references / caveats
步骤三:条款级检索(F3 / F8)
- 嵌入模型:TF-IDF + numpy(默认离线;可替换为 bge-large-zh-v1.5)
- 向量存储:本地 numpy + pickle(可替换为 Milvus / Qdrant)
- 检索打分(详见
references/retrieval-guide.md): - 70% 语义相似度(向量余弦)
- 20% 关键词命中(jieba 分词 + 简化 BM25)
- 10% 时效性加成(现行有效 > 已废止)
- 多维筛选:政策层级、领域、状态、是否内部规定
- 高级检索模式(F8):业务办可见内部条款
步骤四:场景化办事指南匹配(F4)
- 智能识别办事事项(如"高龄津贴申请"、"居住证首次办理")
- 结构化展示:申请条件、申请材料、办理流程、办理时限、办理地点
- 与政策条款交叉核对,冲突检测(指南要求 vs 条款原文)
步骤五:答案溯源(F5)
- 每个事实性陈述标注
[1][2][3]编号 - 来源列表含:文件名称、条款号、发布机构、生效日期、状态(现行/已废止/已修订)
- 不可溯源内容标"动态信息,请以窗口公示为准"
- 窗口人员可点击
[1]跳转查看条款原文
步骤六:多轮对话(F6)
- 滑动窗口 10 轮(
config/retrieval_config.json配置) - 追问自动关联上下文(2-4 字滑动窗口分词)
- 新主题检测:连续 3 轮无上下文重叠词触发重新检索
- 历史持久化到
conversation_history表
步骤七:知识缺口标记(F7)
触发条件:检索无结果 / 命中条款数 < 阈值 / 可信度=低 + 用户不满意
处理流程:
- 在
knowledge_gaps表新建记录(gap_id/question/status=pending/created_at) - 推送给管理员(
audit_logs表 record) - SLA 监控(
config/sla_rules.json):
- 24 小时内响应
- 7 天内补充知识库 + 关闭缺口
用户可主动反馈(条款错误 / 已过期 / 不适用 / 其他),进 user_feedback 表。
步骤八:纯检索模式(F8)
- CLI 命令:
search <keyword> --top-k 10 --level 市 - 输出 CSV / JSON 导出
- 高级检索模式:业务办工作人员可用(可见内部条款)
步骤九:问答历史(F9)
- 历史查看:
history --limit 20 - 收藏:标星 + 写入
favorites表 - 上下文回放:可加载历史会话的完整上下文
步骤十:统计看板(F10)
- 高频问题 Top-N(按问题聚类)
- 缺口热点(按领域分布)
- 命中率(高/中/低占比)
- 用户活跃度(按角色)
步骤十一:版本对比(F11)
- 输入:旧版本文件 ID + 新版本文件 ID
- 输出:新增条款、删除条款、修改条款三类对比
- 适用:新政策替代旧政策时核对差异
步骤十二:管理员后台(F12)
- 文件清单管理(上传 / 删除 / 编辑元数据 / 启用 / 停用)
- 缺口清单管理(处理 / 转交 / 关闭)
- 反馈清单管理(回复 / 处理 / 关闭)
- 批量操作(最多 10 个,超出提示分批)
- 审计日志查询(按时间 / 操作人 / 操作类型筛选)
步骤十三:OCR 接入预留(F13)
- 接口定义:
scripts/ocr_adapter.py - 适配方式:可注入
ocr_callable覆盖默认占位实现 - 本期未内置 OCR 引擎,需用户接入第三方
步骤十四:可信度评分(F14)
| 等级 | 触发条件 | 处置策略 |
|---|---|---|
| 高 | 现行有效 + 条款一致 + 高层级(国家/省/市) | 直接告知用户 |
| 中 | 部分条款 + 中等层级(区/街道) / 条款存在解读分歧 | 提示"请人工核对后再告知市民" |
| 低 | 无现行匹配 / 已废止 / 多层级冲突 | 拒绝告知 + 自动标记知识缺口 |
详见 config/confidence_rules.json。
三、任务状态机
| 状态 | 含义 | 允许操作 |
|---|---|---|
| 上传中 | 文件正在解析 / 切片 / 嵌入 | 取消、重试 |
| 待审核 | 元数据待管理员确认入库 | 确认入库 / 驳回 |
| 已入库 | 文件已纳入检索 | 编辑元数据、停用、删除 |
| 已停用 | 文件存在但不在检索结果 | 重新启用、删除 |
| 缺口待处理 | knowledge_gaps.status = pending |
管理员处理 / 转交 / 关闭 |
| 缺口处理中 | knowledge_gaps.status = processing |
补充知识 / 关闭 |
| 问答进行中 | 用户正在提问(5 秒 SLA 计时) | 系统自动流转 |
| 已撤回 | 管理员撤回上次回答 | 重新生成 |
审计追溯: 所有状态变更入 audit_logs 表(操作人 / 时间戳 / 旧状态 / 新状态 / 原因)。
错误恢复: 任何异常状态变更可通过 audit --filter 定位,回退到上一稳定状态。
四、数据合规与安全
- 数据本地化: SQLite + 本地 numpy 向量缓存,不上传公网,无外部 API 调用(
network=[]权限策略) - 审计日志保留: 730 天(2 年),按管理员指令清理需双人确认
- 权限隔离: 4 角色 × 10 操作权限矩阵(详见
references/permission-guide.md) - RAG 强约束: 答案必须基于检索到的条款原文,不调用模型训练数据
- 缺口诚实: 检索无结果时必须明确返回"未找到",自动入 SLA 流程
- 内部规定隔离:
is_internal=1的条款仅授权角色可见 - 审计追溯字段: 操作人、时间戳、操作类型、对象、IP(本地回路)、结果、详情
五、性能与容量
| 数据量 | 响应时间 | 路径 |
|---|---|---|
| ≤1000 条款 | P50 ≤3 秒 | 优秀基线 |
| ≤5000 条款 | P50 ≤5 秒 | 验收基线 |
| 5001-10000 条款 | P95 ≤8 秒 | 延后队列 |
| >10000 条款 | 不推荐 | 拆分或裁剪 |
基线条件: 4 核 CPU / 8GB 内存 / NVMe SSD,单任务并发,TF-IDF + numpy 嵌入。
六、交付形态
- 默认 CLI 形态(
scripts/skill_cli.py),16 个子命令 - 数据库:SQLite(运行时
data/policy_qa.db),8 张表 - 向量缓存:numpy + pickle(运行时
data/vector_cache.pkl) - 检索结果导出:CSV / JSON
- 审计日志:SQLite
audit_logs表,可命令行查询 - 示例数据:
demo-seed一键加载 4 份示例政策文件 + 88 条条款
七、交付前自检(逐条过)
7.1 数据完整性
- [ ] 8 张数据表已创建(users / policy_files / policy_clauses / conversation_history / knowledge_gaps / user_feedback / audit_logs / favorites)
- [ ] 14 个功能模块(F1-F14)全部就绪
- [ ] 71 个测试全部通过(
pytest tests/ -v)
7.2 问答质量
- [ ] 答案来源 100% 可溯源到具体条款
- [ ] 检索无结果时明确返回"未找到",不编造
- [ ] 可信度三档标注完整(高/中/低)
- [ ] 中低可信度答案必须含"请人工核对"提示
7.3 权限与审计
- [ ] 4 角色 × 10 操作权限全部按矩阵生效
- [ ] 内部规定仅对授权角色可见(窗口人员检索不到)
- [ ] 审计日志完整记录所有问答和管理操作
- [ ] 审计日志保留 730 天
7.4 性能与稳定性
- [ ] 单次响应 P95 ≤8 秒(500 份文件基线)
- [ ] 并发用户 ≥50
- [ ] 长稳运行 ≥7×24 小时
八、何时不用本 Skill(边界说明)
| 场景 | 不适用原因 | 建议渠道 |
|---|---|---|
| 自动答复 12345 市民 | 本 Skill 只为工作人员提供参考 | 仍由工作人员审核后告知 |
| 直接对接 12345 平台 | 二期规划,本期未实现 | 走 API 中间件 |
| 实时政策爬虫 | 本期不含爬虫 | 业务人员手动上传 |
| 多模态图表解读 | 二期规划 | 走专业文档分析 |
| 高密级涉密政策 | 必须走机要渠道 | 机要室线下办理 |
| 自动业务决策 | 本 Skill 只做检索 + 提示 | 业务人员最终决定 |
| 跨平台政策联邦检索 | 本期本地库,不联外网 | 单点检索 + 跨库手动并查 |
九、常见问题 FAQ
Q1:检索不到怎么办?
A:明确返回"未找到相关政策条款",自动入知识缺口 SLA(24h 响应 + 7d 补充)。绝不编造。
Q2:可信度低怎么办?
A:中低可信度答案必须含"请人工核对后再告知市民"的提示。绝不直接告知。
Q3:内部规定如何处理?
A:内部规定(is_internal=1)仅管理员 / 业务办 / 街道领导可见。窗口人员检索不到。
Q4:政策过期怎么处理?
A:expired_date 之前的政策检索时默认筛除。仅在用户主动查询历史版本时显示。
Q5:能否批量上传政策文件?
A:单次最多 10 个。超过提示分批。文件大小上限 50MB / 个。
Q6:如何接入第三方 OCR?
A:通过 scripts/ocr_adapter.py 的 ocr_callable 注入点接入,本期未内置。
Q7:审计日志保留多久?
A:730 天(2 年)。过期数据按管理员指令清理需双人确认。
Q8:能否直接答复市民?
A:不可以。本 Skill 只为工作人员提供参考,最终答复必须由人工确认。
Q9:检索打分怎么算?
A:70% 语义相似度 + 20% 关键词命中 + 10% 时效性加成。详见 references/retrieval-guide.md。
Q10:如何看权限矩阵?
A:config/permission_matrix.json,详见 references/permission-guide.md。
十、参考文件(按需读取,不要一次性全读)
config/schema.sql:SQLite 数据库 Schema(8 张表)config/policy_domains.json:政策领域分类配置config/confidence_rules.json:可信度评分规则config/retrieval_config.json:检索配置(打分权重、滑动窗口、Top-K)config/sla_rules.json:缺口 SLA 规则(24h / 7d)config/file_parsing.json:文件解析限制config/permission_matrix.json:4 角色 × 10 操作权限矩阵references/workflow.md:端到端问答工作流详细说明references/retrieval-guide.md:语义 + 关键词融合打分机制references/permission-guide.md:权限矩阵详细说明references/data-quality-rules.md:条款清洗、缺口记录、审计合规规则references/naming-conventions.md:字段命名、文件名、版本号规范references/error-codes.md:错误码表scripts/workflow_orchestrator.py:端到端工作流编排scripts/skill_cli.py:命令行入口(16 个子命令)scripts/qa_engine.py:自然语言问答核心scripts/knowledge_base.py:F1 政策知识库管理scripts/clause_retriever.py:F3 条款检索scripts/guide_matcher.py:F4 办事指南匹配scripts/conversation.py:F6 多轮对话scripts/knowledge_gap.py:F7 知识缺口scripts/permission.py:权限控制scripts/audit_logger.py:审计日志tests/:脚本单元测试(71 用例全部通过)