乐于分享
好东西不私藏

“AI受理助手”政务服务智能体建设方案

“AI受理助手”政务服务智能体建设方案

一、项目背景与目标

1.1 痛点分析

咨询量大、重复度高,基层工作人员超负荷运转

政策更新频繁,人工记忆易出错,答复口径不统一

居民对政策理解偏差,反复咨询导致办事效率低

特殊群体(老年人)数字鸿沟问题突出

1.2 建设目标

建设基于大语言模型的智能客服系统,实现7×24小时精准问答

部署多模态交互终端,覆盖语音、文字、图片等交互方式

构建数据驱动的民意分析能力,辅助社区服务决策

将窗口工作人员从重复解答中解放,满意度提升30%以上

二、数据

1、数据采集

(1)、政策知识库构建

来源:国家、省、市、区级政策文件,社区办事指南,内部规程(由街道办统一提供)

处理:对PDF/Word文件进行结构化解析,提取标题、发文单位、生效日期、适用对象、核心条款

更新机制:每月同步最新政策文件,自动入库,对已过期政策进行标记

(2)、常见问题库

来源:历史12345热线工单、窗口咨询记录、社区微信群问答

处理:人工标注形成标准问答对(Q&A),用于模型微调和兜底回答

(3)、动态反馈机制

居民可对回答进行“有用/无用”评价,评价数据用于持续优化模型和知识库

2、数据清洗

政策文件多为PDF、Word、扫描图片。采用以下技术进行结构化

PDF解析库(如PyPDF2、pdfplumber)提取文本与表格。

扫描件使用OCR(PaddleOCR、阿里云OCR)识别,保留原始版面结构。

利用大模型对非结构化文本进行段落切分,按“政策标题、发文单位、生效日期、适用对象、核心条款”等维度自动标注元数据。

对重复文件进行去重,对错误字符、乱码进行清洗;对已过期政策通过人工审核标记“已失效”,不进入活跃知识库。

3、知识切片与向量化

文本切片:将长政策文档按语义切分为适合检索的片段(chunk),每个片段约200~500字,保留上下文连贯性。采用递归字符分割(RecursiveCharacterTextSplitter)结合段落边界。

向量化嵌入:选用国产开源Embedding模型(如bge-large-zh-v1.5text2vec-large-chinese)将每个切片转化为768维向量。模型部署于GPU服务器,支持批量推理。

向量存储:使用Milvus等向量数据库,建立索引,存储向量及对应的元数据(政策来源、生效日期、所属领域等)。为提升检索速度,采用IVF_PQ索引。

(可选)4、结构化知识库

FAQ库:从历史咨询工单中提取高频问答对,人工审核形成标准问答库(Q&A Pair),用于兜底回答和微调训练。

知识图谱(graphrag):对政策条款之间的关联(如“高龄津贴”与“户籍地”“年龄”的依赖关系)进行图谱化,支持复杂推理。

三、意图识别与路由

在用户输入(语音或文字)后,系统需快速判断用户意图,决定调用哪个技能或知识模块。

1、语音转文字(ASR)

技术:采用科大讯飞或阿里云ASR服务,支持当地方言,并针对社保、医保等专业术语进行热词定制,提升识别准确率。

部署:线上服务调用API,线下终端可内置离线ASR引擎,确保网络不稳定时仍能工作。

2、意图分类

模型:使用轻量级BERT模型(如bert-base-chinese)在政务咨询语料上微调,将用户问题分类至预设的10~20个粗粒度类别(如:社保咨询、医保报销、高龄津贴申请、办事地点查询等)。分类器部署于CPU,响应时间<50ms。

路由规则:根据意图类别,选择对应的处理流程:(1)高频标准化问题->直接匹配FAQ库回答;(2) 政策查询类(后面专门一章节讲解)->进入RAG检索增强生成;(3)、办事资讯类(后面专门一章节讲解):调用流程知识库,输出分布指引。(4)、复杂对话(后面专门一章节讲解):进入多轮对话

3、实体抽取

技术:采用序列标注模型(如BERT-BiLSTM-CRF)抽取关键实体,如“年龄”“户籍地”“缴费年限”等,为后续检索提供过滤条件。

示例:“我今年65岁,住在莲花社区,能领什么补贴?” → 实体{年龄:65, 居住地:莲花社区},用于检索相关补贴政策。

四、检索增强生成(RAG)

1、检索阶段

