DLAI-协作写作与编程笔记-全-
DLAI 协作写作与编程笔记(全)
001:课程介绍

概述
在本节课中,我们将要学习一个由OpenAI与DeepLearning.AI合作推出的新工具——OpenAI Canvas。这是一个旨在让与AI协作进行写作和编程变得更加有趣和高效的简短入门课程。
什么是OpenAI Canvas?🎨
OpenAI Canvas是一个全新的交互界面。它提供了一个并排的工作空间,让你能够与ChatGPT并肩协作,共同编辑和完善文本或代码。这种设计使得头脑风暴、起草文稿以及迭代修改文本的过程变得更加自然和高效。
课程内容与目标 🎯
在本课程中,你将学习如何使用Canvas进行写作和编程。课程讲师Corinina Nuen是Canvas的联合创造者之一。
Canvas在写作中的应用
对于写作,Canvas让与AI协作变得更加轻松。它允许你高亮文本的特定部分以进行针对性编辑。你还可以调整文本的长度和复杂度。此外,Canvas提供了语法检查和清晰度增强的工具。这些迭代功能使得在Canvas上进行写作更加灵活和高效。
以下是Canvas在写作中的主要功能:
- 针对性编辑:高亮文本的特定部分进行修改。
- 文本调整:调整文本的长度和复杂度。
- 语法与清晰度:应用语法检查并增强文本清晰度。
Canvas在编程中的应用 💻
许多人已经在使用AI辅助编程。Canvas集成了多种工具,可以帮助你更好、更快地创建代码。
创建代码的第一个版本后,Canvas可以对其进行审查,并提供改进建议。例如,如果你的代码存在语法或逻辑错误,或者可以简化、优化以提高速度,Canvas会为你指出来。讲师本人坦言,他有时懒得写注释,而Canvas在这方面做得非常出色。
它还能通过让你添加日志来辅助调试,使查找和修复问题变得更加容易。另一个特色功能是能够通过几次点击,在不同编程语言(如Python、JavaScript和Java)之间翻译代码。
以下是Canvas在编程中的主要功能:
- 代码审查与优化:审查代码,提出简化、加速或修正错误的建议。
- 自动生成注释:帮助为代码生成注释。
- 调试辅助:通过添加日志辅助调试。
- 代码翻译:在不同编程语言间快速翻译代码。

实践项目与深入探索 🚀
你将通过创建像“太空飞船”这样的游戏,深入学习所有这些功能是如何工作的。你还将看到如何利用一张图片——比如一张数据库架构图——作为输入,让Canvas为你编写代码来实现该架构,并针对它编写SQL查询。
我们还将深入幕后,探讨训练一个能够创建像Canvas这样的界面模型需要什么。课程也会简要介绍使用合成数据来开发此类模型的最佳实践。
致谢与结语
许多人共同努力创建了这门课程。感谢来自OpenAI的Boris Power,以及来自DeepLearning.AI的Ashshb Gagari和Jeff Ladwig,他们也为本课程做出了贡献。
这门课程将会非常有趣。让我们进入下一个视频,正式开始学习吧!
总结

本节课我们一起学习了OpenAI Canvas的基本介绍。我们了解到Canvas是一个并排协作的AI工作空间,能显著提升写作和编程的效率和乐趣。在写作方面,它支持针对性编辑和文本优化;在编程方面,它提供代码审查、调试辅助和跨语言翻译等功能。接下来,我们将通过实际项目来深入探索这些功能。
002:协作写作 ✍️
在本节课中,我们将学习如何使用Canvas的交互式工具,使你的写作过程更加灵活、高效且充满乐趣。我们将从基础搜索开始,逐步探索如何利用Canvas进行内容创作、格式转换、风格调整,甚至生成图像和代码。
概述
本节课将演示如何利用Canvas工具进行协作式写作。我们将从一个具体的搜索任务开始,生成一篇研究文章,并展示如何通过Canvas的各种功能(如验证信息、调整文本、转换格式、生成图像等)来完善和丰富内容。之后,我们会将同样的工具应用于一个不同的场景——策划邀请邮件,并最终探索如何将Canvas用于分析图表和生成代码。
从搜索到文章创作
首先,我们使用Canvas内置的搜索工具,以要点形式查找梵高的绘画技巧。
以下是搜索到的结果要点:
- 厚涂法
- 点彩画法
- 透视缩短法

