输出文本\"2、大模型的编程能力3、GPT大模型进行编程工作的优缺点4、AI编程技巧5、提示工程应用于AI编">

【AI 大模型】使用 AI 大模型 编程 ① ( AI 编程简介 | 使用 GitHub Copilot 插件进行 AI 编程 | 使用对话方式进行 AI 编程 )

CSDN 2024-08-16 11:01:02 阅读 71

文章目录

一、AI 编程简介1、GPT 大模型 可 替代的工作特点 - " 输入文本 -> 输出文本 "2、大模型 的 编程能力3、GPT 大模型 进行编程工作 的优缺点4、AI 编程技巧5、提示工程 应用于 AI 编程6、AI 编程的适用场景

二、使用 GitHub Copilot 插件进行 AI 编程1、GitHub Copilot 简介2、GitHub Copilot 软件购买3、PyCharm 中安装 GitHub Copilot 插件4、PyCharm 中登录 GitHub Copilot 账号

三、使用对话方式进行 AI 编程1、对话式 AI 编程提示词2、对话式 AI 编程示例

在这里插入图片描述

一、AI 编程简介


1、GPT 大模型 可 替代的工作特点 - " 输入文本 -> 输出文本 "

GPT 大模型 可 替代的工作 都有如下特点 : " 输入类型是文本 , 输出类型也是文本 " ;

翻译工作 : 输入 中文 , 输出 英文 ;法律工作 : 输入 案件 , 输出 文件 ;公文工作 : 输入 需求 , 输出 文本 ;程序员工作 : 输入 需求 , 输出 代码 ;

凡是 输入文本 输出文本 的工作 , 都可以使用 GPT 大模型 提升工作效率 , 逐渐被替代部分工作 , 甚至全部工作 ;

后期 所有的 " 输入文本 -> 输出文本 " 的相关工作 可能只需要一个 精通 GPT 大模型 + 精通业务的专业人员 替代 现有的 10 个岗位 ;

如 : 使用 大模型的程序员 替代 10 个初级程序员 岗位 ;

这个替代工作 , 可能会在几年到十几年之间 , 逐渐生效 ;

简单的 劳动 , 也有被替代的趋势 , 如 : 开车 , 送外卖 等 , 都有相关的 自动驾驶 替代方案 ;

2、大模型 的 编程能力

在训练大模型 的 编程相关能力时 有如下特点 :

数据质量高 : 近几十年中 , 程序员们产出了 大量高质量代码 和 相关的技术资料 ;输出结果可衡量 : 大模型写出一段代码 , 是否能运行 并且得到正确的结果 , 是可验证的 ;代码没有歧义 : 代码的只有一种逻辑 , 完全没有二义性 , 没有歧义 ;

训练编程能力时 , 由于有上述特性 , 因此 大模型 的 编程能力很强 , 远超过其它领域 ;

AI 大模型 可以应用于各种领域 , 但是 其 " 编程能力 " 几乎是最强的 , 几乎可以到达替代程序员的程度 ,

编程能力 是 大模型 各项能力中最强的 , 在其它领域只能起到辅助作用 , 还离不开人的主导作用 ;

3、GPT 大模型 进行编程工作 的优缺点

GPT 大模型 进行编程工作 的优势 :

技术面广 : GPT 大模型 懂 所有的语言 , 所有的技术栈 ;速度快 : GPT 大模型 可以 根据 输入的描述 或者 部分代码 , 快速生成合理的代码片段 ;代码质量高 : 生成代码时通常会 遵循常见的 编程语法 和 结构 , 这有助于 减少 语法错误 和 基本结构问题 ;减少重复任务 : 对于 常见的 编程任务 和 模式 , 如 : 常见的排序算法 , 数学计算算法 , 大模型可以 生成 标准化 的代码 , 减少开发人员的重复性工作量 ;

GPT 大模型 编写代码 的缺点 :

