全新的编程范式:编程向 传统编程+AIGC的转变

498 阅读6分钟

前言:

随着人工智能(AI)技术的蓬勃发展,传统编程正逐步与AI融合,开启了一个全新的编程范式。这种融合不仅保留了传统编程的精确控制能力,还引入了AI的自学习、自适应特性。AI辅助编程可以自动完成代码生成、优化及错误检测,甚至一些功能不用我们自己开发,可以交给AIGC自动生成,它不是生成代码,而是直接通过大模型代替开发者分析数据,结构等,提升开发效率。

传统的编程范式

传统编程,根植于严谨的逻辑结构与明确的指令序列,是构建数字世界的基石。它强调程序员通过预设的算法和数据结构,手动实现功能模块,确保程序按既定逻辑准确执行。在传统的优质架构和设计模式下,大公司往往拥有成千上万的开发者,他们遵循严格的开发流程与标准,利用如Node.js这样的技术栈,高效开发后端服务,满足多样化的业务需求。

那么接下来,我们看一下大厂所需的标准开发范式是什么样的

首先,我们创建一个项目文件test,用vscode打开。在test文件指定的终端打开,显示如下:

image.png 在终端输入: npm init -y 进行项目初始化

  • npm 是node 的 package management 包管理器
  • init 初始化 -y 快速访问

我们会发现该文件下多了一个package-json,这个文件是一个项目描述文件。

image.png

一般在开发新项目时,我们都会这样先给项目文件初始化一下。

然后在js文件内进入下一步初始化操作:

// 项目入口文件,引入项目所需的模块


// 入口函数
async function main(){  


}
main()

在函数前加入async关键字表示这是一个异步函数(不清楚的话我的上一篇文章有提到),它常与await关键字一起出入,这里我们就不过多的解释。

这样初始化的目的就是使得项目文件有一个单点入口,它通常指软件系统中的一个统一入口点,可以是一个函数,一个文件或一个模块,用于控制整个应用程序的启动和初始化。这样做可以使得项目程序有统一控制流,使不同功能模块分开达到模块化和解耦的作用等等。

结合爬虫实例来诠释传统编程+AIGC的魅力

通过老生常谈的爬虫实例,我们可以看到编程的一些规定范式,了解开发本质,学会程序开发的思维。

首先,要学会对实例进行需求分析,学会分步细化去解决需求,然后使用伪代码提高代码的可读性,了解我们每一步在做什么,这是进大厂首先要学会的一步。

好,那么我们该如何完成爬虫爬取页面呢??

这里的简单需求:拿到某瓣页面,进行电影排行榜分析,我们需要拿到每一部电影的基本数据以json格式返回。

基本步骤是不是这样,

image.png

这个时候我们已经知道需要做什么了,接下来就是用工具包的时候了: 这里给大家解释两个包(request-promise、cheerio)发送请求和解析页面必不可少的包;

npm i 安装包名:

  • request-promise 发出http请求
  • cheerio 在内存中,模拟DOM对象

我们需要下载这两个包 image.png

image.png

然后在js文件内引入包如下操作:

image.png

加入如图操作后,用node启动js文件:

image.png

此时我们已经拿到了网页的html内容,可以看到1需求已经实现,现在还需要根据html进行分析。

下面就到了今天的重点了,体现传统编程思想和AIGC就在这一时刻.

传统的爬虫

