LLM 与 AIGC 融合:编程范式的转变与实践案例
本文探讨了大型语言模型与 AIGC 技术在编程领域的融合应用。通过对比传统 Web 爬虫开发与基于 LLM 的数据解析方案,展示了 AI 如何简化代码编写与数据处理流程。文章详细分析了两种方式的优缺点,提供了 JavaScript 爬虫代码示例及 Prompt 设计策略,并指出了准确性验证、成本控制及隐私安全等关键挑战。结论指出,未来编程将是人类技能与 AI 能力的深度结合,掌握 Prompt 工程与人机协作模式是提升开发效率的关键。

本文探讨了大型语言模型与 AIGC 技术在编程领域的融合应用。通过对比传统 Web 爬虫开发与基于 LLM 的数据解析方案,展示了 AI 如何简化代码编写与数据处理流程。文章详细分析了两种方式的优缺点,提供了 JavaScript 爬虫代码示例及 Prompt 设计策略,并指出了准确性验证、成本控制及隐私安全等关键挑战。结论指出,未来编程将是人类技能与 AI 能力的深度结合,掌握 Prompt 工程与人机协作模式是提升开发效率的关键。

在当今快速发展的技术世界中,大型语言模型(LLM)和人工智能生成内容(AIGC)正在引领一场深刻的编程革命。传统的编程方法虽然功能强大且逻辑严密,但往往需要开发者投入大量的时间和精力来编写、调试和维护代码。特别是在处理非结构化数据或快速原型开发时,传统流程显得尤为繁琐。
随着 LLM 技术的成熟,这一切正在发生翻天覆地的变化。开发者不再仅仅依赖手写的正则表达式或复杂的 DOM 解析器,而是可以通过自然语言指令让 AI 辅助完成代码生成、逻辑判断甚至数据处理任务。本文将探讨从传统编程到 AI 增强编程的转变过程,并通过具体的爬虫案例展示这一范式转移的实际应用。
人工智能生成内容(AIGC)是指使用人工智能技术,特别是大型语言模型(LLM),来自动生成或协助生成各种内容的过程。这包括但不限于文本、图像、音乐和视频。AIGC 的核心在于其能够理解和处理自然语言,使其能够接收简单的指令并产生复杂的输出。
AIGC 与 LLM 的结合为内容创作带来了新的可能性。LLM 的强大语言理解能力使得它能够准确地把握用户的意图,并生成符合要求的内容。这种结合不仅提高了内容质量,还扩展了创作的边界。在软件开发领域,这意味着开发者可以将更多精力集中在架构设计和业务逻辑上,而将重复性高、模式固定的编码工作交给 AI 助手。
为了对比说明,我们首先回顾一下使用传统方式编写爬虫的过程。以编写爬虫来爬取豆瓣电影排行榜为例,通常需要使用如 x-crawl 这样的库来创建爬虫应用,并通过 crawlPage 函数来爬取目标页面的数据。
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)
// 电影名 (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
)
// 评论人数 (commentsNumber)
const commentsNumberPending = filmHandle.$eval(
'td:nth-child(2) .star .pl',
(el) => el.textContent?.replace(/\(|\)/g, '')
)
pendingTask.push([
namePending,
picturePending,
infoPending,
commentsNumberPending
])
}
const filmInfoResult = []
let i = 0
for (const item of pendingTask) {
Promise.all(item).then((res) => {
// filmInfo 是一个电影信息对象,顺序在前面就决定好了
const filmInfo = [
'name',
'picture',
'info',
'commentsNumber'
].reduce((pre, key, idx) => {
pre[key] = res[idx]
return pre
}, {})
// 保存每个电影信息
filmInfoResult.push(filmInfo)
// 最后一次的处理
if (pendingTask.length === ++i) {
browser.close()
// 整理,根据数量决定是多还是单
const filmResult = {
element: filmInfoResult,
type: filmInfoResult.length > 1 ? 'multiple' : 'single'
}
console.log(filmResult)
}
})
}
})
运行上述爬虫后,可获取如下结构化的 JSON 数据:
{
"element": [
{
"name": "破墓",
"picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2905896429.webp",
"info": "2024-02-16(柏林电影节) / 2024-02-22(韩国) / 崔岷植 / ...",
"commentsNumber": "106773 人评价"
},
{
"name": "对你的想象",
"picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2905327559.webp",
"info": "2024-03-16(西南偏南电影节) / ...",
"commentsNumber": "18034 人评价"
}
],
"type": "multiple"
}
传统编程需要开发者具备扎实的编程素养,包括理解 HTTP 协议、处理可能出现的错误代码(如 408 请求超时)、编写和调试代码。这个过程虽然能够锻炼开发者的逻辑思维,但也不可避免地带来了时间和精力上的消耗。此外,当网页结构发生变化时,XPath 或 CSS 选择器往往需要重新调整,维护成本较高。
现在,我们可以利用 LLM 来简化这一过程。LLM 能够理解开发者的需求,并生成相应的代码或直接处理数据。以通义千问等主流大模型为例,我们向 LLM 发送电影相关的网页源代码片段,并提供清晰的指令。
假设我们提供以下 HTML 片段:
<tbody><tr class="item">
<td width="100" valign="top">
<a class="nbg" href="...">
<img src="..." alt="破墓" class="">
</a>
</td>
<td valign="top">
<div class="pl2">
<a href="...">破墓</a>
<p class="pl">2024-02-16(柏林电影节) / ...</p>
<div class="star clearfix">
<span class="rating_nums">6.7</span>
<span class="pl">(106772 人评价)
并向 LLM 提供 Prompt:
这是一部电影的 html 片段,获取需要的电影的名字 (name),封面链接 (picture),简介 (desc),评分 (score),评论人数 (commentsNumber)。请使用括号的单纯作属性名,以 JSON 对象的格式返回。
LLM 则能够自动生成 JSON 数组,包含电影的名称、图片、描述和评分等信息。这种方法不仅提高了效率,而且还降低了出错的可能性。AI 能够自动识别标签结构,无需手动编写复杂的 XPath 表达式。
LLM 的优势在于其对自然语言的理解能力和生成式任务的执行能力。它可以处理文字、图片、视频等多种形式的内容,使得编程变得更加直观和灵活。此外,LLM 还能够与各种 API 进行集成,进一步扩展其功能。通过这种方式,开发者可以将注意力从语法细节转移到业务逻辑本身。
| 维度 | 传统编程 | LLM 辅助编程 |
|---|---|---|
| 上手难度 | 需掌握特定库及 API | 需掌握 Prompt 工程技巧 |
| 灵活性 | 固定逻辑,修改需改代码 | 自然语言调整,响应快 |
| 准确性 | 高,可控性强 | 依赖模型能力,偶有幻觉 |
| 成本 | 人力时间成本高 | Token 消耗 + 人力审核 |
| 维护性 | 结构变动需重构 | 提示词微调即可适应 |
尽管 LLM 带来了便利,但在实际生产环境中仍面临一些挑战。
AI 生成的代码或数据可能存在幻觉。因此,必须建立自动化测试机制,对 LLM 输出的数据进行校验。例如,检查 JSON 格式是否合法,字段是否为空,数值是否在合理范围内。
频繁调用大模型 API 会产生费用。对于大规模数据处理任务,建议采用混合模式:先用传统规则过滤大部分数据,再对复杂部分使用 LLM 处理。
不要将敏感数据直接发送给公共 LLM 服务。如果涉及企业内部数据,应部署私有化模型或使用支持数据脱敏的企业级 API。
编写有效的 Prompt 是关键。建议遵循以下原则:
这篇文章尝试捕捉从传统编程到 AI 思维的转变,并展望了 LLM 在未来编程中的作用。未来的编程将是编程技能与 AIGC 素养的结合。开发者需要学会如何编写有效的 Prompt,这就像是给 LLM 下达指令,让它成为一个编程助手。这种全栈的能力,将使得开发者能够更快地实现想法,并创造出更加丰富和多样的数字产品。
随着 LLM 技术的不断进步,我们正迎来一个编程与 AI 思维相结合的新时代。在这个时代中,LLM 不仅仅是一个工具,更是一个合作伙伴,它将帮助开发者释放创造力,推动数字世界的发展。掌握人机协作的新范式,将成为每一位现代软件工程师的核心竞争力。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online