代码生成和补全任务做不完了?!
不如试试让大语言模型(Large Language Models, LLMs)来帮忙。
不过,如果是 处理大规模、多文件的代码库,LLMs就可能犯了难。 这时候,往往需要需要Retrieval-Augmented Code Generation(RACG)系统来检索相关的代码信息。
现有解决方案,如基于语义相似度的检索和手动设计的工具与API,虽然在特定任务上有效,但在泛化能力和普适性方面存在局限。
为了缓解现有RACG方法的通用性缺陷,来自新加坡国立大学、阿里巴巴、西安交通大学的研究人员提出了 CodexGraph , 一个以代码图数据库为媒介,连接了语言模型和代码库的系统。
研究团队在三个有代表性的学术benchmarks对CodexGraph进行了评测,同时也基于ModelScope-Agent,将CodexGraph实现在了五个真实代码应用场景。
实验和现实实践显示出了CodexGraph的有效性和通用性。
研究方法
CodexGraph通过代码图数据库接⼝界⾯ ,创新性地将语⾔模型与代码库连接 ,以克服现有⽅法的不⾜。
该系统的⼯作流程主要包括以下⼏个步骤 :
首先,构建代码图数据库 。
使⽤静态分析技术,根据预定义的Schema,将代码库中的代码符号(如模块、 类、 函数等)和它们之间的关系映射为图数据库中的节点和边。
其次,代码结构感知查询。
利⽤graph query language的灵活性,同时结合图数据库的结构特性,实现对代码图的复杂查询和深度检索。
第三, “Write then translateˮ 策略。
Primary LM agent ⾸先分析代码问题,⽣成⾃然语⾔查询。
然后,专门的translation LM agent将这些查询翻译为为格式化的graph query language。
第四,迭代式pipeline。
通过迭代的⽅式,LM agent根据⽤户问题和已获取的信息,逐步优化查询和检索结果。
实验
实验部分,CodexGraph在CrossCodeEval、 EvoCodeBench和SWE-bench三个具有代表性的代码库级基准测试上进⾏了评估。
这些测试 覆盖了跨⽂件代码补全、 代码⽣成和⾃动化GitHub问题解决 等多个⽅⾯ 。
实验结果显示,CodexGraph在所有基准测试中均展现出了优异且稳定的性能,验证了代码图数据库作为语⾔模型和代码库之间的接⼝界⾯的有效性。
原论⽂的分析进⼀步指出, CodexGraph在处理不同难度的推理任务时,单⼀查询与多重查询策略的效果存在差异。
在CrossCodeEval中,多重查询策略更有效;⽽在SWE- bench中,单⼀查询策略表现更佳。
此外 ,去除Cypher LM agent会显著增加primary LM agent的推理负担,导致性能下降。
这表明Cypher LM agent在减轻primary LM Agent的推理压⼒中发挥了关键作⽤。
真实应⽤场景⽰例
基于ModelScope-Agent框架 ,CodexGraph的实际应⽤价值在多个场景中得到了体现,如:
这些应⽤展⽰了CodexGraph如何在⽣产环境中帮助开发者解决实际问题 ,提⾼代码开发的效率和质量。
总结
以图数据库作为媒介,CodexGraph为语⾔模型与代码库提供了⼀个新的交互⽅式。
它不仅提升了语⾔模型对复杂代码库的理解能⼒,还增强了整体的代码检索和导航的准确性。
它的出现为⾃动化软件⼯程领域, 尤其是在⾯临RACG挑战时 ,带来了新的解决⽅案 ,展⽰了在多样化代码任务和现实世界应⽤中的⼴泛潜⼒和实际价值。
随着技术的不断发展,CodexGraph有望在未来⽀持更多编程语⾔ ,并进⼀步优化其⼯作流程和索引构建效率。
代码链接 :
https://github.com/modelscope/modelscope-agent/tree/master/apps/codexgraph_agent
arXiv链接 :
https://arxiv.org/pdf/2408.03910
如何看待小程序云开发?
在数字化时代,小程序云开发正悄然成为前端开发者的福音,为高效开发和便捷集成提供了一把金钥匙。 让我们深入了解这个强大工具的魅力和应用。 学习小程序云开发,就像是为你的前端技能库添砖加瓦,无论是初学者还是进阶工程师,它都能让你的工作更上一层楼。
首先,我们来看看丰富的学习资源库,从小白到进阶,都有适合你的教程。从基础概念到实战项目,覆盖全面:
云开发开源项目同样精彩纷呈,无论是美食地图小程序,还是天气查询工具,甚至是娱乐小应用,如微博鲜知和五指棋,都在展示着它的广泛适用性。
实战课程则是你快速上手的阶梯,通过一系列实战演练,掌握云开发的核心技能:
总的来说,小程序云开发不仅简化了开发流程,还拓宽了前端开发的边界。 无论是个人项目还是企业应用,它都是提升开发效率和创新能力的得力助手。 赶紧抓住这个机会,提升你的前端技能吧!
关于人工智能时代,如何用法律按下“规制键”的介绍。
不久前,DeepMind公布了AlphaGo的最新升级版本AlphaGo Zero,并在《自然》杂志上对其使用的相应技术做出详解。 DeepMind称:“AlphaGo Zero与AlphaGo最大的不同是做到了真正的自我学习,经过3天的训练,就以100:0的战绩完胜前代AlphaGo。 ”曾与AlphaGo有过交战的柯洁也在第一时间做出回应,柯洁表示,“对于AlphaGo的自我进步来讲……人类太多余了”。
近些年来,人工智能持续升温,成为全球科技研发的新热点。 Google、网络、阿里巴巴、腾讯等不少国内外大型互联网企业,都在加大资金与人才投入,试图抢先占领人工智能技术的高地。 在国家层面,很多国家也纷纷出台政策支持人工智能的发展。 如2014年欧盟发布了《欧盟机器人研发计划》,2016年美国发布了《国家人工智能发展与研究战略计划》,2017年法国发布了《人工智能战略》。 我国政府也于今年7月发布了《新一代人工智能发展规划》。
人工智能可能引发大量技术性失业
人工智能到底会让人类的生活变得更美好,还是更糟糕?在人工智能突飞猛进的同时,也伴随着质疑甚至抵制。
近日,英国著名物理学家史蒂芬·霍金表示,人工智能(AI)的崛起可能是“人类文明史上最糟事件”,除非人类社会能够找到控制AI发展的方法,否则后果不堪设想。 确实,人工智能如果运用不当,的确可能产生很多问题。
首先,人工智能可能引发大量技术性失业。 创新工场董事长李开复在2016WISE大会上表示,未来十年,世界上50%的工作都会被人工智能所取代。 准确的数据可能无法预测,但人工智能必然会使很多职业消失,可能导致就业停滞,从而给社会带来不稳定性因素。
第二,人工智能可能导致新的不平等。 开发者可能存在种族偏见、性别歧视、特定疾病歧视,基于此而开发出来的人工智能就可能存在算法歧视,从而造成新的不平等。 而且,由于人工智能导致的就业停滞和生产力提升,可能导致财富更加向少数人集中,从而也可能引发新的资本不平等。
第三,人工智能可能导致责任空白。 对于人工智能产生的损害,如何承担分配责任还远未达成共识,开发者、生产者是否应当承担瑕疵担保责任,能否确立人工智能的法律人格地位还不得而知。 当开发者、生产者由于破产等因素无法、无力担责时,受损者可能无法得到赔偿、补偿。
第四,人工智能可能失控,成为后人类的敌人。 开发者与使用者可能基于不正当目的开发、使用人工智能,从而可能给人类带来毁灭性的灾难,例如一些极端恐怖组织可能滥开发、滥利用人工智能。 而且,目前人工智能已经具有深度学习能力,会不断演化进步。 霍金警告说,“由于受到缓慢的生物演化的限制,人类不能与AI竞争,最终将会被代替”。
对人工智能担忧并非杞人忧天
由此可见,对人工智能的出现存在隐忧,是有一定道理的。 很多新生事物刚出现时,往往不被广泛接受甚至受到极力抵制。 就如同百年前的“车马大战”,汽车刚产生时就受到了马车行业的大力抵制,因为汽车严重影响到了马车夫、马车生产商、马厩管理员、马粪清理工等许多人的生计。 但是,进步的科技终将无法阻挡,汽车最终取代了马车。
人工智能必将给未来人类社会带来翻天覆地的变化。 但对人工智能的诸多担忧并非杞人忧天,如果没有法律的有效规范,人工智能不仅不可能成为人类的福音,反而还可能成为人类的丧钟。 然而,也不能因噎废食,因为人工智能可能存在隐患,就全面禁止或不当限制其发展。 相反,应当积极运用法律,对人工智能进行适度有效的规制。
规制人工智能就是要规制人的智能
人是人工智能的总开关,所以规制人工智能首先需要规制人的智能,需要对人工智能的开发者进行规制。 开发者在设计人工智能时,应当以人为本,以有利于社会福利最大化而非利润最大化为理念,遵守基本的社会伦理道德,消除各种歧视观念,遵守平等原则。 禁止基于不正当目的开发人工智能。 开发者应当审慎设计相关代码程序,如果某项人工智能所促进的社会公共利益,与其所造成的损害明显不成比例,违反比例原则,或者可能失控,就应当及时放弃。
其次,应当对人工智能的销售者与使用者进行规制。 销售者应当建立并执行人工智能产品进货检查验收制度,验明人工智能产品合格证明和其他标志,禁止销售不合格的人工智能产品,不得伪造或者冒用认证标志等质量标志。 使用者应当合理利用人工智能,不得损害国家、社会及他人合法权益,法律应当合理设定相应的使用条件与标准。
第三,明确人工智能致损的责任分担机制。 如果开发者在设计时存在故意或重大过失,导致损害发生,则应由开发者承担责任。 如果由于开发者当时的认知局限,没有预见到未来发生的状况,导致损害发生,开发者也应当承担责任,即瑕疵担保责任,因为开发者有所获益,就应当承担相应的风险,而且如此更能促使开发者审慎地设计相应的代码程序。 在索赔方式上,使用者、受害者可以直接找开发者索赔,也可以找销售者索赔。 如果销售者与使用者存在过错,则应承担相应的责任。 此外,应当逐步建立完善的人工智能产品保险制度。
技术中立不代表可以脱离法治
科技需要在法律的轨道上发展,技术中立并不表明技术可以脱离法治。 尽管存在隐忧,但只要法律规制适当,具有诸多优势的人工智能必定会给未来人类社会带来无穷大的正能量。
因此,应当对人工智能进行适度有效的规制,及时立、改、废相关法律制度。 我国国务院在《新一代人工智能发展规划》中提出,“建立人工智能法律法规、伦理规范和政策体系,形成人工智能安全评估和管控能力”。 在规制人工智能时,政府应当处理好科技创新与法律规制的关系,按照“鼓励创新、包容审慎”的原则,确立事前备案、事后惩处的机制,使法律既能有效保障公民权利,又能支持促进科技创新。
GoogleWebToolkit:GWTJavaAJAX编程后序
在开发网络应用的道路上,开发者常常陷入繁琐且易出错的境地,大部分精力往往耗费在处理浏览器兼容性上,这占去了他们90%的时间。 此外,构建和维护JavaScript代码库,特别是AJAX组件,既耗时又难以保证稳定性和复用性。 为了解决这些问题,Google Web Toolkit (GWT)应运而生。 它提供了一种创新的方式,让开发者能够借助熟悉的Java编程语言,高效地构建和维护高性能的JavaScript前端应用,极大地简化了开发流程。
特别是当GWT与Eclipse Google插件结合使用时,其优势更为显著。 它整合了Java的强类型系统和面向对象设计,使得代码更易于管理,减少了错误发生的可能性。 开发者无需频繁地在Java和JavaScript之间切换,从而节省了大量时间和精力。 维护起来也更为便捷,无论是代码重用还是性能优化,都有了更好的工具支持。
总的来说,GWT通过将Java的稳定性和开发效率与JavaScript的灵活性相结合,为网络应用开发开辟了一条更直观、高效的道路,使得开发者能够专注于业务逻辑的实现,而不是纠缠于底层的浏览器兼容性问题。 这对于提升开发效率和项目质量来说,无疑是一大福音。 扩展资料
《GoogleWebToolkit——GWTJavaAJAX编程》是一本使用Java创建AJAX应用的GWT实用指南,从下载和安装GWT开始,手把手教读者如何创建、测试、调试和部署GWT应用。 《GoogleWebToolkit——GWTJavaAJAX编程》采用了许多生动有趣的示例,引导读者逐步深入到AJAX和GWT的精彩世界中。 通过阅读《GoogleWebToolkit——GWTJavaAJAX编程》,熟悉Java语言的读者可以在非常短的时间内掌握GWT提供的丰富功能,迅速成为熟练的AJAX应用开发人员。 《GoogleWebToolkit——GWTJavaAJAX编程》适合对AJAX和Web2.0感兴趣的Java程序员阅读使用。