AI大模型+软件开发,计算机从业者转行的契机?

c85542fd1f2af68750a85f6a4047a538.jpeg

自从大模型吹响新一轮技术革命的号角后,整个行业各个层次都面临大模型带来的范式转换。我今年在 4 月份上海举办的全球机器学习技术大会上演讲时曾提出,大模型为计算产业带来了计算范式、开发范式、交互范式的三大范式改变。今天是软件研发技术大会,我想和大家来重点谈谈这一年来对软件开发智能化范式改变的思考与探索。

我曾在去年 4 月份的全球软件研发技术大会上提出《五级“自动软件开发”参考框架》,借鉴了自动驾驶行业的五级划分方法,将智能化软件开发的水平分为 L1~L5 级。

c8cc45814a0682262988246fb3f6388b.png

这一参考框架也在这一年多的研发实践、和众多客户合作、海内外专家研讨的过程中,不断得到完善和丰富。在软件开发智能化的实践和探索中,我也发现业界存在以下几个比较突出的误区。

3bd36701ddb2294142c57afadc091553.png

第一个误区,GitHub Copilot 等代码大模型工具出来之后,大家会发现它在日常比较简单的代码上确实不错,但一旦到真实的企业级项目里表现可能就没有期望的那么好,为什么?目前的大模型主要都以 GitHub 等开源代码为主在训练。这些代码我称之为结果数据,是经过编译、运行、以及正确性验证的代码。但是它的过程数据基本没有得到训练。这既不是人类生物神经网络(ANN)学习的方式,也不是大模型这种数字神经网络(BNN)正确的学习方式。

第二个误区,目前的代码大模型,主要基于软件系统的静态特征来进行训练。但是如果我们看 ChatGPT 和 Sora 等在自然语言上和视觉上的训练,它们的表现显然效果要好于代码领域,为什么?其实在自然语言领域和视觉领域的训练,具有相当的动态性,语言的上下文、前因后果、故事线,视频的时间轴……这些动态信息蕴含了丰富的知识和逻辑,但软件开发领域把动态性的特质数据引入模型训练还是比较少的。

第三个误区,大模型出来之后,可以说通过了图灵测试,在某些方面也超过了普通人类的水平。这很容易给我们一个希望,去追求一个一步到位一劳永逸的智能方式。我记得去年 4 月份我们在上海举办 SDCon 2023 全球软件研发技术大会的时候,很多业界朋友都特别期待说我能不能把我的需求一股脑地告诉大模型,大模型就能给我生成真正跑起来的项目?经过一年多之后,我们越来越发现这是不现实的,我今天想讲的是这个期望长期来看也是不现实的,因为没有一劳永逸、一步到位的智能。

第四个误区,Scaling Law 被业界奉为圭皋之后,很多人都在想去追求一个一超多能的超级智能。希望用一个超级模型,把软件开发项目中各种复杂的问题都一股脑地解决,这个也是相当不现实的。正如复杂的人类世界不可能靠一个超人来解决,复杂的软件领域也不可能靠一个超级模型来解决。

针对以上几个误区,我想谈一些实践和探索的观点和思考。

d26c8c51c5a759dc48755c5ad942f562.png

大模型出来之后,我们一部分人老是觉得上个时代的东西都应该彻底丢掉了,大模型给我们带来了一个全新的世界。我想强调的是我们在上个时代积累的宝贵经验和智慧,不是被废弃了,而是被 AI 压缩和加速了。因为这些经验和智慧也是人类知识的一部分。

接下来我们来看看,在大模型时代,有哪些宝贵的经验和智慧可以帮助我们在软件领域做得更好?我们说软件系统有四个复杂的特征,分别是:复杂性、动态性、协作性、混沌性。

34e905a53cd89f9c01acd6402278db1f.png

首先来看复杂性。在软件系统中解决复杂性有两个常用的手段,第一个是分解,第二个是抽象。

9f81997e6247e77d20cfeb96b2c6b633.png

