前言
自从去年春天ChatGPT问世之后,互联网也掀起了拥抱AI的浪潮,不仅是各大头部大厂相继发布大模型产品,在开发者的Coding过程中也紧跟时代,一些热门插件也纷纷受到了开发者的青睐,比如GitHub Copilot的智能代码生成。本人也不例外,用起来是真滴香!既然AI可以帮助我们解决如此多的开发相关的问题,那么我们如何可以更高效更合理地去利用AI来帮助我们提升开发效率呢?其实早在之前,在前端领域就有前端自动化,DevOps等说法,只是当时的技术都是倾向于通过制定规范和自动化工具来落地整套CI/CD,而如今在这套规范下,我们可以在其中以AOP(面向切面)的思想,将AI引入到我们的DevOps流程中。
架构设计
这种结合可以用于哪些方向呢?我们知道AI具备问题解答的能力,所以在这一项基础功能上,我们可以衍生出代码智能评审、应用智能告警、应用性能分析等方向。
在原有工具上,以切面的方式,将AI能力接入进去。为了提高项目可扩展性,建议搭建一个推送中心,也可以叫做智能处理中心,在这个服务上,集中处理所有请求,并将这一系列请求都经过AI的分析并产出最终结果,将对应结果下发。这种中心化的思想可以很方便地将多个项目统一接入AI能力,并且易于进行集中管理。
一个服务,多个项目,一站式接入,通过路由分配对应的处理接口。
根据业务类型分配,下面以智能告警系统进行分析。
智能化告警系统
本系统是根据客户端收集的报错信息,上传给服务器端,服务器拿到对应错误信息后,进行一系列的加工处理后,最后将一段纯文本send给大模型进行解析,大模型返回解析的字符串,服务器拿到字符串后,再依赖推送中心的能力,将信息推送到某个推送载体上(如消息、邮件等)。
服务:错误智能分析中心,连接大模型和推送中心
客户端:前端页面
推送中心:具备消息推送、邮件发送等能力,主要是告知用户内容反馈结果
大模型:ChatGPT、文心一言、豆包、言犀大模型等
结合起来就如下图所示:
好了,架构梳理完了,下面讲讲整个实现流程。
实现过程
客户端需要具备错误捕获能力,可以从以下三个方面考虑:
- 可以依赖第三方告警平台,比如sentry;
- 也可以依赖框架自身的错误捕获,比如React的ErrorBoundary组件
- 依赖浏览器自身的错误捕获能力,比如error事件、unhandledrejection事件等
捕获后的错误通常是一个Error对象,该对象具备错误名称、错误堆栈等信息,我们可以把这个对象放在请求体中发送给错误分析中心。
// 以2为例,在react ErrorBoundary中
componentDidCatch(error, errorInfo) {
// 错误上报请求
fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ error })
})
}
错误上报后,由服务端进行错误处理。
数据流向,参考如下鱼骨图
首先请求打到对应的路由上,路由上的中间件首先截获请求数据,在中间件函数内进行数据的加工、过滤,然后交由大模型服务进行数据智能分析(大模型可以选择不同的厂商,在对应厂商的开放平台申请Key获取对应的SDK进行调用),分析完成的数据,再重新赋值给请求上下文,然后放行到控制层。控制层将请求上下文的数据进行全局化赋值(服务内部维护一套全局变量表,通过该表将数据进行整理和汇总)。这一步完成后,就可以给客户端返回一个完成的状态码,表明该请求已经生效。
同时,服务内部启动一个定时器,进行推送消息的节流处理,可以设置间隔时间,以防止高并发请求对推送服务造成较大压力。最后再调用服务层,走最终的消息推送。
以上步骤基本实现了一个智能分析中心服务,后续如果其他项目想要接入该能力,直接向这个服务发送请求即可。
至于消息推送,可以选择公司已有的推送载体,比如一些办公套件,也可以通过邮件消息发送等直接向对方邮箱发送邮件。具体实现方案可以根据实际情况进行选择。
智能化告警系统在原有的错误日志推送、系统监控等传统功能上,接入了AI大模型的算法分析能力,一定程度上可以降低开发人员debug的效率,进而有效减少线上MTTR指标。
性能日志推送
除了智能告警,性能日志也可以以类似的链路进行实现,我们常说的性能,一般指的是一些前端的性能指标,比如Performance对象里的一些内置指标。同时在业务层面,也可以监控系统的PV和UV值,这些都可以从侧面分析出系统的运行情况,方便运营和技术人员作出合理决策,调整运营方向。
不过,值得一提的是,和错误上报不同,性能日志是主动上报的,错误上报无法人为干预,系统出现错误往往是不可预知的,但是性能是可以人为统计的。我们可以在项目中添加埋点,来统计整体数据和模块化的数据;也可以在全局通过用户认证来获取PVUV相关的数据;亦或者可以在项目中通过PerformanceObserver API 来监控项目的性能指标。通过以上策略,拿到对应的性能数据,然后再通过请求进行上报。
例如,通过以下方式统计PVUV
// index.html
<script>
if (process.env.NODE_ENV !== 'development') {
window.fetch(url, {
method: 'GET',
headers: {
'User-Key': document.cookie.split(';').find(item => item.indexOf('_userKey') !== -1)?.split('=')?.[1],
}
});
}
</script>
性能推送一般可以以日报、周报的方式进行定时推送,例如可以在服务的定时器内设置每天9点进行性能报告推送,以egg服务为例
// egg服务
class ClockTask extends Subscription {
static get schedule() {
return {
cron: '0 0 21 * * ?', // 每天21点执行一次
type: 'all' // 指定所有worker都要执行
}
}
// ......
}
其余流程和智能告警流程类似,这里不再赘述。
代码智能评审
我们知道,代码评审一般都是人为完成的,上线前要通过远程仓库进行代码合并,将开发分支的代码合并到主分支,在这个过程中通常进行代码的最终评审。传统的代码评审不仅耗费人力资源,且效率低下。这种方式还存在风险的不可控,毕竟人总会出错的。
那我们也可以将这个流程交给AI帮我们去做,这就叫做代码智能评审,俗称AICR。
了解了痛点,如何去实现呢?
我们知道,git有一个钩子库————husky,通过husky里的钩子,我们可以控制git的整个流程,比如提交前(pre-commit)、提交后(post-commit),在关键节点向中心服务发送请求,请求数据就是我们的commit信息,包括commit描述、改动的代码、对应的分支以及其他补充信息。
相信大家已经看出来了,关键步骤就是在post-commit这个钩子内,只要实现了这部分代码,其他流程就跟上面的大差不差了。
示例脚本
#!/usr/bin/env node
const { spawn, exec } = require('child_process');
const fetch = require('node-fetch');
// 获取最新的 commit title
const gitCommit = spawn('git', ['log', '-1', '--pretty=%B'])
// 获取最新的 commit 改动
const gitDiff = spawn('git', ['diff', 'HEAD~1', 'HEAD']);
let commitMessage = ''
gitCommit.stdout.on('data', (data) => {
commitMessage += data.toString();
})
let diffOutput = '';
gitDiff.stdout.on('data', (data) => {
diffOutput += data.toString();
});
let currentBranch = '';
Promise.all([new Promise((resolve) => {
gitCommit.on('close', (code) => {
if (code === 0) {
resolve();
} else {
console.error('Error getting commit message');
}
});
}), new Promise((resolve) => {
gitDiff.on('close', (code) => {
if (code === 0) {
resolve();
} else {
console.error('Error getting diff output');
}
});
}), new Promise((resolve) => {
exec('git rev-parse --abbrev-ref HEAD', (error, stdout, stderr) => {
if (error) {
console.error(`Error: ${error}`);
return;
}
if (stderr) {
console.error(`Error: ${stderr}`);
return;
}
currentBranch = stdout.trim();
resolve()
})
})]).then(() => {
fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ projectName: 'xxx', branch: currentBranch, commit: commitMessage, diff: diffOutput })
})
})
这样,每次的代码commit后,都会将改动的代码先传给中心服务进行智能评审,评审后的内容同样发送给推送载体,这样就可以在一定程度上缓解人工评审的压力了,而且效率很高,每次commit都会给一个对应评审结果,debug更加灵活。
总结
关于智能化,除了这三个例子,还可以切入更多的场景中,可玩性还是很大的,建议大家都可以试试。后续如果用的好,对流程化建设来说,是极其关键的一环。
现在大环境下,我们作为技术开发人员,要时刻保持一颗好奇心,站在行业视角,去拥抱新技术,让它成为我们的工具,提升我们的工作效率。只有这样,才能不断提升自己的竞争优势,才能不被时代淘汰。
如何学习AI大模型?
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