搜索完成后,我们可以要求模型基于这些要点扩展撰写一篇研究文章。
现在,我们看到模型已经在Canvas中创建了一篇包含这些内容的文章。
Canvas的一个功能是,我们可以直接在画布内选中文本,然后向ChatGPT提问。现在,我要求使用网络搜索工具来验证其中一项说法。

模型正在搜索网络以澄清和验证该说法,并会引用来源。

调整文本风格与长度


Canvas的另一个功能是使用滑块作为快速自动化工具,来调整文本长度或改变阅读难度。

如果你点击“阅读等级”,会看到一个滑块,可以从幼儿园水平一直调整到研究生院水平。我们尝试将其设置为研究生院级别。




模型将开始重写文档,以适应研究生院的新风格。

你还可以突出显示特定文本,并要求ChatGPT在DALL·E中可视化这项技术。


ChatGPT会尝试创建这项技术的DALL·E图像来进行可视化。如图所示,它使用了“厚涂法”技术来可视化其效果。

转换内容格式
我们可以要求模型根据需求重新格式化内容。这里,我要求将其放入Markdown表格中。


模型会自动将内容转换为Markdown表格。
我还可以要求将内容变得更像一堂课或一个教程。

Canvas模型将重新格式化或转换内容,使其更像一个课程计划。

由此可见,Canvas工具可用于转换格式、改变阅读等级。你也可以调整长度使其更短,从而实现对内容生成和与模型协作更精细的控制。


应用场景切换:策划邀请
看过了内容创作的例子,接下来我们进行一个非常相似但用例不同的操作。假设你在旧金山,想邀请朋友去该地区最好的餐厅。
我们让ChatGPT搜索旧金山使命区最好的餐厅。


模型搜索了多个网站,并创建了一个交互式可视化列表,展示了各个地点。

我们可以浏览并选择想邀请朋友去的那一家。假设我想邀请朋友去吃韩国菜。
现在,我可以要求模型使用Canvas写一封邀请朋友去“San Hoan”餐厅的邮件。

模型将开始创建邮件。我也可以直接编辑内容本身。例如,我可以直接写上“Cheers, Tna”,而我朋友的名字是Katie,这些都可以直接在Canvas中编辑。
你还可以尝试突出显示特定部分,要求将其缩短或改为不同的语气。这里,我们可以说“让这个语气更有趣一点”。
你会看到模型将特别突出显示该部分并进行修改。
你也可以直接在聊天中要求模型“让第二段更友好一些”。模型会识别出第二段,并直接在Canvas工具中进行修改。
使用“最终润色”功能
现在,你可以找到名为“添加最终润色”的功能,它将尝试重新格式化或通过最终润色功能来增强你的写作。
现在,你可以看到在Canvas中所做的所有更改,然后可以复制邮件本身,粘贴到你的电子邮件中发送给朋友。
深入探索写作功能
接下来,我将展示一些其他强大的功能,说明如何将Canvas用于写作。你可以明确要求“打开一个新画布”,它会为你创建一个空白画布进行编辑。
假设我从之前的聊天记录中复制了内容,想把它作为普通文档粘贴到这里。我粘贴了内容,但实际上我想再润色一下,让它格式更好。
现在你看到了一个看起来好得多的日本旅行行程。我想让模型评论一下其中的写作。我会要求“建议如何改进这次旅行的写作风格”。
模型将开始创建评论,以此方式来评论文本。
你可以利用这个功能查看每一条评论,阅读ChatGPT的评估,然后选择“应用”或“拒绝”。这里,也许我们想应用它。







或者像这样拒绝它。我们可以对其他任何评论进行类似操作。也许我们可以在这里应用它。