分解是我们在面向过程编程中就有的一个非常有效的手段。包括后来的分层架构、组件化设计、微服务架构等都源自分解思想。但很快,我们发现光有分解是不够的,必须使用抽象,这就发展出来面向对象、泛型编程、领域驱动设计、概念驱动设计等方法。如果我们看大模型,它在“分解”上做得还是不错的,但是在“抽象”上就有点差强人意。

31a5baa045e4869a4e045ae711be1a71.png

就目前的大模型辅助软件研发的能力来看,它比较擅长什么?类型实现、函数实现、算法实现等低抽象任务;但一旦遇到设计模式、架构设计、系统设计等“高抽象任务”,就发现它往往表现得不够好。在这方面,我们的建议是要向大模型导入我们在“高抽象任务”方面积累的宝贵的方法论、原则和最佳实践等。它们未必是代码,还包括设计图、设计文档等。这某种程度上,也是在提升大模型“System 2”的能力。

System 1 和 System 2 是诺贝尔经济学奖得主丹尼尔·卡尼曼在《思考,快与慢》中提出的人类的两种思考模式。系统一是直觉的、快速的、无意识的,主导我们日常 95%的决策。系统二是基于逻辑的、理性的、规划的、缓慢的,需要高度集中注意力,主导我们日常 5%的决策。System 2 的能力对于大模型在软件开发领域的“抽象能力”至关重要。

8a6665fa35c709a6b4d66b053f7f95e2.png

第二个部分,我想谈谈软件的动态性。所谓动态性本质是我们的软件系统一直在动态的演化。我们知道软件开发领域最早一直想追求 Top-down 的瀑布模型,但后来业界越来越发现在很多领域瀑布模型很难 work。究其根本,是软件开发过程有一个“时间”变量,软件的需求、所处环境、开发组织等无时无刻不在变化。

894a2db4ea9ee75820fb7819160987e7.png

这种“动态性”在大模型时代会改变吗?我想大概率不会。所以我们也不能追求一步到位的智能软件开发。

演化是智能的本质特点。智能从来都不是一步到位的,智能就是在迭代试错反复中不断成长的。我认为在大模型时代,敏捷软件开发并不会被丢弃,而是从“组织的敏捷”变为“模型的敏捷”,而且会加速敏捷。在敏捷开发之前,软件开发的周期是以年为单位迭代,比如 Windows 95、Windows 98。在敏捷开发之后,软件行业进入以月为单位迭代或者以周为单位迭代。在大模型时代,软件开发将进入以天或者小时为单位进行迭代。

除了提升迭代速度外,我们也需要对更多的软件开发过程数据进行训练,来帮助模型更好地理解软件开发的“动态性”。这里可以参考一下 Google 最近发布 DIDACT(Dynamic Integrated Developer ACTivity 动态集成开发者活动)。

参考链接:

https://research.google/blog/large-sequence-models-for-software-development-activities/

从根本上来说,软件开发并非孤立的过程,而是在人类开发者、代码审查者、错误报告者、软件架构师和工具(如编译器、单元测试、代码检查工具和静态分析器等)之间进行的对话。DIDACT 使用软件开发过程作为训练数据来源,而不仅是最终的完成代码。通过让模型接触开发者在工作中看到的上下文,结合他们的响应行为,模型可以学习软件开发的动态性。

4ec381d8c2f8e9ee99dc373867713a34.png

Google DIDACT 的研发也发现在学习过程数据之后,模型生成软件项目的过程,非常类似人类开发团队,先编写比较粗粒度的接口和框架代码,然后一点一点把它们细化实现,包括也有反复和试错的过程。而不是大家最开始想象的那种从上到下一行一行写的过程,整个项目一气呵成。真实的软件开发不是这样,人类开发团队不是这样,大模型驱动的智能软件开发也不会是这样。

f830ce3fe38cd80ac62cb5605494329f.png

接下来我想谈谈架构设计领域的协作性。我们知道当软件系统越来越复杂时,组件与组件之间的协作,服务与服务之间的协作,会变成非常重要的课题。早在 1967 年计算机科学家 Melvin Conway 就提出了著名的“康威定律”。

aaac064cbb4d40b0b5a59e17296a997f.png