混合检索:(1)向量语义检索:将用户问题向量化,在milvus中检索最相似的5-10个知识片段,返回相关度得分。(2)关键词检索:同时使用elasticsearch对用户问题进行bm25关键词匹配,召回包含高频词的政策 (3)融合排序

重排序:引入交叉编码器(如bge-reranker-large)对召回片段进行精确重排,进一步提升相关性。

2、提示词构造

模板设计

你是一名社区政务助手,请根据以下政策原文,准确回答居民的问题。如果政策原文中没有相关信息,请明确告知“目前暂未查到相关政策,建议咨询窗口工作人员”。请严格引用原文。政策原文:{context}居民问题:{question}回答:

动态注入

将检索到的Top K片段填入{context},并添加系统人设提示词,确保输出风格规范、语气亲切。

3、生成阶段

大模型:选用通义千问(Qwen2.5-32B)或智谱GLM-4,在政务领域进行指令微调,增强对政策术语的理解和引用能力。

推理加速:部署时使用vLLM或TensorRT-LLM进行量化推理,保证单次回答延迟<3秒。

输出规范:生成内容需包含:

五、办事指南类

在政务智能问答中,“办事指南类”需求极为常见,例如“我要办高龄津贴怎么申请?”“医保异地备案需要什么材料?”这类问题需要输出清晰的步骤、材料清单、办理渠道等结构化信息,而非简单的一段政策原文。下面详细拆解如何从数据准备到最终输出分步指引。

1、数据来源与结构化

数据来源:社区提供的办事指南手册、政务服务网办事指南页面、内部操作规程、窗口工作人员经验总结。

结构化抽取:采用人工+大模型结合的方式,将每个办事事项抽取为固定格式的流程对象。例如:

{  "item_name": "高龄津贴申请",  "target_audience": "年满80周岁、户籍在本社区的老年人",  "required_materials": ["身份证复印件", "户口本首页及本人页", "近期免冠照片2张", "本人银行卡复印件"],  "steps": [    {"step_no": 1, "description": "携带材料到社区党群服务中心窗口", "tips": "建议避开每月1-5日高峰期"},    {"step_no": 2, "description": "填写《高龄津贴申请表》", "tips": "可请工作人员协助填写"},    {"step_no": 3, "description": "等待审核,约15个工作日", "tips": "审核结果会以短信通知"}  ],  "processing_time": "15个工作日",  "fee": "免费",  "contact_phone": "12345转社区",  "online_channel": "可通过浙里办APP在线申请(仅限部分街道)"}

存储方式:结构化数据存入关系型数据库(如MySQL)的“办事指南表”,便于精确检索和字段填充。同时将文本描述部分切片,存入向量数据库,支持语义匹配。

2、流程知识的分类与索引

为每个办事事项打上标签:所属领域(社保、医保、养老等)、适用人群(老年人、残疾人等)、办理方式(线上/线下/混合)。

建立倒排索引,支持关键词快速检索(如“高龄津贴”“办社保”)。

3、意图识别与路由

当用户输入“我要办高龄津贴”时,系统经过意图识别,判定为“办事指南类”。

(1)、意图分类

轻量级BERT分类器输出类别为guide_inquiry(办事指南咨询)。

实体抽取提取关键实体:办事事项=高龄津贴

(2)、流程匹配

精确匹配:首先在关系型数据库中通过事项名称关键词(如“高龄津贴”)进行精确匹配,若找到唯一事项,则直接调用该流程对象。

模糊匹配:若精确匹配失败(如用户说“领老人钱”),则使用向量检索,将用户问题与流程对象的描述字段(如事项名称、适用人群、步骤描述)进行语义相似度计算,取最相似的前3个候选,再由模型或规则选择最相关的一个。

4、分步指引生成

匹配到流程对象后,系统需要生成友好、清晰的分步指引。生成方式分为两类:模板填充大模型增强

(1)、模板填充(首选,保证格式稳定)

对于标准办事事项,使用预先设计的回答模板,将结构化数据动态填充:

【事项名称】{item_name}【办理对象】{target_audience}【所需材料】{required_materials}【办理步骤】{steps}【办理时限】{processing_time}【费用】{fee}【咨询电话】{contact_phone}【温馨提示】{tips}

例如输出:

高龄津贴申请

办理对象:年满80周岁、户籍在本社区的老年人

所需材料:身份证复印件、户口本首页及本人页、近期免冠照片2张、本人银行卡复印件

