当前位置: 首页 > news >正文

使用 GitHub Copilot 进行 Prompt Engineering 的初学者指南(译)

文章目录

    • 什么是 GitHub Copilot ?
    • GitHub Copilot 可以自己编码吗?
    • GitHub Copilot 的底层是如何工作的?
    • 什么是 prompt engineering?
      • 这是 prompt engineering 的另一个例子
    • 使用 GitHub Copilot 进行 prompt engineering 的最佳实践
      • 提供高级上下文,然后提供更详细的说明
        • 以下是使用上述技术让 p5.js 建造房屋的示例:
      • 提供具体细节
      • 提供例子
        • 零样本学习
        • 单样本学习
        • 少样本学习
        • 不提供示例
        • 提供示例
    • 附加建议
      • 迭代你的提示
      • 在 IDE 中保持相关文件打开的选项卡
      • 给你的 AI 助手一个身份
      • 使用可预测模式
      • 对描述其用途的变量和函数使用一致的、特定的命名约束
        • 使用良好的编码实践
    • 超越你的编译器
    • 开始使用 GitHub Copilot 练习 prompt engineering
    • 让我们保持共同学习
    • 参考资料

当我开始使用 GitHub Copilot 和其他生成式的 AI tools。我感觉到沮丧,因为我没有收到预期的结果。人们是如何感觉这些工具如此成功的?为什么 AI 工具没有按照我的意愿行事?例如,我让 GitHub Copilot 为我去解决 LeetCode 问题。GitHub Copilot 图标会旋转一表示它正在思考,然后我会收到不一致的建议或跟没本没有建议。我很生气,但是事实证明——我错了!经过更多实验,我提升了跟 GitHub Copilot 的沟通方法,通过以注释和代码的的形式提供上下文、例子和清晰的指令。后来我才知道,这种做法叫做 prompt engineering。在这篇博文中,将讨论充分利用 GitHub Copilot 的重要技巧。

首先,让我们从不熟悉 GitHub Copilot 或 prompt engineering 的人的基础知识开始。

什么是 GitHub Copilot ?

GitHub Copilot 是一个 AI 结对开发工程师被 GitHub 开发并且 GitHub Copilot 由 OpenAI Codex 提供支持,OpenAI CodeX 是 OpenAI 创建生成式预训练语言模型。它根据注释和代码的上下文提供上下文话的代码建议。要使用它,可以在以下 IDEs 安装 Github Copilot 插件:

  • Visual Studio

  • Visual Studio Code

  • Neovim

  • JetBrains IDEs (IntelliJ, PyCharm, WebStorm, etc)

GitHub Copilot 可以自己编码吗?

在 GitHub,使用术语「AI 结对开发程序员」、「AI 助手」和 「Copilot」因为没有开发人员,这个工具就无法工作!事实上,人工智能系统只能执行开发人员编程执行的任务,它们不具备自由意志或独立决策的能力。在这种情况下,GitHub Copilot 利用代码中的上下文和编写的注释来立刻建议代码!借助 GitHub Copilot,可以将注释转换为代码、自动填充重复的代码并显示可选建议。

GitHub Copilot 的底层是如何工作的?

在底层,GitHub Copilot 从注释和代码中抽取上下文,生成逐行建议和整个函数。OpenAI CodeX 是一种机器学习模型,可以将自然语言转换为代码,为 GitHub Copilot 提供支持。

什么是 prompt engineering?

Prompt engineering 是给 AI 模型提供特定指令去产生想要结果的一种实践。提示是可以触发 AI 模型响应的一系列文本或一行代码。可以将这个概念比作收到论文提示。可能会收到一个提示,要求写一篇关于克服挑战的经历的文章,或者写一本经典书籍,例如《了不起的盖茨比》。因此,可以根据所学内容对提示做出响应。大型语言模型或 LLM 的表现与此类似。

这是 prompt engineering 的另一个例子

当学习编程时,我曾参加过一项活动,向机器人指示如何制作三明治。这是一项有趣儿愚蠢的活动,它教会我:

  • 计算机只能做你告诉他们做的事情

  • 你的指示需要非常具体

  • 它们更擅长一步一步接受订单

  • 算法只是一系列指令

例如,如果告诉机器人去制作三明治,我需要告诉它:

  1. 打开面包袋

  2. 从袋子中取出两片面包

  3. 将面包并排放在柜台上

  4. 用黄油刀将花生酱涂在一片面包上

  5. 等等

在这里插入图片描述

