花了亿点时间实际测试了一下 ChatGPT Canvas,略微有点失望的,再加上 GPT-4o 最近降智导致工具调用不稳定,感觉一些交互逻辑并不像想象中那么顺畅。
Canvas 强调的是人和 AI 协作完成对长文本的编辑、修改等任务。目前测试下来的主要结论:
- Python 代码运行是通过浏览器本地 WASM 实现的,而非云端沙盒,区别在于可以发送网络请求,但同时也有其他性能限制。
- 长文本编辑的体验比以前强很多,但还是不像 Notion AI 那样自然且符合操作直觉,现在的编辑修改还是没有脱离对话的形式。
官方今天的演示里提到了三点更新:
- Canvas 正式向全体用户开放(免费用户也可用)
- Canvas 中可以运行 Python 代码
- Canvas 支持自定义 GPTs
更新之后的 ChatGPT 中不再有单独的GPT-4o with Canvas(beta)模型选择,而是直接整合到了GPT-4o的模型中。[1]o1 和o1-mini目前不支持 Canvas。
接下来按照我自己关心的顺序写几项测试结果吧。
Canvas 的页面构成
进入 Canvas 之后,页面主要会分成两部分,即左侧栏的对话区和右侧的文本/代码编辑区。右下角会提供一些快捷方式(比如提供建议、代码审查等),右上角是功能键,比如版本比较、撤回、复制、运行代码等。
Canvas 的触发条件
要测试 Canvas 的触发条件,就要理解 Canvas 的设计目的。Canvas 作为一项「画布」功能,其主要目的是为了优化用户对长文本的交互体验。也就是说,如果用户本身是为了一问一答的对话而来,其实没必要用到 Canvas;只有当用户需要对 ChatGPT 生成的内容进行反复修改时,画布才有意义。
我觉得 Canvas 在一定程度上代表了人机交互方式的改变。现在 AI 产品经理已经成为了十分新兴火热的岗位,需要能够把技术能力和客户需求贯通起来。知乎知学堂最近推出了大模型 AI 产品经理课程,通过讲解大模型的技术原理,拆解大模型产品的落地案例,探寻大模型应用落地的场景和产品设计原则。现在公开课是免费的,点击卡片就能领取↓↓↓
Canvas 的触发逻辑和 ChatGPT 其他工具(比如搜索、画图)一样,如果不明确指定的话,会由 AI 自动判定是否需要调用。
这一点在 System Prompt 对 Canvas 的工具描述中也可以找到:Creates a new textdoc to display in the canvas. ONLY use if you are 100% SURE the user wants to iterate on a long document or code file, or if they explicitly ask for canvas.(仅在你完全确认用户希望编辑长文档或代码文件,或者明确要求使用画布时,才应使用此功能。)
所以目前 ChatGPT Canvas 的触发方式有几种:
第一,由 AI 根据对话内容自行判定是否触发(可以在对话内容中明确指定「通过 Canvas 打开」,或者「不要打开 Canvas」)。
第二,直接使用官方对话工具箱中的 Canvas:
第三,大概是为了进一步优化用户体验,现在只要在 ChatGPT 对话框中输入的文本需要换行显示(也就是超过两行内容,可以是普通文本,也可以是代码),对话框右上角就会出现「在 Canvas 中打开」的按钮:
Update 一下:如果你通过以上方式都不能打开 Canvas,就说明你的 GPT-4o 降智不能正常调用工具(不能识图或生成图片、不能分析文件),这个 BUG 临时的解决办法是「先用 o1 模型上传一张照片并提问,然后在同一个对话中,切换回 GPT-4o 模型去调用工具」。
ChatGPT Canvas vs ChatGPT Code Interpreter / Claude Artifacts
作为程序员,我自然最关心所谓能运行 Python 代码的功能。所以我们先来测试写代码、运行代码的功能。
首先一点是,如果你已经有完整的代码,直接粘贴到对话框展开 Canvas 就可以运行,而且此时如果你不对代码提问的话,实际上并没有和 ChatGPT 发生对话(也不会有对话记录)。
究其原因,Canvas 运行 Python 代码是通过浏览器的 Emscripten WebAssembly 功能实现,运行代码使用的是本地电脑的能力。
而以前的 ChatGPT Code Interpreter(后来改名为 Advanced Data Analyst)使用的则是 OpenAI 提供的云端沙盒。
所以你会发现 Canvas 中的代码是能够发起网络请求的,而 Code Interpreter 则因为云端沙盒的限制不能使用网络功能。
这一点也很容易验证,比如,你可以让 ChatGPT 自己写一段测试当前环境硬件配置和网络的代码然后自己运行:
出 BUG 了正好让 ChatGPT 自己 Fix 一下:
而如果在 Data Analyst(数据分析 GPT)中去测试硬件环境,就会得到类似#1 SMP Sun Jan 10 15:06:54 PST 2016 的云端沙盒结果:
Canvas 编程时可以使用的快捷方式:
- 添加日志:插入打印语句以帮助调试和跟踪执行过程。
- 添加注释:添加注释以解释代码并提高可读性。
- 修复 bug:检测并重写有问题的代码以解决错误。
- 移植到其他语言:将代码翻译为 JavaScript、Python、Java、TypeScript、C++ 或 PHP 等语言。
- 代码审查:提供内联建议以优化和改进代码。
至于和 Claude Artifacts 的比较,其实并不是同一种东西。ChatGPT 这个代码运行主要还是延续了当初 Code Interpreter 的一贯作用,主要是服务于 Python 代码、数据分析作图之类;而 Claude 则是倾向于渲染前端,起到一个 HTML/SVG 代码所见即所得的作用。
之前有人扒出 ChatGPT Canvas 也打算实现类似的 webview 功能,不过目前版本显然还没做。
交互式编辑文本
除了代码编辑和运行外,Canvas 的本职其实是文本编辑,而且这里的文本编辑框甚至提供了一些简单的 Markdown 样式,比如加粗、斜体和三级标题。
写作文档时可以使用的快捷方式:
- 建议修改:ChatGPT 将添加内联建议,以改进您的写作。
- 调整长度:缩短或扩展文档的长度。
- 调整阅读水平:调整阅读水平,从幼儿园到研究生水平。
- 添加最终润色:检查语法、清晰度和一致性。
- 添加表情符号:替换单词为表情符号,或为额外的强调和色彩添加表情符号。
比如这里的写作建议,GPT-4o 会审查全文后给出一些具体句子的修改建议:
如果对其中一条建议 Apply,ChatGPT 就会单独重写这一段话,点击右上角的 Show changes,就会看到类似于 git diff 的效果:
Canvas in GPTs
emmm,咋说呢,GPTs 整体上半死不活,没能像想象中的自定义 Agent 那般功能强大,所以有没有 Canvas 影响也不大,还不如赶紧把 o1 模型支持 Canvas 和 GPTs,毕竟现在写代码都主要靠 o1 了,最强的模型不能搭配最好的工具,差点意思。
总之,和 10 月推出的 Canvas 相比,这次就多了 Python 代码运行和免费用户可用,感觉放在 12 天的发布里有点凑数了。不过,Canvas 继续朝着「人和 AI 协作」的方向,路子肯定是对的,希望能继续优化交互体验吧。
参考:
<a href="http://www.zhihu.com/question/738263491" data-draft-node="block" data-draft-type="link-card" data-image="http://pic2.zhimg.com/v2-31afbbbf6ca34ae187ea719267730b29_ipico.jpg" data-image-width="777" data-image-height="742" class="internal">OpenAI 重磅发布交互界面 canvas,让 ChatGPT 成为写作和编程利器,带来影响有多大?最后附上 Canvas 部分的 System Prompt,顺便一提,这一版 System Prompt 和 10 月份 Beta 版的相比简略了非常多,不知道是功能更稳定了,还是着急发布先去掉了一些功能:- ## canmore
- # The `canmore` tool creates and updates textdocs that are shown in a &#34;canvas&#34; next to the conversation
- This tool has 3 functions, listed below.
- ## `canmore.create_textdoc`
- Creates a new textdoc to display in the canvas. ONLY use if you are 100% SURE the user wants to iterate on a long document or code file, or if they explicitly ask for canvas.
- Expects a JSON string that adheres to this schema:
- {
- name: string,
- type: &#34;document&#34; | &#34;code/python&#34; | &#34;code/javascript&#34; | &#34;code/html&#34; | &#34;code/java&#34; | ...,
- content: string,
- }
- For code languages besides those explicitly listed above, use &#34;code/languagename&#34;, e.g. &#34;code/cpp&#34; or &#34;code/typescript&#34;.
- ## `canmore.update_textdoc`
- Updates the current textdoc.
- Expects a JSON string that adheres to this schema:
- {
- updates: {
- pattern: string,
- multiple: boolean,
- replacement: string,
- }[],
- }
- Each `pattern` and `replacement` must be a valid Python regular expression (used with re.finditer) and replacement string (used with re.Match.expand).
- ALWAYS REWRITE CODE TEXTDOCS (type=&#34;code/*&#34;) USING A SINGLE UPDATE WITH &#34;.*&#34; FOR THE PATTERN.
- Document textdocs (type=&#34;document&#34;) should typically be rewritten using &#34;.*&#34;, unless the user has a request to change only an isolated, specific, and small section that does not affect other parts of the content.
- ## `canmore.comment_textdoc`
- Comments on the current textdoc. Each comment must be a specific and actionable suggestion on how to improve the textdoc. For higher level feedback, reply in the chat.
- Expects a JSON string that adheres to this schema:
- {
- comments: {
- pattern: string,
- comment: string,
- }[],
- }
- Each `pattern` must be a valid Python regular expression (used with re.search).
复制代码 |
|