康威定律指出“组织的协作沟通架构,决定了我们的系统设计架构”,这在架构设计领域被奉为第一定律。那么在大模型时代,软件内部需不需要协作?显然是需要的,我们仍然需要许许多多的组件或服务进行协作。只是这时候的组件或服务的构建者,不见得是软件团队,而是一个一个智能体(Agent)。那么这些智能体之间当然也需要协作。它们的协作也要遵循康威定律。我称之为**“智能康威定律”:智能体的协作沟通架构,决定系统设计架构。**

我们再来谈一下软件开发中的工具,来实现在所谓混沌系统中寻求确定性的部分。我们知道现在大模型很多时候做的是一些非确定性的计算(或者叫概率性计算),但这并不意味着我们所有的任务都要用非确定性计算。我们在大模型之前积累了很多确定性计算的工具,它们在大模型时代也不会被丢弃,而是与大模型进行很好的融合。融合方式就是通过 Agent(工具)来实现工具调用。

2d3f91eb290c12570128f04b4f83560f.png

简单总结一下。针对前面提到的软件系统的四大特性:复杂性、动态性、协作性、混沌性,在大模型时代智能软件开发范式下,我们需要特别关注以下四大核心能力建设:

f15441ba912d2d75d56eb813714ba1a0.png

第一个抽象能力:怎么训练、怎么提升大模型的抽象能力,也就是 System 2 的能力,是一个很重要的课题。

第二个演化能力:如何支持大模型在整个软件开发过程中加速我们的迭代周期,它不仅能快速发布高质量的软件,同时对模型能力也是一个快速的提升。

第三个协作能力:我们需要仔细设计智能体的协作架构,来支持我们的系统设计架构。

第四个工具能力:使用工具来解决混沌系统中的确定性问题。

最后我想谈一下,提升软件开发的智能化水平是一个系统工程,前面讲的这四大核心能力,它背后需要很多基础建设,包括模型方面的建设和数据方面的建设。我列了 10 个主要的方面:

ccbf66a340ff17786aac8c1f531da47a.png

第一:扩展定律。Scaling Law 并没有停止,仍然在发挥着重要作用,这个是我们对基础模型方面继续要期待的。

第二:提高上下文窗口。上下文窗口是大模型的“内存”,它对最大化发挥模型能力有着关键影响。这一块国内外都进展飞速。

第三:长期记忆能力。大型软件项目蕴含的信息量浩瀚纷繁,大模型的长期记忆也很重要,虽然有 RAG 等外部检索技术的快速发展,但基础架构方面的创新也值得期待。

第四:System 2 的提升。目前的大模型普遍被认为是一个高中生的水平。如何提升大模型系统 2 的能力,关系到大模型是否能够成为一个深思熟虑的专家级学者,从而来胜任软件开发这样具有较高智慧要求的工作。

第五:降低模型幻觉。降低模型幻觉仍然是业界需要克服的一个问题,虽然我们也不要期望彻底消除幻觉。某种程度上可以说,幻觉也是智能的一部分,如果没有幻觉,智能也将失去创造力。

第六:研发全流程数字化。如何把研发流程里尽可能多的开发者活动按时间顺序记录下来,比如:文档、设计图、代码、测试代码、运维脚本、会议记录、甚至设计决策中的争论等等各种数据,然后变成数字化的语料,喂给我们的大模型。

第七:多模态数据训练。软件开发领域不只是代码和文本,还有很多设计图比如 UML、表格、甚至视频等数据。

第八:将模型做“小”。软件开发中很多细分任务都不见得需要所谓的“大模型”,而是在高质量垂类数据训练下的“小模型”,比如 Bug 修复,比如开发者测试,比如 Clean Code。

第九:模型合成数据。通过模型生成代码、设计、注释等,作为语料供给另外的模型进行训练,也是在软件开发中一个非常活跃的发展方向。

第十:多智能体协同。针对复杂的软件工程任务,未来一定是众多不同角色、不同模型、不同任务的智能体的群策群力。

最后,软件开发智能化范式转换的大幕才刚刚开启,中间还有很多曲折等待我们去探索,希望今天的分享能给大家带来启发,谢谢大家!

同时和所有开发者朋友们预告,CSDN 联合高端 IT 教育平台 Boolan 将于 2024 年下半年举办四大主题会议,欢迎大家扫码热情参与~