复杂逻辑需要拆解组装 : 如果 给 GPT 一个很复杂的需求 , 里面是黑箱操作 , 基本出错概率很高 , 需要使用者自己将复杂需求拆解成小任务 , 然后自己组装起来 ;验证正确性 : AI 写出来的代码 , 需要专业人员进行验证 , 否则不知道是否正确 ;安全性漏洞 : GPT 主要基于训练数据中的模式和结构生成文本 , 生成的代码可能存在安全漏洞或者不完整的部分 , 出错的代码直接舍弃即可 , 就怕运行结果部分出错的情况 , 很难排查 ;细节优化不足 : 针对特定的软件或硬件进行优化 , 如 : 内存优化 , 电量优化 , 加载优化 , 大模型可能无法写出 领域分的很细 , 用途很偏的代码 ;

4、AI 编程技巧

AI 编程技巧 :

大模型搜索效率高 : 有问题 , 先问 大模型 , 大模型搞不定再去查资料 ; 大模型的搜索效率要远高于搜索引擎 ;提示词可以是一个文档 : 可以 把几千行代码 , 报错信息 , 几千上万字的文本直接作为提示词输入到 ChatGPT 中 , 大概率可以给出具体的解决方案 ;多轮对话不能提升代码质量 : 多轮对话一般不会提升输出代码的质量 , 反而是引入更多的问题 , 对话不要超过 5 次 , 如果超过再开启一个新的对话 ;

5、提示工程 应用于 AI 编程

在之前的 提示工程 系列 博客中

【AI 大模型】提示工程 ① ( 通用人工智能 和 专用人工智能 | 掌握 提示工程 的优势 | 提示工程目的 | 提示词组成、迭代、调优及示例 | 思维链 | 启用思维链的指令 | 思维链原理 )【AI 大模型】提示工程 ② ( 语言选择 - 英文更准确 | 自洽性 | 思维树 | 提示词正常输出 -> 思维链 -> 自洽性 -> 思维树 进化过程 | 提示词使用技巧 )【AI 大模型】提示工程 ③ ( 提示词用法 | 提示词 Prompt 构成 | 提示词位置对权重的影响 | 提示词 Prompt 调优 | OpenAI 的 API 类型 | 提示词重要参数说明 )【AI 大模型】提示工程 ④ ( 自然语言处理 NLG | 自然语言理解 NLU | 自然语言生成 NLG | 使用 提示词 + 大模型 实现 NLU | 使用 提示词 + 大模型 实现 NLG )

介绍过的 提示词技巧 , 如 :

中英文语言切换 ;思维链自洽性思维树提示词 迭代 调优提示词权重

等提示词技巧 , 在 AI 编程中都可以使用 ;

6、AI 编程的适用场景

AI 编程的适用场景 :

懂技术 , 不想写代码 : 将 繁琐 / 重复性的工作 , 让 AI 来完成 , 程序员只进行 代码审查 和 测试 ;

重复工作 : 代码是重复性的 , 比如创建一张数据表 , 进行增删查改 ;繁琐工作 : 代码逻辑很复杂 , 需要思考推演很多东西才能将代码写出来 ; 初学者 , 辅助学习 : 代码初学者 , 或者 初级程序员 , 在学习时 , 可以使用 AI 编程进行辅助 , 小心别被 AI 埋坑里 ;

完全不懂代码 , 不能碰 AI 编程 , 无法靠 AI 编程实现任何软件开发任务 ;

在这里插入图片描述

二、使用 GitHub Copilot 插件进行 AI 编程


1、GitHub Copilot 简介

GitHub Copilot 是 一个补全式编程大模型 , 是 AI 编程领域使最好用的工具 ;

使用效果 : GitHub Copilot 可以 提高工作效率 50% 以上 , 使用该工具后 , 有一半的代码都由该工具完成 ;

支持的平台 : GitHub Copilot 只能在 PyCharm 和 Visual Studio Code 开发环境中安装插件使用 ;

可实现的功能 : 补全代码 , 补全注释 , 根据注释生成代码 ;

