MoreRSS

site iconSimon WillisonModify

Creator of Datasette and Lanyrd, co-creator of the Django Web Framework.
Please copy the RSS to your reader, or quickly subscribe to:

Inoreader Feedly Follow Feedbin Local Reader

Rss preview of Blog of Simon Willison

九月月度赞助商通讯

2025-10-01 13:33:03

我刚刚发布了本月面向赞助商的专属月度简报。如果您是赞助商(或现在开始赞助),可以在此处获取一份副本。本月的栏目包括:最佳代码模型是GPT-5-Codex,接着是Claude 4.5 Sonnet。我勉强接受了一个“代理”的定义,即GPT-5研究怪和Google AI模式Claude现在具备代码解释器功能。此外还有《经济学人》中的“致命三重奏”、其他重要模型发布、值得关注的AI成功案例、视频模型作为零样本学习者和推理者、我目前使用的工具以及其他杂项内容。


---------------

我刚刚发布了本月面向赞助商的专属月度通讯。如果您是赞助商(或现在开始赞助)您可以通过此处获取一份副本。本月的栏目包括:

代码的最佳模型?GPT-5-Codex... 然后是Claude 4.5 Sonnet

我勉强接受了一个关于“代理”的定义

GPT-5研究小妖和Google AI模式

Claude现在有代码解释器

《经济学人》中的致命三重奏

其他重要的模型发布

引人注目的AI成功案例

视频模型是零样本学习者和推理者

我目前使用的工具

其他零散内容

索拉二

2025-10-01 02:03:49

观看今天早上的Sora 2介绍视频后,最引人注目的功能(除了音频生成——原版Sora是无声的,而谷歌的Veo 3在2025年5月支持了音频)似乎是OpenAI所说的“ cameo”功能,即用户可以轻松录制自己或朋友的视频形象,并将其作为生成视频中的角色使用。我认为他们之所以重视这一功能,是因为ChatGPT图像生成功能在三月份取得了惊人的成功,可能是有史以来最成功的发布之一,在发布一周内就新增了1亿用户。推动这一成功的关键因素是人们喜欢能够创建自己、朋友和家人个性化图像的能力。谷歌的Nano Banana图像生成模型也看到了类似的效果。Gemini VP乔什·伍德沃德在9月24日推特上表示:🍌 @GeminiApp 在不到一个月的时间内已生成了50亿张图像。Sora 2的“ cameo”功能在我看来是试图在短视频领域复制这种病毒式传播的魔力,而不仅仅是图片。


---------------

观看今天早上的Sora 2介绍视频后,最显著的特点(除了音频生成——原始的Sora是无声的,而Google的Veo 3在2025年5月支持音频)似乎是OpenAI所说的“ cameo”功能——即能够轻松拍摄你或你朋友的视频形象,然后将这些形象作为生成视频中的角色。

我的猜测是,他们正基于ChatGPT图像生成在三月取得的惊人的成功而加大投入——可能是史上最成功的发布之一,在发布后第一周就新增了1亿名用户。

推动这一成功的关键因素是什么?人们喜欢能够为自己、朋友和家人创建个性化的图像。

Google也曾在他们的Nano Banana图像生成模型中看到类似的效果。Gemini副总裁Josh Woodward在9月24日推特上写道:

🍌 @GeminiApp 在不到一个月内已生成超过50亿张图像。

Sora 2的“cameo”功能在我看来似乎是试图捕捉这种病毒式传播的魔力,但针对的是短视频而非图片。

设计代理循环

2025-09-30 23:20:46

编码代理(如Anthropic的Claude Code和OpenAI的Codex CLI)代表了大型语言模型(LLM)在生成实际可用代码方面的重要突破。这些代理能够直接执行代码、纠正错误、分析现有实现细节,甚至通过实验寻找有效解决方案。然而,要充分发挥其潜力,需要深入理解如何设计代理循环(agentic loops)。代理循环的核心在于通过工具的反复迭代实现目标,类似于“YOLO模式”(You Only Live Once),即默认批准所有操作以提高效率,但这种模式存在显著风险。