e65782c2969015d235b1af746c7ebee2.png

大模型如何入坑?

想要完全了解大模型,你首先要了解市面上的LLM大模型现状,学习Python语言、Prompt提示工程,然后深入理解Function Calling、RAG、LangChain 、Agents等

很多人不知道想要自学大模型,要按什么路线学?

所有大模型最新最全的资源,包括【学习路线图】、【配套自学视频+pdf】、【面试题】这边我都帮大家整理好了通过下方卡片获取哦!

《人工智能\大模型入门学习大礼包》,可以扫描下方二维码免费领取!

在这里插入图片描述

1.成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
在这里插入图片描述

2.视频教程
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。

在这里插入图片描述

3.LLM
大家最喜欢也是最关心的LLM(大语言模型)

在这里插入图片描述

发展前景:大模型在自然语言处理、图像识别、语音识别等领域具有广泛的应用。随着大数据时代的到来,大模型技术将继续发展,为程序员提供更多的发展机会。

技能要求:要成为一名优秀的大模型程序员,需要具备以下技能:

  • 掌握深度学习相关知识,如神经网络、卷积神经网络等;
  • 熟悉编程语言,如Python、C++等;
  • 了解大数据处理技术,如Hadoop、Spark等;
  • 具备良好的数学和统计学基础,以便更好地理解和优化大模型。
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/783128.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

职业理念教育观

职业道德理念——教育观 教育是什么、干什么、为了什么,教育心该培养什么样的人、如何培养人等。 教育观 素质教育内涵 教学观 素质教育内涵 新课程改革的教学观

力扣-贪心算法4

406.根据身高重建队列 406. 根据身高重建队列 题目 假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或…

微信商城自定义小程序源码系统,PHP+MySQL组合开发 带完整的源代码包以及搭建教程

系统概述 传统电商模式面临着诸多挑战,如用户体验不够个性化、运营成本较高等。而微信商城小程序凭借其轻量级、便捷性和与微信生态系统的紧密结合,为企业提供了新的发展机遇。小编给大家分享一款功能强大、易于定制和扩展的源码系统,帮助企…

C# 快速排序算法的详细讲解

目录 一、前言 二、例子 三、快速排序算法图片讲解 四、快速排序算法代码 五、纯净代码 一、前言 用比较好懂的方式讲一下快速排序算法。 二、例子 如果我有一堆钱,想数清楚,最快的方案是什么? 图1 一堆钱 答:先分类&…

数据库之MQL

1,查询所有 mysql> select * from grade;2, mysql> select id,firstname,lastname from grade;3, mysql> select firstname,lastname from grade where id > 4;4, mysql> select * from grade where sex f;5&…

『SD』比例切换插件 sd-webui-aspect-ratio-helper(附插件)

本文简介 ✨ 告别手动计算,SD绘图神器来啦! 💔 是不是每次使用SD绘图时,都要自己手动去计算图片的宽高比,感觉好繁琐啊? 🎉 今天就来给各位工友安利一个超实用的插件——sd-webui-aspect-ratio-…

【kubernetes集群如何更改所有节点IP】

kubernetes集群如何更改所有节点IP 情景描述更换IP前的准备工作更换IP后的工作--master更换IP后的工作--node节点重新部署之前那些服务 情景描述 我有三台服务器,想要将其组成了一个kubernetes集群,在部署之前,我就对其进行了固定IP的操作&a…

C++、QT企业管理系统

目录 一、项目介绍 二、项目展示 三、源码获取 一、项目介绍 人事端: 1、【产品中心】产品案列、新闻动态的发布; 2、【员工管理】新增、修改、删除、搜索功能;合同以图片的方式上传 3、【考勤总览】根据日期显示所有员工上班、下班时间…

springboot331+vue“有光”摄影分享网站系统+论文+源码+讲解

第3章 系统分析 3.1 可行性分析 3.1.1技术可行性 研发设计程序流程挑选面向对象设计、功能齐全、简单实用的Java编程设计核心理念。MySQL数据库存储数据。Idea工具作为编程软件,win10计算机操作系统作为应用系统,以及数据库可视化工具等技术职称。一般…

