引言
在当今快速发展的技术世界中,大型语言模型(LLM)和人工智能生成内容(AIGC)正在引领一场编程革命。传统的编程方法,虽然功能强大,但往往需要大量的时间和精力来编写和维护代码。然而,随着LLM的出现,这一切都有了翻天覆地的变化。
AIGC简述
人工智能生成内容(AIGC)是指使用人工智能技术,特别是大型语言模型(LLM),来自动生成或协助生成各种内容的过程。这包括但不限于文本、图像、音乐和视频。AIGC的核心在于其能够理解和处理自然语言,使其能够接收简单的指令并产生复杂的输出。AIGC与LLM的结合为内容创作带来了新的可能性。LLM的强大语言理解能力使得它能够准确地把握用户的意图,并生成符合要求的内容。这种结合不仅提高了内容质量,还扩展了创作的边界。
传统编程
以编写爬虫来爬取豆瓣电影排行榜为例,使用x-crawl
库来创建爬虫应用,并通过crawlPage
函数来爬取豆瓣电影的排行榜数据。完成等待页面元素加载、选择特定的DOM元素、提取数据以及处理异步任务。
//
import { createCrawl } from 'x-crawl' // 创建爬虫
// 创建爬虫应用
const crawlApp = createCrawl() //
// crawlPage 用于爬取页面
crawlApp.crawlPage('https://movie.douban.com/chart').then(async (res) => {
const { page, browser } = res.data
// 等待元素出现在页面中
await page.waitForSelector('#wrapper #content .article')
const filmHandleList = await page.$$('#wrapper #content .article table')
const pendingTask = []
for (const filmHandle of filmHandleList) {
// 封面链接(picture)
const picturePending = filmHandle.$eval('td img', (img) => img.src)
// console.log(picturePending, '////')
// 电影名(name)
const namePending = filmHandle.$eval(
'td:nth-child(2) a',
(el) => el.innerText.split(' / ')[0]
)
// 简介(info)
const infoPending = filmHandle.$eval(
'td:nth-child(2) .pl',
(el) => el.textContent
)
// 评分(score)
// const scorePending = filmHandle.$eval(
// 'td:nth-child(2) .star .rating_nums',
// (el) => el.textContent
// )
// 评论人数(commentsNumber)
const commentsNumberPending = filmHandle.$eval(
'td:nth-child(2) .star .pl',
(el) => el.textContent?.replace(/\(|\)/g, '')
)
pendingTask.push([
namePending,
picturePending,
infoPending,
// scorePending,
commentsNumberPending
])
}
const filmInfoResult = []
let i = 0
for (const item of pendingTask) {
Promise.all(item).then((res) => {
// filmInfo 是一个电影信息对象,顺序在前面就决定好了
const filmInfo = [
'name',
'picture',
'info',
// 'score',
'commentsNumber'
].reduce((pre, key, i) => {
pre[key] = res[i]
return pre
}, {})
// 保存每个电影信息
filmInfoResult.push(filmInfo)
// 最后一次的处理
if (pendingTask.length === ++i) {
browser.close()
// 整理,根据数量决定是多还是单
const filmResult = {
element: filmInfoResult,
type: filmInfoResult.length > 1 ? 'multiple' : 'single'
}
console.log(filmResult)
}
})
}
})
运行爬虫后可获取如下
{
element: [
{
name: '破墓',
picture: 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2905896429.webp',
info: '2024-02-16(柏林电影节) / 2024-02-22(韩国) / 崔岷植 / 金高银 / 柳海真 / 李到晛 / 全镇基 / 洪瑞俊 / 李大卫 / 小山力也 / 金智安 / 金善映 / 韩国 / 张在现 / 134分钟 / 破墓 / 悬疑 / 惊悚 / 恐怖 / 张宰贤 Jae-hyun Jang / 韩语 / 日语 / 英语',
commentsNumber: '106773人评价'
},
{
name: '对你的想象',
picture: 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2905327559.webp',
info: '2024-03-16(西南偏南电影节) / 2024-05-02(美国网络) / 安妮·海瑟薇 / 尼古拉斯·加利齐纳 / 艾拉·鲁宾 / 安妮·玛莫罗 / 瑞德·斯科特 / 帕芮·马费尔德 / 乔丹·亚伦·霍尔 / 玛蒂尔 达·吉安诺普洛斯 / Meg Millidge / 奇克·曼诺哈 / Ray Cham / Jaiden...',
commentsNumber: '18034人评价'
},
{
name: '哥斯拉-1.0',
picture: 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2900227040.webp',
info: '2023-11-01(东京国际电影节) / 2023-11-03(日本) / 神木隆之介 / 滨边美波 / 山田裕贵 / 青木崇高 / 吉冈秀隆 / 安藤樱 / 佐佐木藏之介 / 西垣匠 / 中村织央 / 谷口翔太 / 须田邦裕 / 水桥研二 / 阿南健治 / 饭田基祐 / 远藤雄弥 / 田中美央 / 桥爪功...',
commentsNumber: '22921人评价'
},
{
name: '彷徨之刃',
picture: 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2907398842.webp',
info: '2024-05-17(中国大陆) / 王千源 / 王景春 / 齐溪 / 张宥浩 / 王天辰 / 周政杰 / 阿如那 / 吴双 / 中国大陆 / 陈卓 / 2024-05-03 16:17 / 107分钟 / 剧情 / 犯罪 / 悬疑 / 杨薇薇 Weiwei Yang / 李佳颖 Carol Li / 徐翔云 Xiangyun Xu / 陈卓 Zhuo Chen / 汉语普通话...',
commentsNumber: '尚未上映'
},
{
name: '银河写手',
picture: 'https://img2.doubanio.com/view/photo/s_ratio_poster/public/p2905680871.webp',
info: '2023-07-24(FIRST青年电影展) / 2024-03-30(中国大陆) / 宋木子 / 合文俊 / 李飞 / 李文茹 / 宋晓亮 / 张皓森 / 刘默然 / 祁又一 / 魏来 / 白志强 / 李阔 / 单丹丹 / 尹思淇 / 沈腾 / 中国大陆 / 李阔 / 单丹丹 / 103分钟 / 106分钟(影展版) / 剧情 / 喜剧...',
commentsNumber: '34868人评价'
},
{
name: '老狐狸',
picture: 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2900908599.webp',
info: '2023-10-27(东京国际电影节) / 2023-11-24(中国台湾) / 白润音 / 刘冠廷 / 陈慕义 / 刘奕儿 / 门胁麦 / 黄健玮 / 温升豪 / 班铁翔 / 杨丽音 / 傅孟柏 / 高英轩 / 庄益增 / 张再 兴 / 许博维 / 管罄 / 钟瑶 / 游珈瑄 / 郑旸恩 / 戴雅芝 / 姜仁 / 萧鸿文...',
commentsNumber: '49335人评价'
},
{
name: '魔鬼深夜秀',
picture: 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2905556722.webp',
info: '2023-06-11(澳大利亚) / 2024-04-19(美国网络) / 大卫·达斯马齐连 / 劳拉·戈登 / 伊恩·布利斯 / 费萨尔·巴齐 / 英 格丽·托蕾莉 / 里斯·奥特里 / 乔治娜·海格 / 乔什·邝·塔特 / 斯蒂夫·莫察基斯 / 宝拉·阿伦德尔 / 塔马拉·谢尔顿 / 克里斯托弗· 卡比...',
commentsNumber: '19246人评价'
},
{
name: '完美的日子',
picture: 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2898894527.webp',
info: '2023-05-25(戛纳电影节) / 2023-12-21(德国) / 2023-12-22(日本) / 役所广司 / 柄本时生 / 中野有纱 / 山田葵 / 麻生祐未 / 石川小百合 / 三浦友和 / 田中泯 / 大下浩人 / 犬山犬子 / 牧口元美 / 长井短 / 研直子 / 茂吕师冈 / 县森鱼 / 片桐 入 / 芹泽兴人...',
commentsNumber: '41780人评价'
},
{
name: '机器人之梦',
picture: 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2899644068.webp',
info: '2023-05-20(戛纳电影节) / 2023-12-06(西班牙) / 2024(中国大陆) / 伊万·拉班达 / 阿尔伯特·特里佛·塞加拉 / 拉法·卡尔沃 / 何塞·加西亚·托斯 / 何塞·路易斯·梅地亚维拉 / 加西埃拉·莫利娜 / 埃斯特·索兰斯 / 西班牙 / 法国 / 巴勃罗·贝格尔...',
commentsNumber: '76232人评价'
},
{
name: '血爱成河',
picture: 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2902183869.webp',
info: '2024-01-20(圣丹斯电影节) / 2024-03-08(美国) / 克里斯汀·斯图尔特 / 凯蒂·M·奥布莱恩 / 艾德·哈里斯 / 戴夫·弗兰科 / 吉娜·马隆 / 安娜·巴瑞辛尼科夫 / 基思·雅各 / 伊薇特·法 齐奥-德莱尼 / 戴维·德劳 / 凯莱布·贝克 / 米坎德鲁 / 莉莉·哈里斯...',
commentsNumber: '6418人评价'
}
],
type: 'multiple'
}
小结
传统编程需要开发者具备扎实的编程素养,包括理解HTTP协议、处理可能出现的错误代码(如408请求超时)、编写和调试代码。这个过程虽然能够锻炼开发者的逻辑思维,但也不可避免地带来了时间和精力上的消耗。
LLM编程
现在,我们可以利用LLM来简化这一过程。LLM能够理解开发者的需求,并生成相应的代码。以通义千问为例,我们向通义千问发送电影相关的网页源代码。