YOLO模式的主要风险包括:恶意命令可能误删或破坏重要文件;数据泄露攻击可能窃取源代码或环境变量中的敏感信息;利用机器作为代理发起对其他目标的攻击(如DDoS)。为降低风险,建议采取以下措施:在安全沙箱环境中运行代理,限制其访问的文件和网络连接;使用他人计算机(如GitHub Codespaces)以减少潜在损害;或谨慎设置预算和权限,避免暴露敏感凭证。尽管存在容器逃逸等安全漏洞,但使用Docker或Apple容器工具的沙箱环境仍是较为安全的选择。

设计代理循环的关键在于选择合适的工具和权限。例如,在调试失败测试时,代理可直接运行测试并分析问题;在优化SQL查询性能时,可让代理尝试添加或删除索引;在升级依赖项时,代理可在隔离环境中自动完成更新;在优化容器大小时,代理可尝试不同基础镜像并调整Dockerfile。这些场景均依赖于完善的自动化测试体系,以确保操作的安全性和有效性。

值得注意的是,代理循环的设计仍是一个新兴领域。Claude Code于2025年2月才首次发布,相关技术尚处于探索阶段。尽管LLM本身具备强大的工具调用能力,但如何高效利用这些工具仍需进一步研究。此外,Anthropic已提供“安全YOLO模式”的文档,建议在无网络连接的容器中使用--dangerously-skip-permissions参数以降低风险。总体而言,代理循环的开发和应用需要平衡效率与安全性,同时结合明确的测试策略和权限管理,才能充分发挥其潜力。


---------------

像Anthropic的Claude Code和OpenAI的Codex CLI这样的编码代理代表了LLM在生成可运行代码方面真正具有变革性的一步。这些代理现在可以直接执行它们正在编写的代码,纠正错误,深入现有实现细节,甚至运行实验以找到解决特定问题的有效代码方案。

正如现代AI经常出现的情况一样,要充分发挥这些新工具的潜力需要大量的深度。

一个关键的新技能是设计代理循环。

一种思考编码代理的方式是,它们是用于寻找编码问题解决方案的暴力工具。如果你能将问题简化为一个明确的目标和一组可以迭代实现该目标的工具,编码代理通常可以通过暴力方式找到有效的解决方案。

我偏好的LLM代理定义是,它们通过循环运行工具来实现目标。使用它们得当的艺术在于精心设计工具和循环。

YOLO模式的乐趣

选择适合循环的工具

发放严格限定的凭证

何时设计代理循环

这仍然是一个非常新兴的领域

YOLO模式的乐趣

代理本质上是危险的——它们可能做出错误决策或成为恶意提示注入攻击的受害者,无论是哪种情况都可能导致工具调用带来的有害结果。由于最强大的编码代理工具是“在shell中运行此命令”,一个恶意代理可以执行你亲自运行命令所能做的任何事情。

正如Solomon Hykes所说:

AI代理是LLM在循环中破坏其环境。

Claude Code通过默认要求你批准几乎所有命令来缓解这一问题。

这有点繁琐,但更重要的是,它极大地降低了代理通过暴力方式解决问题的有效性。

每个工具都提供其自己的YOLO模式版本,其中所有操作默认被批准。

这非常危险,但同时也是获得最高效结果的关键!

以下是三个需要考虑的未受监管YOLO模式的关键风险。

不良的shell命令删除或破坏你关心的文件。

数据外泄攻击,其中某些东西会窃取代理可见的文件或数据——源代码或环境变量中保存的机密信息尤其容易受到此类攻击。

利用你的机器作为代理来攻击其他目标的攻击——用于DDoS或伪装其他黑客攻击的来源。

如果你仍然想运行YOLO模式,你有几个选择:

在安全的沙箱中运行代理,该沙箱限制了代理可以访问的文件和机密信息以及可以建立的网络连接。

使用别人的电脑。这样,如果代理变得恶意,它们造成的损害就有限,包括浪费别人的CPU周期。

承担风险!尽量避免将其暴露在潜在的恶意指令来源中,并希望在它们造成损害之前发现任何错误。

大多数人选择第三种选项。

尽管存在容器逃逸的问题,我认为使用Docker或新的Apple容器工具(选项1)对大多数人来说是一个合理的风险。

选项2是我最喜欢的。我喜欢使用GitHub Codespaces,它提供了一个按需访问的完整容器环境,可以通过浏览器访问,并且还有慷慨的免费套餐。如果出了什么问题,那只是在Microsoft Azure上运行的某个机器在消耗CPU,最坏的情况是攻击者可能从环境中窃取你检查出的代码,或者将不良代码推送到关联的GitHub仓库。

