Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >用于基础设施即代码的生成式AI工具

用于基础设施即代码的生成式AI工具

作者头像
云云众生s
发布于 2024-03-28 07:36:35
发布于 2024-03-28 07:36:35
19100
代码可运行
举报
文章被收录于专栏:云云众生s云云众生s
运行总次数:0
代码可运行

掌握生成式人工智能,优化代码生成、解释与调试,助力工作流程飞速前行。

译自 Generative AI Tools for Infrastructure as Code,作者 Parasar Kodati 在技术领域拥有长达两十年的经验,包括技术支持、工程、产品管理以及最为显著的技术推广等多个角色。

基础设施即代码(IaC)帮助DevOps、IT运维和其他工程师在不断扩大、复杂化和多样化的动态IT环境中管理数据、应用程序和基础设施。通过GitOps驱动的工作流,工程师可以在不同环境中引入急需的标准化、安全性和操作一致性。

虽然有许多令人信服的理由支持采用IaC,但有一项创新使其更具优势:生成式人工智能(AI)。仅仅一年前,人们对于AI生成的代码的准确性存在很多怀疑。但是这项技术正在迅速发展,变得越来越成为IaC的关键推动因素,从最佳实践转变为不可或缺的战略。

OpenAI一直在领导产业,推出了ChatGPT等生成式AI工具,而Meta的LLAMA等其他强大的大语言模型(LLMs)也具备广泛的生成式AI能力。我的同事们在戴尔公司发表了一篇关于构建通用型LLM环境的白皮书。

有许多生成式AI工具可用,可以帮助您加速工作流程、学习甚至职业发展。我将在这里描述其中一些功能。

代码生成

如果让我在每月理发和生成式代码助手订阅之间选择,我会选择后者。像GitHub Copilot这样的工具现在变得不可或缺——即使您只是在进行Shell脚本编写,更不用说编写复杂的Ansible Playbooks了。这些工具减少了创建自动化任务所需的代码基础块的时间,而且每一行生成的代码都包含了您高中英语老师会认可的有意义的注释。我的《Ansible for OpenManage Enterprise》视频展示了这些工具如何帮助您生成代码的许多示例。

代码解释

生成式AI模型可以解析和解释广泛的编程语言编写的代码,这得益于它们在数百万行代码的广泛训练。当您需要解释代码时,例如重构代码或尝试改进现有的自动化脚本时,使用代码提示LLM可能比使用纯英语更容易。以下是一个快速示例,我使用最新的ChatGPT 4模型生成了一个优秀的旧Shell脚本的Ansible等效版本。

我用于创建文件夹压缩备份的Shell脚本输入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash


# Set the directory to back up and the backup location
DIRECTORY_TO_BACKUP="/home/user/data"
BACKUP_LOCATION="/backup"
TIMESTAMP=$(date +"%F")
BACKUP_FILE="backup-$TIMESTAMP.tar.gz"


# Create the backup
tar -czf $BACKUP_LOCATION/$BACKUP_FILE $DIRECTORY_TO_BACKUP


# Check if the backup was successful
if [ $? -eq 0 ]; then
  echo "Backup completed successfully."
else
  echo "Backup failed." >&2
fi

初始的Ansible输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
---
- name: Create Backup of Directory
  hosts: all
  tasks:
    - name: Create backup file
      ansible.builtin.archive:
        path: /home/user/data
        dest: /backup/backup-{{ ansible_date_time.iso8601_basic_short }}.tar.gz
        format: gz

当我提示模型生成一个带有变量的更结构化代码块时,它返回:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
---
- name: Create Backup of Directory with Variables
  hosts: all
  vars:
    backup_source: /home/user/data # Define the source directory to back up
    backup_destination: /backup # Define the backup destination directory
    backup_filename: "backup-{{ ansible_date_time.iso8601_basic_short }}.tar.gz" # Backup filename with a timestamp
  tasks:
    - name: Create backup directory if it does not exist
      ansible.builtin.file:
        path: "{{ backup_destination }}"
        state: directory
        mode: '0755'


    - name: Create backup file
      ansible.builtin.archive:
        path: "{{ backup_source }}"
        dest: "{{ backup_destination }}/{{ backup_filename }}"
        format: gz

最新的ChatGPT界面支持附加文件,因此您无需复制粘贴需要重构的代码。只需组织好文件,然后将它们附加到您的提示中。

错误分析与调试

