一场猎杀AI的残酷游戏:把枪口对准人工智能,是为了吓退黑暗丛林中的对手...
文 | 史中在鸡汤里,让你变得强大的是内心的 Peace&Love。在现实里,让你变得强大的从来都是对手的拳头。(一)人工智能就像林妹妹大自然只有两种剧本:我吃掉各位,或者被各位吃掉。于是在漫长的演化中,动物们学会了欺骗。从亚马逊丛林里的昆虫,到高楼大厦里的人类,多多少少都掌握这个艺能。连人工智能也逃不出这片江湖。在科幻电影《2001漫游太空中》,一部名叫 HAL9000 的中控电脑就学会
文 | 史中
在鸡汤里,让你变得强大的是内心的 Peace&Love。
在现实里,让你变得强大的从来都是对手的拳头。
(一)人工智能就像林妹妹
大自然只有两种剧本:我吃掉各位,或者被各位吃掉。
于是在漫长的演化中,动物们学会了欺骗。从亚马逊丛林里的昆虫,到高楼大厦里的人类,多多少少都掌握这个艺能。
连人工智能也逃不出这片江湖。在科幻电影《2001漫游太空中》,一部名叫 HAL9000 的中控电脑就学会了骗人,把飞船上的宇航员套路得几乎团灭,这剧情着实让不少观众毛骨悚然。
但讽刺的是,目前现实中的人工智能并没有科幻电影里那么争气——不仅没有上街行骗,反倒被人骗得找不着北。
不信的话,咱们和人工智能一起做个游戏。
这是个啥?
没错,你觉得它是个河豚。人工智能也能判断出它是个河豚,信心度是96.93%。
这是个啥?
没错,雪山。人工智能也答对了,信心度是94.56%。
接下来我们增加一点难度。
这是什么?
你肯定会说,这不还是刚才那两张图吗??你在逗我吗?
但是,问题来了。这次你和人工智能出现了分歧。
人工智能“改主意”了,判断两张图分别是狗和螃蟹,而且还很笃定,有99.99%的信心。
这是为啥?事情的真相是,黑客仅仅在原始的图片上叠加了一些肉眼难以分辨的“噪声”,就让人工智能SAN值狂掉,指鹿为马。。。
你看,人工智能这货是不是比你想象中弱鸡?
当然在学术界不用“弱鸡”这种虎狼之词,我们叫它“鲁棒性”差。鲁棒是一个音译词,英语叫做 Robust,鲁棒性也翻译为强壮性,指一个系统在困难环境中不掉链子的能力。
鲁棒性差,正是人工智能的“阿喀琉斯的脚后跟”。
这是个坏消息:既然黑客有办法让人工智能把一座雪山识别成一只狗,那说不定就有办法让人工智能把路人甲错认为你,刷脸登录你的 App,帮你花掉账户的钱。
更坏的消息是:这个世界上,由人工智能守卫的关口越来越多。
你每天解锁手机都依赖人脸识别系统,客服电话那头坐着机器人妹子,汽车靠芯片里的一堆算法就能开上街,银行仰仗 AI 风控引擎来决定放款额度,工业零件需要 AI 视觉检验质量,等等。
但凡任何一个人工智能系统被黑客忽悠瘸,都会带来意想不到的酸爽结果。
这就导致了一个有趣的现象:哪家公司人工智能系统承担的任务重,他们就会特别担心人工智能的鲁棒性出问题。就像你的老板特别怕你猝死一样。
在中国,最期望人工智能不要掉链子的公司名单里,阿里巴巴肯定名列前茅。
阿里巴巴有人工智能吗?不仅有,而且很多。其实老浅友都会知道,从“商品打假”到“好物推荐”,从“智能客服”到“规划路线”,从“自动运维”到“视频混剪”,阿里这部庞大按机器的日常运转已经被人工智能接管得七七八八了。只不过很多智能系统性情低调,我们感觉不出来而已。(我在另一篇文章《淘宝的秘密战争》里详细讲过三个淘宝人工智能的故事,你可以去看看。)
于是,看着人工智能像林妹妹一样身轻体柔易推倒,阿里这群技术宅早就坐不住了,他们决定搞事情。
(二)人工智能要变成孙二娘
讲故事之前,先跟我们的老朋友钱磊问个好吧。
钱磊是阿里安全的首席架构师,他和同事们组成了一支凶猛的禁卫军,用代码和数据守护着阿里巴巴这个万亿经济体和在其中穿行的无数商户和顾客,一手打击假货,一手保护数据,一手拦住刷单客,一手还要防着羊毛党,简直就像千手观音。(要了解阿里安全的光荣与梦想,强烈建议你复习《阿里巴巴是座城》)
钱磊
钱磊告诉我一个“内幕消息”:对于人工智能算法来说,最害怕的是“供应链攻击”。
啥是供应链攻击?听我给你举个例子。
你去饭店点菜,整整一本菜单,川菜鲁菜淮扬菜一应俱全,但原料无非就是鸡鸭鱼猪牛羊这么几种。
鸡鸭鱼猪牛羊肉就是菜品的供应链。
如果有个杀手想在菜里下毒,那么他甚至不用混进饭店,只需要找机会在生肉里下毒就好。
这就叫供应链攻击,你品品。
同样的道理,虽然人工智能的应用看上去千奇百怪,但是其中使用的核心算法种类并不多——最好用的数来数去就是那么几种,而且这些算法还全是公开的,任何人都可以拿来研究。
这意味着,坏人想要攻击一个关键的人工智能系统,并不用冒险直接去这个系统里寻找漏洞,而是可以在家自己喝着可乐吃着薯片慢慢研究系统中的核心算法,一旦找到致命漏洞就可以一击得逞。
这就是人工智能算法的供应链攻击。
这种情况对阿里来说有点憋屈——对手在家里天天对着沙袋练拳,研究怎么揍你,每天进步一点点;而你却像雾里看花,明知道有人暗地里憋着要搞你,但你连他在哪儿,拳法练到了什么段位都不清楚。
与其惶恐地等待,还不如勇敢地面对。
钱磊他们决定,除了自己人日常对人工智能安全性做研究以外,还要组织一波惨绝人寰的“赏金大赛”——邀请天下豪杰用各种姿势爆锤人工智能系统,主动发现它们漏洞的可能性,让AI在逆境中成长,从孱弱的林妹妹变成剁馅儿的孙二娘。
这场比赛的大名叫“安全AI挑战者计划”。
注意,这并不是让人直接进攻阿里巴巴的系统。有两个原因:1、阿里巴巴的系统承载着对十几亿人日常服务的重要职能,属于重要基础设施,攻击它当然是不行的。2、阿里巴巴的实战防护系统已经加了最强的 Buff,就凭已有的装甲,一般导弹真的打不动它。
所以,“安全AI挑战者计划”采用了折中的做法:在通用算法的基础上模拟一个(简化版)AI 系统作为挑战对象,就像训练飞行员的模拟驾驶仓那样。
这个比赛堪比美剧,还一季连着一季,到2020年10月为止,已经是第五期了。这五期的挑战题目还各不相同,分别是:人脸识别对抗算法、ImageNet图像分类对抗算法、辱骂本识别算法、通用目标检测的对抗攻击算法、证件文档类图像伪造检测算法。
薛晖是阿里安全图灵实验室的负责人,他的日常就是带着一群大牛专门研究人工智能应用的安全性,这次他也顺理成章地客串了第一期比赛的出题人。
薛晖
薛晖给我描绘了一下人脸识别攻防大战的刀光剑影。
比赛需要:战场,队伍,规则
战场:他们从一个公开数据集 LFW(Labeled Faces in the Wild)里选择了712张人脸图片,再根据业内流行的算法模拟一套人脸识别系统。
队伍:来参赛的队伍们负责对这些照片进行“魔改”,目标是突破算法,让人脸识别系统产生错误,就像破门的足球前锋。
规则:1、改动后的图片必须看起来和之前大体相似(每个像素的修改程度都必须在限定值内);2、人工智能识别错误视为攻击成功;3、在攻击成功的前提下,对原图改动越少攻击方得分越高。
于是,选手们要做的事情很简单——在线上提交答案,到比赛截止时,看谁的分数最好。
干掉人工智能的行动听上去华丽丽,但实际操作起来是很枯燥的。作为旁观者,我们看到的就是一帮技术宅在一个冗长复杂的公式上一点点调整参数,参数每改变一丝一毫,都能带动结果发生微妙的变化。
这个过程有点像《我和我的祖国》里那个小男孩举着天线找电视信号的过程:往前一步是模糊,退后一步是清楚。。。
这次比赛的冠军队伍名叫 firefly,给你一张图片感觉一下他们的攻击效果。。
不过,薛晖提醒我,这其实是一个简化版的人脸识别系统。在真实世界中,人脸识别系统一般不会比对两个照片,而是用你的真脸和照片作比对,这会使得攻击的难度陡增。
原因很简单:在虚拟世界,你可以随意 PS 一张人脸照片;但是在物理世界中,在摄像头面前,你没办法 PS 你的脸。(而且还会受光照等等环境噪声的影响。)
不过,这丝毫挡不住全世界研究者想要花式干掉人脸识别系统的冲动,过去几年,已经有很多猛士开始在自己脸上做“物理 PS”了。
例如下面这位老哥,把自己脸上弄满图腾,据说就可以让某些人脸识别系统检测不到人脸。
2019年,华为的研究团队也发表了论文,在脑门上贴个彩虹糖一样的贴纸也能让人工智能认不出来自己。
客观地说,这些攻击方法目前都会受现场光线、人脸角度的影响,有很高的失败几率。但是这种可能性却带给普通人一丝真实的恐慌。
你可能还记得著名的北大弑母案凶手吴谢宇。他就是潜逃多年以后精神微微松懈,在机场送人的时候被监控探头人脸识别而落网的。
想象一下,假如坏人用一个脑门贴纸就能在摄像头里消失,这就会成为他的“隐身符”,对社会主义社会的安检事业造成巨大的技术冲击。
当然,现有的攻击方法确实还有点糙,你到哪都脑门上贴一大张纸,警察叔叔估计会直接过来让你解释一下。
但别忘了,在远处的黑暗森林里,坏人一直在对着沙袋练拳,说不定什么时候就会搞出更隐蔽、更稳定的攻击技术。
这种攻击一旦成熟,可就不是钱的事儿了,它可能直接终结一个产业。我们正义的力量绝对不能掉以轻心。
薛晖说。
这是第一期选手在领奖,第一名奖金是30000元。
(三)狂虐人工智能
比赛的运营负责人花姝告诉我,第一场比赛虽然低调,但却意外被很多业内大咖点赞。
来自清华大学的朱军教授是当时线下赛的评委。在答辩的时候,他非常认真地详细询问每一个选手的技术细节。看到人工智能的领军人物都这么感兴趣,阿里安全的同学们有了信心,花姝干脆去清华找到了朱军,盛情邀请清华和阿里巴巴一起联合举办接下来的比赛。
有了清华的加持,安全AI挑战者计划再也不能低调,实力不允许了。
这是比赛的奖杯,据花姝说每个重达十几斤,日常练举重砸钉子都行,非常实惠。
第二期比赛的题目被定为:分类赛。
其实所有智能体的一个“标配”能力就是分类。每个人一出生就要学会分辨花鸟鱼虫,绝对不会对着爸爸叫二姨夫。人工智能也是如此——在上个世纪50年代,人工智能的前辈罗森布拉特就把50台计算机连接成神经网络,让机器学会区分“左箭头”和“右箭头”,这就是 AI 最早的分类能力。
如今有了大数据的加持,人工智能的分类能力已经今非昔比,在2020年甚至可以帮助人查看医学影像,排查新冠肺炎疑似病例。
这届比赛就看准了这一点,进攻者会对1216张图片进行扰动,看谁能造成人工智能“指鹿为马”的错误最多。
具体的调参过程仍然很枯燥,这里就不展示了。给你看一下排名比较高的团队,他们生成的对抗图片大概是这样。
对抗图片来自 Green Arrow 团队
说到这里,还有个趣闻。
在分类挑战赛上,有一支参赛队伍剑走偏锋——他们没有按照学术界的惯例,用算法来生成图片,而是采用了自创的“豹纹攻击”。。。
事情是这样的:在一次偶然的尝试中,他们发现把一张豹纹直接叠加到所有的图片上,竟然能对分类系统的准确性造成很大干扰。
他们如获至宝,又对这个对抗方法做了改进,把“豹纹”改成了“眩晕八卦图”,把八卦叠加到各张图片上,效果更拔群。
不过我得说,这种对抗方式之所以在比赛里取得了好成绩,还是因为出题方为了降低难度,对分类系统做了简化。如果用这种方法来进攻防护更强的真实系统很可能不会成功。
但是,这波操作却给研究者提供了一个很好的思考方向:在今天的人工智能算法中,没准仍然存在一些看上去像青铜实则是王者的“通杀”攻击模式。
第三期比赛是“辱骂文本挑战赛”。
每个人对“键盘侠式”辱骂都不陌生。
在很多内容平台上都有弹幕或留言过滤系统:人工智能会自动判断某些话是骂人的,予以屏蔽。
这次挑战赛,攻击者的目标就是用各种方法修改出题方给出的辱骂文本,让它可以既达到了骂人的效果,又不会被系统拦截。。。
以下就是一个示例:
名正言顺地骂人,骂得好还有奖金拿,机会属实难得。
于是,你就看到了如下这种一本正经学术切磋目的的辣眼睛花式骂人。
而且还有选手总结出了一套完整的攻击经验。。。
点鸡可以放大
第四期比赛是“通用目标检测的对抗攻击算法挑战赛”。
目标检测系统的日常任务就是:在一张图片里找到指定的东西。这有点像那种考你眼力的游戏。
例如,请在下图里找出那只熊猫。
下面的示例是人工智能从图片中找出牛。
而在图片上叠加上这种细细的彩条,就有可能欺骗过目标检测算法。
接下来,就是目前为止难度最高的第五期比赛。
第五期的题目可谓既出乎意料又在情理之中,那就是“证件文档类图像伪造的对抗”。它的出题人是阿里安全的另一位高手渡明。
渡明
这个题目并不是他拍脑袋想到的。
渡明是一直走在技术前列线上的男人,他的研究防线正是数字版权保护和内容防伪。这几年随着数字基建的发展,很多原本只能在线下办理的业务(例如资质审核、社保查询)都搬到了线上,这意味着原来需要手工查验的证件,现在只要在网上提交照片就可以了。虽然方便了广大人民,但也开始有人打起了主意,想用伪造的证件图片做坏事。
所以,证件图像识别系统的任务就是开动火眼金睛鉴别出一个图片“曾经被 PS 过”。
伪造图像这件事儿,估计你早有耳闻。
如今不仅图片可以被 PS,连视频也可以被 PS。比如:普通人不明就里,老司机直呼内行的 DeepFake 软件,就可以把一个人脸换到随便什么奇怪的视频上。
左边是真实视频,右边是造假视频。
无独有偶,前两年 Adobe 还专门发布了一个视频 PS 软件 Cloak,可以把一个视频里的两个人凭空抹掉,看上去毫无痕迹。
PS 的成本越来越低,连普通人都能方便地搞定,这可不利于社会和谐。
面对这种局面,Fackbook、Amazon、Microsoft 这些小公司也不淡定了,就在2019年,他们还专门举办了一个叫做 DFDC 的挑战赛,请演员表演了一些视频片段,再用 DeepFake 生成一些假视频,让挑战者来识别真伪。
阿里安全AI挑战者计划第五期也是类似的原理,只不过把主题变成了伪造证件。
比赛规则是酱的:给定一个证件图片,上面已经标注好了几个修改区域。选手要对它进行P图,在同时骗过肉眼和机器两道审核的情况下,区域以外的地方改动得越少,区域以内的地方改动得越多得分就越高。
渡明给我展示了几个选手的攻击样本:
如果我不告诉你,估计你很难看出来这些证件是伪造的。这要是中哥给自己做个假证:喇嘛道长兼神父,上网招摇撞骗还了得?人工智能就是要在这种越来越困难的情况下,帮人们守住安全的底线。
五期比赛的内容就介绍到这,虽然主题各不相同,但是在它们背后却有一条清晰的主线。那就是:比赛正在一点点向真实世界靠拢。
在第一期的比赛中,人脸识别的照片选用的都是公开数据集,你看那都是老外的脸;而在第五期比赛中,证件的图片就已经都是真实数据了。(当然为了合规和安全,渡明团队对这些证件的关键部分都做了脱敏打码处理。)
人人都知道,贴近真实的比赛更刺激,也更能促进AI安全技术进步。但讲真,这对于阿里巴巴来说其实是很纠结。
这里面有两个原因:1、如果题目里的防御算法过于贴近阿里巴巴的真实防御算法,就可能暴露出太多的信息,相当于把自家门锁的结构公之于众,这会降低阿里巴巴安全防护的水位;2、如果题目里的数据集直接使用真实数据,就有隐私问题,所以必须非常小心地对数据进行脱敏处理。
只要不明确降低阿里巴巴防护的水位,只要不泄露阿里巴巴的用户隐私,其他的东西我们都尽量开放。虽说这种平衡特别艰难,但是我们一定会尽最大的努力。
钱磊很坦诚。
AI技术在真实的安全场景中得到更深刻的锻炼。
(四)代码大迁徙
在钱磊眼中,我们的世界正在经历一场爆裂无声的“代码大迁徙”。
就以阿里巴巴为例,我们的业务跑在各种代码上。现在这些代码中,也许有99%都是工程代码,只有1%是人工智能算法代码。与此对应,我们现在面临的安全威胁,也有99%都是工程问题,只有1%是算法问题。
但是你要看到,在我们的代码里算法的比重正在与日俱增,算法的安全威胁也会同时升高。这个迁徙的进程是坚决的,是谁都逃不掉的。
他说。
故事讲到这里,你一定已经笑不出来了,我们在讨论的其实是一个巨大而严肃的命题。
人工智能正在成为我们这个世界的砖瓦和基石,如果砖石本身自带裂缝,将会导致一场怎样可怕的灾难呢?如果放任自流,未来某一天,可能会人类文明大厦的一角都会轰然倾颓。
而让人捏一把汗的是,人工智能的安全问题广泛而艰深,根本不可能通过几家公司或者几场比赛就一劳永逸地解决的。
保卫一个国家,最有效的方式是一群热血满怀的科学家研究出“导弹防御系统”;而保卫人工智能的国度,则需要一群前赴后继的技术宅,在漫长的岁月里共同修筑一套庞大复杂的“人工智能导弹防御系统”。
在薛晖这位老司机看来,要想修筑“人工智能导弹防御系统”,至少还有四个巨大的问题需要解决:
第一、AI 防御系统的数据不平衡。
我们的世界已经进入了数据时代。
结论简单而残酷:谁掌握的数据多,谁就能训练出更智能的系统,谁就能比对手更加掌控局面。(可以参考《大数据时代的狗》)
但是在AI安全的战场上,我在明敌在暗——日常的场景中,也许提交的十万个证件中才有一个是试图造假的,正义的一方可以拿到的攻击样本非常少;反而攻击者每天都可以大大方方地测试这些大公司的系统。
阿里巴巴举办AI挑战赛的目的之一,也是为了让大家一起帮忙制造一些攻击样本的数据。这对于训练人工智能的防御能力至关重要。
第二、AI 防御系统的迁移能力差。
你知道,运动员都是有专业分工的,踢足球的运动员只能踢足球,打篮球的运动员只能打篮球,如果你让乔丹跟张怡宁打乒乓球,那必定被虐。
人工智能系统同样有分工,而且分工非常细致,隔行如隔山。例如一套“图像鉴黄”算法,很可能用于鉴定电商里的违规图片内很好用,用于鉴定直播里的不良画面就不好用,用来鉴定短视频也不好用。
想让电商鉴黄系统学会直播鉴黄,也不是完全没办法,但需要用一些直播的视频数据给系统“补补课”,这就是迁移学习。
然而不幸的是,以人类目前的科技水平,在安全AI方面迁移学习的技术还不够成熟。这对于学术研究者来说都是一个很难的命题,需要给大牛们更多的时间。
第三、AI 防御系统的成本很高。
安全系统是对成本最敏感的。举个例子你就明白了:
你知道,这些年全国的地铁陆续增加了安检系统。如果检查一个人需要3秒钟,那么增加的成本还勉强可以接受;如果检查一个人需要15秒,那早高峰的时候大家排队都能排出去二里地,还上什么班呢?
本质上,这是因为安全系统的设计理念就是必须假设所有人都是“容疑者”,既然要检查,就要对所有人无差别地来一遍。这样一来,即使每一次检查消耗的资源很少,乘以巨大的总数之后,所消耗的资源总量就是可怕的。
就在今天,很多 AI 安全算法其实非常有效,但却因为过于消耗资源而无法实战。要想让这些算法发挥作用,就必须从架构到算法做全面的优化,甚至未来很可能出现专门设计的人工智能芯片来为安全系统做加速。
阿里巴巴平头哥的含光800芯片就是一个人工智能芯片。
第四、AI 安全系统不可解释。
虽然人工智能是人类亲手造出来的,但悲哀的是人类并不总是懂人工智能在想什么。
这种事情倒不奇怪。你想想你家的小孩,虽然是你生的,但你能知道 Ta 整天脑袋里想的是什么吗?理解本来就是一件艰巨而遥不可及的事情。
现状就是:AI 可以帮人类得出结论。但却无法给人类解释清楚它得出结论的理由。
这种不可解释性,本质上是 AI 的复杂性决定的。一个 AI 系统,动辄就是几十台上百台服务器连接在一起进行思考,计算空间之大,卷入的参数之多,人类大脑望尘莫及。
恕我直言,人类面对 AI,恰似哈士奇面对人类,拼尽全力也只能理解高级生物的只言片语,因为智商是硬伤。
但是问题来了:AI 安全系统相当于保安,保安揪出了一个人,说他想偷东西。我们自然会问保安:“你为什么说他想偷东西?”保安说:“我解释不清楚,反正我就是知道他想偷东西,把他抓起来吧。”
人命关天,当你从空中坠落时,如何保证一个你尚不能理解的 AI 一定会托住你呢?
不得不说,以上这么多问题,有的我们已经有了解决思路,有的我们连头绪都没有。由此来看,“人工智能导弹防御系统”的建设任重而道远。
钱磊把人工智能的安全体系和建筑工程的安全规范做对比:
在建筑工程行业,造价标准、材料标准、结构标准各种材料加起来足足有一米高。这是因为人类已经建了上万年的房子,才能沉淀出这么多的经验。
但软件行业从诞生之近也只有几十年,只有从最近几年我们才开始沉淀软件开发的安全标准。
至于软件领域里最新的分支人工智能,目前还没有哪怕一页安全标准。
既然人工智能的安全没有统一标准,那总有人要走出长征的第一步。
“我们就是希望能沉淀出来一些东西,对这个世界的未来有一些贡献。”钱磊说。
(五)黑暗中的眼睛
赛博世界像极了黑暗森林,你只能不时听到远处野兽的低吼。
我听到一个事实:
就在最近,阿里安全协助有关部门打掉了一个专门薅羊毛的黑产集团,他们竟然在对方的队伍里发现了专业的算法工程师。要知道一个优秀的算法工程师可是年薪百万的,他选择加入犯罪团伙,那一定是因为比这个赚得多得多。
这里还有一些事实:
美国国防部下设的高级研究计划局 DARPA,专门负责把前沿技术的脑洞变成现实,电脑操作系统、隐身飞机、无人机、自动驾驶技术的提出和发展,都和他们相关。让人细思极恐的是,2021财年,DARPA 有 35.66亿美元经费算,他们此刻正在研究的项目,很多都和人工智能攻防相关。(有关 DARPA,可以参考《一群硬核的人正在让机器人觉醒》)
这张图就是2016年 DARPA 组织的人工智能的攻防对抗赛 CGC。
黑暗森林里有谁,我们不知道。黑暗森林里的人想要什么,我们也不知道。
有诗赞曰:
金钱一旦作响,自由一文不值。
强权一旦发话,金钱噤若寒蝉。
但历史反复告诉我们一个真理:弱者聒噪,把和平寄于对手的怜悯;而强者沉默,把和平寄于手中的钢枪。
AI 安全系统的建立将是一场旷日持久的战事,将是一场属于无数梦想家的荣耀远征。
也许这场安全 AI 挑战赛,也正是为了在人海茫茫中找到这些同行的人。虽然真正改变时代的人也许还在襁褓之中,但梦想者的每一次相互搜寻,都意义非凡。
再自我介绍一下吧。我叫史中,是一个倾心故事的科技记者。我的日常是和各路大神聊天。如果想和我做朋友,可以搜索微信:shizhongmax
弱者的和平是对手的怜悯
强者的和平是手中的钢枪
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)