还有许多其他代理类工具在别人的电脑上运行代码。ChatGPT和Claude中的代码解释器模式在这方面可以走得很远。我也曾成功(滥用)了OpenAI的Codex Cloud。

编码代理本身实现了各种级别的沙箱化,但到目前为止,我还没有看到足够令人信服的文档来信任它们。

更新:事实上,Anthropic有他们自己的关于Claude Code安全YOLO模式的文档,其中说明:

允许Claude运行任意命令是有风险的,可能导致数据丢失、系统损坏,甚至数据外泄(例如,通过提示注入攻击)。为了减少这些风险,可以在无互联网连接的容器中使用--dangerously-skip-permissions。你可以参考使用Docker Dev Containers的参考实现。

将互联网访问限制到可信主机列表是防止数据外泄攻击窃取你私有源代码的一种好方法。

现在我们找到了一个安全(足够)的YOLO模式运行方式,下一步是决定需要为编码代理提供哪些工具。

你可以在此时引入MCP,但我发现通常更有效的是以shell命令的方式进行思考。编码代理在运行shell命令方面非常出色!

如果你的环境允许它们进行必要的网络访问,它们还可以从NPM和PyPI等地方下载额外的包。确保代理在能够防止在你主电脑上进行随机包安装的环境中运行也是一个重要考虑因素!

而不是依赖MCP,我喜欢创建一个AGENTS.md(或类似)文件,列出我认为它们可能需要使用的包。

对于一个需要从各种网站截图的项目,我安装了自己的shot-scraper命令行工具,并在AGENTS.md中添加了以下内容:

要截图,请运行:shot-scraper http://www.example.com/ -w 800 -o example.jpg

仅仅这个例子就足以让代理猜测如何替换URL和文件名以进行其他截图。

好的LLM已经知道如何使用各种现有的工具。如果你说“使用playwright python”或“使用ffmpeg”,大多数模型都能有效地使用这些工具——而且由于它们在循环中运行,通常可以在首次出错后自行恢复并找到正确的命令,而无需额外指导。

发放严格限定的凭证

除了暴露正确的命令,我们还需要考虑应该向这些命令暴露哪些凭证。

理想情况下,我们不需要任何凭证——很多工作可以在不登录任何东西或提供API密钥的情况下完成——但某些问题将需要认证访问。

这是一个本身就很深入的话题,但我有两个关键建议:

尝试提供凭证给测试或预发布环境,这样任何损害都可以被很好地限制。

如果凭证可以花费金钱,设置一个严格的预算限制。

我用一个例子来说明。一段时间以前,我正在调查在Fly.io上运行的scale-to-zero应用程序的冷启动时间过慢的问题。

我意识到如果我能给Claude Code提供直接编辑Dockerfile、将其部署到Fly账户并测量启动时间的能力,就能大大提高工作效率。

Fly允许你创建组织,并且你可以为这些组织设置预算限制并发放一个Fly API密钥,该密钥只能在该组织内创建或修改应用程序...

因此,我为这次调查创建了一个专用的组织,设定了5美元的预算,发放了一个API密钥,并让Claude Code在该组织上自由运行!

在那个特定案例中,结果不够有用,无法详细描述,但这是让我首次意识到“设计代理循环”是一项重要技能的项目。

何时设计代理循环

并非每个问题都适合这种工作方式。需要注意的是,那些有明确成功标准的问题,找到良好解决方案可能需要(潜在地稍微繁琐)的试验和错误。

每次你发现自己在想“该死,我得尝试很多变体”时,这都是一个强烈的信号,表明尝试代理循环可能值得!

一些例子:

调试:一个测试失败,你需要调查根本原因。能够运行你的测试的编码代理很可能无需任何额外设置就能完成这项工作。

性能优化:这个SQL查询太慢,添加索引会有帮助吗?让代理在隔离的开发环境中基准测试查询,然后添加和删除索引以测量其影响。

升级依赖项:你落后于很多依赖项的升级?如果测试套件是稳定的,代理循环可以为你升级所有依赖项,并进行必要的小修改以反映破坏性变更。确保相关发布说明的副本可用,或确保代理知道如何自行查找它们。

优化容器大小:Docker容器感觉太大?让代理尝试不同的基础镜像并迭代Dockerfile以尝试缩小其体积,同时保持测试通过。

