暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

如何用AI提高开发效率

IT那活儿 2025-05-15
107

点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!


  
随着人工智能(AI)技术的快速发展,AI在编程领域的应用也越来越广泛。传统的编程方式需要开发者具备深厚的编程知识和经验,而AI辅助编程工具的出现,极大地降低了编程门槛,提升了开发效率。

本文将以调用阿里云API为例,介绍如何使用AI编写Java和Python代码,并对比传统编程与AI编程的区别。最后,我们将总结使用AI编写代码的注意事项和不足之处。



传统编程与AI编程的区别

1.1 传统编程

传统编程方式要求开发者手动编写每一行代码,从设计架构到实现功能,再到调试和优化,整个过程耗时较长。开发者需要熟悉编程语言的语法、API文档、调试工具等,并且需要具备较强的逻辑思维能力。

优点:

  • 代码可控性强,开发者可以完全掌控代码的逻辑和结构。
  • 适合复杂项目,能够根据需求进行深度定制。

缺点:

  • 开发周期长,尤其是对于新手开发者,学习曲线陡峭。
  • 调试和优化过程繁琐,容易出错。

1.2 AI编程

AI编程工具(如GitHub Copilot、ChatGPT等)通过自然语言处理和机器学习技术,能够根据开发者的需求自动生成代码。开发者只需描述功能需求,AI工具即可生成相应的代码片段,极大地提高了开发效率。

优点:

  • 开发速度快,AI可以快速生成代码,减少手动编写的时间。
  • 降低编程门槛,即使是非专业开发者也能通过AI工具完成简单的编程任务。
  • 提供代码建议和优化方案,帮助开发者提高代码质量。

缺点:

  • 生成的代码可能不够精确,需要开发者进行二次修改和调试。
  • 对于复杂逻辑或特定业务场景,AI生成的代码可能无法完全满足需求。
  • 依赖AI工具,可能导致开发者对编程基础知识的掌握不足。

如何使用AI编写Python代码

注:以调用阿里云API为例。

2.1 调用阿里云API的传统编程方式

以平台自发现脚本,用python调用阿里云获取ECS主机API为例,传统编程方式需要开发者查询阿里云API文档,编写HTTP请求、处理响应、解析数据等、封装步骤。

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest

def send_sms():
    client = AcsClient('your-access-key-id''your-access-key-secret''default')
    request = CommonRequest()
    request.set_domain('dysmsapi.aliyuncs.com')
    request.set_method('POST')
    request.set_protocol_type('https')
    request.set_version('2017-05-25')
    request.set_action_name('SendSms')

    request.add_query_param('PhoneNumbers''1234567890')
    request.add_query_param('SignName''your-sign-name')
    request.add_query_param('TemplateCode''your-template-code')
    request.add_query_param('TemplateParam''{"code":"1234"}')

    response = client.do_action_with_exception(request)
    print(response)

send_sms()

2.2 使用AI工具生成代码

不同AI侧重点不同,这里调用阿里云API,我们以阿里云AI为例,我们可以通过描述需求,让AI生成相应的代码。

需求描述:

“请帮我生成一个Python代码,调用阿里云的API,获取ECS主机数据”

AI的回答:

以下是使用Python代码调用阿里云API获取ECS主机数据的示例。此代码基于阿里云Python SDK(V2.0)实现,确保您已安装相关依赖并配置了访问凭证。

步骤 1:安装依赖在运行代码之前,请确保安装了阿里云ECS Python SDK

可以通过以下命令安装:

pip install alibabacloud_ecs20140526

步骤 2:配置访问凭证

为了安全起见,建议通过环境变量配置AccessKey ID和AccessKey Secret,而不是直接写入代码中。

在Linux、macOS或Windows系统中设置环境变量:

export ALIBABA_CLOUD_ACCESS_KEY_ID=<您的AccessKey ID>
export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<您的AccessKey Secret>

步骤 3:编写Python代码

以下代码展示了如何调用DescribeInstances接口获取ECS实例的详细信息:

import os
from alibabacloud_ecs20140526.client import Client as EcsClient
from alibabacloud_tea_openapi.models import Config
from alibabacloud_ecs20140526.models import DescribeInstancesRequest
from alibabacloud_tea_util.models import RuntimeOptions

# 初始化ECS客户端
defcreate_client():
    config = Config(
        access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
        access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
        endpoint='ecs.cn-hangzhou.aliyuncs.com'# 替换为您的区域Endpoint
    )
    return EcsClient(config)