如果你认为将错误消息复制粘贴到Stack Overflow是调试代码的最佳方式,那就再想想吧。基于LLM的代码解释工具可以分析错误消息和日志,并在许多情况下识别经常发生的问题的根本原因。这适用于任何代码,包括Ansible Playbooks和Terraform模块,LLM可以迅速推荐修复措施,链接到相关文档,甚至可能自动化解决过程。

提示工程

编写提示已经成为确定LLM响应准确性的关键技能。您的提示越具体和详细,响应就越有用。以下是一些IaC的示例:

“我正在进行一个Terraform项目,在其中我需要为AWS EC2实例进行配置,具体要求是:它应该是‘t2.micro’类型,在‘us-east-1’区域,并包含‘Name’标签为‘MyInstance’和‘Environment’标签为‘Development’。你能提供定义这个资源的Terraform代码片段吗?”

或者:

“我需要创建一个Ansible playbook,执行一个常见的操作:在一组Ubuntu服务器上更新所有软件包。Playbook应该是幂等的,只能针对‘webservers’组的服务器。如果更新需要重新启动,它还必须仅重新启动‘nginx’服务。你能为这个playbook生成YAML代码吗?”

如果你正在致力于通过自动化改变世界,可以尝试类似这样的内容:

“对于在DevOps环境中使用Python编写的自动化脚本,我需要一个强大的错误处理策略,它能将错误记录到文件并在发生关键故障时发送电子邮件通知。该脚本旨在自动化部署流程。你能提供一个演示这种错误处理的Python代码示例吗?”

有了这些强大的功能,请让一个代码助手来帮助你,即使你不得不跳过一些咖啡或理发。

创建你自己的GPT(全球项目工具)

如果你在浏览器中一直打开着一个ChatGPT标签,并且已经成为一个提示编写专家,那么你可以利用生成式AI做更多事情,而不仅仅是生成代码。

多亏了最近宣布的GPT模型和OpenAI的Assistants API,你可以创建一个定制的模型,它在响应速度和准确性方面更快更精确。你可以用任何东西训练GPT模型,比如政策文件、编码准则或IT基础设施大小计算器,并让聊天机器人使用这些后端模型来回答客户或内部利益相关者的查询(请注意,根据客户数量和使用情况,这些能力是有成本的)。

定制GPT的关键元素:

代码解释器:这与ChatGPT或GitHub Copilot中的编码能力没有太大区别。在创建定制GPT时,包括一个选项,用户可以选择是否要使用代码解释器。这是因为Assistants API采用的是按使用量计费模型;不需要此功能的用户可以取消选择。

知识检索:由人工智能提供支持的知识检索系统可以即时检索与手头任务相关的技术文档和最佳实践,无论是制作Ansible Playbook还是在Terraform中定义资源。这种对信息的即时访问加速了开发过程,并有助于在各个平台上保持行业标准。

自定义功能:如果您已经构建了用于计算或做决策的脚本和例程,您可以将它们整合到您的自定义GPT中。我最近看到一个例子,其中投资回报率(ROI)计算器被整合到一个聊天机器人中,以帮助网站访问者评估转换为太阳能的好处。您可以为目标终端用户创建一个大小估算工具或性能基准测试工具。

关于专有和敏感数据的注意事项