办理步骤

  1. 携带材料到社区党群服务中心窗口(建议避开每月1-5日高峰期)

  2. 填写《高龄津贴申请表》(可请工作人员协助)

  3. 等待审核,约15个工作日(审核结果会以短信通知)

办理时限:15个工作日费用:免费咨询电话:12345转社区

(2)、大模型增强(处理复杂或模糊情况)

若匹配到多个相似事项,或用户有额外约束(如“我腿脚不便,有没有线上办理?”),则使用大模型进行二次生成:

构造提示词,包含候选流程对象、用户问题、附加信息。

要求大模型以自然语言生成分步指引,并强调必须基于给定的材料清单和步骤,不能凭空捏造。

示例提示:

你是一名社区政务助手。用户想办理“高龄津贴”,但希望知道能否线上办理。以下是该事项的标准流程信息:{流程对象JSON}请结合用户需求,给出办理指南,优先介绍线上渠道(如有),并列出材料和步骤。

3.3 多模态输出

文字:以列表、表格等形式展示,便于阅读。

语音:对于线下终端,将关键步骤转为语音播报,同时屏幕显示文字。

二维码:若事项支持线上办理,自动生成办理入口二维码。

5、动态辅助信息

除了固定流程,系统还需根据用户实际情况动态补充辅助信息。

(1)、个性化提醒

根据用户画像(如年龄、户籍)自动判断是否符合条件,并给出提醒。例如用户65岁问“高龄津贴”,系统回复:“您目前尚未达到80周岁,符合条件后请携带……材料办理。”

若用户提供的位置信息,可自动匹配最近的办理地点。

(2)、多渠道办理指引

若事项同时支持线上、线下,系统输出两种方式,并对比优缺点(如线上省时、线下有专人指导)。

提供链接或二维码直达线上办理入口。

6、完整示例流程

用户输入:“我想申请高龄津贴,需要带什么?去哪里办?”

意图识别:办事指南类,实体:高龄津贴。

流程匹配:从流程知识库中检索到“高龄津贴申请”对象。

生成回答

输出:显示结构化文本,同时语音播报关键步骤。

7、技术实现组件

六、多轮对话管理

在政务咨询中,许多问题无法通过单轮问答解决。例如,“我要办高龄津贴”可能需要确认用户年龄、户籍、是否已享受其他补贴等;又如“医保异地备案”需要收集参保地、就医地、备案类型等。多轮对话管理正是为了处理这类需要持续交互、逐步收集信息的场景,确保对话自然、高效、不遗漏关键信息。

1、总体架构

2、会话状态存储

技术选型:Redis(高性能、支持过期时间)为主存储,MySQL做持久化备份。

存储内容

生命周期:会话保留30分钟无活动自动过期;若用户登录,可跨会话持久化用户画像。

3、上下文理解和槽位填充

(1)、什么是槽位

每个办事事项预定义一组必要槽位,例如:

(2)、槽位提取

初始轮:从用户输入中通过实体识别(BERT-BiLSTM-CRF)提取槽位值。

后续轮:结合对话历史,通过上下文解析补全省略内容(如“我是本社区的” → 更新户籍槽位)。

规则补充:对于敏感信息(如身份证号),可在提示中引导用户提供,或调用第三方接口校验(如政务身份认证)。

(3)、槽位填充驱动

当用户首次表达意图后,系统启动该任务对应的槽位填充流程。

根据缺失槽位列表,生成追问。例如:

(4)、槽位校验

对槽位值进行格式/逻辑校验(如年龄应为数字且≥0;户籍地应与社区行政区划匹配)。

若校验失败,要求用户重填。

4、对话策略引擎

对话策略决定系统在每一步应该做什么(追问、澄清、执行动作、结束)。采用规则+大模型混合策略。

(1)、规则引擎(确定性流程)

适用于任务明确、步骤固定的场景,如办事指南、预约等。

(2)、大模型驱动(灵活对话)

适用于开放式咨询、意图模糊、需要自然交互的场景。

将当前会话状态(历史、槽位、缺失信息)构造成提示,输入大模型,由模型决定下一轮回复内容和动作。

提示模板示例:

你是一名社区政务助手。当前对话状态:用户意图:{intent}已收集信息:{slots}缺失信息:{missing_slots}对话历史:{history}请根据以上信息,生成一句友好的追问,引导用户提供缺失信息。如果已收集完整,请给出最终答案或执行动作。