你可以看到模型如何将其生成的评论实际应用到写作中。
现在,你还可以查看所做的更改。有一个“显示更改”功能,你可以看到所做的更改历史。在这里,你可以看到我拒绝了这条评论。
我们让模型将第二天改为在“Forta”。

现在,我们可以使用“显示更改”来可视化模型所做的所有写作编辑。


你可以使用此功能跟踪所有更改,或者如果需要,可以返回到之前的版本并恢复它,点击此处即可恢复。

如果你正在创建这个计划,也许你想看一些图片。你可以做的一件事是,比如选择这个地方,要求它查找图片,即“搜索这个地方的图片”。

模型将使用搜索工具从公开可用的资源中提取一些图片,看看这个地方是什么样子。
假设你想将这个行程转变为博客文章。


假设你想根据这篇博客文章创建一张DALL·E图片与朋友分享。我们可以要求模型创建一张DALL·E图片。



这张图片将概括这次旅行。

添加趣味元素:表情符号

一个有趣的功能滑块叫做“添加表情符号”,人们非常喜欢它,因为它是一个有趣的功能,你可以要求模型在你的文章中广泛添加各种表情符号。


很好,现在你可以直接复制你的Canvas内容或博客文章,发布到你的平台上。




从图表分析到代码生成
假设我有一个想要在Canvas中可视化的图表。首先,我要截取屏幕截图。


然后放入ChatGPT。我将要求模型分析这个图表,并在Canvas中撰写一份研究报告。
模型将尝试推断图表结果,并在Canvas工具中撰写一份小型分析。因此,你可以将其用作研究工具,甚至可以添加更多文献综述。
假设我想询问关于“校准”的问题。我想问“LLM中还有哪些其他校准方法?”


模型将在聊天中回答问题,而不是放入Canvas,因为Canvas有其自身独立的内容。但我也可以要求模型搜索一些相关文献,并在Canvas中撰写文献综述部分,例如“在Canvas中添加文献综述”。

现在,基于这些方法,也许我想让模型进一步搜索,然后在Canvas中添加文献综述部分。


你可以要求“在Canvas中添加文献综述部分”。


模型将直接为此添加一个新部分。

现在,基于我们之前拥有的图表,我想让模型用Python代码绘制左侧或一个预览模型。这是一行Python代码。
模型将为复制上述图表的Python代码生成一个新的Canvas。

现在你有了这段代码,可以尝试在本地机器上使用它,并自己学习如何复现结果。虽然模型可能不完美,但你可以尝试复现它或进行迭代以重现结果。
总结

在本节课中,我们一起探索了OpenAI Canvas在协作写作方面的强大功能。我们从基础的网络搜索和信息验证开始,学习了如何利用Canvas调整文本的阅读等级和长度,转换内容格式(如转为Markdown表格或教程),以及生成可视化图像。随后,我们将这些工具应用于实际场景,如撰写邀请邮件,并展示了如何利用Canvas进行文本润色、修改跟踪和添加趣味元素(如表情符号)。最后,我们还看到了Canvas如何辅助研究分析,从解读图表到生成可复现的Python代码。通过Canvas,你可以获得对内容创作过程更精细的控制,并与AI模型进行高效、灵活的协作。
003:协作编码 🧑💻
在本节课中,我们将学习如何利用Canvas的交互式编码工具,更高效、更快速地编写代码。我们将通过解决多个有趣的编程问题并构建几个小游戏来实践。
创建简单动画
上一节我们介绍了课程目标,本节中我们来看看如何使用Canvas创建简单的动画。我将提示模型创建一个简单的正弦波动画,使用Matplotlib库。
以下是模型生成的代码,我们将复制并粘贴到VS Code中运行和可视化。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
fig, ax = plt.subplots()
x = np.linspace(0, 2*np.pi, 100)
line, = ax.plot(x, np.sin(x))
def animate(i):
line.set_ydata(np.sin(x + i / 10.0))
return line,
ani = FuncAnimation(fig, animate, frames=100, interval=50)
plt.show()


复制代码后,在VS Code中粘贴并运行。你可以看到一个正弦波动画。




