首页 > 其他分享 >通义灵码实战系列:一个新项目如何快速启动,如何维护遗留系统代码库?

通义灵码实战系列:一个新项目如何快速启动,如何维护遗留系统代码库?

时间:2024-05-07 15:58:57浏览次数:14  
标签:通义 代码 如何 开发者 IDE 灵码 模型

作者:别象

进入 2024 年,AI 热度持续上升,翻阅科技区的文章,AI 可谓是军书十二卷,卷卷有爷名。而麦肯锡最近的研究报告显示,软件工程是 AI 影响最大的领域之一,AI 已经成为了软件工程的必选项,也有研究称开发者每天的事务性工作可能占到了七成左右,比如单侧编写等,而这部分恰好是 AI 所擅长的。让大模型辅助工程师加速编码和提升质量,可以让我们更加聚焦于剩下的 30% 的业务和技术创新。

日常工作中经常听到工程师的一些诉求和痛点。比如说单元测试编写比较费时间;接手了一个新的代码库,一些祖传代码理解成本比较高;排查问题查资料要跳转到一些浏览器,并且很难找到合适的答案,会显得焦头烂额。我作为智能编码研究者,同时也是开发者,这次终于能够华佗打点滴,医者自医了。

总结下来,开发者的主要诉求有三点,1)快速编码,快速解决问题,快速完成需求。2)减少 IDE 跳出,享受沉浸式心流。3)减少重复编码,排除语言限制。

比如我要做一个网页,虽然我不懂前端,但在大模型辅助下,可以帮助我编写 HTML 和 JS 的代码,这样我能够更加聚焦于业务的实现和创新。一句话概括来讲就是开发者来 IDE 只干三件事,写代码,写代码还是写代码,通义灵码便是以编码助手的形态来帮助开发者提质和提效的。

通义灵码的核心功能有行级/函数级的自动续写、自然语言编码、注释生成、单元测试生成、代码解释、代码优化、异常报错、智能排查、技术文档搜索等等。同时它也提供了企业化个性能力,比如报表展示以及专有云的各种部署形态。

通义灵码支持 Java、Python、Go 等 200 多种主流编程语言,目前已经在 VS Code 和 JetBrains 全家桶 IDE 上的插件市场上架了,大家诉求很高的 Visual Studio 也即将在下个月上架, 并且这些 IDE 的远程开发模式也都是支持的,比如说 Remote、SSH、WSL 等等。

总体来讲通义灵码是基于通义大模型,结合海量开源知识以及阿里云的文档 SDK 开发的,从而有了上层的代码补全和研发问答的核心能力。再上层便是我们工程侧,比如说有问答意图识别、用户习惯学习、Prompt 工程、跨文件学习等等。从基模到垂直领域的模型,再到端侧核心能力的整体同步建设,支撑了我们在 IDE 上可以使用通义灵码这款产品。

通义灵码能力展示

有同学会问了,纸上得来终觉浅,来点实战行不行?

01/ 使用 Spring Boot 创建一个新项目

接下来就使用 Spring Boot 创建一个新项目作为案例向大家展示通义灵码的能力。首先我们向灵码提问:如何通过 Spring Boot 编写一个照片上传下载的 Web 程序?灵码马上就能反应过来并开始生成,先是编写 Spring Boot 的 XML 文件以及一些数据结构配置文件,接着写 controller 层、service 接口以及 service 的实现类,大家会看到 AI 写代码的速度是很快的,并且思路非常清楚,知道需要哪些文件以及步骤,以及怎么把 Web 服务给部署起来。

我们可以随时随地和灵码通过问答的方式来交互。 如果你对它的回答有任何的不满意,或者是想让灵码扩充一些比较概括性的代码,让它续写一下,再或者是遇到了某种报错或特别的诉求寻找解决方案等等,都可以通过追问的方式进一步和灵码沟通,灵码会很乐意在问答的的过程中为你提供帮助。

比如我提问有没有通过 memory 的内存的数据库来存储的例子,而不是用 mysql 数据库,灵码就可以领会我的意思,并提供一个 redis 的方案来做这个存储。

