利用AI大模型,增强你的DevOps!

news2024/11/24 8:43:15

前言

自从去年春天ChatGPT问世之后,互联网也掀起了拥抱AI的浪潮,不仅是各大头部大厂相继发布大模型产品,在开发者的Coding过程中也紧跟时代,一些热门插件也纷纷受到了开发者的青睐,比如GitHub Copilot的智能代码生成。本人也不例外,用起来是真滴香!既然AI可以帮助我们解决如此多的开发相关的问题,那么我们如何可以更高效更合理地去利用AI来帮助我们提升开发效率呢?其实早在之前,在前端领域就有前端自动化,DevOps等说法,只是当时的技术都是倾向于通过制定规范和自动化工具来落地整套CI/CD,而如今在这套规范下,我们可以在其中以AOP(面向切面)的思想,将AI引入到我们的DevOps流程中。

架构设计

这种结合可以用于哪些方向呢?我们知道AI具备问题解答的能力,所以在这一项基础功能上,我们可以衍生出代码智能评审、应用智能告警、应用性能分析等方向。

在这里插入图片描述

在原有工具上,以切面的方式,将AI能力接入进去。为了提高项目可扩展性,建议搭建一个推送中心,也可以叫做智能处理中心,在这个服务上,集中处理所有请求,并将这一系列请求都经过AI的分析并产出最终结果,将对应结果下发。这种中心化的思想可以很方便地将多个项目统一接入AI能力,并且易于进行集中管理。

一个服务,多个项目,一站式接入,通过路由分配对应的处理接口。

在这里插入图片描述

根据业务类型分配,下面以智能告警系统进行分析。

智能化告警系统

本系统是根据客户端收集的报错信息,上传给服务器端,服务器拿到对应错误信息后,进行一系列的加工处理后,最后将一段纯文本send给大模型进行解析,大模型返回解析的字符串,服务器拿到字符串后,再依赖推送中心的能力,将信息推送到某个推送载体上(如消息、邮件等)。

服务:错误智能分析中心,连接大模型和推送中心

客户端:前端页面

推送中心:具备消息推送、邮件发送等能力,主要是告知用户内容反馈结果

大模型:ChatGPT、文心一言、豆包、言犀大模型等

结合起来就如下图所示:

在这里插入图片描述

好了,架构梳理完了,下面讲讲整个实现流程。

实现过程

客户端需要具备错误捕获能力,可以从以下三个方面考虑:

  1. 可以依赖第三方告警平台,比如sentry;
  2. 也可以依赖框架自身的错误捕获,比如React的ErrorBoundary组件
  3. 依赖浏览器自身的错误捕获能力,比如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%免费】🆓

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2209182.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构编程实践20讲(Python版)—05二叉树