虽然大型语言模型是程序员长期以来最好的东西,但在使用非公开数据训练AI模型时要极度谨慎。根据用例,在使用敏感或专有数据的提示或用于训练的知识文档中设置严格的防护措施。如果您的组织没有这样的防护措施,您可以成为创建它们的倡导者,并参与帮助组织实现更高的AI采用成熟度。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-032,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
前端开发,必知ES5、ES6的7种继承
众所周知,在ES6之前,前端是不存在类的语法糖,所以不能像其他语言一样用extends关键字就搞定继承关系,需要一些额外的方法来实现继承。下面就介绍一些常用的方法,红宝书已经概括的十分全面了,所以本文基本就是对红宝书继承篇章的笔记和梳理。
青梅煮码
2023/03/13
2590
继承
ES6之前并没有给我们提供extends继承。我们可以通过构造函数+原型对象模拟实现继承,被称为组合继承
星辰_大海
2020/10/14
4510
对象与类
1.对象与类 1.1对象 对象是由属性和方法组成的:是一个无序键值对的集合,指的是一个具体的事物 属性:事物的特征,在对象中用属性来表示(常用名词) 方法:事物的行为,在对象中用方法来表示(常用动词) 1.1.1创建对象 //以下代码是对对象的复习 //字面量创建对象 var ldh = { name: '刘德华', age: 18 } console.log(ldh); //构造函数创建对象 function Star(name, age) { this.name
梨涡浅笑
2020/10/27
5150
对象与类
一万字ES6的class类,再学不懂,请来找我(语法篇)
上面这种写法跟传统的面向对象语言(比如 C++ 和 Java)差异很大,很容易让新学习这门语言的程序员感到困惑。
coder_koala
2021/11/12
3430
「JS高级」面向对象编程
请注意,本文编写于 2067 天前,最后修改于 173 天前,其中某些信息可能已经过时。
曼亚灿
2023/05/17
2K0
「JS高级」面向对象编程
JS高级——面向对象
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次调用就可以了。
岳泽以
2022/10/26
2.3K0
JS高级——面向对象
Es6面向对象
由于子类也有个构造函数,参数就被传进了子类,并没有到父类的构造函数去 如果有方法将这个参数传递给父类那么问题就解决了
切图仔
2022/09/08
1930
Es6面向对象
js面向对象编程_JavaScript高级编程
面向过程即分析出解决问题所需要的步骤,然后用函数将这些步骤一步步实现,使用的时候再一个个的一次调用就可以了;
全栈程序员站长
2022/09/24
1.1K0
js面向对象编程_JavaScript高级编程
【前端】Javascript高级篇-类的继承
继承普通方法 // 父类 class Father { constructor() { } say() { console.log('hello world') } } // 子类 class Son extends Father{ } // 通过子类调用父类方法 var son = new Son() son.say() C:\Users\lenovo\Downloads\HBuilderX\readme>cd C:\Users\lenovo\Downloads\HBuild
瑞新
2020/07/07
4120
【Javascript】ES6新增之类的认识
与函数不同,类声明不会被提升。这意味着在使用类之前,需要先进行类声明。类声明通常包括构造函数和其他成员方法。构造函数是一个特殊的方法,用于创建和初始化类所创建的对象。
且陶陶
2023/10/16
1850
Class(类)
class 的本质是 function。 它可以看作一个语法糖,让对象原型的写法更加清晰、更像面向对象编程的语法。
心念
2023/01/12
7040
详解ES6中的class
class是一个语法糖,其底层还是通过 构造函数 去创建的。所以它的绝大部分功能,ES5 都可以做到。新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。
木子星兮
2020/07/16
5220
前端成神之路-JavaScript高级第02天
实例成员就是构造函数内部通过this添加的成员 如下列代码中uname age sing 就是实例成员,实例成员只能通过实例化的对象来访问
海仔
2021/01/21
3080
面向对象编程,你真正懂吗?
面向过程很好理解,就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次调用就可以了
CRMEB商城源码
2022/04/07
2670
前端速记
日常记录一些 js/css 相对实用的小笔记,本笔记保持长期更新,如有错误或更好的方案留言反馈
2Broear
2024/03/12
2080
前端速记
前端基础-面向对象核心
但是上面这种使用构造函数获取对象的写法跟传统的面向对象语言(比如 C++ 和 Java)差异很大,很容易让新学习这门语言的程序员感到困惑。
cwl_java
2020/03/26
3220
ES6新特性实现面向对象编程,上万字详解用class语法定义类
首先,写这篇文章是因为我答应了一个粉丝要写一篇ES6的 class 相关知识的要求,哈哈我是不是特别宠粉呀~其实同时也是帮助我自己复习一下知识点啦
@零一
2021/01/29
8751
前端成神之路-JavaScript高级第01天
JavaScript高级第01天 1.面向过程与面向对象 1.1面向过程 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次调用就可以了。 1.2面向对象 面向对象是把事务分解成为一个个对象,然后由对象之间分工与合作。 1.3面向过程与面向对象对比 面向过程 面向对象 优点 性能比面向对象高,适合跟硬件联系很紧密的东西,例如单片机就采用的面向过程编程。 易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活
海仔
2021/01/18
2970
JS高级——构造函数和原型
在典型的OOP的语言中(如Java),都存在类的概念,类就是对象的模板,对象就是类的实例,但在ES6之前,JS中并没有引入类的概念。
岳泽以
2022/10/26
1.6K0
JS高级——构造函数和原型
【前端】Javascript高级篇-ES6中的类和对象
类和对象 类是对现实事物的抽象 类中包含 属性、方法 初始化类,对象 // 创建类 class Demo { } // 利用类创建实例 new Demo(); 创建-构造函数,对象实例 构造函数 默认自动创建 创建对象实例的时候自动调用 自动返回实例 // 创建类 class Demo { // 构造函数 constructor(name) { this.name = name; } } // 利用类创建实例 var ldh = new Demo('刘德华'); var zxy =
瑞新
2020/07/07
5800
相关推荐
前端开发,必知ES5、ES6的7种继承
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验