02/ 维护遗留系统代码库

另外一个比较常见的场景是我们作为工程师会经常去维护别人留下来的一个老旧系统,可能里面也会有一些祖传代码。那么灵码解释代码这样一个预知任务的能力就可以更好的得到体现了。

比如说有这样一段代码,if else 非常多,也比较杂乱。我们可以点击方法上方的一个快捷入口,让灵码解释一下。这里我们有一个设计,就是灵码会首先给出一个相对比较简短的 high level 解释,帮助开发者能更快的理解这段代码的意思。如果开发者想要更加具体的一些解释,可以通过我们底下的追问按钮有更详细的回答,英文系统叫 in detail,灵码会给出更加具体的解释。

单元测试也是个老生常谈的话题,人人都知单测好,但是能真正做到的又不多。单元测试可以提高代码的可维护性,让代码更加健壮,并且其他人来接手的时候也可以更好维护一些,但是工程师的日常开发需求会更大一些。

单测客观上讲,在短期内是肯定是相对费时间的一件事情,但很多开发者就会往往追求短期的省事,而抛弃了远期的利益。而灵码就可以更加快速的帮助工程师来编写单元测试,提高单测的覆盖率,提升代码库的可维护性。

代码优化也是一个高频场景,之前有很多用户的诉求,希望有这样一个能力。用户可以通过框选右键,也可以点击方法上方的快捷入口来触发代码优化。不过客观上讲,代码优化它是一个很宽泛的词,它设计了风格优化、缺陷修复、程序重构、安全性优化等等。所以我们也在尽我们所能来提升代码优化的模型能力,让开发者的代码质量更高。

最后介绍一下我们的运行调试错误排查能力。当 IDE 遇到一些 runtime 报错的时候,灵码会在报错堆栈中提供一键排错的功能,点击一键排错的按钮后灵码会自动的采集报错堆栈,并定位到出错代码的上下文,帮助用户生成一个报错排查的提示词来提问模型,寻求解决方案。这个功能目前在 IDEA 和 Java 中放开,后续也会在各个端侧和各个语言中放出。

通义灵码的产品亮点及优势

首先通义灵码产品特别关注开发者的体验,开发者是我们的用户。我们针对 IDE 的原生视觉做了很多交互设计上的努力,来贴合开发者的使用习惯。同时在编码过程中,通过补全的触发时机、长度选择、模型速度等层面都做了处理,助力开发者的编码心流体验。

朱熹老先生说过,读书有三到,谓心到眼到口到。对于灵码来说,要生成的准,需要:

  • 一是修炼内在,强大模型,学习更多的优质数据,比如阿里云自身的一些 SDK 跟 OpenAPI。
  • 二是提示词工程,用精雕细琢的提示词配合模型训练,使生成的效果加倍提升。
  • 三是眼观六路,比如真实的开发者要写对下一行代码,不光要眼看当前文件的上下文,也要知道一些跨文件信息,比如调用另一个文件中的某个方法,这样可以减少一些幻觉问题的出现。

最重要的,也是开发者比较关注的安全可控因素。通义灵码在大模型的生成过程中,所有代码数据仅会用于模型推理,中间不会做任何存储,更不会用来训练。同时我们也提供了两个模型,一个是云端大模型,另外一个是纯本地运行的小模型,不联网、速度快。这两种模型支持一键切换,满足我们在不同网络环境以及不同的补全强度诉求下的编码需求。

点击此处,快速体验通义灵码

标签:通义,代码,如何,开发者,IDE,灵码,模型
From: https://www.cnblogs.com/yyds114/p/18177488