修改动画属性
现在,让我们尝试对动画进行一些修改。我们将把绘图线条改为红色虚线,并增加线条的粗细。


以下是修改后的代码变化部分:
line, = ax.plot(x, np.sin(x), linestyle='--', color='red', linewidth=2)

我们也可以尝试将frames参数从100改为50,以改变动画速度。
ani = FuncAnimation(fig, animate, frames=50, interval=50)

再次复制粘贴修改后的代码并运行,可以看到动画的样式和速度都发生了变化。





创建新动画:矩阵风格“生命之花”
接下来,让我们创建一个全新的动画。我将提示模型生成一个具有矩阵风格的“生命之花”可视化图案,并要求使用NumPy和Python。
模型生成了新的脚本。我们同样将其复制到VS Code中运行,以查看效果。



运行后,成功创建了矩阵风格的可视化图案。


使用“移植语言”功能
Canvas有一个名为“移植语言”的功能。我们可以选择将代码转换成另一种编程语言。现在,我将把上面的Python代码转换成JavaScript。

点击“移植语言”功能并选择JavaScript,模型会尝试用JavaScript重写代码。



转换完成后,我进一步要求模型将其修改成一个独立的HTML文件,这样更容易在网页上渲染。
模型生成了包含JavaScript代码的HTML文件。我将其复制并保存为.html文件,然后在浏览器中打开,可以看到相同的可视化效果。


现在,同样的脚本用不同的语言实现了。

结合概念解释与可视化
Canvas最强大的用例之一是让模型解释某个概念,然后利用这个解释来创建可视化。接下来我们就实践这一点。
我将要求模型解释“库恩的科学革命理论”这一概念,并将解释写在Canvas中。



模型生成了关于该概念的文本。接着,我要求它创建一个交互式模拟,以一种引人入胜的方式探索该理论背后的概念,并使用D3.js编写在一个独立的HTML文件中。


在生成过程中,你可以关闭代码窗口,模型会继续生成。你也可以在Canvas的不同部分(如概念解释和代码)之间来回切换查看。





代码生成完毕后,我将其复制到VS Code中,保存为HTML文件并在浏览器中渲染,以可视化这个模拟。





增加交互性:创建教育测验
模型生成了一个基础的概念可视化。现在,让我们让它更具交互性。我要求模型为教育目的添加一个小测验。
模型将重写代码以包含这个功能。你可以利用这种方式对你的任何应用进行迭代开发。




你可以通过“显示更改”功能快速查看模型所做的修改。



我复制了新的代码,在浏览器中运行,并查看更改。这里,模型添加了一些测验问题。


让我们尝试提交一个答案。提交正确答案后,会得到正确反馈。



如果提交错误答案,则会得到错误反馈。



通过这种方式,你可以想象创建一些有趣的学习卡片,来帮助你学习学校的任何教育概念。


总结

本节课中,我们一起学习了如何利用OpenAI Canvas进行协作编码。我们从创建和修改简单的动画开始,然后探索了“移植语言”功能,将代码从Python转换到JavaScript。接着,我们实践了结合文本解释与代码可视化,通过生成“科学革命理论”的交互模拟来加深理解。最后,我们通过添加教育测验功能,展示了如何迭代开发并增加项目的交互性。Canvas的这些工具能有效帮助你更快地编写、理解和改进代码。
004:构建一个太空飞船游戏 🚀
在本节课中,我们将学习如何与AI模型协作,共同创建一个有趣的太空飞船对战游戏。我们将从生成基础代码开始,逐步添加游戏逻辑、失败机制、视觉特效,并最终实现一个可交互、有计分系统的完整游戏。
概述
我们将引导模型生成一个独立的HTML文件,其中包含一个具有复古未来主义风格的太空飞船对战游戏。游戏将包含一个竞争性的计分系统,并且非常具有交互性。在整个过程中,我们会通过“定向编辑”的方式与模型协作,逐步完善游戏功能。
生成基础游戏代码
首先,我们要求模型生成一个自包含的HTML文件,以便于我们运行和修改。我们同时要求模型添加一些日志,方便后续调试。