# 调用DescribeInstances接口获取ECS实例数据
defdescribe_ecs_instances():
    client = create_client()

    # 构造请求对象
    request = DescribeInstancesRequest(
        region_id='cn-hangzhou'# 替换为您的目标区域ID
        page_size=10# 每页返回的实例数量
        page_number=1             # 当前页码
    )

    # 设置运行时参数
    runtime = RuntimeOptions()

    try:
        # 发起调用
        response = client.describe_instances_with_options(request, runtime)
        instances = response.body.instances.instance

        # 打印实例信息
        for instance in instances:
            print(f"实例ID: {instance.instance_id}, "
                  f"实例名称: {instance.instance_name}, "
                  f"状态: {instance.status}, "
                  f"公网IP: {instance.public_ip_address.ip_address[0if instance.public_ip_address else'无'}")
    except Exception as e:
        print(f"调用API失败: {e}")

if __name__ == "__main__":
    describe_ecs_instances()

  • 代码说明初始化客户端

    使用Config类配置访问凭证和区域Endpoint。create_client函数返回一个ECS客户端实例。

  • 构造请求对象

    DescribeInstancesRequest用于指定查询条件,例如区域ID、分页参数等。

  • 发起调用

    使用describe_instances_with_options方法发送请求,并传入运行时参数RuntimeOptions。

  • 处理响应

    解析返回的实例列表,提取关键信息(如实例ID、实例名称、状态、公网IP等)并打印。

  • 重要提权限管理

    确保使用的RAM用户具有AliyunECSReadOnlyAccess权限策略,或者根据实际需求自定义授权。区域Endpoint:请根据目标区域选择正确的Endpoint,例如ecs.cn-beijing.aliyuncs.com。异常处理:代码中包含异常捕获逻辑,便于排查API调用失败的原因。

  • 运行结果示例

    假设您有以下ECS实例:

    实例ID:i-bp1234567890abcdef实例名称:ecs001状态:Running公网IP:123.123.123.123运行代码后输出如下:

    实例ID: i-bp1234567890abcdef, 实例名称: ecs001, 状态: Running, 公网IP: 123.123.123.123通过以上代码,您可以轻松获取ECS实例的详细信息。如果需要进一步扩展功能(如批量操作或筛选特定实例),可以参考阿里云ECS API文档进行调整。

2.3 对比分析

从上述代码可以看出,AI生成的代码不仅能够根据需求描述快速生成可用的代码片段,极大地节省了开发时间、而且还给开发者提供了代码说明、重要提醒、以及运行结果示例。然而,AI生成的代码仍然需要开发者进行二次验证和调试,确保其符合实际需求。

2.4 描述优化提升

从上述代码可以看出,虽然能获取到数据,但并不满足我们自发现的数据格式,AI生成的代码基于我们描述的语言,如果要添加其它代码处理逻辑,必须丰富我们的描述。

需求描述:

“请帮我生成一个Python代码,调用阿里云的API,获取所有地域下的ECS主机数据并完善分页逻辑。”

生成代码:

import os
from alibabacloud_ecs20140526.client import Client as EcsClient
from alibabacloud_tea_openapi.models import Config
from alibabacloud_ecs20140526.models import DescribeRegionsRequest, DescribeInstancesRequest
from alibabacloud_tea_util.models import RuntimeOptions

# 初始化ECS客户端
defcreate_client():
    config = Config(
        access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
        access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
        endpoint='ecs.aliyuncs.com'# 全局Endpoint
    )
    return EcsClient(config)

# 获取所有地域信息
defdescribe_regions(client):
    request = DescribeRegionsRequest()
    runtime = RuntimeOptions()

    try:
        response = client.describe_regions_with_options(request, runtime)
        regions = [region.region_id for region in response.body.regions.region]
        return regions
    except Exception as e:
        print(f"获取地域信息失败: {e}")
        return []

# 获取指定地域下的ECS实例数据(支持分页)
defdescribe_instances_in_region(client, region_id):
    all_instances = []
    page_number = 1
    page_size = 50# 每页返回的实例数量

    whileTrue:
        request = DescribeInstancesRequest(
            region_id=region_id,
            page_size=page_size,
            page_number=page_number
        )
        runtime = RuntimeOptions()

        try:
            response = client.describe_instances_with_options(request, runtime)
            instances = response.body.instances.instance
            total_count = response.body.total_count

            ifnot instances:
                break

            all_instances.extend(instances)

            # 如果当前页码 * 每页数量 >= 总实例数,则退出循环
            if page_number * page_size >= total_count:
                break

            page_number += 1
        except Exception as e:
            print(f"获取地域 {region_id} 的ECS实例数据失败: {e}")
            break

    return all_instances