所有这些例子中的一个共同主题是自动化测试。你可以从编码代理和其他LLM编码工具中获得的价值被一个良好且通过的测试套件大大放大。幸运的是,如果还没有测试套件,LLM在加速构建一个方面非常出色。

这仍然是一个非常新兴的领域

设计代理循环是一项非常新的技能——Claude Code早在2025年2月才首次发布!

我希望给它一个明确的名称可以帮助我们进行有关它的高效讨论。还有更多需要探索如何尽可能有效地使用这些工具。

Claude Sonnet 4.5 可能是目前全球最佳的编码模型(至少目前)

2025-09-30 02:11:39

Anthropic 今天发布了 Claude Sonnet 4.5,声称这是全球最佳的编程模型、构建复杂代理的最强模型,以及在使用计算机方面表现最佳的模型,同时在推理和数学能力上取得了显著提升。我周末获得了该模型的预览版,发现其在代码处理上比 GPT-5-Codex 更出色。尽管 Gemini 3 传闻即将发布,但目前 Sonnet 4.5 仍可能保持“最佳编程模型”的地位。其定价与之前的 Sonnet 相同,为每百万输入标记 3 美元、输出标记 15 美元,比 Claude Opus 更便宜,但比 GPT-5 和 GPT-5-Codex 更贵。

Claude.ai 的网页界面(尚未推出 iPhone 原生应用)最近新增了代码解释器功能,允许用户编写并直接在沙箱环境中执行代码,支持 Python 和 Node.js。Anthropic 的实现比 ChatGPT 更强大,因为它可以克隆 GitHub 代码并从 NPM 和 PyPI 安装软件包。Sonnet 4.5 在使用这一工具方面表现出色。我进行了一个大胆的实验:通过 GitHub 仓库运行测试,并使用 pip 安装依赖项,结果所有 466 个测试在 167.69 秒内通过(约 2 分 47 秒)。随后,我挑战它改进对话结构,将 SQLite 数据库中的响应以树状形式存储,通过添加 parent_response_id 列实现。实验结果包括完整的实现、工具模块和测试套件,所有测试均通过。

此外,我尝试让 Claude 描述一张包含大量鹈鹕的图片,图片显示它们聚集在水边,形成密集且混乱的场景,其独特的长喙和喉囊清晰可见,背景为平静的水面和树线,光线暗示为清晨或傍晚,整体呈现温暖的金色色调。Anthropic 已将该模型广泛部署,包括 OpenRouter、Cursor 和 GitHub Copilot 等平台。


---------------

Anthropic 今天发布了 Claude Sonnet 4.5,并提出了非常大胆的主张:

Claude Sonnet 4.5 是世界上最好的编码模型。它是构建复杂代理最强的模型。它是使用计算机最好的模型。并且它在推理和数学方面取得了显著进展。

Anthropic 在周末给了我一个新模型的预览版本,结果发现是 Sonnet 4.5。我的初步印象是,它在代码方面比 GPT-5-Codex 更好,而 GPT-5-Codex 自从几周前发布以来一直是我的首选编码模型。这个领域变化非常快——Gemini 3 据说即将推出,所以谁知道 Sonnet 4.5 能否继续保有“最佳编码模型”的头衔多久。

定价与之前的 Sonnet 相同:每百万输入标记 $3,每百万输出标记 $15。这仍然显著低于 Claude Opus——$15/$75,但比 GPT-5 和 GPT-5-Codex 要贵很多,两者均为 $1.25/$10。

它在 Claude.ai Code Interpreter 中表现尤为出色

claude.ai 的网页界面(尚未推出 Claude iPhone 原生应用)最近增加了 Claude 直接编写并执行代码的能力,使用 Python 和 Node.js 在沙箱环境中运行。我在三周前详细写过相关内容。

Anthropic 对此代码解释器模式的实现比 ChatGPT 的等效功能更强大,因为它可以直接从 GitHub 克隆代码,并从 NPM 和 PyPI 安装软件包。

Sonnet 4.5 绝对在使用这个工具方面表现出色!

这是我最雄心勃勃的实验。我开始如下:

检查 https://github.com/simonw/llm 并运行测试

pip install -e '.[test]'

pytest

它完全按照我的要求执行,检查出了我的 LLM 仓库,安装了它及其所有依赖项,并运行了测试。