以下是模型生成的初始代码框架:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Spaceship Battle Game</title>
<style>
/* 基础样式 */
body { margin: 0; overflow: hidden; }
canvas { display: block; }
</style>
</head>
<body>
<canvas id="gameCanvas"></canvas>
<script>
// 游戏主逻辑将在这里编写
console.log('Game initializing...');
</script>
</body>
</html>
我们将这段代码复制到一个新的HTML文件中并运行。初始版本可能包含一些无法访问的外部资源引用,例如背景图片。

修复视觉元素
在运行初始代码后,我们发现游戏试图加载一个不存在的背景图片。为了解决这个问题,我们使用“定向编辑”功能,选中相关代码段,并指示模型将其替换为纯黑色背景。
修改前的代码片段可能类似于:
ctx.drawImage(spaceBackground, 0, 0);

我们给出的指令是:“将背景替换为黑色。”
修改后,背景渲染代码变为:
ctx.fillStyle = 'black';
ctx.fillRect(0, 0, canvas.width, canvas.height);
应用更改后,游戏背景成功变为黑色。此时,按下空格键,玩家飞船(绿色方块)可以开始发射子弹。

添加游戏失败逻辑
上一节我们实现了基础的射击功能,本节中我们来看看如何为游戏添加失败条件。我们希望当玩家的飞船(绿色方块)与敌舰(紫色方块)发生碰撞时,游戏结束。

我们向模型提出以下需求:“实现一个失败逻辑:当我的方块撞到右边的方块时游戏失败。将其制作成一个有失败和等级概念的游戏。”

模型响应并创建了一个名为 checkShipCollision 的函数。该函数的核心逻辑是检测两个矩形(代表飞船)是否相交:
function checkShipCollision(player, enemy) {
return player.x < enemy.x + enemy.width &&
player.x + player.width > enemy.x &&
player.y < enemy.y + enemy.height &&
player.y + player.height > enemy.y;
}
我们将此代码整合到游戏主循环中。现在,如果玩家飞船与敌舰相撞,游戏状态会变为“结束”。
完善游戏结束界面

在实现了碰撞检测后,游戏会在碰撞时结束,但缺乏明确的反馈。因此,我们需要添加一个游戏结束界面,用于显示最终得分并允许玩家重新开始。
我们指示模型:“当游戏结束时,显示结果分数,并提供一个按键来重新开始游戏。”
模型添加了以下功能:
- 在游戏画面上方叠加显示一个“游戏结束”的提示。
- 显示最终得分。
- 监听“R”键来重置游戏状态。
相关的代码更新包括:
function drawGameOver() {
ctx.fillStyle = 'rgba(0, 0, 0, 0.75)';
ctx.fillRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = 'white';
ctx.font = '48px Arial';
ctx.textAlign = 'center';
ctx.fillText('Game Over', canvas.width / 2, canvas.height / 2 - 50);
ctx.font = '24px Arial';
ctx.fillText(`Your final score is ${score}.`, canvas.width / 2, canvas.height / 2);
ctx.fillText('Press R to restart the game.', canvas.width / 2, canvas.height / 2 + 50);
}

整合代码后,游戏体验变得更加完整:发生碰撞后,屏幕会显示得分和重启提示,按下“R”键即可开始新一局游戏。
增强视觉沉浸感

目前游戏画面较为简单。为了营造更强烈的太空战斗氛围,我们要求模型添加一些视觉特效,例如星空和移动的轨迹。
我们给出的提示是:“创建一种太空感,添加星星和移动的轨道。”
模型创建了一个 drawStars 函数,在黑色背景上绘制随机分布的白色星星,并通过每帧更新其垂直位置来模拟移动效果:

function drawStars() {
ctx.fillStyle = 'white';
stars.forEach(star => {
ctx.beginPath();
ctx.arc(star.x, star.y, star.size, 0, Math.PI * 2);
ctx.fill();
// 更新星星位置,制造移动感
star.y += star.speed;
if (star.y > canvas.height) {
star.y = 0;
star.x = Math.random() * canvas.width;
}
});
}
这个函数被添加到主绘制循环中,且不影响原有的游戏逻辑。重启游戏后,背景中出现了缓缓下落的星星,大大增强了游戏的视觉吸引力。
增加游戏难度