# 主函数:获取所有地域下的ECS实例数据
defdescribe_all_ecs_instances():
    client = create_client()
    regions = describe_regions(client)

    ifnot regions:
        print("未获取到任何地域信息")
        return

    all_instances = []
    for region_id in regions:
        print(f"正在获取地域 {region_id} 的ECS实例数据...")
        instances = describe_instances_in_region(client, region_id)
        all_instances.extend(instances)

    # 打印所有实例信息
    for instance in all_instances:
        print(f"地域: {instance.region_id}, "
              f"实例ID: {instance.instance_id}, "
              f"实例名称: {instance.instance_name}, "
              f"状态: {instance.status}, "
              f"公网IP: {instance.public_ip_address.ip_address[0if instance.public_ip_address else'无'}")

if __name__ == "__main__":
    describe_all_ecs_instances()

可以看到AI输出的代码根据我们的描述增加了获取地域、根据地域循环获取ECS主机的逻辑,并在获取ECS主机数据时添加了分页的逻辑。

2.5 指定属性与转换格式

需求描述:

“请帮我生成一个Python代码,调用阿里云的API,获取所有地域下的ECS主机数据并完善分页逻辑,需要查询ECS的属性有:IP地址,实例状态,网络计费类型,实例计费方式,公网IP,内网IP,地域ID,可用区ID,地域,可用区,实例名称,实例创建时间,操作系统名称,操作系统类型,CPU数 ,内存大小(MiB),标签。并将查询结果输出为如下JSON数组格式:

[{
 "ciCode""aliyun_ecs",
 "attributes": [
 {
 "attrName""snc-agent安装路径",
 "attrCode""",
 "attrValue""'`snc_agent_path`'"
 }
 
]
}]
”其中attrName为资产属性名,attrValue为资产属性值。

生成代码:

import os
import json
from alibabacloud_ecs20140526.client import Client as EcsClient
from alibabacloud_tea_openapi.models import Config
from alibabacloud_ecs20140526.models import DescribeRegionsRequest, DescribeInstancesRequest
from alibabacloud_tea_util.models import RuntimeOptions

# 初始化ECS客户端
defcreate_client():
    config = Config(
        access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
        access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
        endpoint='ecs.aliyuncs.com'# 全局Endpoint
    )
    return EcsClient(config)

# 获取所有地域信息
defdescribe_regions(client):
    request = DescribeRegionsRequest()
    runtime = RuntimeOptions()

    try:
        response = client.describe_regions_with_options(request, runtime)
        regions = [region.region_id for region in response.body.regions.region]
        return regions
    except Exception as e:
        print(f"获取地域信息失败: {e}")
        return []

# 获取指定地域下的ECS实例数据(支持分页)
defdescribe_instances_in_region(client, region_id):
    all_instances = []
    page_number = 1
    page_size = 50# 每页返回的实例数量

    whileTrue:
        request = DescribeInstancesRequest(
            region_id=region_id,
            page_size=page_size,
            page_number=page_number
        )
        runtime = RuntimeOptions()

        try:
            response = client.describe_instances_with_options(request, runtime)
            instances = response.body.instances.instance
            total_count = response.body.total_count

            ifnot instances:
                break

            all_instances.extend(instances)

            # 如果当前页码 * 每页数量 >= 总实例数,则退出循环
            if page_number * page_size >= total_count:
                break

            page_number += 1
        except Exception as e:
            print(f"获取地域 {region_id} 的ECS实例数据失败: {e}")
            break

    return all_instances