如果没有这些明确的指令,机器人可能会做一些愚蠢的事情,例如在两片面包上涂花生酱,或者它可能根本不做任何事情。机器人不知道三明治是什么,也不知道如何制作三明治。它只知道遵循指示。

与此类似,GitHub Copilot 需要清晰的分步说明来生成最有帮助的代码。

接下来,让我们讨论 prompt engineering 的最佳实践,以便向 GitHub Copilot 提供清晰的指令并生成想要的结果。

使用 GitHub Copilot 进行 prompt engineering 的最佳实践

提供高级上下文,然后提供更详细的说明

对我来说最好的技巧是在文件顶部的注释中提供高级上下文,然后以注释和代码的形式提供更详细的说明。

例如,如果构建一个待办事项的应用程序。在顶部,我会注释写到:「使用 Next.js 构建一个待办事项应用程序,允许用户添加、编辑和删除待办事项」。然后在下面几行中,将会编写一条注释来创建:

  • 待办事项组件列表,让 GitHub Copilot 在评论下方生成该组件。

  • 按钮组件,让 GitHub Copilot 在评论下方生成该组件。

  • 输入组件,让 GitHub Copilot 在评论下方生成该组件。

  • 添加函数,让 GitHub Copilot 在评论下方生成该函数。

  • 编辑函数,让 GitHub Copilot 在评论下方生成该函数。

  • 删除函数,让 GitHub Copilot 在评论下方生成该函数。

  • 等等

以下是使用上述技术让 p5.js 建造房屋的示例:

在下面的 GIF 中,在顶部写了一条注释,概括性描述了希望 p5.js 绘制的内容。我想画一座白色的房子,有棕色的屋顶、红色的门和红色的烟囱。然后,为房子的每个元素编写注释,然后让 GitHub Copilot 为每个元素生成代码。

在这里插入图片描述

提供具体细节

当你提供具体详细信息时,GitHub Copilot 将可以生成更准确的代码建议。例如如果你想要 GitHub Copilot 从 API 查询数据,需要告诉它你想要查询的数据类型、如何处理数据和希望访问的 API endpoint。

这是一个没有指定具体信息的注释,GitHub Copilot 不太可能生成有用的建议:

// Get data from API
function getData() {//code goes here
}

在上面的例子中,GitHub Copilot 除了函数名以及左右括号之外,没有产生任何内容。

这是一个指定具体信息的注释,GitHub Copilot 更有可能生成有用的建议:

// Pass in user ids and retrieve user data from jsonplaceholder.typicode.com API, then return it as a JSON object
async function getUserData(userId) {const response = await fetch(`https://jsonplaceholder.typicode.com/users/${userId}`);const data = await response.json();return data;
}

提供例子

除了告诉 GitHub Copilot 想要它做什么之外,还可以提供你喜欢的编码风格的例子来向其展示希望它做什么。虽然 GitHub Copilot 使用的 AI 模型已经接受过大量数据的训练,但向 GitHub Copilot 提供示例可以帮助其理解特定代码片段的上下文和约束。向人工智能模型展示希望它们做什么的示例是机器学习中的常见做法。

以下是工程师用来训练人工智能模型的一些方法:

  • 零样本学习(Zero-shot learning)

  • 单样本学习(One-shot learning)

  • 少样本学习(Few-shot learning)

我要求 ChatGPT 像我 5 岁的时候一样想我解释这些方法之间的区别,以下是它给我的内容:

零样本学习

这就像当你看到一个以前从未见过的新玩具,但你知道它是什么,因为它看起来像你见过的其他玩具。例如,如果你见过许多不同种类的毛绒动物,即使你以前从未见过这种动物,你也能够认出一种新的动物。类似的,计算机可以通过使用它对相似事物的了解来对新事物做出有根据的猜测,从而学习识别新事物。

单样本学习

这就像当你第一次看到一个新玩具,你的爸爸和妈妈告诉你玩具叫什么和用途。只要听过一次,你就可以记住它是什么,并且下次看到它时就能认出它。计算机可以学习和识别新事物用同样的方式通过仅展示几个例子并从中学习。

少样本学习

少样本学习就像通过只看几个例子来学习做新事情一样。例如,假设说你想学习如何画一只猫,但你之前只看过几张猫的图片。通过几次学习,即使你以前没有见过很多猫,你仍然可以学习如何画猫。它就像是一种魔力,可以帮助你快速学习新事物,即使你没有很多可供学习的例子。

以下是向 GitHub Copilot 提供示例和不提供示例时,它的回答。

不提供示例

# Create a list of the first 10 prime numbers
primes = []for num in range(2, 30):if all(num % i != 0 for i in range(2, num)):primes.append(num)
print(primes)