补全代码 : 函数定义 , 类定义 , 条件 / 选择 / 循环 语句 之后 , 会自动将后面的代码生成出来 ;补全注释 : 代码写完后 , 可以 在预留的位置 自动生成 代码对应的注释 , 生成的注释文档会相当标准 ;根据注释生成代码 : 可以 只编写注释 , 让 GitHub Copilot 自动生成注释对应的代码 , 这个功能不太好用 ;参考旧代码 : 如果想要生成本公司的 专有 API 相关代码 , 可以 在环境中打开该旧代码 , 将代码文件展示在代码的 tab 中 , GitHub Copilot 会自动参考已打开的代码 , 相当于把打开的代码放入了提示词中 ;

实现原理 :

基于的大模型 : GitHub Copilot 基于 GPT 3.5 和 GPT 4 ;GitHub Copilot 的 原理是 将当前文档的代码 和 注释 以及 程序员额外输出的 提示词 , 放在一起 , 组合成一个由 代码 + 注释 + 输入提示词 组成的 超长提示词 , 基于该超长的提示词进行代码生成 , 提示词内容包含如下部分 :

当前的光标位置的 前后 代码片段 ;tab 中 , 所有打开的代码片段 , 每隔 60 行 切割成一段代码 ;选中的代码片段 , 使用注释将这个片段注释起来 , 放入提示词中 ; 要输入几万行代码作为提示词 , 消耗的 token 肯定不会少 , 费用也不低 ;应该是 在 服务器端 专门为指定的付费用户建立指定的代码库 , 作为参考 , 代码有泄漏风险 ;

使用前提 : 全局梯子必须挂上 , 否则无法使用 ;

官网地址 : https://github.com/features/copilot

在这里插入图片描述

软件费用 : 个人使用 , 每月 60 块钱 ;

在这里插入图片描述

GitHub Copilot 用法展示 :

在下面的 PyCharm 环境中 , 安装了 GitHub Copilot 插件 ;写完一段代码后 , 会自动生成后续代码 ;选中部分代码后 , 输入提示词 , 会自动将 选中的代码 + 提示词 作为新的提示词进行对话 ;

在这里插入图片描述

2、GitHub Copilot 软件购买

GitHub Copilot 软件购买 :

注册 GitHub 账号 : 注册 GitHub 账号 , 在 https://github.com/features/copilot 登录 账号 ;

在这里插入图片描述

购买软件 : 在 https://github.com/features/copilot/plans 页面购买软件 , 买 10 美元的个人版就行 ;

在这里插入图片描述

在这里插入图片描述

目前可以免费试用 30 天 ;

在这里插入图片描述

3、PyCharm 中安装 GitHub Copilot 插件

在 PyCharm 中 , 选择 " File / Settings " 选项 ;

在这里插入图片描述

在 Settings 对话框中的 Plugins 插件中 , 搜索 GitHub Copilot , 然后点击 Install 按钮安装该插件即可 ;

在这里插入图片描述

弹出对话框 , 同意安装第三方插件 ;

在这里插入图片描述

安装完成后 , 重启 PyCharm 开发环境 ;

在这里插入图片描述

4、PyCharm 中登录 GitHub Copilot 账号

重启后 , 右下角会弹出弹窗 , 让你登录 GitHub 账号 ;

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

点击下面同意授权按钮 ;

在这里插入图片描述

登录成功后显示如下内容 :

在这里插入图片描述

使用 时 不需要做任何操作设置 , 只要开始写代码 , 就会进行自动提示 ;

三、使用对话方式进行 AI 编程


1、对话式 AI 编程提示词

GitHub Copilot 只能用于 PyCharm 和 VSCode 中 , 如果你使用其它的开发环境 , 如 :

开发 C/C++ 的 Qt 或者 VS ,开发 Android 的 AS ,开发 鸿蒙的 DevEco ,开发 iOS 的 Xcode ,

就无法使用 GitHub Copilot 插件 ;

如果 你的 代码是保密代码 , 不允许泄漏 , 那么就不能使用 GitHub Copilot 进行编程 ;

这里可以直接考虑 使用 ChatGPT 或者 文心一言 的 Web 对话界面 , 参考 GitHub Copilot 插件的原理 ,

