引言
自从2023年通义灵码发布以来,这款基于阿里云通义大模型的AI编码助手便迅速成为了开发者们心中的“明星产品”,受到了广大开发者的关注与好评。它不仅为个人开发者提供了强大的支持,帮助企业团队提升了研发效率,同时也推动了软件开发行业的创新发展。而我,作为一位通义灵码的忠实用户,有幸见证了这款工具从最初的版本逐步成长、完善至今日的历程。
在过去的一年里,通义灵码不断推出新功能,每一次更新都带来了令人惊喜的变化。从最初的基本代码生成与补全功能,到现在的智能代码优化、自动化测试案例生成乃至项目架构文档、流程图的自动生成,每一个进步都代表着通义灵码向着更加智能化、高效化的方向迈进了一大步。特别是最近推出的个人版和企业版新功能——@workspace、@terminal 和 #team docs,更是让开发者们体验到了前所未有的便捷与高效。
在这篇文章中,我将以一名安全运维工程师的视角,深入探讨通义灵码最新版本的特性,围绕其最新发布的@workspace、@terminal 和 #team docs功能,分享我的使用心得以及这些新功能如何帮助我在实际工作中解决问题、提高效率的具体案例。希望通过我的分享,能够让更多开发者了解到通义灵码的魅力所在,共同探索AI技术在软件开发领域的无限可能性。
最近也是撰写了几篇实践,希望各位看官能够多多提出宝贵的意见和建议:
【灵码助力安全1】——利用通义灵码辅助快速代码审计的最佳实践
【灵码助力安全3】——利用通义灵码辅助智能合约漏洞检测的尝试
通义灵码新功能简介
此次灵码新增的功能主要有三个,分别是:@workspace、@terminal 和 #team docs,下面我们来详细介绍。
@workspace(个人版)
@workspace本地工程问答:主要面向开发者,通过集成先进的RAG技术,深度解析和理解本地代码库,为用户提供包括代码导航、智能问答、需求实现建议、代码生成与优化等一系列服务。这项功能旨在帮助开发者快速上手新项目、高效解决编码过程中遇到的问题,并提升整体开发效率。无论是在理解复杂的项目结构,还是在寻找特定代码片段、实现新功能需求等方面,@workspace都能提供强有力的支持。
@terminal(个人版)
@terminal问答:该功能能够帮助开发者在不离开当前开发环境的情况下,快速生成和执行命令行指令。这一功能特别适合于那些经常需要在终端中执行各种操作的开发者,比如运行脚本、构建项目或是执行版本控制系统命令等。通过@terminal,用户可以使用自然语言描述他们想要执行的操作,通义灵码将根据用户的描述智能地生成相应的命令行指令。此外,@terminal还支持命令行指令的解释功能,对于已经存在的命令,用户同样可以通过自然语言询问其含义或用法,通义灵码会给出清晰的解答,帮助开发者更好地理解和使用这些命令。
#team docs(企业版)
team docs知识库问答:该功能是一项结合了企业内部私域知识信息的智能问答服务。这项功能允许开发者在智能问答窗口中通过输入#team docs标签并提出具体问题,通义灵码将利用企业知识库中的文档、代码等资源,为企业内部用户提供更加精准、个性化的回答。这意味着,无论是新手员工对企业编码规范的疑问,还是资深开发人员在实现特定功能时对内部API文档的查询,#team docs都能提供即时的帮助,加速问题解决过程,提高开发效率。通过这种方式,通义灵码不仅加强了团队成员之间的知识共享,还促进了企业内部知识的积累和传承。
@workspace基本使用
因为我个人偏好于使用VScode,所以此处仅以该编辑器为例来进行演示
在通义灵码中输入【/】,唤起插件功能
拖入某网关源码到工作空间中
选择@workspace模式,给出prompt如下:
请详细分析这部分代码,告知每个文件夹下是做什么的?
但是注意,偶尔也可能出现差错,这种情况下请重新给入prompt尝试
正常情况下,灵码会给出对当前工作空间文件的整体分析
但是经过这段时间的测试,发现的一个问题就是,灵码的used references数量其实是有限的
如果当源码中文件数量过多,比如这次网关源码里面文件有接近一百多个时,used references的数量和准确关联程度就会大大降低,比如上面给出的整体分析结果其实并不准确
如果我调整成让灵码为我分析某个文件夹下的文件功能,此时就会相对准确了
请帮忙分析portal_auth文件夹下的文件内容作用
如果遇到新的需求,或者说想自己新增一个功能让其能力更加完善和闭环时,也可以直接在灵码中提出,此时也是最好聚焦到某个文件夹下或者具体到某个文件中
请帮忙分析portal_auth文件夹下的文件内容作用,并在原有基础上新增一键加入黑名单的功能
此时灵码给出的回复如下:
也是成功在原代码的基础上进行了一些修改,实现了对新需求的增加
由于我个人实践其实更加偏向于安全和代码审计方面,所以这里我简单演示一下如何借助该功能进行辅助审计
假设此时已经借助静态代码分析工具完成了第一轮机器扫描,定位到了某个可疑文件夹下
回到灵码中,给出prompt如下:
请帮忙判断sys_manager文件夹下是否存在安全漏洞,如果有,请给出详细的漏洞原因,不需要给出修复方法。
这一块在我之前的实践文章中也提到,一定要强调不需要给出修复方法,否则会默认给出修复后的代码。
此时会给出一个大致的分析,我们再结合刚才的静态代码分析结果进行对比判断
进而定位到其中的一个文件中
此时就可以再指定灵码对该文件的方法进行详细分析
请帮忙判断backupsettings.php文件是否存在安全漏洞,如果有,请给出详细的漏洞原因,不需要给出修复方法。
可以看到,灵码给出了一个十分详细的漏洞分析报告,后面再通过灰盒方式验证是否存在即可
@terminal基本使用
这一块可以理解成专门调优之后的命令行编码助手,相比于普通通义灵码的话,这个功能的优势在于可以模块化的分解命令行脚本,而且不会像灵码那样直接一生成就是一大段
比如我们给出prompt如下:
我想编写一个定时任务脚本,每周日把服务器重启一次
可以看到回复是极其的干净和整洁
对于安全工程师来说,我也可以让它给我生成一段用来Linux机器入侵检测的检查脚本:
生成一段用来Linux机器入侵检测的检查脚本
对于Linux机器的入侵检测脚本,可以包含多个检查点,例如检查系统日志、查看当前登录用户、检查网络连接等。以下是一个简单的示例脚本:
#!/bin/bash
# 检查最近的登录记录
echo "最近的登录记录:"
lastlog -b 7
# 检查当前登录用户
echo "当前登录用户:"
who
# 检查网络连接
echo "当前网络连接:"
netstat -an | grep ESTABLISHED
# 检查系统日志中的异常
echo "系统日志中的异常:"
grep -i "failed\|error\|warn" /var/log/syslog
# 检查SSH日志中的失败登录尝试
echo "SSH日志中的失败登录尝试:"
grep "Failed password" /var/log/auth.log
# 检查计划任务
echo "计划任务列表:"
crontab -l
# 检查最近修改过的文件
echo "最近7天内被修改过的文件:"
find / -type f -mtime -7 -exec ls -l {
} \; 2>/dev/null
# 检查监听端口
echo "监听端口:"
netstat -tuln
# 检查进程
echo "当前运行的进程:"
ps aux
# 检查用户列表
echo "用户列表:"
cat /etc/passwd
# 检查SUID/SGID文件
echo "SUID/SGID文件:"
find / -perm -4000 -o -perm -2000 2>/dev/null
自己再稍加修改即可投入使用
除了快速生成外,该模式下也可以一键调用命令行快速执行,点击此处的【Insert to Terminal】
一键执行命令
#team docs基本使用
该功能需要进入到企业版下才可使用,不过目前刚好有30天限免活动,大伙可以免费领取体验一下
这里根据自己实际情况填写即可
回到VScode中,退出个人版,选择企业开发者(标准版):
此时就可以开始使用#team docs能力了,但是突然发现按钮还是灰色的,查了一下,可能是需要先建知识库的缘故
回到云效灵码的那个界面,接下来我们开始创建知识库
单击侧边栏上的知识管理按钮,进入知识管理页面,在知识管理页面,点击新建知识库按钮。
新建2个知识库,权限设置为公开:
点击下载规范文件,此处为示例,实际请根据自身单位情况指定对应文件
进入刚创建的知识库内,单击添加数据按钮,即可进入添加数据页面
数据类型为文档,单击或拖拽文件到上传区域(灰色区域)即可上传知识库文档,上传完成后,单击确认添加即可成功添加,相关文档会进入数据处理流程。
等待处理完毕即可
同理,在企业代码知识库中也加入对应的知识
确保数据处理完成后,数据准备阶段即告结束
点击开启企业规范知识库的检索增强功能开关,但是注意,开启后,只有在通义灵码IDE插件中使用智能问答功能时,才会支持企业知识库问答增强。
好吧,看来不得不用了
在IDE中,打开灵码,输入#team docs
给出prompt如下:
Java代码规范中的异常处理规范包括哪些内容?
即可看到通义灵码根据提供的企业Java开发规范文档,回复异常处理规范的关键要点,如图:
同理,也可开启企业公共代码库检索增强功能开关,体验企业代码补全增强
在文件中输入如下所示代码,在注释所在位置回车,灵码会根据知识库中上传的代码,自动进行补全,第一次回车灵码将基于上下文代码生成补全建议,第二次回车灵码将根据企业代码库中的代码进行补全。按Tab键可以采纳代码
render() {
// @ts-ignore
const {
fetchingNotices, onNoticeVisibleChange } = this.props;
const noticeData = this.getNoticeData();
const unreadMsg = this.getUnreadData(noticeData);
return (
<NoticeIcon
className={
styles.action}
count={
0}
onItemClick={
(item: INoticeItem) => {
this.changeReadState(item);
}}
/* 说明:在此处通过回车,触发代码补全 */
>
</NoticeIcon>
);
}
但是注意,长度有限,不能太长了
总结
这次体验下来,总的来看新功能还是都很实用的,三项功能各有其长处,也都可以在其擅长的方向提升使用者效率。
下面我们再次以一图流来回顾一下
希望这些新功能能够帮助更多开发者和团队提高工作效率,更好地应对各种开发挑战,感谢您的关注和支持!