当前位置:AIGC资讯 > AIGC > 正文

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

文章目录

一、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();
    }
}

总结

### 文章内容总结
**一、AI 编程简介**
1. **GPT 大模型特点**:其工作模式为“输入文本 -> 输出文本”,能够替代诸多文本类工作,包括翻译、法律文件撰写及编程等。AI 技术的普及预计将在未来几年至十几年中逐步替代大量基础工作职位。

2. **大模型的编程能力**:大模型编程能力强大,得益于高质量的数据、可衡量的输出及代码的唯一逻辑。在编程能力上远超过其他应用领域,几乎可替代程序员。

3. **GPT大模型编程的优缺点**:
- **优点**:技术范围广,速度快,代码质量高,可减少重复任务。
- **缺点**:复杂逻辑需拆解,正确性需要验证,安全性可能存在漏洞,细节优化不足。
4. **AI 编程技巧**:大模型搜索效率高,可用长文档作为提示词,推荐多轮对话不超过五次。
5. **提示工程应用**:一系列提示词技巧(如中英文切换、思维链、自洽性等)适用于AI编程,有助于提高代码生成质量。
6. **AI 编程的适用场景**:适用于懂技术但不想写代码的程序员进行繁琐重复性工作;初学者辅助学习;不适合完全不懂代码的人。
**二、使用 GitHub Copilot 插件进行 AI 编程**
1. **GitHub Copilot 简介**:一款补全式编程大模型插件,大幅提高编程效率,最多可减少一半的工作量,支持PyCharm和Visual Studio Code。
2. **购买与安装**:需要注册GitHub账号,并在指定页面购买软件(个人版10美元/月或免费试用30天)。之后在PyCharm中安装GitHub Copilot插件并登录账号。
3. **功能与实现**:支持补全代码、注释及根据注释生成代码。基于GPT 3.5/4将当前代码、注释及用户输入提示词结合生成超长提示词进行代码预测,使用需全局梯子。
**三、使用对话方式进行 AI 编程**
1. **对话式 AI 编程**:当GitHub Copilot不可用(如特殊开发环境、保密代码)时,可使用如ChatGPT的对话界面编写代码,将当前代码、注释及提示词组成超长提示词输入AI模型生成代码。
2. **编程示例**:展示了如何通过对话式AI编程方法,利用Java生成包含JDBC数据库操作的代码示例,包含表创建、增删改查及主函数等功能。
### 总结
本文通过介绍GPT大模型的编程特点、技巧及应用场景,详细阐述了如何通过GitHub Copilot插件实现AI辅助编程,并介绍了在不能使用GitHub Copilot时,如何通过对话方式利用AI进行编程的具体方法。对于提高编程效率、减少重复劳动,特别是辅助治疗初学者和专业人士在特定情况下的编程工作,提供了切实可行的解决方案。

更新时间 2024-08-16