将当前文档的代码 和 注释 以及 程序员额外输出的 提示词 , 放在一起 , 组合成一个由 代码 + 注释 + 输入提示词 组成的 超长提示词 , 基于该超长的提示词进行代码生成 , 提示词内容包含如下部分 :

当前的光标位置的 前后 代码片段 ;tab 中 , 所有打开的代码片段 , 每隔 60 行 切割成一段代码 ;选中的代码片段 , 使用注释将这个片段注释起来 , 放入提示词中 ;

将上述内容 , 作为提示词 , 输入到 ChatGPT 中 , 可以生成优秀的代码 ;

2、对话式 AI 编程示例

输入提示词 :

" 使用 Java 语言 , JDBC 访问数据库 , 创建数据库表 student 表 , 其中有字段 Id 主键 , 姓名 name , 年龄 age , 生成该表的增删改查函数 , 每行代码带上中文注释 , 有 main 函数入口 "

生成的代码 : 不需要展开 , 仅做参考 ;

import java.sql.*;

public class StudentDAO {

// JDBC 驱动器名称和数据库 URL

static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";

static final String DB_URL = "jdbc:mysql://localhost/mydatabase"; // 这里的 mydatabase 替换为你的数据库名

// 数据库的用户名和密码

static final String USER = "username";

static final String PASS = "password";

// 数据库连接对象

static Connection conn = null;

// SQL 执行对象

static Statement stmt = null;

// 在构造函数中注册 JDBC 驱动器

public StudentDAO() {

try {

Class.forName(JDBC_DRIVER);

conn = DriverManager.getConnection(DB_URL, USER, PASS);

stmt = conn.createStatement();

} catch (Exception e) {

e.printStackTrace();

}

}

// 创建 student 表

public void createTable() {

try {

String sql = "CREATE TABLE IF NOT EXISTS student (" +

"id INT PRIMARY KEY AUTO_INCREMENT," +

"name VARCHAR(255) NOT NULL," +

"age INT)";

stmt.executeUpdate(sql);

System.out.println("创建表 student 成功");

} catch (SQLException e) {

e.printStackTrace();

}

}

// 添加学生记录

public void insertStudent(String name, int age) {

try {

String sql = "INSERT INTO student (name, age) VALUES (?, ?)";

PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setString(1, name);

pstmt.setInt(2, age);

pstmt.executeUpdate();

System.out.println("添加学生记录成功");

} catch (SQLException e) {

e.printStackTrace();

}

}

// 更新学生记录

public void updateStudent(int id, String name, int age) {

try {

String sql = "UPDATE student SET name = ?, age = ? WHERE id = ?";

PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setString(1, name);

pstmt.setInt(2, age);

pstmt.setInt(3, id);

pstmt.executeUpdate();

System.out.println("更新学生记录成功");

} catch (SQLException e) {

e.printStackTrace();

}

}

// 删除学生记录

public void deleteStudent(int id) {

try {

String sql = "DELETE FROM student WHERE id = ?";

PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, id);

pstmt.executeUpdate();

System.out.println("删除学生记录成功");

} catch (SQLException e) {

e.printStackTrace();

}

}

// 查询学生记录

public void selectStudents() {

try {

String sql = "SELECT * FROM student";

ResultSet rs = stmt.executeQuery(sql);

while (rs.next()) {

int id = rs.getInt("id");

String name = rs.getString("name");

int age = rs.getInt("age");

System.out.println("ID: " + id + ", Name: " + name + ", Age: " + age);

}

rs.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

// 关闭数据库连接

public void closeConnection() {

try {

if (stmt != null) stmt.close();

if (conn != null) conn.close();

System.out.println("数据库连接已关闭");

} catch (SQLException e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

StudentDAO dao = new StudentDAO();

// 创建 student 表

dao.createTable();

// 插入学生记录

dao.insertStudent("Alice", 20);

dao.insertStudent("Bob", 21);

// 更新学生记录

dao.updateStudent(1, "Alice Updated", 21);

// 删除学生记录

dao.deleteStudent(2);

// 查询学生记录

dao.selectStudents();

// 关闭数据库连接

dao.closeConnection();

}

}

在这里插入图片描述



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。