5、上下文管理

短期记忆:保留最近5~10轮对话的完整内容(用户输入、系统回复、意图、槽位),用于上下文消歧。

长期记忆:若用户登录,可存储用户画像(年龄、常用地址、历史咨询记录),用于个性化推荐。

跨任务上下文:当用户在一个对话中切换话题(如先问高龄津贴,再问社保卡),系统需保留原任务状态,允许用户随时返回。可采用栈结构管理多任务上下文。

6、对话流程控制

(1)、主循环

接收用户输入(文本或语音转文字)。

更新会话状态(记录新轮次)。

意图识别 + 实体抽取。

判断是否属于当前任务:

生成回复(模板填充/大模型生成)。

更新会话状态(包括槽位、历史、当前任务状态)。

输出回复(文本/语音)。

(2)、异常处理

超时:用户长时间未回复,可发送提醒消息(如“您还在吗?需要继续办理吗?”)。

跳出任务:用户突然问无关问题,系统可先回答,再询问是否继续原任务。

槽位收集失败:多次追问无果,可提供人工客服入口。

7、示例:高龄津贴申请多轮对话

用户:“我想申请高龄津贴。”

系统(意图识别为“高龄津贴申请”,启动任务):

当前缺失槽位:年龄、户籍、是否已享受同类补贴。

策略:规则驱动,逐个追问。

系统:“请问您的年龄?”

用户:“我80岁了。”

系统(更新槽位age=80):“好的。您的户籍是在本社区吗?”

用户:“是的,我住在莲花社区。”

系统(更新residence=莲花社区):“请问您是否已享受其他高龄或养老补贴?”

用户:“没有。”

系统(所有槽位收集完毕):

调用资格校验(年龄≥80,户籍在本社区,无冲突补贴) → 通过。

生成回复:“您符合高龄津贴申请条件。请携带以下材料到社区党群服务中心窗口办理:身份证复印件、户口本首页及本人页、近期免冠照片2张、本人银行卡复印件。办理时限15个工作日,免费。如需线上办理,可下载‘浙里办’APP搜索‘高龄津贴’。”

用户:“线上办理怎么操作?”

系统(上下文切换至新话题,但保留原任务状态):

给出线上办理指引:“在APP中点击‘办事’→‘个人服务’→‘老年人’,选择‘高龄津贴申请’,按提示上传材料即可。”

随后询问:“您还需要其他帮助吗?或者继续办理高龄津贴?”

用户:“谢谢,暂时不需要了。”

系统:结束对话,清理任务状态。

七、反馈与持续优化

系统需具备闭环迭代能力,随着使用不断优化。

(1)、用户反馈收集

显式反馈:在回答下方设置“有用/无用”按钮,收集用户评价。

隐式反馈:记录用户是否在收到回答后继续提问或跳出,作为间接质量指标。

(2)、日志与监控

全链路日志:记录每次问答的意图、检索片段、生成答案、用户评分,存入数据仓库。

监控指标:响应时间、意图识别准确率、检索召回率、用户满意度等,实时可视化展示。

(3)、模型与知识库更新

定期微调:每月根据积累的标注数据对意图分类器和大模型进行增量微调。

知识库增量更新:新政策文件入库后自动触发切片与向量化,旧政策标记“已失效”,确保知识时效性。

FAQ库扩展:从用户实际咨询中提取新的高频问答,经人工审核后加入FAQ库,作为快速响应来源。

八、技术架构总览

┌──────────────────────────────────────────────────────────┐ 用户交互层  语音输入/文字输入/图片上传  ASR/OCR  文本 └──────────────────────────────────────────────────────────┘ ┌──────────────────────────────────────────────────────────┐ 意图识别层  意图分类(BERT) 实体抽取(BERT-BiLSTM-CRF) └──────────────────────────────────────────────────────────┘ ┌──────────────────────────────────────────────────────────┐ 高频标准化问题  政策查询类 | 办事指南类 | 复杂对话 |└──────────────────────────────────────────────────────────┘ ┌──────────────────────────────────────────────────────────┐ 生成层  大模型(Qwen2.5-32B/GLM) + 提示词模板    答案生成(含政策引用) └──────────────────────────────────────────────────────────┘ ┌──────────────────────────────────────────────────────────┐ 后处理与反馈层  事实核查  格式化  语音合成  多轮状态更新  用户评价 └──────────────────────────────────────────────────────────┘