project,

暑期2020 [基于python-wechaty的群聊助手机器人] POC 成果展示

kxz kxz Follow Aug 14, 2020 · 1 min read
暑期2020 [基于python-wechaty的群聊助手机器人] POC 成果展示

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

Code: @kxz18/python-wechaty-groupchat-bot

[基于python-wechaty的群聊助手机器人]信息

  • 导师:吴京京

  • 学生:孔祥哲

  • 项目名称:基于python-wechaty的群聊助手机器人

  • 方案描述:

    本项目需要基于python-wechaty实现一个群聊助手机器人。该机器人主要由四个插件组成。第一个插件是群聊消息打标插件,通过群成员引用重要消息回复机器人的方式记录重要信息,以便之后以问答的方式进行查找。在基本功能开发完成之后将用深度学习的方法优化问答的容错性,从而提升交互水平。第二个插件是定时消息插件,用于定时消息的发放。第三个插件是群成员的管理插件,当有新人进群时进行欢迎,当一定人数群成员对某位群成员言行表示不适时自动从群聊中删除该位群成员。第四个插件用于提升交互,为帮助系统插件,提供自定义的功能文档,辅助前三个插件工作。四个插件中第一个插件是项目的基本要求。

    项目主要分为四个阶段进行。第一阶段是基本功能的实现,也就是群聊消息打标插件的实现。第二阶段是扩展功能的实现,主要实现定时消息插件和群成员的管理插件。第三阶段优化交互性能,实现帮助系统插件,利用深度学习对消息打标插件的问答系统进行优化。最后是选做阶段,在项目计划完成后如果还有时间,进行rasa聊天机器人api的对接,丰富插件功能。

  • 时间规划:

    • 群聊消息打标插件
      • 7.1 - 7.19
      • 该模块为本项目的基本要求,需要实现通过引用消息进行回复对重要的群聊消息进行打标,并存入本地的数据库。在对应问题被提出时机器人能通过搜索存储的打标消息给出相应的回答,如果匹配的答案置信度不高,则提供可能的关键词向用户进行确认。同时支持展示全部或一定时间段内的打标消息,用户可以对其中的消息进行手动删除或定时删除,打标消息本身也可以提供有效期参数,在过了有效期后自动删除。后期提供帮助系统,用户可随时查看不同功能的帮助信息。
    • 基本功能
    • 定时消息插件
      • 7.20 - 7.26
      • 用户指定消息内容和发送时间,由机器人定时发出消息。
      • 扩展功能
    • 群成员管理插件
      • 7.27 - 8.2
      • 进行踢人和进群欢迎的管理,踢人要求3位以上群成员对某人表示不满(群成员总共只有3人以下或4人时分别需要1人和2人表示不满)。此插件需要机器人拥有相关的权限。
      • 扩展功能
    • 对前几个模块的交互方面进行提升
      • 8.3 - 8.23
      • 对交互方面进行统一优化,提高解析用户命令时的容错性,目前已有的想法是尝试用深度学习方法对问答系统的匹配准确性进行提升(在基础版本中使用 cosine 相似度对问题和答案进行匹配)、在用户命令解析失败但和某些模式很相近时进行确认等。同时该过程中会不断模拟用户场景发现机器人在交互上不够人性化的地方并进行修正。
      • 扩展功能
    • (选做)rasa chat bot 插件
      • 8.24 - 8.31
      • 接入rasa chat bot 的API,此为选做内容,如果在以上内容都完成且仍有较充裕的时间的情况下,可以考虑尝试进行制作。
      • 选做内容

项目进度

  • 已完成工作: 目前已经完成四个插件的开发以及对应的单元测试。即项目的前两个阶段已经完成,第三阶段完成一部分,正在进行中。

    目前已经制作了presentation对项目的功能和结构做简单讲解:

对已经实现的功能也进行了live coding演示,演示内容见:

  • 遇到的问题及解决方案:

    在开发过程中主要遇到的是两类问题,一类是技术问题,另一类是对软件架构的选择。

    技术方面的问题主要在于对第三方库不熟悉。例如在开发过程中对python-wechaty接口不熟悉,无法快速准确拿到想要的信息,以及使用apscheduler时不知如何用async的函数作为回调函数。由于python-wechaty目前还处于开发阶段,文档还不完善,因此遇到问题主要直接参考github上的代码,沿着相关的类和函数向上追溯看代码解决问题,实在解决不了或者无法确定解决方法是否正确的会直接向导师咨询。而像apscheduler这类第三方库有较为完善的文档,因此直接从文档中寻求答案。也有一些多线程方面的问题,例如因修改数据库后一直保留与数据库的连接而产生的多线程访问问题(把与数据库的连接从主线程传到了子线程中),这类就会直接上网搜索比较模板的写法来解决。还有一个问题是接入微信进行测试需要一个微信号,刚开始进行测试的时候总是容易被腾讯封锁,在与导师交流后养了很久的帐号(模拟人类行为),最后才能用来挂机器人测试。

    而在软件架构选择方面,由于自己软件架构的经验不多,所以会先以自己已有的知识设计一些架构,然后和导师交流这样的架构是否合理,请他给出一些建议。对于一些比较常见的架构问题,我也会自己搜索一下传统的架构模式进行模仿。

    总的来说,问题大多都是可以解决的,一般从文档、github issue、代码本身、各类论坛和博客中总能找到解决方法。同时也要多和导师交流,导师的经验比较丰富,对很多问题都能给出比较高效的解答,多和导师交流不仅能把问题解决,也能学到很多新的东西。

  • 后续工作安排: 后续工作在路线上与之前计划的一致,同时由于前面的任务完成日期比预期提早,因此整体计划可以前移。

联系我们

导师评审

评审对象

  • 评审内容:中期报告
  • 提交人:孔祥哲

评审结果

  • 项目完成度:孔祥哲根据原定项目需求,迅速完成大部分功能,切代码质量非常好。期间与我保持着密切的联系,主动咨询问题,解决项目中的各种难题。目前项目已进入尾声,剩下项目的附加扩展功能开发以及部分代码测试的工作。
  • 学生参与度:孔祥哲同学自项目开始之期就开始高效率的开发,每天都有足够的代码提交量,积极完成项目功能,且能够精准的剖析出项目中存在的各种问题,基本上全程都由该同学在主导,我只是来解决他所提出的问题。
  • 代码贡献量:该同学承担着该项目的主要工作,包括需求深度分析,模块开发和扩展模块的讨论,我主要承担着一个指导的作用,解决该同学提出的部分问题。
  • 综合评价及建议:该同学的编程能力,对业务的分析能力都非常好,期间能够快速精准的发现主要问题,加快项目的开发速度,是一个十分优秀的实践者。由于该学生在过程中表现出的高效率,暂无其他建议,希望该同学能够继续按照自己的兴趣,继续学习,期待你以后的高光时刻。
  • 最终评审结果:“通过”
Join Newsletter
Get the latest news right in your inbox. We never spam!
Written by kxz Follow
Undergraduate coder in Beijing