为了让游戏更具挑战性和趣味性,我们尝试让敌舰(粉色方块)的速度随着时间推移逐渐加快。
我们指示模型:“让敌人的飞船逐渐加速。”

模型创建了一个 updateEnemySpeed 函数,尝试在每次敌舰移动时微增其速度变量。然而,初始实现可能效果不明显。我们可以通过“定向编辑”进一步调整加速系数。

例如,将速度增量从 0.001 修改为 0.01:
// 修改前
enemy.speedX += 0.001;
// 修改后
enemy.speedX += 0.01;
经过几次迭代调整,敌舰的速度会明显变得越来越快,从而增加了游戏的难度和紧张感。
总结


本节课中,我们一起学习了如何与AI模型协作,从零开始构建一个太空飞船游戏。我们经历了以下关键步骤:
- 生成基础代码:获得一个可运行的游戏框架。
- 修复与定制:通过定向编辑修改视觉元素(如背景)。
- 添加核心机制:实现了碰撞检测和游戏失败逻辑。
- 完善用户体验:添加了游戏结束界面和重启功能。
- 增强表现力:引入了星空背景等视觉特效。
- 调整游戏性:通过让敌舰加速来增加游戏难度。

通过这个过程,我们不仅创建了一个可玩的游戏,也展示了如何通过清晰的指令和迭代式编辑,与AI进行高效协作,将创意快速转化为现实。你可以继续在此基础上进行迭代,添加更多功能(如多种敌人、能量道具、音效等),使其变得更加丰富和有趣。
005:从架构图创建SQL数据库 🗄️
在本节课中,我们将探索一个CGPT Canvas的实际应用场景:如何根据一张实体关系图(ER图)的截图,快速创建并操作一个SQL数据库。我们将学习如何利用AI工具将视觉化的架构设计转化为可执行的代码,并进行调试和查询。
概述
上一节我们介绍了CGPT Canvas的基本功能。本节中,我们来看看一个具体的应用:从一张数据库架构图出发,生成一个功能完整的SQL数据库。这个过程将涉及图像识别、代码生成、调试和交互式查询。


从图像到SQL代码
假设你正在阅读一篇关于维度建模的文章,并遇到了“实体关系模型”这个概念。你想进一步探索这个模型图。一个有效的方法是截取这张图,并请求ChatGPT将其转换为SQL数据库。


以下是操作步骤:
-
截图与上传:首先,截取包含实体关系模型的图片,并将其上传至CGPT Canvas。
-
提出请求:向模型发出明确的指令,要求其根据图片创建SQL数据库,并填充一些示例数据,以便进行交互。
指令示例:请根据上图创建一个SQL数据库,并填充一些数据,以便更好地感受这个数据库。


- 生成代码:模型将生成一个包含
CREATE TABLE语句和INSERT数据的SQL文件。
调试与修正代码
生成的初始代码可能包含语法错误。我们可以使用在线SQL编译器(如sqliteonline.com)进行测试和调试。

以下是调试过程:
-
复制代码并测试:将生成的SQL代码复制到在线编译器中执行。
-
识别错误:编译器可能会报告错误,例如表名或列名使用了保留字。
-
请求模型修正:将错误信息复制并反馈给模型,请求其修正代码。例如,模型可能会通过为保留字添加引号来解决语法问题。
-
迭代修正:重复此过程,直到所有表的创建语句都能成功执行。
核心修正操作:当遇到“GROUP”这类保留字导致的错误时,模型会将其修改为带引号的标识符,例如
“GROUP”。



执行查询与扩展数据


数据库成功创建后,我们就可以开始执行SQL查询了。

以下是查询与扩展的步骤:


