新闻动态
新闻动态

静5青年讲座回顾:陈言博士谈实时智能编程援助

  2022年12月1日,Virginia Tech 的陈言博士受邀带来题为“Real-time Intelligent Programming Assistance”的报告,围绕陈言博士的近期工作展开,介绍“如何结合人类智能和机器智能帮助程序员更好编程”。报告由中心助理教授孔雨晴老师主持,相关内容通过蔻享学术、Bilibili 同步直播,线上线下数百人观看。

  

陈言博士做线上报告(报告视频:https://www.bilibili.com/video/BV1x841157tX/

 

  陈言博士首先介绍了实时智能编程援助(Real-time Intelligent Programming Assistance)的概念。

 

 

  软件开发过程中往往需要用户个性化的定制支持,而现有的编程援助方式是不充分的。目前最常见的援助方式——StackOverflow 等在线援助论坛——中,大多数用户不愿意参与到提问、回答的互助过程中(更多人只是查看、阅览已有的回答),无法获得个性化的帮助。同时,提问、等待回答的过程常常打断用户的工作流程和编程思路。

 

 

  讲者希望构建更加实时化、个性化、对用户友好的智能编程援助系统。他将用户的帮助、寻求交互的过程分解为三个部分:用户提出请求(Requesting)、系统响应请求(Responding)、系统将请求整合到用户当前的工作流上(Integrating)。

 

  讲者也向听众介绍了人机交互领域的研究方法:先是要了解用户的需求和面临的困难;然后根据用户的需要和面临的挑战设计新的交互方式;最后通过研究对新技术进行评估。

 

 

  讲者介绍了他的三个工作,分别对应帮助、寻求分解中的三个部分。

 

  一、如何帮助程序员用多模态的方式提出便于理解的问题?

  市面上的一对一专家帮助服务面临以下几个挑战:1)现有工具难以快速捕捉代码片段的上下文;2)人工专家难以快速理解代码和上下文;3)现有工具不能灵活协调不同用户对专家的需求。

 

  针对以上问题,讲者及其团队设计了 CodeOn 工具。CodeOn 可以帮助求助者采用多模态的方式提出问题,之后所有求助者的问题会以列表形式整理给专家,而专家可以通过文字反馈、修改代码、添加注释的方式回答问题。在专家回答问题后,专家的回答会反馈给用户,用户可以便捷地阅读反馈意见,比较、合并代码。

 

 

  比较 CodeOn 工具和共享代码的同步视频聊天场景,实验发现使用 CodeOn 工具的被测人员在相同时间内可以完成更多任务,他们花费在帮助寻求上的交互时间也更少。CodeOn 工具减少了用户寻求帮助的过程对整体工作流的干扰,也把用户从等待一对一的同步专家修改代码的过程中解放出来。

 

 

  二、如何让帮助者同时掌握多个帮助对象的具体情况?

  想象一个编程课堂测验的场景,目前的工具仅能让教学者查看学生编程的出错信息,这是远远不够的:不同学生可能采用不同的方法回答问题并且处在处理问题的不同阶段。需要有一个工具能够高效地整合非结构化的代码信息,让教学者了解学生群体的编程进度等情况。

 

  设计这样的工具面临三大挑战:1)代码包含高维信息,很难直接进行大规模分析;2)学生的代码是动态变化的,很难精确定位代码的进度;3)很难通过推理实时分析学生遇到的问题。

 

 

  讲者及其团队设计的 VizProg 系统采用地图视觉方法(如上图)来显示学生的编程进度和所使用的不同方法。代码坐标化的过程通过以下四个步骤展开:1)采用基于规则的方法统一学生代码中的变量名;2)将修改后的代码映射到高维空间中;3)通过计算向量相似度确定学生代码使用的具体方法;4)用代码向量和完整解答向量的距离表示学生代码的进度。

 

  比较 VizProg 和现有的大规模学生编程解决方案的可视化系统如 OverCode,VizProg 可以帮助教学者更快、更准确地把握学生的错误情况。在 VizProg 工具中,相似的错误会被聚合在地图的一个小区域上,不需要教学者逐一校验;同时,X 轴的进度显示了帮助教学者掌握学生的编程进度。

 

 

  通过把高维度代码信息映射到低维空间,VizProg 帮助教学者更好地掌握学生的工作情况。

 

  三、如何帮助用户在编程过程中制定清晰的语义条件?

  网络爬虫,是按照一定规则自动抓取网络信息的程序或脚本。早期,需要有专门的程序员设计、编写爬虫程序。目前的技术则支持普通人采用低代码或无代码的方式快速创建自动化的爬虫程序,演示编程(Programming by Demonstration)就是系统通过学习用户的演示自动生成泛化规则的一种技术。这种技术不仅能够减少对专门程序员的依赖,还很用户友好;遗憾的是,目前的技术难以理解用户的具体语义需求。

 

  讲者及其团队提供了另一种工具 SemanticOn 来帮助用户指定语义条件,便捷地生成爬虫代码。具体地,SemanticOn 利用文字和图片的综合数据,借助机器学习模型,帮助用户具体化指定条件,再利用程序合成器组合指定条件,找到符合用户行为的爬虫程序。

 

 

  SemanticOn 项目将编程援助集成到开发工作流程当中,通过使用文本描述、图片结合、内容高亮的方式让用户更便捷地完成语义条件的指定;同时通过人和系统的交互进一步明确用户的需求。

 

 

  讲者最后提到他对未来工作的构想:希望整理交互内容、创建数据建库,从中进一步学习数据中的知识,并将这些知识迁移到其他任务上,实现更广泛的实时个性化编程援助。