本文目录 写在前面:大“树”下好乘凉定义主要术语基本特征主要应用领域:05 二叉树Binary treeS1 说明S2 示例S3 二叉树类型(1)满二叉树(Perfect Binary Tree)(2)完全二叉树(Complete Binary Tree)(3)二叉搜索树(Binary Search Tree)(4)平衡二叉树(Balanced Bin…

Windows环境NodeJS下载配置安装运行

Windows环境NodeJS下载配置安装运行 &#xff08;1&#xff09;下载 Node.js — Run JavaScript Everywhere 安装文件。 一路傻瓜式安装。 如果安装正常&#xff0c;输入命令可显示版本号&#xff1a; &#xff08;2&#xff09;可以查询nodejs默认的后续依赖安装包位置及缓存…

稻盛和夫认为,一个领导是否值得追随,看这几点就够了

一、真正的领导者有自信&#xff0c;但不自大&#xff0c;有坚定的信念和价值观。 稻盛和夫认为&#xff0c;领导者的真正强大之处在于他们能够坚定地做正确的事情。领导者必须具备勇气和决心&#xff0c;以及坚定的信念&#xff0c;以便在面对挑战和困难时能够坚持自己的信念…

Vert.x,Web - 静态资源/模板

静态资源 Vert.x-Web带有开箱即用的处理器(StaticHandler)&#xff0c;用于处理静态Web资源(.html, .css, .js, …)&#xff0c; 因此可以非常轻松地编写静态Web服务器。 默认静态文件目录为类路径下的webroot目录&#xff0c;对于maven的项目&#xff0c;按规范放在src/main/…

BIO与NIO学习

BIO&#xff1a;同步阻塞IO&#xff0c;客户端一个连接请求&#xff08;socket&#xff09;对应一个线程。阻塞体现在: 程序在执行I/O操作时会阻塞当前线程&#xff0c;直到I/O操作完成。在线程空闲的时候也无法释放用于别的服务只能等当前绑定的客户端的消息。 BIO的代码实现 …

郑光荣参加老年春节联欢晚会团长会议现场采访

郑光荣作为北京正明圣达叫卖团的业务团长&#xff0c;他不仅在多个春节联欢晚会中展现了 自己的才华&#xff0c;还在团长会议现场接受了采访。在2024年参加了多个电视台的 春节联欢晚会录制。 郑光荣曾经参与了包括北京广播电视台、海南卫视&#xff0c;中国国际教育电视台…

c++基础-去掉空格

#include <algorithm> #include <string> #include <cctype> // 用于std::isspace std::string removeSpaces(std::string str) {str.erase(std::remove_if(str.begin(), str.end(), ::isspace), str.end());return str; }int main() {string str &quo…

腾讯云视立方Flutter 相关

两台手机同时运行 Demo&#xff0c;为什么看不到彼此的画面&#xff1f; 请确保两台手机在运行 Demo 时使用的是不同的 UserID&#xff0c;TRTC 不支持同一个 UserID &#xff08;除非 SDKAppID 不同&#xff09;在两个终端同时使用。 防火墙有什么限制&#xff1f; 由于 SDK…

visual studio使用ssh连接linux虚拟机运行程序

1.vs安装linux组件 2.安装后新建项目 新建后会有一个使用指南 设置网络为桥接网卡后打开虚拟机 使用vs提升的那句话安装工具 sudo apt-get install openssh-server g gdb gdbserver 重启ssh服务 sudo service ssh restart 接着进去打开ssh端口 sudo vi /etc/ssh/sshd_config …

安装rstudio-server

主要教步骤参考https://posit.co/download/rstudio-server/ 1&#xff0c;首先是linux发行版版本要求&#xff1a;符合 2&#xff0c;预装R&#xff1a;符合 3&#xff0c;安装rstudio-server 4&#xff0c;但是发现web上8787端口打不开&#xff1a; RStudio Server 可能没有在…

不会大模型不要紧!只需5分钟!你也可以微调大模型!如何快速微调Llama3.1-8B

AI浪潮席卷全球并发展至今已有近2年的时间了&#xff0c;大模型技术作为AI发展的底座和基石&#xff0c;更是作为AI从业者必须掌握的技能。但是作为非技术人员&#xff0c;相信大家也有一颗想要训练或微调一个大模型的心&#xff0c;但是苦于技术门槛太高&#xff0c;无从下手。…

Chromium 如何查找V8 引擎中JavaScript 标准内置对象

JavaScript 标准内置对象 - JavaScript | MDN (mozilla.org) 一、JavaScript 标准内置对象 本章介绍和说明了 JavaScript 中所有的标准内置对象、以及它们的方法和属性。 这里的术语“全局对象”&#xff08;或标准内置对象&#xff09;不应与 global 对象混淆。这里的“全局…

【Canvas与标牌】内凹圆角矩形排列组合标牌

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>内凹圆角矩形Draft3排列组合标牌</title><style type"…

云轴科技ZStack邀您参加迪拜GITEX 2024,10月14日不见不散

云轴科技ZStack期待在GITEX GLOBAL 2024与您相遇&#xff0c;共同探索科技的未来。 10月14日至18日&#xff0c;ZStack将携最新的云计算解决方案与AIOS智塔平台&#xff0c;亮相全球顶尖科技盛会——GITEX GLOBAL 2024 展览会&#xff0c;展位Hall 8-C20&#xff0c;向全球观众…

Git客户端使用之TortoiseGit和Git

git客户端有两个分别是TortoiseGit和Git Git用于命令行TortoiseGit用于图形界面。无论是Git还是TortoisGit都需要生成公/私钥与github/gitlab建立加密才能使用。 一、先介绍Git的安装与使用 1、下载与安装 安装Git-2.21.0-64-bit.exe(去官网下载最新版64位的)&#xff0c;安…

阿里P8面试官推荐学习的11大专题:java面试精讲框架文档

本篇文章给大家分享一波&#xff0c;阿里P8面试官推荐学习的11大专题&#xff1a;java面试精讲框架文档&#xff0c;主要包含11大块的内容&#xff1a;spring、springcloud、netty、zookeeper、kafka、Hadoop、HBASE、Cassandra、elasticsearch、spark、flink&#xff1b;希望大…

抢先体验上海交大最新大模型Agent心理诊所!论文一作深度解读角色扮演Agent前沿进展

在当今社会的快节奏生活下&#xff0c;人们对于心理健康的关注度也在持续提升。然而&#xff0c;如今的心理健康医疗资源明显不足&#xff0c;尤其是在低收入和中等收入国家。同时&#xff0c;相关医疗资源的分布也主要集中在城市和大型机构&#xff0c;这种分配不平衡导致大量…

如何下载、安装并激活 Paragon NTFS for Mac 17,paragon ntfs for mac怎么用

Paragon NTFS for Mac是一款非常不错的Mac读写工具&#xff0c;解决了大部分Mac电脑用户无法读取移动硬盘的困扰&#xff0c;但是很多用户在购买了正版Paragon后不会激活。本篇将为各位小伙伴们讲解一下NTFS读写工具Paragon NTFS for Mac是如何进行下载、安装与激活的。 注&am…

双向广搜 Solitaire——hdu1401

目录 前言 字符数字的转换 bfs or double dfs 棋局的编号 Solitaire 问题描述 输入 输出 问题分析 判重 棋子走动逻辑 单向搜索代码 双向搜索退出条件 双向广搜代码 前言 交代一下我写这题的感受&#xff0c;被自己气笑了&#xff0c;本来以为是我字符串没弄好&#xff0c;…

JAVA——File类

目录 1.概述 2.构造方法 a.根据文件路径创建文件对象 b.根据父级路径和子级路径创建对象 c.根据File表示的路径和String表示路径进行拼接 3.常见方法 a.判断文件是否存在 b.判断文件是否为文件夹 c.判断是否为文件 d.获取文件大小 e.获取文件的绝对路径 f.获取定义…