前言:
随着人工智能(AI)技术的蓬勃发展,传统编程正逐步与AI融合,开启了一个全新的编程范式。这种融合不仅保留了传统编程的精确控制能力,还引入了AI的自学习、自适应特性。AI辅助编程可以自动完成代码生成、优化及错误检测,甚至一些功能不用我们自己开发,可以交给AIGC自动生成,它不是生成代码,而是直接通过大模型代替开发者分析数据,结构等,提升开发效率。
传统的编程范式
传统编程,根植于严谨的逻辑结构与明确的指令序列,是构建数字世界的基石。它强调程序员通过预设的算法和数据结构,手动实现功能模块,确保程序按既定逻辑准确执行。在传统的优质架构和设计模式下,大公司往往拥有成千上万的开发者,他们遵循严格的开发流程与标准,利用如Node.js这样的技术栈,高效开发后端服务,满足多样化的业务需求。
那么接下来,我们看一下大厂所需的标准开发范式是什么样的
首先,我们创建一个项目文件test,用vscode打开。在test文件指定的终端打开,显示如下:
在终端输入: npm init -y 进行项目初始化
- npm 是node 的 package management 包管理器
- init 初始化 -y 快速访问
我们会发现该文件下多了一个package-json,这个文件是一个项目描述文件。
一般在开发新项目时,我们都会这样先给项目文件初始化一下。
然后在js文件内进入下一步初始化操作:
// 项目入口文件,引入项目所需的模块
// 入口函数
async function main(){
}
main()
在函数前加入async关键字表示这是一个异步函数(不清楚的话我的上一篇文章有提到),它常与await关键字一起出入,这里我们就不过多的解释。
这样初始化的目的就是使得项目文件有一个单点入口,它通常指软件系统中的一个统一入口点,可以是一个函数,一个文件或一个模块,用于控制整个应用程序的启动和初始化。这样做可以使得项目程序有统一控制流,使不同功能模块分开达到模块化和解耦的作用等等。
结合爬虫实例来诠释传统编程+AIGC的魅力
通过老生常谈的爬虫实例,我们可以看到编程的一些规定范式,了解开发本质,学会程序开发的思维。
首先,要学会对实例进行需求分析,学会分步细化去解决需求,然后使用伪代码提高代码的可读性,了解我们每一步在做什么,这是进大厂首先要学会的一步。
好,那么我们该如何完成爬虫爬取页面呢??
这里的简单需求:拿到某瓣页面,进行电影排行榜分析,我们需要拿到每一部电影的基本数据以json格式返回。
基本步骤是不是这样,
这个时候我们已经知道需要做什么了,接下来就是用工具包的时候了: 这里给大家解释两个包(request-promise、cheerio)发送请求和解析页面必不可少的包;
npm i 安装包名:
- request-promise 发出http请求
- cheerio 在内存中,模拟DOM对象
我们需要下载这两个包
然后在js文件内引入包如下操作:
加入如图操作后,用node启动js文件:
此时我们已经拿到了网页的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();
传统编程喜欢将一些功能函数进行封装,这里将一段电影的html解析,剥离出去,因为这段功能相对独立且可以复用,所以传统思想就会进行封装,标准规定在做大项目时,且如果main函数比较复杂,一个函数超过10行代码,一定可以再分函数。
引入AIGC后,这些,我们不用做!!!
结合了AIGC的爬虫:此处需要引入openai的API,不清楚的小伙伴可以去看我上一篇文章
AIGC学习分享(二):openAI(API接口)它来了! - 掘金 (juejin.cn)
在使用openai API key时,
为了数据安全,我们将apiKey放入项目进程配置文件内,可以让自己的key妥善处理。
在我们远程上传项目时,配置文件的环境变量不会上传,这样我们的key更加安全。创建如下文件名,并且进行配置一段:OPENAI_API_KEY="******"
所以我们先得下载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()
这样,我们同样完成了我们的需求,而且还使得传统编程加入了AIGC,使得我们的代码更加的优美,清爽,一些复杂的操作,我们都可把他交给大模型来实现,我们只需要一段提供清晰、明确的提示--prompt,适当的提供一点例子供大模型学习,以至于我们能够得到想要的结果。
总结
AIGC+传统编程的结合,不仅仅是技术的叠加,更是思维方式的革新。它使编程更加灵活智能,不仅能够处理大规模数据和复杂场景,还能随环境变化自我调整,为软件开发带来前所未有的创造力和生产力提升。这一融合趋势,要求开发者不仅要精通编程语言和技术栈,还要掌握一定的AI原理,以适应未来软件开发的新要求,程序员不会被AI替代,而会被会AIGC的程序员替代!!!