跳到正文
北京时间
原文
Answer.AI 官方研发博客· Johno Whitaker·· 2025-10-02精选AI 评分63

Answer.AI 推出 How to Solve It with Code 课程与 Solveit 平台

Launching How to Solve It with Code, the antidote to AI fatigue

AI 导读

Answer.AI 推出五周课程 How to Solve It with Code 及配套平台 Solveit,10 月 20 日开课,报名开放至 10 月 20 日。

推荐理由

原文详述了 Solveit 平台与课程的迭代式人机协作方法及其设计取舍,读者可以借此对照自己的 AI 辅助编码工作流。

正文 · AI 翻译

Jeremy 的 tldr:“How to Solve it With Code”是 fast.ai 的一门关于迭代式问题解决的课程,以及一个让这件事更容易的平台(‘Solveit’)。这门课程展示了如何用少量 AI 来帮助你在构建中学习,但并不依赖 AI。这种方法基于 Eric Ries 和我数十年的研究与实践。它基本上与“氛围编程”相反;它讲的是小步前进、深入理解和深度反思。我们写这个平台,是因为我们没有找到其他足够好的东西来以“solveit 方式”做事,所以我们为自己做了一个,然后决定更广泛地提供它。你可以不使用我们的平台来遵循这种方法,尽管体验不会那么顺畅。

现在当程序员是个奇怪的时期。入门比以往任何时候都更容易,但也比以往任何时候都更容易让 AI 把你带到一个被自己看不懂的代码压垮的境地。我们有一个解药,过去一年里我们自己和 1000 名预览用户一直在使用它。它改变了我们在 Answer.AI 的生活,数百名用户也这么说。现在我们准备把它分享给你。报名已开放,并将持续到 10 月 20 日。在五周时间里,我们会让你体验我们的新方法和平台“Solveit”如何应用于从编程挑战、Web 开发和系统管理到学习、写作、商业等方方面面。

好,让我们解释一下我们到底在说什么!…

去年年底,Jeremy Howard(fast.ai、Answer.AI、Kaggle、Fastmail 的联合创始人,首个 LLM 的创造者……)和我办了一门小型试听课程,名为“How To Solve It With Code”。反响太热烈了,我们不得不在仅仅一天后就关闭报名。1000 名热心学员加入了我们,深入学习我们解决问题的一般方法。前几课通过“Advent of Code”编程挑战这个载体来教授,并运行在一个全新的、专门构建的工具 solveit 中。随着课程推进,我们在探索 Web 开发、AI、商业、写作等方面玩得很开心。而 solveit 工具也成了一个极其有用的试验场,用来验证围绕 AI 辅助编程、学习和探索的各种想法。

在那之后的一年里,我们继续完善和扩展这套流程与平台。我们现在基本上就生活在 solveit 平台里。我们所有的系统管理工作都在里面做(Solveit 本身托管在一个新的、可水平扩展的多服务器平台上,而这个平台完全是我们用 Solveit 构建和运行的!),在里面托管生产应用(例如,课程中的所有学生都可以使用一个运行在 Solveit 对话框里的 Discord AI 机器人“Discord Buddy”!),在里面开发我们的大部分软件,我们的法务团队在里面起草合同,我们在里面迭代 GUI,事实上,我们绝大多数各种日常工作都在里面完成。

Jeremy 和我使用 Solveit 搭建用于部署 Solveit 的服务器农场的真实例子

从10月20日起为期五周,Jeremy和我将向你展示如何使用solveit方法,并让你完全访问支撑它的平台(之后你也可以选择继续访问课程和平台)。此外,Eric Ries将加入我们,讲授如何建立不仅赚钱,而且坚持你影响世界愿景的初创公司。你将有机会成为世界上首批阅读他尚未发布的新书的人之一。

但“solveit方法”到底是什么?它不是某种新的人工智能产物,实际上基于至少已有80年历史的思想……想了解更多,请继续阅读,或观看Jeremy和我几周前录制的这个视频。

来自Polya的灵感

George Polya是一位匈牙利数学家,他在1945年写了颇具影响力的书《How to Solve It》。在书中,他分享了自己关于教育的理念(专注于主动学习、启发式思维,以及通过仔细提问引导学生自己发现答案),并概述了一个四步问题解决框架:

  1. 理解问题:确定你被要求做什么;重述问题
  2. 制定计划:借鉴类似问题;分解为可管理的部分;考虑逆向工作;简化问题
  3. 执行计划:验证每一步
  4. 回顾与反思:考虑替代方案;提取经验教训

他专注于数学,但正如Jeremy和我所意识到的,这些思想远远超出了数学领域!事实证明,它实际上非常适合编程、写作、阅读、学习……

当然,你通常可以直接让AI为你编码和写作。但你应该这样做吗?

在大多数情况下,我们认为答案是“不”。