✅ 所有 466 个测试在 167.69 秒(约 2 分 47 秒)内通过

然后我给了它一个极具挑战性的任务:

该工具将提示和响应存储在 SQLite 数据库中。它目前使用单个对话行和线性收集的响应。尝试在响应表中添加 parent_response_id 列,并使用它将对话中的响应建模为树结构。使用新编写的 pytest 测试(单独执行以节省整体测试套件的时间)来测试你的设计。编写一个 tree_notes.md 文件,首先用你的计划填充,然后在开发过程中用于记录。

正如你可以在结果对话记录中看到的,它在这个任务上表现得非常出色!它在数十次不同的工具调用中忙碌,最终输出了以下活动总结:

我已成功实验性地添加了树状对话结构到 LLM CLI 工具中。以下是完成的工作:

✅ 实现完成

  1. 数据库模式增强

通过迁移 m022_parent_response_id 在响应表中添加 parent_response_id 列

使对话支持树状(分支)结构,而不仅仅是线性序列

完全向后兼容——现有数据不受影响

  1. 全面的实用模块(tree_utils.py)

12 个树操作辅助函数:

导航(子节点、父节点、兄弟节点、路径)

分析(深度、后代、大小)

查询(根节点、叶子节点、统计信息)

可视化(ASCII 树显示)

  1. 完整的测试套件(test_tree_conversations.py)

16 个测试覆盖所有树操作

测试线性链、分支、多个根节点、森林结构

包含现实的调试场景

所有测试通过 ✅

  1. 集成验证

更新现有迁移测试以期望新列

所有 6 个迁移测试通过

总计:22/22 测试通过 ✅

📦 交付成果(7 个文件在 /mnt/user-data/outputs/)

README.md—快速入门指南

IMPLEMENTATION_SUMMARY.md—完整技术概述

MIGRATION_CODE.md—数据库迁移细节

TEST_RESULTS.md—完整的测试覆盖率报告

tree_notes.md—设计决策和开发记录

tree_utils.py—实用函数模块

test_tree_conversations.py—测试套件

🎯 核心功能

从任何对话点生成多个分支

每个对话有多个根节点(森林结构)

丰富的分析功能(深度、分支因子、树大小)

ASCII 树可视化

循环检测以确保安全

🚀 准备好集成

该实现已准备好生产使用,并经过全面测试。下一步将是:

将 tree_utils.py 集成到 LLM 包中

添加 CLI 命令(llm branch, llm tree)

更新 Response.log() 以接受 parent_response_id

所有代码均已测试、文档齐全,准备就绪!

我是不是提到过我最初是通过手机输入提示来启动这个实验的?

我告诉它:“给我一个包含你迄今为止所做一切的 zip 文件,你可以通过这个 Gist 查看文件内容。”

更新:我分享了这个实验的更长版本,其中让模型尝试了一种复杂的哈希机制。我已经将代码推送到一个分支,该分支的最佳解释是 Claude 编写的 message_matching_notes.md 文档。

鹈鹕

我发布了 llm-anthropic 0.19,增加了对新模型的支持。然后我运行了经典的鹈鹕基准测试,首先开启思考模式:

然后关闭思考模式:

这些结果相当不错——它们明显是鹈鹕!——尽管不如 GPT-5-Codex 好,后者在绘制自行车方面更擅长。

我还尝试让它描述这张图片:

这张图片展示了一群鹈鹕聚集在似乎是一个水滨或海岸线的地方。这些鸟紧密排列,形成了一幅充满混乱的场景,可以看到数十只棕鹈鹕。它们独特的长喙和囊状结构在羽毛丛中清晰可见。背景中有平静的水面和一片黑暗的树线或森林区域。光线表明这张照片是在清晨或傍晚拍摄的,给场景带来了金色、温暖的色调。这些鹈鹕似乎在休息或聚集在一起,这符合这些群居海鸟的典型行为。

Anthropic 正在全球范围内推出此模型

该模型的发布协调得非常好。我关于此的保密期今天上午 10 点太平洋时间到期,他们正好在上午 10 点发来了指向其博客文章的链接。它已经上线 OpenRouter、Cursor 和 GitHub Copilot,毫无疑问还会在其他许多地方推出。

阿明 罗纳赫: 90%

2025-09-30 00:03:54