- 基础查询:执行简单的查询来验证数据。例如,查询所有教师信息:
SELECT * FROM teachers; - 扩展数据:为了让数据库更丰富,可以请求模型添加更多的教师、科目和学生数据。
- 复杂查询:基于扩展后的数据,执行更复杂的查询。例如,查找所有选修了数学课的学生:
SELECT s.student_name FROM students s JOIN enrollments e ON s.student_id = e.student_id JOIN subjects sub ON e.subject_id = sub.subject_id WHERE sub.subject_name = ‘Math’; - 关联查询:进一步,可以查询教授特定学生(如“Alice Johnson”)数学课的教师:
SELECT t.teacher_name FROM teachers t JOIN subjects sub ON t.teacher_id = sub.teacher_id JOIN enrollments e ON sub.subject_id = e.subject_id JOIN students s ON e.student_id = s.student_id WHERE s.student_name = ‘Alice Johnson’ AND sub.subject_name = ‘Math’;

总结

本节课中,我们一起学习了如何利用CGPT Canvas将一张实体关系图转化为可操作的SQL数据库。整个过程涵盖了从图像识别生成代码、调试修正语法错误,到执行查询和扩展数据的完整工作流。这个案例展示了AI如何帮助我们将视觉设计快速落地为可运行的原型。

我鼓励你尝试更复杂的SQL查询,甚至可以为自己的应用创建数据库。你还可以尝试生成具有自定义规则和机制的完整游戏,并与朋友分享。
006:训练Canvas模型 🎯
在本节课中,我们将深入幕后,了解如何训练模型以创建像Canvas这样的交互界面。

概述
上一节我们探讨了Canvas的功能,本节中我们来看看其背后的模型是如何被训练的。我们将简要介绍模型开发的关键步骤,并解析定义其核心行为所面临的挑战。

我们训练了GPT-4模型,使其能作为一个创意伙伴进行协作。该模型知道何时打开Canvas、进行针对性编辑或完全重写。它还能理解更广泛的上下文,为你的文档提供精确的反馈和建议。Canvas模型的一个关键创新在于,所有的后训练都是通过合成数据完成的。我们使用了诸如从更强大的OpenAI预览模型蒸馏输出等技术,来塑造模型的核心行为。这种方法使我们能够快速提升写作质量和处理新的用户交互,而无需依赖人工生成或收集的数据。
因此,我们的研究团队为该模型开发了以下核心行为:

以下是模型的核心行为列表:
- 触发Canvas以进行写作和编码
- 生成多样化的内容类型
- 进行针对性编辑
- 重写文档
- 提供行内批评和其他功能

我们通过构建的20多项自动化内部评估来衡量进展,并在产品发布后持续评估更多指标。
产品研发与模型开发框架
Canvas是由一群设计师、工程师、研究员和产品经理共同开发的。我们从项目伊始到产品发布一直协同工作。在此过程中,我们建立了一个产品导向的模型开发框架,这可能对你也很有用。


开发像Canvas这样的产品功能,其通用的产品研究生命周期可能遵循以下形式:
以下是开发流程的四个阶段:
- 开发模型行为规范:明确模型应该做什么。
- 设计稳健且可信的评估体系:如何衡量模型表现。
- 通过快速提示迭代建立基线性能:使用提示工程获得初步效果。
- 后训练以注入针对性行为:通过训练固化模型能力。


在提示迭代阶段,你可以使用诸如上下文学习或少量示例提示等技术。最终,一旦你对产品功能建立了信心,就可以通过后训练将非常具体的行为注入模型中。更具体地说,在Canvas中,一切都是通过合成方法完成的,其中一种方法被称为蒸馏。
显然,现实中一切都要混乱得多,并不像我上一张幻灯片展示的那样线性。一旦你建立了基线性能,可能需要回到评估阶段。而当你发现新的边缘案例时,就需要回头更新模型行为规范,进而改变训练策略。因此,在现实世界中,模型的开发更像是一个迭代的过程。

深入探讨:定义模型行为
接下来,让我们更深入地探讨定义模型行为需要什么。