如果你走上这条路,会有无数问题等着你:- 如果你之前不知道如何做的基础知识,现在你仍然不知道。你什么也没学到 - 如果你继续这样工作,你会积累越来越多你不理解的代码,造成技术和理解上的债务,最终会变得难以承受 - 你不会建立起解决更难任务的基础,这些任务既不是人类也不是AI能一次性完成的。所以你限制自己只能解决其他人也能轻松解决的问题。这不是个人或组织成功的秘诀!

另一方面,如果你养成始终努力提高理解和专业知识的纪律,你会发现一些令人愉快和惊奇的事情发生。每次你处理一个任务,你会发现它比上一个稍微容易一些。这些理解和能力的提升会成倍增加,你会发现自己的技能发展甚至比AI的进步更快。你将专注于使用AI来帮助你大幅提高自己的生产力和能力,而不是专注于帮助AI提高其生产力和能力!

应用于编程:在类似笔记本的环境中进行迭代式、探索性编程。

让我们考虑一个快速示例,以solveit方式编程(甚至还没有任何AI)。对于2024年的Advent of Code,第1天的解决方案涉及比较两个列表,按值排序(有一个关于精灵的完整背景故事,你可以如果愿意的话阅读)。假设我们已经考虑了问题,现在专注于一个小子任务:提取第一个(排序后的)列表。我们从提供的示例数据开始:

x = '3   4\n4   3\n2   5\n1   3\n3   9\n3   3'

我们的计划可能是:

  • 拆分为行列表
  • 从每行中获取第一个数字
  • 排序

在思考完计划之后,我们开始着手各个步骤。我们的目标是每次编写的代码不超过几行,每一部分都提供一些有用的输出,你可以用它来验证自己是否走在正确的轨道上:

lines = x.splitlines()
lines
>>> ['3   4', '4   3', '2   5', '1   3', '3   9', '3   3']

现在我们构建一个列表推导式来获取第一个元素。我们可能从[o for o in lines]开始,然后一次添加一点,检查输出,逐步构建到:

l1 = [int(o.split()[0]) for o in lines]
l1
>>> [3, 4, 2, 1, 3, 3]

现在进行排序:

sorted(l1)
>>> [1, 2, 3, 3, 3, 4]

现在我们已经单独运行了所有部分,并检查了输出是否符合预期,我们可以把它们组合成一个函数:

def get_list(x):
    lines = x.splitlines()
    l1 = [int(o.split()[0]) for o in lines]
    return sorted(l1)
get_list(x)
>>> [1, 2, 3, 3, 3, 4]

此时,你会反思这个解决方案,回想更大的计划,也许会问自己是否有更好的方法。你可能会想,对于sorted(int(line.split()[0]) for line in x.splitlines())来说这工作量太大了——随着你技能的提高,你可以调整细粒度的级别,但思路是一样的:处理小块代码,检查输出,只有在单独尝试过之后才把它们组合成更大的函数,并不断反思更大的目标。

(我们稍后会回到这一点——但同时也想一想,集成 AI 如何融入上述过程。任何时候你不知道如何做某事,你都可以只针对那一个小步骤寻求帮助。任何时候你不理解某件事是如何工作的,或者为什么不工作,你都可以让 AI 帮助你处理那一个具体的部分。)

快速反馈循环的力量

这种实时、迭代式编码赋予你的超能力就是近乎即时的反馈循环。你不必构建庞大的应用、等待代码上传、点击进入网站然后在调试控制台中检查错误——而是检查一段代码的输出,看看它是否符合你的预期。仍然有可能犯错和遗漏边缘情况,但当你以这种方式编码时,及早发现大多数错误要容易得多。

这种设置好一切以便尽快获得反馈的想法一再出现。我们的联合创始人 Eric Ries 在他的书《精益创业》中谈到了这一点,从客户那里获得反馈对于快速迭代产品或商业想法很有价值。Kaggle 高手们谈论快速评估的重要性——如果你能在 5 分钟内测试一个想法,那么相比每次实验需要 12 小时模型训练的情况,你可以尝试更多的想法。

AI:共享上下文是关键

到目前为止一切顺利——听起来我们描述的是 fast.ai 课程中教授、并与 NBDev 等工具一起使用的探索式/文学化编程风格。但我们不是处在一个新时代吗?AI 在哪里?!

嗯,事实证明,通过这种方式构建代码,将计划、笔记和测试与源代码混合在一起,你也在为 AI 构建完美的上下文来帮助处理代码。Solveit 能看到你能看到的一切。我们发现,这实际上以连我们自己都感到惊讶的方式改变了“AI+人类”的能力。

这已经成为我们在 Answer.AI 所有工作的一个关键基础:AI 应该能够完全像人类一样看到一切,反之亦然,并且人类和 AI 都必须能够使用相同的工具。这使 AI 成为一个真正的迭代伙伴,可以与之交流想法、尝试实验并共同学习。