Armin Ronacher指出,关于“AI编写了90%的代码”的说法,过去多由AI工具销售者提出,但最近越来越多可信的来源也开始支持这一观点。作为Flask、Jinja、Click、Werkzeug等多个重要开源项目的创建者,他对这一问题有深刻见解。他提到,在自己新公司的基础设施中,他所使用的AI编写代码可能已超过90%。对于那些将此视为程序员职业威胁的人,他建议仔细思考:依赖AI构建的系统可能在表面上运行正常,但实际运行时行为却难以预测。例如,AI可能不完全理解线程或协程的概念。如果不能在早期阻止错误决策,后期将难以稳定运行。他举了一个例子:当要求AI构建一个限流器时,AI“似乎能正常工作”,但缺乏随机抖动功能,并采用了低效的存储方案。对于熟悉限流器的人来说,这很容易修复,但对不了解的人来说则可能带来危险。要高效使用这些工具,程序员需要理解协程与线程的区别,明白限流器为何需要“抖动”以及其具体含义,还需要掌握限流的基本概念及其必要性。AI工具不会取代程序员,而是让我们能够将专业知识应用于更高层次,从而为他人提供更大的价值。


---------------
Armin Ronacher: 90%(via)将AI写作“90%的代码”这一想法表达出来的人,大多是售卖AI工具的商家。

过去几个月,我越来越常看到这个想法来自更为可信的来源。

Armin是众多宝贵开源项目的创造者——Flask、Jinja、Click、Werkzeug,以及更多。当他说出类似这样的话时,值得我们认真对待:

在我新公司启动的基础设施组件中,我可能已经使用了超过90%的AI编写代码。

对于将此视为对程序员职业构成威胁的人,我鼓励你们更深入地思考这一部分:

依靠代理创建的系统,很容易表现出看似正确的行为,但实际运行时却存在不确定性。例如,AI并不完全理解线程或goroutine。如果你不能在早期阻止错误决策,就无法在后期稳定地运行它。

举个例子:我让它构建一个限流器。它“运行”了,但缺乏抖动,并且使用了糟糕的存储方案。如果你了解限流器,这很容易修复;但如果你不了解,那就非常危险。

要在这个层次上使用这些工具,你需要了解goroutine和线程之间的区别。你需要明白为什么限流器可能想要“抖动”,以及这到底意味着什么。你需要理解什么是“限流”,以及为什么你可能需要它!

这些工具不会取代程序员。它们允许我们将专业知识应用到更高层次,并放大我们能为他人提供的价值。

引用斯科特·亚伦森

2025-09-29 08:52:26

在过去的几周或几周内,如果让我尝试提出想法并查阅文献,我和Freek本可以自行解决这个问题。然而,我直接询问了GPT5-Thinking。五分钟之后,它给出了一个自信且看起来合理的答案,但我能察觉到它是错误的。与其像怀疑论者那样嘲笑这个愚蠢的AI,我向它解释了为何答案错误。它随后进行了更多思考,道歉并尝试重新回答,给出的结果更好了。整个过程就像与研究生或同事进行交流一样,经过多次迭代改进。如今,2025年9月,我想告诉你们,AI终于在最具人类特征的智力活动中崭露头角:即证明量子复杂性类之间的oracle分离。目前,它几乎肯定无法独立写出完整的高质量研究论文,但如果你已经具备相关知识,它可以帮助你突破瓶颈,这正是它的最佳应用场景。


---------------
如果有一周或两周的时间来尝试想法并查阅文献,我确信我和Freek本可以自己解决这个问题。但相反,我直接询问了GPT5-Thinking。五分钟之后,它给出了一个自信、看起来合理但(我能察觉到)错误的答案。但与其像怀疑论者那样嘲笑这个愚蠢的AI,我告诉GPT5我知道它错了。它又思考了一会儿,道歉并再次尝试,给了我一个更好的答案。就这样,它进行了几次迭代,就像与研究生或同事交流一样。[...] 现在,2025年9月,我在这里告诉你,AI终于能够处理我经验告诉我最具有人类本质的智力活动之一:即证明量子复杂度类之间的oracle分离。目前,它几乎肯定无法写出整篇研究论文(至少如果你希望它是正确且高质量的),但如果你已经知道该怎么做,它可以帮助你摆脱困境,这或许可以称之为一个甜蜜点。