定义模型行为需要非常细致和注重细节的规范,需要考虑边缘案例以及整个系统的交互。例如,在Canvas中,我们必须思考该工具如何与搜索、图像生成等其他工具交互。随着模型变得更复杂,系统的复杂性也会增加,因此新模型行为规范的范围和复杂性也随之增加。
就个人而言,我还了解到,修复语言模型的行为通常涉及应用软件工程中的类似原则。我可以分享其中一些原则:
以下是三个关键原则:
- 复现模型行为等同于复现软件缺陷:通过这样做,你可以建立一个在未来可以优化的、更稳健和值得信赖的评估体系。
- 剖析:在软件工程中,这等同于隔离模型的不同组件部分,以找出问题的根本原因。
- 整体性解决:你必须在不破坏系统其他部分的情况下整体解决问题。这正是模型行为复杂性的来源,因为只有在训练过程中,你才可能观察到一些希望修复的错误或模型行为偏差。
Canvas模型的具体后训练行为
更具体地说,让我们深入探讨Canvas模型具体接受了哪些行为的后训练。
挑战一:定义触发Canvas的时机
一个关键挑战是定义何时触发Canvas,我们称之为决策边界。我们教导模型为类似“写一篇关于咖啡豆历史的博客文章”这样的提示打开Canvas,同时避免对一般的问答任务(如“帮我做一个新的晚餐食谱”)过度触发。
对于写作任务,我们优先提高正确触发的比例,即使这会牺牲一些正确不触发的情况,最终达到了83%的正确触发率,对比基准是带有提示指令的零样本GPT-4。值得注意的是,右侧图表显示,此类基线的质量对你使用的提示高度敏感。使用不同的提示,基线可能仍然表现不佳,但会以不同的方式,例如在编码和写作任务中甚至更不准确,导致不同的错误分布和次优性能的其他形式。
对于编码任务,我们有意让模型偏向于不触发,以避免干扰我们的高级用户,我们将根据用户反馈继续调整这一点。

挑战二:调整模型的编辑行为

模型行为的第二个挑战涉及调整模型在Canvas被触发后的编辑行为,更具体地说,是决定何时进行非常针对性的特定编辑,而不是重写整个内容。对于像“将第二段改短一些”这样的提示,模型最好能专门选择第二段进行编辑,而不是重写全文。
因此,我们训练模型在用户明确选择文本或指令清晰指出要选择文本中的哪部分时,执行针对性编辑;否则倾向于重写。同样,这种行为也在随着我们优化模型开发而持续更新。

挑战三:生成高质量的评论和建议

最后,训练模型生成高质量的评论和建议需要仔细的迭代。与前两种模型行为案例不同(它们很容易通过自动化评估和人工审查来适应),以自动化方式衡量质量尤其具有挑战性。
因此,我们使用人工评估来评判评论质量、准确性以及触发建议和评论的时机。我们的Canvas模型在准确性上比带有提示指令的零样本GPT-4高出30%,在质量上高出16%,这表明与带有详细指令的零样本提示相比,合成训练显著提高了响应质量和行为表现。
总结
本节课中,我们一起学习了训练Canvas模型的一些基本原理。尽管本课程的重点显然是分享一些你在写作和编码任务中应该尝试的、令人愉悦的使用案例,并与深度学习社区的其他人分享,但了解其背后的训练过程能帮助我们更好地理解和使用这一强大工具。
😊


007:总结


在本课程中,我们一起学习了OpenAI Canvas如何帮助你更好、更快地进行写作和编码。
课程回顾
上一节我们探讨了AI模型的训练原理,现在让我们来回顾整个课程的核心内容。
以下是我们在课程中完成的主要学习任务:
- 你学会了使用Canvas来辅助写作和编程。
- 你创建了几个有趣的游戏项目。
- 你掌握了如何对代码进行注释、调试和优化。
- 你了解了支撑Canvas的AI模型是如何被训练的。
总结
本节课中,我们一起学习了OpenAI Canvas这一强大工具在协作写作与编码中的应用。从基础操作到项目实践,再到理解其背后的技术原理,我们完成了一次全面的探索。
我希望你喜欢这门课程,并期待看到你运用Canvas所构建出的精彩作品。😊

浙公网安备 33010602011771号