在上面的代码片段中,Github Copilot 将准确返回前 10 个数字,但效率低,因为它将循环遍历 2 到 30 之间的所有 29 个数字。通过提供希望 GitHub Copilot 执行的操作的具体示例,可以获得更有效的结果。

提供示例

# Create a list of the first 10 prime numbers
# Example: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
primes = []for num in range(2, 30):if all(num % i != 0 for i in range(2, num)):primes.append(num)if len(primes) == 10:break
print(primes)

在上面的代码片段中,GitHub Copilot 将返回前 10 个素数并在找到全部 10 个时停止。目标是获得准确但快速的结果,在将其推向正确的方向后,GitHub Copilot 成功实现了这一目标。

附加建议

迭代你的提示

如果初始提示返回了所需的响应,可以删除生成的代码建议,使用更多详细信息和示例编辑评论,然后重试。对于你和 GitHub Copilot 来说,这是一个学习过程。使用它的次数越多,与 GitHub Copilot 沟通的就越顺畅。

在 IDE 中保持相关文件打开的选项卡

目前,GitHub Copilot 无法获取整个代码库的上下文。然而,它可以读取当前的文件以及在 IDE 中打开的任何文件。我发现保留希望 GitHub Copilot 引用的相关文件的选项卡是很有帮助的。例如,当我写一个依赖其他文件变量的函数,我将在 IDE 中保持该文件打开。这将有助于 GitHub Copilot 提供更准确的建议。

给你的 AI 助手一个身份

我从 BitRise 的开发者倡导者 Leilah Simone 收到建议。我尚未使用 GitHub Copilot 尝试此建议,但是这是有用的建议。它有助于控制用户收到的响应类型。在 Leila 的案例中,她要求 ChatGPT 表现的像一名高级的 IOS 工程师。她说:「这帮助她减少了语法和 linting 的问题」。

使用可预测模式

正如我们在上述许多种例子中看到的,GitHub Copilot 将遵循代码中的模式。AI 爱好者和开发者 YK aka CS Dojo ,分享了他如何利用这一点来发挥自己的优势:

在这里插入图片描述

对描述其用途的变量和函数使用一致的、特定的命名约束

声明变量或函数时,使用指定用于变量用途的名称。这将帮助 GitHub Copilot 了解变量的上下文并生成更多相关建议。例如,不要使用「value」等通用变量名称,而应使用「input_string」或 「output_file」。

GitHub Copilot 还将使用在代码中使用的命名约定。例如,如果使用驼峰式命名变量,GitHub Copilot 将建议驼峰式命名变量。如果你使用 snake_case 作为变量,GitHub Copilot 将建议 snake_case 变量。

使用良好的编码实践

虽然 GitHub Copilot 可以作为生成代码建议的强大工具,但请务必注意,它并不能取代你自己的编程技能和专业知识。人工智能模型的好坏取决于它们所训练的数据,因此,重要的是使用这些工具作为辅助工具,而不是完全依赖它们。我鼓励 GitHub Copilot 的每个用户:

  • review 代码

  • 运行单元测试、集成测试和任何其他形式的测试代码

  • 手动测试代码以确保其按预期工作

  • 并使用良好的编码实践,因为 GitHub Copilot 将遵循你的编码风格和模式作为其建议的指南

超越你的编译器

当前,GitHub Copilot 是最流行的 IDE 中的提供的扩展插件。还有 GitHub Copilot Labs,这是一个可通过 GitHub Copilot 访问的单独实验性扩展。Copilot Labs 可以帮助翻译、调试、测试、记录和重构代码。此外,还退出了 Copilot X,这是一套可以提高 IDE 之外的开发人员工作效率的功能。Copilot X 包括:

  • Copilot for Docs - 使开发人员免于搜寻大量的文档。
  • Copilot for Pull Requests - 帮助编写更好的 PR 描述并帮助团队更好的快速审查和合并 PR
  • Copilot Chat - 在编辑器中通过 GitHub Copilot 聊天获得类似的 ChatGPT 的体验
  • Copilot for CLI - 帮助记住 Shell 命令和标志,以编更快地在终端运行命令
  • Copilot Voice - 编写和编辑代码、浏览代码库以及用语音控制 Visual Studio Code

Copilot X 功能/产品目前处于技术预览阶段。如果想要使用上述功能之一,可以在 https://github.com/features/preview/copilot-x 上注册等待名单。

开始使用 GitHub Copilot 练习 prompt engineering

