引言
在现代软件开发领域,传统编程和人工智能生成内容(AIGC)的融合逐渐成为一种趋势。这种融合不仅提高了开发效率,还改变了程序员的工作方式和编程范式。本文将探讨传统编程与AIGC的结合,通过一个具体的示例展示如何将这种结合应用于实际项目中,从而提升开发效率和代码质量。
目录
1. 为什么要编程?
2. 传统编程
3. 爬虫:从豆瓣电影获取数据
4.结合AIGC:让AI参与编程
5.总结
一、为什么要编程?
编程的目的在于解决实际需求。无论是后端开发还是前端开发,编程都是为了实现特定功能、满足用户需求。例如,后端开发需要处理服务器逻辑、数据库操作和API接口,前端开发则需要实现用户界面和交互效果。
二、传统编程
传统编程的编程素养和标准
在传统编程中,编程素养和标准至关重要,它们不仅影响代码的质量,还影响开发过程的效率和团队协作的效果。以下是一些关键的编程素养和标准:
编码规范
遵循统一的编码规范可以提高代码的可读性和可维护性。编码规范通常包括命名规则、代码格式、注释风格等。以下是一些常见的编码规范:
- 命名规则:变量名、函数名和类名应采用具有描述性的命名方式,避免使用缩写和无意义的名称。例如,使用
getUserInfo而不是getUsrInf。 - 代码格式:统一的代码格式有助于提高代码的可读性。可以使用代码格式化工具(如Prettier)来自动化这一过程。
- 注释风格:适当的注释可以帮助其他开发者理解代码的逻辑和意图。注释应简洁明了,避免过度注释和无意义的注释。
代码审查
代码审查是保证代码质量的重要环节。通过团队成员之间的代码审查,可以发现潜在的问题,分享最佳实践,并确保代码的一致性。代码审查的重点包括:
- 逻辑正确性:确保代码逻辑正确,功能实现符合需求。
- 代码风格:检查代码是否符合团队的编码规范。
- 性能和安全性:识别和优化可能的性能瓶颈和安全漏洞。
架构和默认优质操作
良好的架构设计是传统编程的重要基础。通过设计良好的系统架构,可以确保系统的可扩展性和维护性。例如,分层架构、微服务架构等都是常见的设计模式。这些架构设计能够帮助开发者更好地组织代码,明确各个模块的职责,减少耦合,提高系统的可维护性。
标准化操作
标准化操作是传统编程的另一重要特点。通过制定编码规范、代码审查流程、持续集成和持续部署(CI/CD)等标准,可以确保代码的一致性和可读性。编码规范包括命名规则、注释风格、代码格式等,而CI/CD流程则确保代码在每次提交时都经过自动化测试和部署,以保证代码质量。
流水线操作
在大厂,开发流程往往像流水线一样高效运转。每个程序员专注于特定的任务,从需求分析、设计、编码、测试到部署,每个环节都有明确的分工和协作机制。这种流水线操作方式确保了项目的高效推进和高质量交付。
三、爬虫:从豆瓣电影获取数据
爬虫是一种常见的编程任务,用于从网页上抓取数据。下面是一个使用传统编程方法编写的爬虫示例,它从豆瓣电影网站获取电影信息。
首先先理清这个是前端项目还是后端项目?显而易见是后端项目。在后端开发中,Node.js作为JavaScript的运行环境,提供了强大的工具和库来处理各种任务,如HTTP请求处理、文件操作和数据库连接等。以下是后端项目的初始化过程:
# 初始化Node项目
npm init -y
# 安装必要的依赖包
npm install request-promise
npm i cheerio
通过这些步骤,我们可以快速搭建一个Node.js项目,并安装所需的依赖包来实现特定功能。
示例代码解析
const request = require('request-promise');
const cheerio = require('cheerio');
async function main() {
// 定义豆瓣电影排行榜的URL
const URL = "https://movie.douban.com/chart";
// 发送HTTP请求,获取网页HTML内容
const html = await request({ url: URL });
// 使用Cheerio解析HTML内容
let $ = cheerio.load(html);
// 选择包含电影信息的DOM节点
const movieNodes = $('#content .article .item');
// 初始化一个数组,用于存储电影信息
const movieList = [];
// 遍历每个电影节点,提取电影信息
for (let i = 0; i < movieNodes.length; i++) {
movieList.push(getMovieInfo(movieNodes[i]));
}
// 输出电影信息列表
console.log(movieList);
}
// 提取单个电影节点的信息
const getMovieInfo = function(node) {
let movieInfo = {};
// 使用Cheerio加载当前电影节点
let $$ = cheerio.load(node);
// 提取电影标题
let title = $$('.pl2 a').text();
// 提取电影封面图片链接
let pic = $$('.nbg img').attr('src');
// 提取电影简介
let info = $$('p.pl').text();
// 提取电影评分
let rating_nums = $$('.rating_nums').text();
// 将提取的信息存入movieInfo对象
movieInfo.title = title;
movieInfo.pic = pic;
movieInfo.info = info;
movieInfo.rating_nums = rating_nums;
return movieInfo;
}
// 调用主函数
main();
效果如下
[
{
index: 0,
message: {
role: 'assistant',
content: '[\n' +
' {\n' +
' "name": "盟军敢死队",\n' +
' "picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2908134079.jpg",\n' +
' "info": "2024-04-18(中国香港) / 2024-04-19(美国) / 2024-05-24(中国大陆) / 亨利·卡维尔 / 艾莎·冈萨雷斯 / 阿兰·里奇森 / 亚历克斯·帕蒂弗 / 赫洛·费因斯-提芬 /
巴布斯·奥卢桑莫昆 / 亨利·扎格 / 蒂尔·施威格 / 亨利·戈尔丁 / 加利·艾尔维斯 / 弗莱迪·福克斯...",\n' +
' "rating_nums": "7.1"\n' +
' },\n' +
' {\n' +
' "name": "对你的想象",\n' +
' "picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2905327559.jpg",\n' +
' "info": "2024-03-16(西南偏南电影节) / 2024-05-02(美国网络) / 安妮·海瑟薇 / 尼古拉斯·加利齐纳 / 艾拉·鲁宾 / 安妮·玛莫罗 / 瑞德·斯科特 / 帕芮·马费尔德 / 乔丹·亚伦·霍尔 / 玛蒂尔达·吉安诺普洛斯 / Meg Millidge / 奇克·曼诺哈 / Ray Cham / Jaiden...",\n' +
' "rating_nums": "5.9"\n' +
' },\n' +
' {\n' +
' "name": "挑战者",\n' +
' "picture": "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2902765793.jpg",\n' +
' "info": "2024-04-17(澳大利亚) / 2024-04-26(美国) / 赞达亚 / 乔什·奥康纳 / 迈克·费斯特 / 费斯·费伊 / 安德烈·加布瓦 / 艾梅莉娅·卡米尔·海伍德 / 杰克·詹森 / A·J·利斯特 / 沙恩·T·哈里斯 / 基努·哈姆 / 卡莱恩·富尼耶 / 考特尼·布鲁克斯 /...",\n' +
' "rating_nums": "6.6"\n' +
' },\n' +
' {\n' +
' "name": "哥斯拉-1.0",\n' +
' "picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2900227040.jpg",\n' +
' "info": "2023-11-01(东京国际电影节) / 2023-11-03(日本) / 神木隆之介 / 滨边美波 / 山田裕贵 / 青木崇高 / 吉冈秀隆 / 安藤樱 / 佐佐木藏之介 / 西垣匠 / 中村织央 / 谷口翔太 / 须田邦裕 / 水桥研二 / 阿南健治 / 饭田基祐 / 远藤雄弥 / 田中美央 / 桥爪功...",\n' +
' "rating_nums": "6.5"\n' +
' },\n' +
' {\n' +
' "name": "银河写手",\n' +
' "picture": "https://img2.doubanio.com/view/photo/s_ratio_poster/public/p2905680871.jpg",\n' +
' "info": "2023-07-24(FIRST青年电影展) / 2024-03-30(中国大陆) / 宋木子 / 合文俊 / 李飞 / 李文茹 / 宋晓亮 / 张皓森 / 刘默然 / 祁又一 / 魏来 / 白志强 / 李阔 / 单丹丹 / 尹思淇 / 沈腾 / 中国大陆 / 李阔 / 单丹丹 / 103分钟 / 106分钟(影展版) / 剧情 / 喜剧...",\n' +
' "rating_nums": "6.5"\n' +
' }\n' +
']'
},
logprobs: null,
finish_reason: 'stop'
}
]
四、结合AIGC:让AI参与编程
AIGC,即人工智能生成内容,近年来迅速发展。通过结合自然语言处理(NLP)和深度学习技术,AIGC能够生成高质量的文本内容、代码片段,甚至是完整的应用程序。将AIGC引入编程过程,可以大幅提升开发效率,减少重复性劳动。
在上述示例中,我们可以使用AIGC来简化HTML解析和数据提取的过程。通过将HTML内容作为输入,利用大型语言模型(LLM)生成所需的JSON格式数据。
示例代码解析
const OpenAI = require('openai');
const client = new OpenAI({
apiKey: 'your-api-key', // 请替换为您的API密钥
baseURL: 'https://api.chatanywhere.tech/v1' // API服务地址
});
async function main() {
// 定义豆瓣电影排行榜的URL
const URL = "https://movie.douban.com/chart";
// 发送HTTP请求,获取网页HTML内容
const html = await request({ url: URL });
// 使用Cheerio解析HTML内容
let $ = cheerio.load(html);
// 选择包含电影信息的DOM节点
const movieNodes = $('#content .article .item');
// 初始化一个字符串,用于存储部分电影HTML内容
let movie_html = '';
for (let i = 0; i < 2; i++) {
// 将每个电影节点的HTML内容添加到movie_html字符串中
movie_html += cheerio.load(movieNodes[i]).html();
}
// 定义prompt,将movie_html作为输入传递给AIGC
let prompt = `
${movie_html}
这是一段电影列表HTML,请获取电影名(name)、封面链接(picture)、简介(info)、评分(rating_nums),请使用括号中的单词作为属性名,以JSON格式返回。
`;
// 调用OpenAI的API生成JSON数据
const chatCompletion = await client.chat.completions.create({
model: 'gpt-3.5-turbo',
messages: [{ role: 'user', content: prompt }]
});
// 输出生成的JSON数据
console.log(chatCompletion.choices);
}
// 调用主函数
main();
效果如下,这不是节省了很多时间!
[
{
index: 0,
message: {
role: 'assistant',
content: '{\n' +
' "name": "盟军敢死队",\n' +
' "picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2908134079.jpg",\n' +
' "info": "2024-04-18(中国香港) / 2024-04-19(美国) / 2024-05-24(中国大陆) / 亨利·卡维尔 / 艾莎·冈萨雷斯 / 阿兰·里奇森 / 亚历克斯·帕蒂弗 / 赫洛·费因斯-提芬 / 巴 布斯·奥卢桑莫昆 / 亨利·扎格 / 蒂尔·施威格 / 亨利·戈尔丁 / 加利·艾尔维斯 / 弗莱迪·福克斯...",\n' +
' "rating_nums": "7.1"\n' +
'}, {\n' +
' "name": "对你的想象",\n' +
' "picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2905327559.jpg",\n' +
' "info": "2024-03-16(西南偏南电影节) / 2024-05-02(美国网络) / 安妮·海瑟薇 / 尼古拉斯·加利齐纳 / 艾拉·鲁宾 / 安妮·玛莫罗 / 瑞德·斯科特 / 帕芮·马费尔德 / 乔丹·亚伦·霍尔 / 玛蒂尔达·吉安诺普洛斯 / Meg Millidge / 奇克·曼诺哈 / Ray Cham / Jaiden...",\n' +
' "rating_nums": "5.9"\n' +
'}, {\n' +
' "name": "挑战者",\n' +
' "picture": "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2902765793.jpg",\n' +
' "info": "2024-04-17(澳大利亚) / 2024-04-26(美国) / 赞达亚 / 乔什·奥康纳 / 迈克·费斯特 / 费斯·费伊 / 安德烈·加布瓦 / 艾梅莉娅·卡米尔·海伍德 / 杰克·詹森 / A·J· 利斯特 / 沙恩·T·哈里斯 / 基努·哈姆 / 卡莱恩·富尼耶 / 考特尼·布鲁克斯 /...",\n' +
' "rating_nums": "6.6"\n' +
'}, {\n' +
' "name": "哥斯拉-1.0",\n' +
' "picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2900227040.jpg",\n' +
' "info": "2023-11-01(东京国际电影节) / 2023-11-03(日本) / 神木隆之介 / 滨边美波 / 山田裕贵 / 青木崇高 / 吉冈秀隆 / 安藤樱 / 佐佐木藏之介 / 西垣匠 / 中村织央 / 谷口翔太 / 须田邦裕 / 水桥研二 / 阿南健治 / 饭田基祐 / 远藤雄弥 / 田中美央 / 桥爪功...",\n' +
' "rating_nums": "6.5"\n' +
'}, {\n' +
' "name": "银河写手",\n' +
' "picture": "https://img2.doubanio.com/view/photo/s_ratio_poster/public/p2905680871.jpg",\n' +
' "info": "2023-07-24(FIRST青年电影展) / 2024-03-30(中国大陆) / 宋木子 / 合文俊 / 李飞 / 李文茹 / 宋晓亮 / 张皓森 / 刘默然 / 祁又一 / 魏来 / 白志强 / 李阔 / 单 丹丹 / 尹思淇 / 沈腾 / 中国大陆 / 李阔 / 单丹丹 / 103分钟 / 106分钟(影展版) / 剧情 / 喜剧...",\n' +
' "rating_nums": "6.5"\n' +
'}'
},
logprobs: null,
finish_reason: 'stop'
}
]
五、总结
传统编程方法和AIGC的融合,为软件开发带来了新的可能性。通过将AI引入编程过程,开发者可以从繁琐的重复性劳动中解放出来,专注于更具创造性和挑战性的任务。在本文中,我们通过一个具体的示例展示了如何结合传统编程和AIGC来提升开发效率和代码质量。
这种融合不仅提高了开发效率,还为开发者提供了更强大的工具和技术手段。随着AI技术的不断进步和普及,我们可以预见,未来的编程将更加智能化和高效。作为开发者,我们需要不断学习和适应新的技术,才能在快速变化的技术环境中保持竞争力。