# 格式化ECS实例数据为JSON数组
defformat_instance_data(instances):
    formatted_data = []
    for instance in instances:
        # 提取所需属性
        instance_data = {
            "ciCode""aliyun_ecs",
            "attributes": [
                {"attrName""IP地址""attrCode""ip_address""attrValue": instance.public_ip_address.ip_address[0if instance.public_ip_address else"无"},
                {"attrName""实例状态""attrCode""status""attrValue": instance.status},
                {"attrName""网络计费类型""attrCode""internet_charge_type""attrValue": instance.internet_charge_type},
                {"attrName""实例计费方式""attrCode""instance_charge_type""attrValue": instance.instance_charge_type},
                {"attrName""公网IP""attrCode""public_ip""attrValue": instance.public_ip_address.ip_address[0if instance.public_ip_address else"无"},
                {"attrName""内网IP""attrCode""private_ip""attrValue": instance.vpc_attributes.private_ip_address.ip_address[0if instance.vpc_attributes and instance.vpc_attributes.private_ip_address else"无"},
                {"attrName""地域ID""attrCode""region_id""attrValue": instance.region_id},
                {"attrName""可用区ID""attrCode""zone_id""attrValue": instance.zone_id},
                {"attrName""地域""attrCode""region""attrValue": instance.region_id}, # 地域ID与地域一致
                {"attrName""可用区""attrCode""zone""attrValue": instance.zone_id}, # 可用区ID与可用区一致
                {"attrName""实例名称""attrCode""instance_name""attrValue": instance.instance_name},
                {"attrName""实例创建时间""attrCode""creation_time""attrValue": instance.creation_time},
                {"attrName""操作系统名称""attrCode""os_name""attrValue": instance.os_name},
                {"attrName""操作系统类型""attrCode""os_type""attrValue": instance.os_type},
                {"attrName""CPU数""attrCode""cpu""attrValue": instance.cpu},
                {"attrName""内存大小(MiB)""attrCode""memory""attrValue": instance.memory},
                {"attrName""标签""attrCode""tags""attrValue"", ".join([f"{tag.tag_key}:{tag.tag_value}"for tag in instance.tags.tag]) if instance.tags and instance.tags.tag else"无"}
            ]
        }
        formatted_data.append(instance_data)
    return formatted_data

# 主函数:获取所有地域下的ECS实例数据并输出为JSON
defdescribe_all_ecs_instances():
    client = create_client()
    regions = describe_regions(client)

    ifnot regions:
        print("未获取到任何地域信息")
        return

    all_instances = []
    for region_id in regions:
        print(f"正在获取地域 {region_id} 的ECS实例数据...")
        instances = describe_instances_in_region(client, region_id)
        all_instances.extend(instances)

    # 格式化数据为JSON数组
    formatted_data = format_instance_data(all_instances)

    # 输出JSON结果
    print(json.dumps(formatted_data, ensure_ascii=False, indent=4))

if __name__ == "__main__":
    describe_all_ecs_instances()

可以看到AI不仅将要求的属性一一列出,不能直接获取的属性还单独做了解析处理,并且完全按照我们的需要的格式进行输出。这个一个自发现脚本的编写、调试周期可以由原来的2天,缩短到0.5天,大大提升了工作效率。


注意事项vs不足

3.1 使用AI编写代码的注意事项
  • 验证生成的代码
    AI生成的代码可能不完全符合需求,开发者需要仔细检查代码的逻辑和功能,确保其正确性。
  • 理解代码逻辑
    虽然AI可以生成代码,但开发者仍需理解代码的逻辑和结构,以便在出现问题时能够快速定位和修复。
  • 结合业务需求
    AI生成的代码通常是通用的,开发者需要根据具体的业务需求进行定制和优化。
  • 保护敏感信息
    在使用AI工具时,避免将敏感信息(如API密钥、密码等)输入到AI工具中,以防信息泄露。

3.2 AI编写代码的不足之处

  • 代码质量参差不齐
    AI生成的代码质量取决于训练数据和模型的准确性,有时生成的代码可能不符合最佳实践。
  • 缺乏创造性
    AI工具通常基于已有的代码库生成代码,缺乏创造性,难以应对复杂的业务逻辑或创新需求。
  • 依赖性强
    过度依赖AI工具可能导致开发者对编程基础知识的掌握不足,影响长期的技术成长。
  • 调试困难
    AI生成的代码可能包含隐藏的错误,调试过程可能比手动编写的代码更加复杂。

总 结

4.1 传统编程流程图

需求分析 -> 设计架构 -> 熟悉SDK、API -> 编写代码 -> 调试优化 -> 部署上线

4.2 AI编程流程图

需求描述 -> AI生成代码 -> 验证调试 -> 部署上线

AI编程工具为开发者提供了极大的便利,能够快速生成代码,降低开发门槛。

然而,AI生成的代码仍然需要开发者进行验证和调试,确保其符合实际需求。

在使用AI工具时,开发者应保持对代码逻辑的理解,并结合业务需求进行定制和优化。尽管AI编程工具存在一些不足之处,但随着技术的不断进步,AI在编程领域的应用前景将更加广阔。


END


本文作者:赵建强(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论