了解如何最佳使用 GitHub 的最佳方法就是开始使用它,可以在此处注册访问 GitHub Copilot https://github.com/features/copilot

如果你是企业领导者并且希望让团队访问 GitHub Copilot,可以在此处注册 GitHub Copilot https://github.com/github-copilot/business_signup/choose_business_type

让我们保持共同学习

感谢阅读本篇博文。我很想听听你的消息!我还在学习更多关于人工智能、GitHub Copilot、和 prompt engineering 的知识。如果是是 GitHub Copilot 的粉丝并且已经学会如何使用它来改进开发人员工作流程,可以在下面的评论中分享一些你的技巧。

另外,可以查看以下更多的资源了解有关 prompt engineering 的更多信息

  • How to get Codex to produce the code you want

  • Prompt Design from OpenAI

  • Prompt Engineering 101: Introduction to Codex

  • Prompt Engineering Guide by Elvis Saravia

参考资料

  • A Beginner’s Guide to Prompt Engineering with GitHub Copilot - DEV Community

相关文章:

使用 GitHub Copilot 进行 Prompt Engineering 的初学者指南(译)

文章目录 什么是 GitHub Copilot ?GitHub Copilot 可以自己编码吗?GitHub Copilot 的底层是如何工作的?什么是 prompt engineering?这是 prompt engineering 的另一个例子 使用 GitHub Copilot 进行 prompt engineering 的最佳实践提供高级上下文&…...

c++开发模式,享元模式

享元模式&#xff0c;个人理解&#xff0c;就是应用共享技术来减少类的对象创建&#xff0c;节省计算机资源消耗&#xff0c;而且能够减少维护成本 #include <iostream> #include <string> #include <vector>using namespace std;class Flyweight { public:…...

LLM大模型——langchain相关知识总结

目录 一、简介LangChain的主要价值支柱简单安装 二、 LangChain的主要模块1.Model I/Oprompt模版定义调用语言模型 2. 数据连接3. chains4. Agents5. MemoryCallbacks 三、其他记录多进程调用 主要参考以下开源文档 文档地址&#xff1a;https://python.langchain.com/en/lates…...

【Python】数据可视化利器PyCharts在测试工作中的应用

目录 PyCharts 简介 PyCharts 的安装 缺陷统计 测试用例执行情况 使用JavaScript情况 缺陷趋势分析 将两张图放在一个组合里&#xff08;grid&#xff09; 将两张图重叠成一张图&#xff08;overlap&#xff09; 将多张图组合在一个page 中&#xff08;page&#xff0…...

AOP的实战(统一功能处理模块)

一、用户登录权限效验 用户登录权限的发展从之前每个方法中自己验证用户登录权限&#xff0c;到现在统一的用户登录验证处理&#xff0c;它是一个逐渐完善和逐渐优化的过程。 1.1 最初用户登录验证 我们先来回顾一下最初用户登录验证的实现方法&#xff1a; RestController…...

时间复杂度为O(n2)的三种简单排序算法

1.冒泡排序 冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较&#xff0c;看是否满足大小关系要求。如果不满足就让它俩互换。一次冒泡会让至少少一个元素移动到它应该在的位置&#xff0c;重复n次&#xff0c;就完成了n个数据的排序工作。 /*** …...

LeetCode 热题 100 JavaScript --226. 翻转二叉树

给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 3&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[] 提示&#xff1a; 树中节点数目范围在 [0, 100] 内 -100 < Node.val < 100 var invertTree function(root…...

hive所有窗口函数详情总结

hive窗口函数详情总结 解释语法hive开窗函数排序开窗函数样例数据RANK()DENSE_RANK()ROW_NUMBER() 分析开窗函数样例数据&#xff1a;last_valuefirst_valuelaglead 其他窗口函数cume_distpercent_rank 解释 开窗函数用于为行定义一个窗口&#xff08;指运算将要操作的行的集合…...

Talk | 新加坡国立大学博士生施宇钧:DragDiffusion-基于扩散模型的关键点拖拽图片编辑

本期为TechBeat人工智能社区第518期线上Talk&#xff01; 北京时间8月2日(周三)20:00&#xff0c; 新加坡国立大学博士生—施宇钧的Talk已准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “DragDiffusion-基于扩散模型的关键点拖拽图片编辑”&#xff0c;他…...

22 | 贝叶斯分类算法

文章目录 介绍什么是贝叶斯分类算法?贝叶斯分类算法的应用场景贝叶斯定理贝叶斯定理的基本原理贝叶斯定理的公式推导贝叶斯定理的应用举例代码介绍 什么是贝叶斯分类算法? 贝叶斯分类算法是一类基于贝叶斯定理的分类技术。在统计分类任务中,这些算法使用特定的假设来建立特…...