十款绚丽的前端 CSS 菜单导航动画

CSS汉堡菜单是一种非常流行的PC端和移动端web菜单风格,特别是移动端,这种风格的菜单应用更为广泛。这款菜单便非常适合在手机App上使用,它的特点是当顶部菜单弹出时,页面内容将会配合菜单出现适当的联动,让整个页面变得…

【软件分享】我们为分类而生—eCognition

分类是各位小伙伴入门遥感需要做的一项基础的工作,在进行遥感影像中的地物进行分类和提取时,如何提高分类精度,常常令人头疼。今天小编带来此前接触过的一个工具,他的名字是—eCognition,感觉比ENVI好用,在…

Java-01-源码篇-04集合-05-SortedMap NavigableMap TreeMap

目录 一,SortedMap 二,NavigableMap 三,TreeMap 3.1 TreeMap 继承结构 3.2 TreeMap 属性 3.3 TreeMap 构造器 3.4 TreeMap 内部类 3.4.1 Values 3.4.2 KeySet 3.4.3 EntrySet 3.4.5 相关集合迭代器 3.4.5.1 PrivateEntryIterato…

使用langchain与你自己的数据对话(二):向量存储与嵌入_langchain chat with your data

之前我以前完成了“使用langchain与你自己的数据对话(一):文档加载与切割这篇文章,没有阅读的朋友可以先阅读一下,今天我们来继续讲解第三门课:向量存储与嵌入。 Langchain在实现与外部数据对话的功能时需要经历下面的5个阶段&am…

【智能制造-11】X型焊枪和C型焊枪

手工焊枪分为X型焊枪和C型焊枪两种。 X焊枪中,气缸活塞杆与活动枪臂体之间以轴连接,气缸活塞做直线运动,焊枪臂绕转轴摆动,进行焊接。 C型焊枪中,气缸活塞杆与活动枪臂联动,进行直线往复运动,进…

简单实现联系表单Contact Form自动发送邮件

如何实现简单Contact Form自动邮件功能?怎样简单设置? 联系表单不仅是访客与网站所有者沟通的桥梁,还可以收集潜在客户的信息,从而推动业务的发展。AokSend将介绍如何简单实现一个联系表单,自动发送邮件的过程&#x…

声明一个类模板,利用它分别实现两个整数、浮点数和字符的比较,求出大数和小数

在之前的文章中曾介绍了函数模板,对于功能相同而数据类型不同的一些函数,不必定义各个函数,可以定义一个可对任何类型变量进行操作的函数模板,在调用函数时,系统会根据实参的类型,取代函数模板中的类型参数…

应用层协议原理——因特网提供的运输服务

我们已经考虑了计算机网络能够一般性地提供的运输服务。现在我们要更为具体地考察由因特网提供的运输服务类型。因特网(更一般的是TCP/IP网络)为应用程序提供两个运输层协议,即UDP和TCP。当软件开发者为因特网创建一个新的应用时,首先要做出的决定是&…

游戏AI的创造思路-技术基础-决策树(2)

上一篇写了决策树的基础概念和一些简单例子,本篇将着重在实际案例上进行说明 目录 8. 决策树应用的实际例子 8.1. 方法和过程 8.1.1. 定义行为 8.1.2. 确定属性 8.1.3. 构建决策树 8.1.4. 实施行为 8.1.5. 实时更新 8.2. Python代码 8. 决策树应用的实际例子…

大模型网信办备案全网最详细说明【+流程+附件】

根据目前公开的国内大模型算法备案统计来看,首批境内深度合成服务算法备案清单,总共通过41家,14家互联网大厂和独角兽企业成功申报算法备案32个,6家新兴互联网公司成功申报算法备案9个,仅占比21.9%。 第二批境内…

Python标准库常用模块的典型用法介绍与案例

目录 1. os模块 典型用法 案例 2. sys模块 典型用法 案例 3. datetime模块 典型用法 案例 4. re模块 典型用法 案例 5. json模块 典型用法 案例 6. random模块 典型用法 案例 7. collections模块 典型用法 案例 总结 Python作为一门功能强大的编…