// 项目入口文件,引入项目所需的模块
const request = require('request-promise');
const cheerio = require('cheerio');
//单点入口
// 入口函数
async function main(){ 
          const URL = "https://movie.douban.com/chart";  //声明一个常量用const
          // 负责发送http请求  html 基于请求传入URL
          const html = await request({
                    url: URL
          })
          
          let $ = cheerio.load(html);
          console.log($('.article table').length)
          // 严谨
          const movieNodes = $('#content .article .item')
          const movieList = []
          for(let i = 0;i < movieNodes.length; i++){
                    // 封装,将一段电影的html解析,剥离出去,
                    // 这段功能相对独立 且复用
                    // main函数比较复杂,一个函数超过10行代码,一定可以再分函数
                    movieList.push(getMovieInfo(movieNodes[i]));
          }
          console.log(movieList)
} 
const getMovieInfo = function(node){
          //返回一个json对象
          let movieInfo = {}
          let $$ = cheerio.load(node)  //得到node的document对象
          let title =  $$('.pl2 a').text()
          let pic = $$('.nbg img').attr('src')
          let info = $$('p.pl').text()
          let rating_nums = $$('.rating_nums').text()
          movieInfo.title = title
          movieInfo.pic = pic
          movieInfo.info = info
          movieInfo.rating_nums = rating_nums
          return movieInfo
}        
main();

image.png

传统编程喜欢将一些功能函数进行封装,这里将一段电影的html解析,剥离出去,因为这段功能相对独立且可以复用,所以传统思想就会进行封装,标准规定在做大项目时,且如果main函数比较复杂,一个函数超过10行代码,一定可以再分函数。

引入AIGC后,这些,我们不用做!!!

结合了AIGC的爬虫:此处需要引入openai的API,不清楚的小伙伴可以去看我上一篇文章

AIGC学习分享(二):openAI(API接口)它来了! - 掘金 (juejin.cn)

在使用openai API key时, 为了数据安全,我们将apiKey放入项目进程配置文件内,可以让自己的key妥善处理。 在我们远程上传项目时,配置文件的环境变量不会上传,这样我们的key更加安全。创建如下文件名,并且进行配置一段:OPENAI_API_KEY="******" image.png

所以我们先得下载dotenv包,这个包可以帮助我们拿到该项目进程中的全部环境变量,

// 项目入口文件,引入项目所需的模块
require('dotenv').config();  //要想使用 ,必须先下载dotenv包
const request = require('request-promise');
const cheerio = require('cheerio');
const OpenAI = require('openai');
const client = new OpenAI({
          apiKey: OPENAI_API_KEY,
          baseURL: 'https://api.chatanywhere.tech/v1'
})
// 入口函数
async function main(){  
          // 1、根据 url 发送一个http请求 拿到html
          // 2、根据html 分析,拿到电影内容 
          const URL = "https://movie.douban.com/chart";  //声明一个常量用const
          // 负责发送http请求  html 基于请求传入URL
          const html = await request({
                    url: URL
          })
          let $ = cheerio.load(html);
          const movieNodes = $('#content .article .item')   // 拿到每一个装载电影的tr标签内容
          let movie_html = ''
          for(let i = 0;i < 2; i++){  //这边为了防止gpt可接受的字符串长度达到最大值,我们输入两部电影信息进行解析
                    movie_html += cheerio.load(movieNodes[i]).html()
          }           
          let prompt = `
          ${movie_html}
          这是一段电影列表html,请获取电影名(name),封面连接(picture),简介(info),评分(score),评论人数(commentsNumber),
          请使用括号的单词作为属性名,以json的格式返回
          `
          const chatCompletion = await client.chat.completions.create({
                    model: 'gpt-3.5-turbo',
                    messages: [{
                                        role: 'user',
                                        content: prompt  
                    }]
          })
          console.log(chatCompletion.choices);
}
main()

image.png

这样,我们同样完成了我们的需求,而且还使得传统编程加入了AIGC,使得我们的代码更加的优美,清爽,一些复杂的操作,我们都可把他交给大模型来实现,我们只需要一段提供清晰、明确的提示--prompt,适当的提供一点例子供大模型学习,以至于我们能够得到想要的结果。

总结

AIGC+传统编程的结合,不仅仅是技术的叠加,更是思维方式的革新。它使编程更加灵活智能,不仅能够处理大规模数据和复杂场景,还能随环境变化自我调整,为软件开发带来前所未有的创造力和生产力提升。这一融合趋势,要求开发者不仅要精通编程语言和技术栈,还要掌握一定的AI原理,以适应未来软件开发的新要求,程序员不会被AI替代,而会被会AIGC的程序员替代!!!