java.sql.SQLSyntaxErrorException: ORA-00909: 参数个数无效

问题&#xff1a; 在Select里采用Contact(%,#name,%)报错参数个数无效 原因&#xff1a; 回想以前用Mysql的时候就是这样用的&#xff0c;没有问题&#xff0c;在这里就出问题了&#xff0c;所以确定问题在oracle数据库上&#xff0c;经过查询得知&#xff0c;oracle和mysql…...

数据结构8-哈希表

数据结构8-哈希表 动态分配内存方式&#xff1a; #include <stdio.h> #include <stdlib.h>#define SIZE 20struct DataItem {int data; int key; };struct DataItem* hashArray[SIZE]; struct DataItem* dummyItem; struct DataItem* item;//获取键值 int has…...

vue3引用Font-Awesome字体图标库

环境&#xff1a;vue3tsviteelement plus 介绍&#xff1a;这里安装引用的是Font-Awesome 6.x 版本&#xff0c;有专业版&#xff08;付费&#xff09;&#xff0c;这里只介绍免费版字体使用方法 一、安装 1.使用npm安装&#xff0c;终端打开项目目录或者命令行cd到目录文件夹…...

Python: Django 服务部署可能遇到的一些问题

502 bad gateway 不要用 python3 manage.py runserver 启动服务&#xff0c; 而要用&#xff1a; daphne -b 0.0.0.0 -p <端口> <工程名>.asgi:application此外&#xff0c;在 setting.py 中&#xff0c;修改&#xff1a; import osSECRET_KEY os.environ.get(D…...

Python爬虫时遇到连接超时解决方案

在进行Python爬虫任务时&#xff0c;经常会遇到连接超时&#xff08;TimeoutError&#xff09;错误。连接超时意味着爬虫无法在规定的时间内建立与目标服务器的连接&#xff0c;导致请求失败。为了帮助您解决这个常见的问题&#xff0c;本文将提供一些解决办法&#xff0c;并提…...

这所国字头双一流,根本招不满,学硕都没人报!

一、学校及专业介绍 中国民航大学&#xff0c;位于天津市&#xff0c;是民航局、天津市、教育部共建高校&#xff0c;是天津市“双一流”建设高校和高水平特色大学建设高校。 1.1 招生情况 2023年中国民航大学电子信息与自动化学院&#xff0c;初试考806信号与系统的一共有两…...

macos 查询端口占用 命令

在 macOS 上查询端口占用的命令是通过使用lsof&#xff08;list open files&#xff09;工具来实现的。 lsof可以显示当前系统中打开的文件&#xff08;包括网络连接和端口&#xff09;的相关信息。 打开终端应用程序&#xff08;Terminal&#xff09;&#xff0c;然后输入以下…...

无代码开发:打破传统开发模式,引领数字化转型新方向

随着数字化转型的加速&#xff0c;企业对于高效、便捷的软件开发需求愈发旺盛。无代码开发作为一种新兴的软件开发模式&#xff0c;以其可视化、模块化的开发方式&#xff0c;为数字化转型提供了新的方向。本文将从无代码开发的优势、应用场景、如何实现等方面进行详细解读&…...

go-zero超强工具goctl的常用命令api,rpc,model及其构建的服务解析

goctl api 详情移步&#xff1a; go-zero的路由机制解析 基于go-zero的api服务刨析并对比与gin的区别 goctl rpc goctl支持多种rpc&#xff0c;较为流行的是google开源的grpc&#xff0c;这里主要介绍goctl rpc protoc的代码生成与使用。 protoc是grpc的命令&#xff0c;作用…...

手机python编程软件怎么用,手机python编程软件下载

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;手机python编程软件保存的代码在哪里&#xff0c;手机python编程软件怎么运行&#xff0c;现在让我们一起来看看吧&#xff01; 原标题&#xff1a;盘点几个在手机上可以用来学习编程的软件 前天在悟空问答的时候&#…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

Golang——7、包与接口详解

包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing

Muffin 论文 现有方法 CRADLE 和 LEMON&#xff0c;依赖模型推理阶段输出进行差分测试&#xff0c;但在训练阶段是不可行的&#xff0c;因为训练阶段直到最后才有固定输出&#xff0c;中间过程是不断变化的。API 库覆盖低&#xff0c;因为各个 API 都是在各种具体场景下使用。…...

上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式

简介 在我的 QT/C 开发工作中&#xff0c;合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式&#xff1a;工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...