你还可以通过引用特定变量,或让它使用内置的搜索和 URL 读取工具,向 Solveit 提供额外的上下文。任何 python 函数都可以成为工具,你可以让 solveit 使用它,从而轻松地为它提供获取更多上下文或采取“代理式”行动以给出更好响应所需的一切。

这种让 AI 能看到你所看到的一切、处于共享环境中的理念,在我们钟爱的 shell sage 工具中也得到了很好的运用!

AI:对话工程让上下文保持有用

当前基于聊天的模型的一个问题是,一旦它们跑偏,就很难回到正轨。模型现在正在建模一个包含 AI 犯错误的语言序列——而更多的错误很可能随之而来!如果你经常使用语言模型,那么你无疑已经多次遇到这个问题。

出现这种情况有一个有趣的数学原因。绝大多数语言模型训练完全是为了让神经网络预测句子中的下一个词——它们是自回归的。尽管它们后来经过微调以做更多事情,但本质上它们仍然非常想预测句子的下一个词。在用于训练的文档中,有大量低质量推理和错误的例子。因此,一旦 AI 在聊天中看到一些错误,最可能的下一个 token 也会是错误。这意味着每次你纠正 AI,都会让 AI 在未来更有可能给出糟糕的响应!

因为 solveit 对话是流动且可编辑的,所以回头修改或删除错误、死胡同和无关探索要容易得多。你甚至可以编辑过去的 AI 回复,引导它朝向你更偏好的行为方式。再结合轻松对 AI 隐藏消息、或将消息固定以使其保留在上下文中——即便对话增长到超出上下文窗口并开始被截断——你就拥有了一套让 AI 随时间推移持续有用的配方。我们长期以来一直把这称为“对话工程”——而这确实是让 AI 工作会话随时间推移不断改进、而非退化的关键。

当然,这一切对人类也很有用!保持整洁、使用(可折叠的)标题来组织各部分、写下你正在做什么或目标是什么的笔记,甚至与 AI 的过往问答,都让重新拾起旧工作成为一种乐趣。

构建用于协作而非替代的应用

不过,在 solveit 中有一件事仍然(有意地)很难,那就是让 AI 以完全放手的方式真正编写你所有的代码。我们做出了各种选择,温和地推动人类保持控制。比如:

  • Solveit 默认使用代码输入
  • AI 在围栏代码块中输出代码,但除非你选择这样做,否则这些代码不会被添加到你的代码中或运行。有添加快捷键,但这个额外步骤鼓励你在无脑运行之前先阅读 + 重构
  • 尤其是在“学习”模式下,AI 会温和地引导你编写小步骤,而不是提供一大块代码,除非你非常明确地要求它这样做。
  • 在“学习”模式下,AI 的“幽灵文本”自动补全建议不会显示,除非你用键盘快捷键触发它们。

即便是把编辑器做得相当小并放在底部,这一选择也强调了这是一个 REPL/对话界面,专为构建小而易于理解的部分而优化。完全可以在其他工具中实践 solveit 方法,但我们也发现,这些有意的选择与为对话工程提供的额外支持相结合,很快就会让人感到不可或缺。

学习轨迹

这让我们回到 solveit 方法的一个基础部分:学习心态。我们可以让 AI 填补知识空白,或是在 matplotlib 绘图或特定库的样板代码这类琐碎部分上节省时间,这很好。但当 AI 提出你不知道的东西时,重要的是不要跳过它继续前进——否则那部分新知识你永远也学不会!

我们努力养成一种习惯:每当出现这种情况时,就停下来探索。幸运的是,这非常容易做到——你可以添加新消息,尝试 AI 展示给你的任何新东西,询问它如何工作,获取演示代码,不断试探直到你满意为止。然后,这段支线探索的证据可以折叠在一个标题下(供以后参考)或直接删除,让你回到主流程,但大脑中多了一块新知识。

和许多程序员一样,面对 AI 编码能力的迅速提升,我也有过自己的存在主义焦虑。如果 AI 变得越来越强,强到普通人实际上没有必要去学习掌握这些技能,那该怎么办?如果你假设自己的编码技能停滞不前,并想象 AI 继续变得更好,你可能会感到有些悲观。问题是,技能不必停滞不前!随着你和你在谨慎使用的 AI 都变得更好,你会学得更快,能够完成的事情也越来越多。

精通需要刻意练习

这一切都是艰苦的工作。就像锻炼身体,或者练习乐器。和任何对精通的追求一样,我不确定它适合所有人。但正如我们从所有把时间投入到第一期训练营的学生身上看到的那样,这些努力最终非常值得。只要看看项目展示,里面展示了我们社区做出的几百件(!)作品。

来源:Answer.AI 官方研发博客 · answer.ai