相关文章

  • 通义灵码实战系列:一个新项目如何快速启动,如何维护遗留系统代码库?
    作者:别象进入2024年,AI热度持续上升,翻阅科技区的文章,AI可谓是军书十二卷,卷卷有爷名。而麦肯锡最近的研究报告显示,软件工程是AI影响最大的领域之一,AI已经成为了软件工程的必选项,也有研究称开发者每天的事务性工作可能占到了七成左右,比如单侧编写等,而这部分恰好是AI所擅长......
  • 深入剖析:如何使用Pulsar和Arthas高效排查消息队列延迟问题
    背景前两天收到业务反馈有一个topic的分区消息堆积了:根据之前的经验来看,要么是业务消费逻辑出现问题导致消费过慢,当然也有小概率是消息队列的Bug(我们使用的是pulsar)。排查通过排查,发现确实是在一点多的时候消息堆积了(后面是修复之后堆积开始下降)。于是我在刚才堆积处查......
  • 在Linux中,如何在Linux中配置高可用性(HA)?
    在Linux中配置高可用性(HA)通常涉及设置一个集群环境,使得当主服务节点发生故障时,备用节点能够自动接管服务,从而保证服务的连续性和可靠性。以下是配置高可用性集群的基本步骤,这里以常用的Pacemaker和Corosync组合为例,这是现代LinuxHA解决方案的核心组件:1.环境准备确保网络配置:......
  • 如何完美解决Outlook大文件传送问题,提升办公协作效率?
    在日常工作中,邮件是一种常用的通信方式,经常用来发送各类文件,比如报告和文档、合同和协议、财务报表、营销资料、设计文件等。但有时文件会比较大,因此Outlook大文件传送时,会遇到附件大小受限的情况。常用的解决发送大文件的问题有以下几种:  1.压缩文件:如果文件大小接近限制,可......
  • 如何安全可控地进行内外网跨网络传输文件?
    跨网络传输文件通常指的是在不同的网络环境之间移动数据,这在现代企业运营中非常常见。随着网络技术的高速发展,为了有效地保护内部的核心数据资产,企业一般会采用内外网隔离的策略。在进行内外网跨网络传输文件时,需要考虑多种因素,包括但不限于安全性、效率、合规性、技术支持等。......
  • 如何根据二叉树遍历结果快速绘制二叉树
    一、已知前序遍历和中序遍历(1)前序遍历(根结点--->左子树--->右子树)ABDGHCEIF(2)中序遍历(左子树--->根结点--->右子树)GDHBAEICF注意:在最后连接二叉树时,注意先完玩左子树,再连右子树二、已知前后序遍历和中序遍历(1)后序遍历(左子树--->右......
  • 如何实现一个简单易用的 RocketMQ SDK
    2018年,做为架构负责人,接到一个架构需求:实现一个简单易用的RocketMQSDK。因为各个团队RocketMQ原生客户端配置起来千奇百怪,有的配置存在风险,各团队负责人都需要一个简洁易用的RocketMQSDK。我立马调研相关开源的方案,当时RocketMQ-Spring项目并没有开源,而阿里云的ONS......
  • 如何用递归实现二叉搜索树的增删改查
    点击查看代码/**@Author:WangYiMing*@Date:2024-04-2323:37:21*@LastEditors:WangYiMing*@LastEditTime:2024-04-2618:22:35*/#include<stdio.h>#include<stdlib.h>///@brief二叉树基础结构typedefstructbinary_tree_node{intdata;stru......
  • 如何使用 JavaScript 获取当前页面帧率 FPS
    可以通过计算每秒 window.requestAnimationFrame 的调用频率来做为FPS值。它接收一个回调函数,该回调函数会在浏览器下一次重绘之前执行。所以只要我们循环调用并记录单位时间内的调用次数就能计算当前页面的帧率了。效果展示在线预览-使用JavaScript获取当前页面帧率FP......
  • [JUCE库]关于JUCE如何生成动态链接库 juce-7.0.1-windows
    前言当我们在使用JUCE库的时候,可能会需要使用到静态链接的方式,还好的一点是JUCE本身提供了CMake编译,也提供了单独的sln编译。本文章仅针对juce-7.0.1-windows,由于不同版本之间差异较大,可能不能通用,但主要的不同点都在修改源码那个环节。编译流程找到源码中提供的编译方案修......