project, ospp,

OSPP 2021-期中报告-基于 Wechaty 开发开源的二师兄社群逗乐机器人

ReiKohaku ReiKohaku Follow Aug 26, 2021 · 1 min read
OSPP 2021-期中报告-基于 Wechaty 开发开源的二师兄社群逗乐机器人

暑期2021

“开源软件供应链点亮计划-暑期2021”(以下简称 暑期2021)是由中科院软件所与 openEuler 社区共同举办的一项面向高校学生的暑期活动。 旨在鼓励在校学生积极参与开源软件的开发维护,促进国内优秀开源软件社区的蓬勃发展。 根据项目的难易程度和完成情况,参与者还可获取“开源软件供应链点亮计划-暑期2021”活动奖金和奖杯。 官网:https://summer.iscas.ac.cn/

本项目 [基于 Wechaty 开发开源的二师兄社群逗乐机器人] 系 暑期2021 支持的开源项目。

项目信息

  • 导师:韩磊、鲁玉超、王玉丹
  • 学生:井维嘉
  • 项目介绍:https://github.com/wechaty/summer-of-wechaty/issues/83

  • 项目名称:基于 Wechaty 开发开源的二师兄社群逗乐机器人

  • 方案描述

    本项目需要基于Wechaty开发一个多功能群聊机器人。

    该机器人的核心功能是编写并配置拦截器来实现对消息的响应。拦截器是一种固定传入参数和返回值类型的函数,通过编写拦截器的逻辑,可以拦截消息放行消息给下一个拦截器,同时做出一定的响应

    本项目预置了若干功能,如查天气、讲笑话、成语接龙、猜字谜等以供使用和参考。同时,本项目希望能够允许用户自行添加功能,所以用户可以通过自己编写拦截器的方式,来为机器人添加功能。

    本项目也将提供一个二师兄后花园页面,作为扩展的帮助文档、状态查询和日活功能使用。

  • 时间规划:

    • 开发可扩展式开发框架(7.1-7.7)
      • 熟悉Wechaty开发模式
      • 搭建二师兄开发脚手架
    • 具体功能实现(7.8-7.30)
      • 初步实现要求中的具体功能,可能包括且不限于:讲笑话、看热搜、查天气、成语接龙、猜图片、猜歌名
      • 初步编写相关功能API的注册与部署文档
    • 设计二师兄Logo及形象(8.1-8.7)
      • 为二师兄的Logo和形象做出初步描述
      • Logo及形象定稿
    • 开发二师兄后花园(8.8-8.30)
      • 设计后花园功能和页面布局
      • 搭建二师兄后花园服务及页面
    • 编写文档与完善功能(9.1-9.30)
      • 编写使用、部署及开发文档
      • 整理代码并完善功能

项目进度

  • 已完成工作

    目前已经完成了机器人基本框架的全部搭建,并且提供了讲笑话、看热搜、查天气、搜音乐、成语接龙、猜字谜的预置功能。

    二师兄的Logo已基本定稿。

  • 遇到的问题及解决方案

    目前的主要问题是不能很好地应对自然语义的复杂环境。

    由于设计上希望响应尽可能快速、高效,目前提供的示例插件均使用正则表达式来检查功能触发、解析参数。这样做有两个缺点:

    • 正则表达式的覆盖虽广,却也不全面。

      例如查天气功能中,预设了两种触发方式:“二师兄,查xx天气”和“二师兄,xx天气如何/怎么样”。但事实上问天气不止有这些问法,还有如“xx的天好不好”、“xx在下雨吗”等问法。这些特殊的问法并不能被正则表达式解析。

    • 正则表达式对参数的提取不是非常好。

      依旧以查天气功能距离,“二师兄,xx天气如何”这句话,关键在于提取出地名。但是由于“二师兄”这一触发词后面就是参数,所以提取地名就稍显困难。另外就如上一条举例,“xx在下雨吗”这类问话中,用户还表达了xx是否在下雨这一含义,这时更符合自然语言的应答应该是“xx在下雨”或“xx没有在下雨”。正则表达式暂时还做不到这些。

    关于这一问题的解决方案,有一种是接入微信开放平台的语境检测API,这样可以较为准确地识别语义。另外也可以考虑使用jieba库分词来解决语义分析和参数提取的问题。

  • 后续工作安排

    后续工作与计划基本一致,优先考虑完成计划清单上的任务。

    另外,计划着手对于拦截器的逻辑做进一步优化,允许开发者为功能配置预检和帮助文本。

    关于自然语义识别这方面将会视产能而定。、

项目成果

项目仓库:https://github.com/ReiKohaku/piggy-bro

Live Code视频

PPT展示视频

项目PPT

其它


This post is also available in English.

Join Newsletter
Get the latest news right in your inbox. We never spam!
Written by ReiKohaku Follow
Student, Java/Node.js/Vue programmer