# 某个不靠谱的机器人 **Repository Path**: ganlifu/beichen_judicial_bureau_project ## Basic Information - **Project Name**: 某个不靠谱的机器人 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2024-11-29 - **Last Updated**: 2024-11-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 某平台解决方案技术实施文档 ## 1. 软件功能设计 ### 1.1 一期一阶段 #### 1.1.1 小昊机器人 ##### 1.1.1.1 功能概述 通过整合百度理解与交互技术UNIT(基于API接口)与微信公众号API接口,实现普通用户在微信公众号上与与百度UNIT的智能人机交互沟通。整体交互控制以百度UNIT交互为主导,微信公众号后端服务程序辅助部分分支逻辑处理与场景跳转。 在本功能中,实现微信公众号聊天界面的前端用户与后端百度UNIT的交互,服务端程序配合进行转发和部分逻辑判断及处理;同时在微信服务后端,对于每一次完整用户的会话记录在后端进行完整记录,并提供简单的对话查询及回溯界面,以便用于二次训练百度UNIT模型。 ##### 1.1.1.2 功能说明 - **分场景TOP问题推送**。当用户点击公众号底部菜单-“法律咨询”时,根据用户所点击的菜单类型,触发分类场景TOP问题推送。 - **机器人形象推送**。 当用户向公众号询问诸如“你是谁”、"你好"、"你长什么样"的类似问题时,触发通用场景的**BUILT_FAQ_HELLO**意图匹配时,后台系统当监测到Unit推送该意图匹配时,需先发送机器人问候形象图片,然后再发送Unit返回的问候语。当触发**BUILT_FAQ_BYE**意图匹配时,先发送Unit返回的告别语,然后发送机器人告别形象图片。 - **接收并转发来自于用户及百度UNIT的交互信息**。将用户通过文字或语音输入的信息,已百度API调用的方式推送给百度UNIT接口,根据百度UNIT回复的JSON应答(文字应答或服务器端API调用指令),向用户转发应答话语(在语音辅助交互开启后,同步发送语音应答),或根据指令触发场景切换和其他动作。 - **可选问题、相关问题推荐**,当百度Unit给出用户意图匹配结果后(完成完整交互直接通过FAQ给出答案或通过matchAnswer通知后台返回答案),需要将百度Unit中返回的intent_candidates中的候选问题推送给用户。可选使用外链的方式,让用户点击连接,触发后台意图匹配(后台程序主动向百度Unit发送对应的问题),并返回结果(并转发百度Unit回复的内容连同原始问题)。 - **满意度反馈**。当完成一轮目标问题问答后(**不是所有的意图匹配均要触发满意度调研,如用户闲聊,意图类型为BUILD_FAQ_XXX**),向用户推送一条消息“您是否对我本次的服务满意?”的调研型问题**(后台程序需要将调研问题中[](FORWARD)的内容转换为超级链接,将用户的点击内容以消息的形式转发给对应场景)**,并针对用户可能的回复结果“满意”、“不满意”,“是”,“否”,“不”等进行关键字词识别,并根据识别结果对本次会话进行满意度标记,默认标记为不满意(如用户无应答)。同时根据满意度答复的结果(requireJsonAction+JSON配置文件),根据配置文件做进一步的交互,如触发律师预约咨询的交互逻辑。 - **会话日志管理。** 系统侧需能够将用户的每一次会话完整交互记录保存在数据库中,并包含用户对本次会话的满意度评价结果。同时配置一个简单WEB查询页面,能够按照时间、满意评价、咨询问题分类进行检索,将对话记录按照一问一答方式呈现,具备批量会话记录导出CSV的能力。 ##### 1.1.1.3 实现要求 - 以HTTP RPC的方式,由服务端分别调用或响应[Baidu Unit](http://ai.baidu.com/tech/unit)接口及微信公众号接口,完成用户交互的转发与衔接。 - 在数据库中记录用户会话交互记录及评价结果。 - 以Baidu UNIT的机器交互框架,完成本项目所关注的交互场景的模型训练,并基于Baidu UNIT的应答机制主导平台完成与用户的完整交互。 - 为缩短各场景模型训练所带来的系统不可用时间(每一次训练使用一个新的场景,训练好后进行切换),服务端需要维护一个Baidu Unit的场景调用静态配置表,根据配置表去调用不同的场景接口,系统侧应动态监测配置表信息以决定调用接口的场景参数ID。 - 后台程序需要在用户完成一个意图交互结束后,启用新的会话ID在原场景中进行下一轮交互。 - 对于FAQ类问答,百度Unit会尽力去做匹配用户问题,并给出置信度最高的匹配问题。后台系统在向用户返回该问题的答案时,需要同时携带该问题的标准问题(取 "bot_merged_slots":["normalized_word"]),避免用户理解与实际答复出现歧义。 - 在做用户会话记录时,需要以Intention为单位做会话记录的基本单元;对于fail_action或SYS_OTHER类型的会话也需进行记录,用以后续回溯那些目前尚未识别的用户问题。 - 对于语音输入消息,后台需要将微信公众号识别的文字消息发送给百度UNIT。 - 系统在推送机器人分形象图片时,需要从本地JSON配置文件中检索对应的图片资源ID。 - 对于子场景的TOP问题,建议以超级链接方式推送给用户,用户点击后,后台HTTP页面捕获请求并转发,随后自动关闭页面。后台进程提用户向Baidu Unit推送对应的问题,并触发响应答案。如以下图示: ![基于超级链接的交互截图示意](https://gitee.com/highland0971/beichen_judicial_bureau_project/raw/master/resource/img/wx_text_with_hyperlink.jpg) - 免责澄清以短文链接接方式潜入在每个问题的具体答复后,用户点击免责澄清连接后,由后台向用户推送详细免责条款。 - 会话ID切换**,当用户切换咨询领域后,需要使用新的会话ID与Baidu Unit进行会话。 ##### 1.1.1.4 程序交互流程时序 - 整体交互时序 - 微信公众号监测到用户发起一次咨询,如点击咨询菜单,或直接发起会话。 - 服务端进程调用微信公众号客服接口,先后发送机器人形象图片、问候语;如用户点击某具体业务咨询场景菜单,则进一步在子场景中获取TOP问题。 - Baidu UNIT的“GENERAL”场景作为整个会话的默认交互入库,用户的每一个消息或对话(含词槽澄清)均先发给“GENERAL”场景,由“GENERAL”场景判断当前用户消息是否触发切换场景或转发给当前对话场景。 - 如需切换场景,服务端根据Baidu UNIT给出的场景切换指令,调用新的场景ID开始新的会话,并转发用户消息。如无需切换场景,则将用户回复消息转发给当前会话场景。 - 一次完整问答交互结束后,需要由后台程序启动一轮满意度反馈流程,反馈结果计入单论用户对话记录中。 ![image](https://gitee.com/highland0971/beichen_judicial_bureau_project/raw/master/resource/img/bot_chat_sequencev3.4.png) - 通用场景对于不同消息匹配情况下的转发处理规则 ![image](https://gitee.com/highland0971/beichen_judicial_bureau_project/raw/master/resource/img/general_scene_action_rule.png) #### 1.1.2 语音辅助交互 ##### 1.1.2.1 功能概述 为满足客户对于拟人化人机交互的要求,提供系统侧对答复内容以语音方式答复的能力。通过将Baidu Unit返回的答复信息,调用微信公众号中已有的临时素材或通过讯飞开放语音平台合成的语音进行临时素材上传并调用返回给用户进行答复。 ##### 1.1.2.2 功能说明 - **应答语音化答复。** 根据Baidu Unit返回的答复信息,计算答复信息的Hash值,并检索系统内Hash值与微信公众号中临时素材的资源ID对应关系,将检索到的临时资源ID作为答复内容,已语音回复的方式发送给用户。 - **临时语音素材维护。** 系统侧需要维护一个Baidu Unit答复信息与通过调用微信素材临时上传接口的获得资源临时ID的关系表,判断Baidu Unit的答复信息在微信公众号中是否有可用的临时语音素材,如有直接调用回复用户;如没有,则调用讯飞智能语音平台的语音合成SDK,在本地生成语音文件,转码后,上传致微信公众平台临时资源,更新临时资源ID映射关系表。系统初始状态下会提供一份完整的交互文本集作为系统初始进行语音素材合成的范围,开始运行后,系统需要根据Baidu Unit或本地配置文件中新增的文本素材,自主学习并扩容维护映射关系表。 ##### 1.1.2.3 实现要求 - **语音合成方案**,优选科大讯飞语音合成JAVA SDK进行合成(替换为web SDK,待评估),具体API 可参考[官方文档](http://www.xfyun.cn/services/online_tts) 。对于后端服务非选型Java框架的,可将该部分模块打包封装为独立进程,并提供HTTP RESTFUL调用的接口。 - 系统侧需要在数据库中维护一个应答HASH值与微信公众平台临时语音资源ID的映射表,根据公众平台的临时资源超时周期,动态判决映射关系是否有效,对于已过期映射关系,通过调用讯飞语音SDK重新生成临时语音资源并上传致微信公众平台,创建新的资源ID与HASH值的映射表。 - 考虑到讯飞语音合成、转码以及微信公众平台临时资源上传可能带来的延时可能会公众号平台回复响应超时(5秒),系统侧应动态任务的方式,周期性针对HASH-ID表中的语音进行超时监测,针对已失效语音,根据语音文本内容重新进行合成和上传,避免调用时临时触发的场景。 - 是否触发语音回复,作为静态配置项,作为可选项。以模块化方式进行整合。 - 后台程序需要有超时干预机制,对于超时响应需要给出友好的人机回复。 ### 1.2 一期二阶段 #### 1.2.1 微信公众服务平台基础框架 ##### 1.2.1.1 公众号底部菜单设计 - **菜单设计** - 法律咨询 - 婚姻纠纷 - 交通事故 - 劳动纠纷 - 民间借贷 - 预约律师 - 律业联盟 - 律师注册 - 值班登记 - 我的 - 信息维护 - 预约管理 - 免责声明 - 离线问题(预留) - 视频咨询(预留) - **菜单调用** - **婚姻纠纷、交通纠纷、劳动纠纷、民间借贷** 直接触发调用百度UNIT婚姻场景ID,见`1.1.1小昊机器人` - **预约律师** 触发法律咨询前置信息交互采集模块,见`1.2.3法律咨询前置信息交互采集` - **律师注册** 触发律师自主信息录入流程,见`1.2.5律师管理` - **律师注册** 触发律师打卡信息更变,见`1.2.5律师管理` - **信息维护** 触发用户信息采集、更新,或律师登记信息采集、更新流程,见`1.2.5律师管理`或`1.2.2公众用户信息采集`模块,系统需要判断一下当前用户是律师或用户身份。 - **免责声明** 触发向用户出示免责声明页面,其中包含平台部分免责说明及第三方律师免责声明。 - **预约管理** 触发对当前律师或用户历史预约记录的查询或维护,见`1.2.4公众司法咨询预约管理` - **离线问题** 触发对用户的离线问题的检索及律师回答的呈现,暂不明确细节。 - **视频咨询** 触发基于微信小程序的视频咨询功能调用,需用户输入预约号。 - 如用户直接在公众号中进行语音或文字输入,则调用通用交互场景ID ##### 1.2.1.2 默认问候 当用户第一次关注微信公众号或打开公众号时,后台程序通过**关注/取消关注事件**的回调,主动向**GENERAL**场景推送"Hello World"的引导语,触发百度Unit推送系统问候语与形象图片,交互流程可参考**1.1.1.2 机器人形象推送**部分流程。 ##### 1.2.1.3 动作配置 目前基于业务的交互需求,百度Unit中的执行命令选项中会具体匹配以下几类指令: - **matchAnswer**,请求后台匹配答案。系统后台当看到该指令后,从INTENTION名称中对应的JSON配置文件中按照词槽顺序及内容,匹配问题答案,并推送给用户。 - **requireFixedAction**,请求后台执行下一步操作。根据在本文当中各个功能模块中已描述的各INTENTION的默认业务逻辑。 - **requireJsonAction**,请求后台根据INTENTION名称中对应的JSON配置文件中的配置执行进一步的指令,与百度Unit交互(如向指定场景发新的意图引导词触发用户下一轮对话)或其他程序逻辑和功能,期间可能会涉及对词槽的匹配和分支判断。 - **changeScene**,将用户对话转发到INTENTION同名的场景,需查本地JSON配置文件进行场景ID匹配。如在本地JSON配置文件中发现`"_action":"changeScene"`时,须将`"_value":[]`的内容转发给`"_target":""`指定的场景, - **requireLawyer_info**,直接转发前置采集问题(取自_slot及[session:slot]对应的_desc)及用户答复(取自_slot及[session:slot])到后台,请求预约律师匹配。 - **requireLawyer_qa**,直接转发除满意度调查外,最后一个匹配的QA交互记录(含fail_action类的交互),请求预约律师。 - **requireNormalizedAddress** 指示后台将特定词槽中的地址信息通过调用第三方GIS SDK进行标准化地址逆解析查询 - **SCENE_GENERAL:fail_action**, GENERAL场景中的`fail_action.json`处理规则: 当在SCENE_GENERAL场景中收到未识别的意图时(Unit传来`"action_id"="fail_action"`的`"action_list"`),此时后台程序需要读取该SCENE_GENERAL场景下的fail_action.json配置文件,根据配置文件中的指引进行下一步动作,具体的: - 依次对`_onAction`中的判断`{条件-响应}`对进行匹配和执行,以{}包裹。如当`_condition:[]`内条件满足时([]内的条件为与的关系),需要执行`_react:{}`中规定的动作。其中: - `**_type**`可选值为`intention`或`slot`,指示该条件中参与判断的是Unit中的意图(Intention)或当前意图中的词槽(Slot) - `**_stackDepth**`:仅随`_type`=`intention`配对出现,指示需要匹配的意图是该用户在整个会话期间的匹配意图记录索引,可以FIFO队列或堆栈的方式实现用户的历史意图记录(需要有一个记录上限,默认为5),0代表最近一次匹配的意图,1代表前一次匹配的意图。 - `**_op**`可选值为["IN","NOT IN","EQ"],分别代表需要判断的对象属于/不属于/等于`_candidates:[]`中的值。 - `**_candidates**`代表需要参与比较的可选值。 - `**_action**`代表条件满足时,需要执行的动作。 - `**_target**`代表动作执行的目标对象,可选值为Baidu Unit中具体场景的英文名称(SCENE_XXXX)、Baidu Unit中上一个会话场景`(_lastScene)、用户侧方向(_user)` - `**_value**`代表在执行动作时需要携带的参数(如要发送的消息),如`[Hello World\n,_qu_res:raw_query,_slot:user_xxxx,_session:user_yyyy,[Link](FWD:SCENE_XXXX)\n,[Link](ACT:SCENE_XXXX:xxx.json)\n]` - `Hello World\n`为正常的文本字符串 - `_qu_res:raw_query`为百度UNIT JSON响应中的`_qu_res:raw_query`字段值(用户的原始输入) - `_slot:user_xxxx`为百度UNIT JSON当前会话响应中的`_schema:bot_merged_slots:[type=user_xxxx]`的`normalized_word`字段值或`original_word`字段值,当normalized_word非空时, **优先** 使用`normalized_word`字段。 - `_session:user_yyyy`为后台程序缓存的历史会话中slot:user_yyyy的字段值。 - `[LinkName](FWD:SCENE_XXXX)`为需要在微信前台转为连接的内容及需要将该值在后台代为转发给Unit的场景。 - 一个`_onAction`中会包含多个`{条件-响应}`对,彼此之间为或的关系,取最短路径,当有一对满足后,后续`{条件-响应}`不再执行。 - 示意如下: ![SCENE_GENERAL:fail_action](https://gitee.com/highland0971/beichen_judicial_bureau_project/raw/master/resource/img/general_scene_fail_action.json.png) ##### 1.2.1.4 数据库表规划 ##### 1.2.1.5 关注欢迎及免责 - **关注欢迎**,当用户第一次关注微信公众号时,后台程序主动向百度Unit发送“Hello Word”引导欢迎词,同时提示用户查看平台免责声明(同时给出访问链接及菜单位置说明)。 - **免责声明**,根据主管单位要求,为避免后续司法纠纷,需面向平台自动解答问题及第三方律师解答问题,出示免责声明。免责声明通过**WEB页面**独立调用,可通过“我的->免责声明”菜单触发。 ##### 1.2.1.6 业务流程 ![业务流程示意](https://gitee.com/highland0971/beichen_judicial_bureau_project/raw/master/resource/img/service_procedure.png) ##### 1.2.1.7 Unit场景激活维护 根据百度Unit 1.0接口规范约定,各场景BOT所在沙箱一次启动后若3天内无任何业务交互,则会关闭该沙箱。 为保证各业务沙箱持续在线可用,后端服务进程需要每间隔24小时,读取sceneConfig.json中配置的场景列表,向场景列表内的各场景发送激活引导词(`ALIVE`),触发各场景TEST意图响应。 #### 1.2.2 公众用户信息采集 ##### 1.2.2.1 功能概述 以交互问答方式采集用户身份信息(非实名认证),同时在用户授权的条件下采集用户位置信息,为后续可能扩展的基于用户级别的一对一服务建立身份档案及司法管辖区域标签。 ##### 1.2.2.2 功能说明 - **用户信息交互式录入** ,当用户第一次点击**“我的->信息维护”** 时,以一问一答方式引导用户输入以下信息: - 敬称( 姓 + 先生/女士) - 联系方式 (手机号码) - 联系地址 (**GPS信息采集**,当用户授权公众号采集GPS信息时,系统默认收集用户位置信息,并调用**百度地图WEB 服务API**,使用[正/逆地理编码服务 ](http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding)进行结构化位置反查,并提示用户确认地点是否正确,如不正确,由用户自行录入) - **用户信息查询与更新**,当用户信息已录入后,当再次点击“我的->信息维护”时,向用户展示系统当前登记的用户信息,并提示用户是否需要进行更改,如需要进行更改,则沿用**用户信息交互式录入**流程。 - **用户信息录入**,当完成用户信息采集后,将用户微信ID、敬称、联系方式、联系地址、联系地址结构化数据(省、城市、区县、乡镇、街道、门牌号)、登记时间等信息记录在数据库中,以“wx_微信ID”作为主键。 ##### 1.2.2.3 实现要求 - 关于敬称及联系方式由百度Unit来引导(即时后期整体机器学习的整体框架发生替换,这一部分作为基本客服交流的功能,依旧保留),当用户信息未采集时,通过向百度UNIT发送“登记用户信息”消息到“GENERAL”场景并引导用户词进行槽澄清,当所有词槽澄清结束后,“GENERAL”场景向后台进程发送"requireFixedAction"指令,后台进程将相关词槽进行登记。 - 当后台进程基于百度Unit完成敬称及联系方式登记后,程序主动发起用户地理位置澄清 - 先由后台程序根据采集的用户GPS信息对用户位置进行反向编码,发送给用户进行确认“目前我已识别您在XXXXXXX,请问该地址是否为您的常住地”,用户根据实际情况以自然语言进行确认。 - “GENERAL”场景的**DENY_INTENTION或CONFIRM_INTENTION**对话单元向后台进程发送"requireFixedAction"指令,如为**DENY_INTENTION**,则提示用户输入常驻地址;如为**CONFIRM_INTENTION**,则后台程序更新用户登记位置信息。 - 在整个交互过程中,用户可能随时中断信息录入环节,后台进程需要在用户意图切换前,及时进行永久化存储。 - 当用户信息已完整登记时,程序在输出详细登记信息外,可通过话语引导用户进行登记信息更新。UPDATE_REG_INTENTION意图的"requireFixedAction"指令指示触发信息更新流程,具体更新流程同初次录入流程。 ##### 1.2.2.4 业务流程图 - 用户注册流程 ![业务流程示意](https://gitee.com/highland0971/beichen_judicial_bureau_project/raw/master/resource/img/public_reg_sequence.png) #### 1.2.3 法律咨询前置信息交互采集 #### 1.2.3.1 功能概述 由用户选择`**法律咨询->预约律师**`时,按照固定的信息采集模板要求,以机器人一问一答的人机交互方式,引导用户填写反馈法律咨询前置问题,相关采集信息将在“公众司法咨询预约”环节中提供给律师或律所侧。 #### 1.2.3.2 功能说明 ** 用户在点击 `**法律咨询->预约律师**` 后,系统后端需要向Baidu Unit推送**“我要找律师”** 引导词,触发Baidu Unit向用户发送引导词,引导用户描述自己想咨询的问题,根据用户咨询的问题,Baidu Unit判决对应的咨询意图,后续根据百度Unit与用户的交互结果,完成本咨询所有词槽的匹配和记录,并将咨询信息保存在数据库中,并触发后续预约管理流程。 当用户咨询意图无法被识别时,则由用户手工选择咨询意图,然后触发后续的交互采集流程。 #### 1.2.3.3 功能要求 - 在进行律师预约前,需要判断用户是否已经按照公众用户信息采集模块中要求的流程,完成基本信息采集。 - 用户初次交互时,基于Baidu Unit的答复引导,用户会输入咨询信息描述,百度Unit根据用户的咨询问题,自动判断咨询所对应的意图,并通过多轮会话实现预置问题采集。 - 有可能在咨询领域的选择中,会触发多层级领域选择,后台需要根据JSON中的配置,执行下一步的意图触发。 - 当用户首次提供的咨询描述信息无法被Unit识别,则系统需根据`SCENE_SERVICE_PREREOCORD:fail_action`对应的JSON配置文件中的指引,向用户发送咨询意图场景划分的选项链接,由用户选择,后台协助转发消息。在该过程中,系统需要将未能自动匹配意图的用户咨询问题与用户手动选择的咨询意图场景在后台做记录,以供后续模型训练提升使用。 - 系统在向用户推送意图场景连接时,最后一个选项是 **\[更多](ACT:JSON:SCENE_SERVICE_PREREOCORD:fail_action_more)**,在这里配置`ACT`类型的链接,系统需要根据ACT类型"JSON",以及对应的文件路径`SCENE_SERVICE_PREREOCORD:fail_action_more`去查找对应的JSON文件,并根据JSON内的配置指引,向系统或用户发送对应的消息。 - 在本环节中的所有有效交互信息(意图命中、词槽澄清),均需要缓存,并通过律师预约模块,将相关交互记录传递给律师。 - 在律师预约环节匹配律师时,需要根据用户每轮在SCENE_SERVICE_PREREOCORD场景中匹配的第一个意图(如:SCENE_TRAFFIC_ACCIDENT)去匹配系统已登记的律师他所选择的业务受理领域。 ##### 1.2.3.4 业务流程 ![业务流程示意](https://gitee.com/highland0971/beichen_judicial_bureau_project/raw/master/resource/img/preCapturedQAConditionSequencev3.png) #### 1.2.4 公众司法咨询预约管理 ##### 1.2.4.1 功能概述 根据用户的咨询诉求,当用户需要进行线下咨询时(交流当用户完成一轮问题咨询交互后,系统触发满意度调查,如用户反馈不满意,可选触发法律咨询预约流程。),系统撮合咨询方与匹配的律师,在公众号平台中给出预约结果。 向当日在值律师微信客户端进行推送,由律师在微信公众号平台上进行预约受理。公众号向律师及咨询申请用户侧发送预约申请联系信息,由双方进行具体线下时间预约和具体咨询沟通。 ##### 1.2.4.2 功能说明 - **预约咨询意图识别。** 公众号后台进程在与用户交互的过程中需要能够通过自然语言交互实现对用户律师预约需求的识别或在法律咨询前置信息采集结束后主动触发。基于Baidu Unit的预约意图识别返回结果,后台程序触发预约交互流程。预约形式包含在线音视频咨询和线下面对面咨询两种形式。 - **预约咨询请求分派。** 后台程序在收到用户预约请求后,需要将预约请求信息推送给当日在值律师(或微信公众号服务接口可达的律师),系统根据用户咨询法律问题的领域、分类、司法管辖地,优选匹配对口律师进行预约请求推送;对于未能明确咨询方向或领域的咨询,则向全部在值律师进行推送。律师根据推送信息,与用户进行电话沟通,明确预约的时间及地点,由律师将预约结果通过公众号平台推送到系统进行登记,并推送给用户。 - **预约咨询信息查询。** 用户或律师通过点击“我的->预约管理”,查询当前已经预约的咨询会谈,后台向查询方推送已确认的预约信息,限一个月内。这个功能对于用户和律师均起作用,显示详细的预约生成时间、编号信息、视频会议连接。 - **预约咨询维护。** 当用户(不含律师)完成预约信息查询后,用户可通过文本或语音输入(或超级连接方式),取消当前尚未进行的预约。 ##### 1.2.4.3 实现要求 - 对于预约请求,根据触发场景使用不同的触发方案。基于满意度调查的预约触发,需向用户推送诸如"您是否要咨询律师"的话语,根据用户答复情况触发是否预约。对于前置问题采集后的预约,则根据词槽匹配完整度,触发预约。 - **TODO 需要更新,暂以流程图示为准** 后台进程应能够主动识别或触发律师预约意图。在每轮用户问题咨询满意度确认时,如用户反馈对问题答复不满意,则系统主动向“GENERAL场景”发起律师预约请求语句 **“layer_required”** ,触发REQ_LAWYER_GENERAL意图匹配,并转发Baidu Unit与用户的意图交互对话消息(咨询词槽澄清),期间涉及一轮或多轮的意图切换(以"requireJsonAction"指令触发),当最后一个意图完成词槽澄清确认后(以"requireJsonAction"指令结尾),系统后台进入律师匹配环节。同时,需要向用户推送请耐心等待的消息。 - 后台在预约请求分派时,需要优先选择用户所咨询法律问题领域所涉及的律师。其中对于基于咨询问题触发的律师预约,法律问题领域需从前一轮问题交互对答的场景进行匹配;对于基于直接律师预约的场景,则需要通过用户前置信息采集中所获取的法律咨询领域进行匹配。一次推送3名匹配在值律师(当不存在匹配的律师,则随机推送3名),由律师进行抢单。 - 后台在向律师推送预约请求时,需要将用户前期的咨询问题、前置采集问题、用户信息向预约候选律师进行推送,并根据律师回复内容确认是否预约。如: > 王 先生 咨询以下问题: > 我媳妇出轨怎么办? > 小昊:XXX。 > 王先生:XXXXX。 > 小昊:好意思,我无法解答这个问题。 > 王先生 对该问题的答复不满意,希望能够预约律师做进一步解答。 > 预约类型:视频类预约 >请问您是否受理本次预约?(是/否) - 预约成功后,系统向双方推送预约信息: - 对于**线下预约类型**,基于微信消息模板,律师侧可看到用户的联系方式及常驻地行政区以及预约编号;用户侧可看到预约编号,律师姓名及注册律所信息,律所地址. 同时系统应提示律师尽快联系用户进行具体司法问题澄清,提示用户耐心等待来电。 - 对于 **线上音视频预约类型(二期功能)**,律师侧可看到用户的联系方式及常驻地信息以及预约编号;用户侧可看到预约编号,律师姓名及注册律所信息,律所地址。 - 系统应向律师推送视频会议室小程序(背景连接中的参数中携带视频会议ID信息,ID与预约编号保持一致),提示律师尽快登录音视频咨询小程序。当律师登录会议室后,向用户推送视频会议小程序(链接参数中携带视频会议ID信息),用户点击小程序直接进入视频环节。 - 用户可在任何时间节点,点击"预约管理"菜单查看预约状态和历史预约记录,并通过文字或语音交互取消预约请求,通过I_LAYER_REQUEST_CANCLE意图交互实现(***或通过消息中的超级链接点击取消预约请求***)。当预约取消后,需要向接单律师推送预约请求取消消息. 注: 基于超级链接的交互截图示意(页面需要在用户点击后自动关闭) ![基于超级链接的交互截图示意](https://gitee.com/highland0971/beichen_judicial_bureau_project/raw/master/resource/img/wx_text_with_hyperlink.jpg) ##### 1.2.4.4 业务流程 - 预约分派流程 ![预约分派流程](https://gitee.com/highland0971/beichen_judicial_bureau_project/raw/master/resource/img/lawyer_engagement_sequence.png) - 预约查询维护流程 ![预约查询维护流程](https://gitee.com/highland0971/beichen_judicial_bureau_project/raw/master/resource/img/engagement_mantainence.png) #### 1.2.5 律师管理 ##### 1.2.5.1 功能概述 在微信公众号中提供律师信息自助登记功能,可由律师在平台侧自助上传介绍信息及个人照片。相关信息将用于后续在引导用户进行法律咨询预约、在线咨询时进行服务提供方身份展示;同时提供律师值班打卡功能,用于更新律师在线状态。 ##### 1.2.5.2 功能说明 - 基于后台程序的交互消息,引导律师完成注册信息登记,其中包含律师姓名、律师资格证编号、司法管辖地、挂靠律所名称、法律业务受理范围 - 支持律师上传图片作为自定义照片,用于在后续离线交互流程中,客服接口的自定义头像更新。 - 基于公众号菜单,律师可选择更变值班或下班状态。 - 提供一个简易的律师注册信息审批管理web界面,用于审批律师注册数据。 - 支持律师在微信公众号中进行值班打卡,通过律师点击菜单项,切换值班状态。 ##### 1.2.5.3 实现要求 - 其中律师姓名、资格证编号、司法管辖地、挂靠律所信息等,采用Baidu Unit交互来进行识别和词槽匹配。当律师点击 `律页联盟->律师注册`需要后台程序主动向Baidu Unit的`SCENE_GENERAL`场景推送“律师注册”消息,触发`LAWYER_REG_CLARIFY`交互单元。 - 律师司法业务受理领域及图片上传基于后台程序进行交互和记录。其中律师司法业务受理范围选择使用超级连接方式供律师点选(多选),通过读取"sceneConfig.json"配置文件中的"enlist":true的节点,将“sector”字段作为链接正文发送给用户,连接引用可使用场景名标识,如"SCENE_MARRIAGE_PROPERTY"。在每次点选后,向用户推送可选业务范围链接消息的时候,需要标记已经选中的连接,如: ``` 请选择受理业务范围: []婚姻财产纠纷 [X]交通事故纠纷 []劳动争议纠纷 [X]婚姻家事纠纷 结束选择 ``` - 律师注册信息中需要包含律师关联登记所使用的微信ID,律师资格证编号ID不得重复;如发生重复,需要提示用户重新输入。 - 律师信息注册完整后,需要将当前律师状态标注为“未审核”状态,当后台批准后,将律师状态更新为“已审核”。 - 值班/下班状态更变通过律师点击“律业联盟-值班登记”菜单,向已注册律师推送当前在值状态,并通过Baidu Unit的交互,完成律师值班状态的更变。每次律师登记值班时,系统后台数据库创建1条新的值班记录,登记律师值班登记时间;当律师选择下班时,系统对最近一条登记值班的记录,标记下班时间。同时在任意律师选择更变值班状态或律师预约匹配流程触发时,系统主动对所有律师采用Lazy模式更新状态,如对律师值班记录进行检索时发现律师在当日之前上线且未标记下线,则将律师的下班时间标记为记录中值班当日的24:00。强制律师下线后,需要向律师推送下线消息。 ##### 1.2.5.4 业务流程 - 律师注册流程 ![业务流程示意](https://gitee.com/highland0971/beichen_judicial_bureau_project/raw/master/resource/img/lawyer_reg_sequence.png) - 律师值班打卡流程 ![业务流程示意](https://gitee.com/highland0971/beichen_judicial_bureau_project/raw/master/resource/img/lawyer_status_change.png) ### 1.3 二期项目 #### 1.3.1 微信小程序基本功能框架及公众号整合 #### 1.3.2 在线音视频实时咨询功能 ##### 1.3.2.1 功能概述 为满足用户对于远程面对面咨询的要求,替换现有律师事务所使用传统QQ音视频对话的手段,提供基于微信小程序的音视频双向实时对话功能。同时预留对话内容文本话存储的接口。 ##### 1.3.2.2 功能说明 - **音视频会话房间管理**,小程序应能够支持基于URL传参的会话房间创建和销毁功能。在微信公众号中,当律师接受预约后,公众号后台应基于预约ID号调用小程序启动一个基于该预约ID好的视频会话房间。当会话双方离开会话后,销毁该会话Session。 - **会话工作量记录**,小程序应能够在后台记录本次会话的开始时间(以双方均进入房间为准)和双方均退出房间的时间,以作为后续其他主管部门核算律师、律所工作量的依据。 - **音视频会话转录**(预留接口,暂不开发),对于音视频会话的内容,应能够调用科大讯飞或其他第三方音频转录的API接口,完成音视频资料的文档化存储。 ##### 1.3.2.3 功能要求 - 本期项目中,受限于开发成本,在小程序中仅实现最基本的音视频对话窗口和会话ID输入的界面,能够实现基于微信公众号内链接传参调用和人工输入会话ID启用视频双向直播的能力。 - 在后端RTMP推流服务器,采用腾讯直播SDK及相应的平台,选择按照固定带宽包月后付费模式。 #### 1.3.3 小昊机器人业务水平提升 #### 1.3.4 非实时律师交互解答 #### 1.3.5 小微案件自助诉讼辅助服务 #### 1.3.6 众司法咨询舆情监测 ## 2 项目分工 ### 2.1 一阶段一期 - 深圳团队负责整体微信公众号、百度Unit、科大讯飞SDK各系统的接口联调和编码开发工作、以及上线部署工作 - 天津负责法律场景知识库整理及场景设计(韩玉鑫)、百度Unit模型训练(高宏、韩玉鑫),SDK、API、公众号注册申请(韩玉鑫,以律所名义),服务器环境准备(完成操作系统部署及网络环境调通,如基于客户本地物理机方案,高宏)。 - 深圳团队及天津团队共同参与培养天津本地实习团队,天津侧负责日常项实习培训、实践进度的管理、督促及指导,深圳团队负责对现有技术方案、架构、开发规范等的培训及解答。 ### 2.2 一阶段二期 ### 2.3 二期项目 ## 3 技术方案建议 ### 3.2.1 系统模块框架 按照项目规划,本项目会包含三个交互前端: - 微信公众号(一期项目) - 微信小程序(二期项目) - 后端管理(WEB)(一、二期项目) 其中微信公众号与微信小程序共用一个业务后端进程,后端管理单独开发一套前端web UI与后端管理界面。 ``` ----------------------------------------------- | 微信公众号 | 微信小程序 | 后端管理界面(WEB) | ---------------------------------------------- | 业务后端 | 管理后端 | |基本业务逻辑|讯飞 API服务| 对话回溯|律师注册审批| ----------------------------------------------- ``` 系统组件的整体模块关系如下: ![image](https://gitee.com/highland0971/beichen_judicial_bureau_project/raw/master/resource/img/system_component.png) ### 3.2.2 语言及框架 - 语言可选择**Java SE 9**或**Javascript ECMAScript 6** - 科大讯飞SDK建议选择**Java SDK**版本,需要深圳侧Java工程师对本项目所需的调用SDK转解码的相关功能进行打包封装,并以HTTP RESTFUL API方式提供调用接口,便于他非Java框架进行调用整合(如后期以NodeJS重写业务后端框架,该HTTP API服务需要保留,以独立进程方式在后台运行并响应请求)。 - 由于Baidu Unit、微信公众号均是基于HTTP Restful方案进行接口调用,**业务后端** 可选使用web框架,可以对HTTP请求进行解析和处理,选型建议选择轻量级Web框架: - Java + SpringBoot\Play 或 - Javascript+ NodeJs + ReactJS\VueJS - 管理后端,一期阶段仅开发简单的机器人交互记录回溯查询、导出功能,二阶段或二期项目中视甲方需求,可选开发完整后端平台,建议使用NodeJS进行构建: - Javascript+ NodeJs + ReactJS/VueJS ### 3.2.3 数据库选型 - 考虑到本项目短期不会有高并发访问存取需求,且在一期二阶段会有更多维度的交叉表关联,建议选择传统关系型数据库进行开发部署,优先原则MySQL数据库。 - 如记录用户对答记录使用传统数据库不太好做存储,可选择MangoDB作为备选方案。 ## 4 协作方案建议 由于本项目会涉及到天津及深圳两个团队的成员进行协作开发及部署,同时还需借助本项目培养天津本地的开发储备力量,因此该项目的部分协作要求做一下明确。 ### 4.1 代码托管 项目代码、资源、配置文件建议在[码云](https://gitee.com/) 上以私有仓库方式进行托管,双方根据工作进度按需提交代码等数据。 目前我这边已经在[码云](https://gitee.com/) 创建了本项目的代码[仓库](https://gitee.com/highland0971/beichen_judicial_bureau_project),目前仓库属性暂设置为公开,后续深圳团队确定开发成员后,可通过以下链接申请加入项目: - [开发者邀请链接](https://gitee.com/highland0971/beichen_judicial_bureau_project/invite_link?invite=d61c08a734126f64466951b3dde673735141da4904fe78f9b7993663152babc529d8eb9945ab7647) - [观察者邀请链接](https://gitee.com/highland0971/beichen_judicial_bureau_project/invite_link?invite=f5a18b410bc09176466951b3dde6737318ac559753c01087b7993663152babc529d8eb9945ab7647) 有效期截止到到**3月6日**(码云内设固定有效期),过期后我这边更新链接,或深圳侧告诉我项目团队的ID,我这边直接邀请。 ### 4.2 代码要求 - 深圳团队作为一期项目的主力承担方,需确保项目人员在编码时,对每个函数、接口的用途、参数、返回值进行描述性备注,便于后续项目新人阅读和后续三方维护。 - 代码编码风格要求规范统一,函数块中适当备注,尽可能减少较为晦涩的代码 - 数据库表在创建时,需要对表结构做说明文档描述,说明字段含义、更新规则、主外键约束关系以及对应的业务逻辑。 ### 4.3 代码提交 - 一期上线项目,天津这边不参与开发编码,深圳侧可自行进行Commit和Merge合并。 - Bug及需求提交,基于Issue在平台上提交,天津和深圳侧均可提交。 ### 4.4 代码目录约定 Git项目代码建议按照以下目录结构进行组织(可根据实际开发代码组织进行调整): - baiduUnit目录 - 包含所有和baiduUnit交互的代码逻辑,后续如果更换其他的机器学习框架,只需要类似平行得开发一个新的模块即可 - fileConfig目录 - 存放了项目涉及到的所有配置文件 - 包含了一个基本的读取配置文件内容的方法 - tools目录 - 存放了项目所使用到的基本的方法类 - 包括网络层请求与解析 - 数据加密层 - java中的字符串常用处理方法 - java中对时间的常用处理方法 - weChatPublic目录 - 对应公众号后台的所有逻辑 - xunfeiSpeech目录 - 存放了讯飞语音相关的api - 包含语音转写、语音合成 ### 4.5 文档要求 本项目需要提供以下文档: - 系统架构图,包含系统框架、功能结构及基本接口约定,图文 - 软件接口文档 - 数据库说明文档 ### 4.6 流程冲突修订 1. 律师注册流程:多伦场景选中(取消)操作 2. 用户登记流程: 被动登记包括:1>.不满意,要预约律师,但未登记。2>.前置问题采集完成后,我要找律师,但未登记。 位置信息采集处添加详细地址词槽澄清 3. 值班登记流程: 律师点击值班时,推送待受理状态的用户预约