前言
传统编程,以其严谨的架构设计、标准化的流水线操作,为软件开发奠定了坚实的基础。在这样的模式下,程序员通过编写一行行代码,精确地指导计算机执行任务。尽管经典编程方法论在过去的几十年里取得了巨大成功,但面对日益复杂的需求和海量数据处理,传统方法开始显现其局限性。编程不仅仅是技术实现的过程,更是一种创意和需求理解的艺术。在这个背景下,将人工智能(AI)融入编程过程,即AIGC(AI Generated Code),成为了一种必然趋势。
AIGC的核心在于利用机器学习算法理解和生成代码。它能够自动完成一些重复性高、模式化的编程任务,比如代码补全、自动化测试、甚至是根据需求自动生成基础代码框架。以爬虫项目为例,以往开发者需要手动编写逻辑来解析HTML文档,而现在,借助AI的力量,如通过训练模型识别网页结构,这部分流程性代码可以被大幅简化甚至自动化,使得开发者能更专注于业务逻辑和创新。
下面我将用爬虫爬取豆瓣电影排行榜为案例带大家看一下AIGC能为我们减少哪些代码和工作。
需求:将 豆瓣网页列表html 爬取,返回JSON数组,每一项电影信息包含name,desc,score…属性
实现步骤(伪代码)
1. 根据url 发送一个http请求 等待拿到html字符串
2. 解析html 拿到电影的内容
3. 封装 返回电影对象内容
传统编程实现爬虫
const request = require('request-promise');
const cheerio = require('cheerio');
// tr 字符串要生成movie json对象
// 入口文件
// 需求:将 豆瓣网页列表html 爬取
// 返回JSON数组,每一项电影信息包含name,desc,score...属性
// 异步
// 单点入口
async function main() {
// 代码 分布细化 程序员思维
// 伪代码
// 根据url 发送一个http请求 拿到html
// 解析html 拿到电影的内容
// 封装 返回电影对象内容
// await LLM 模块加载完成
// 良好的代码规范,
const URL = 'https://movie.douban.com/chart';
// 发送一个 http请求 408 等待拿到html字符串 JS再执行下面的代码
const html = await request({
url: URL,
})
// console.log(html);
// 代码可读性 可能要比功能更重要
// html 分析 DOM树 document对象+选择器 满足
// 编程素养 将html字符串加载到内存中,$ = document
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) {
let movieInfo = {};
// 将tr加载进内存
let $$ = cheerio.load(node);
movieInfo.title = $$('.pl2 a').text();
movieInfo.pic = $$('.nbg img').attr('src');
movieInfo.info = $$('.pl2 .pl').text();
movieInfo.rating_nums = $$('.rating_nums').text();
// console.log(title);
// console.log(pic);
// console.log(info);
// console.log(rating_nums);
// console.log(movieInfo);
return movieInfo;
}
main();
AIGC+传统编程 实现爬虫
const request = require('request-promise');
const cheerio = require('cheerio');
// AIGC LLM 生成式内容
// tr 字符串要生成movie json对象
// input prompt
// 创建一个OpenAI实例 首字母大写代表一个类(基本代码素养,JS是大小写敏感的)
const OpenAI = require('openai');
const dotenv = require('dotenv');
dotenv.config();
console.log(process.env.OpenAI_API_KEY);
//凭证 密钥 算力收费 token
const client = new OpenAI({
apiKey: process.env.OpenAI_API_KEY,
baseURL: 'https://api.chatanywhere.tech/v1'
})
// 入口文件
// 需求:将 豆瓣网页列表html 爬取
// 返回JSON数组,每一项电影信息包含name,desc,score...属性
// 异步
// 单点入口
async function main() {
// 代码 分布细化 程序员思维
// 伪代码
// 根据url 发送一个http请求 拿到html
// 解析html 拿到电影的内容
// 封装 返回电影对象内容
// await LLM 模块加载完成
// 良好的代码规范,
const URL = 'https://movie.douban.com/chart';
// 发送一个 http请求 408 等待拿到html字符串 JS再执行下面的代码
const html = await request({
url: URL,
})
let $ = cheerio.load(html);
const movieNodes = $('#content .article .item');
let movie_html = ''
for (let i = 0; i < 2; i++) {
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();
我们可以发现在实现步骤三的时候,我们可以使用AI接口来发送一个请求数据,让AI来帮我们实现数据的提取和封装。这样在面对不同的业务需求时。我们只需要同样的步骤调用AI来帮我们实现方法。而在传统编程之中我们却需要不断的创建新的接口来实现不同业务的数据提取与封装。
展望未来
随着AIGC技术的不断成熟,我们有理由相信,编程将变得更加高效、智能且人性化。未来,开发者的工作模式可能会发生根本性变化,编程教育也将随之调整,更多地侧重于培养创造性思维、问题解决能力和对AI工具的运用能力。
总之,传统编程与AIGC的融合,是技术发展的一个重要里程碑,它不仅标志着编程范式的转变,也为软件开发的未来开辟了无限可能。在这个过程中,人类与AI的协同工作将成为常态,共同塑造一个更加智能、高效的数字世界。
如果你还喜欢这篇文章,请点个赞吧>_<