宝玉
8个月前
春假两周在家教孩子编程,对编程没兴趣所以以前没学过我也没教过,但明年要学编程课了想提前跟我学一点,我教编程的方法很简单直接: 1. 首先找需求,看能做点什么自己用的上的东西 学编程最好是能学以致用,做一点能自己用的上的东西是最好的。最后一起讨论定下来做一个浏览器插件,点击插件可以显示学校网站的通知,这样就不用打开网站去看通知了,随时查看。 2. 跟 AI 结对,让 AI 帮助完成第一版本 最开始先教一点最基本的,通过 Chrome Dev Tool 去看网络请求,去找到相关API请求,复制fetch的代码出来,然后就自己去向 AI 描述需求,然后遇到问题让 AI 帮助解决。几个小时后就自己借助 AI 搞定了一个可用的版本。 3. 去解释代码是如何工作的 如果只是跟 AI 结对写代码,并不会理解代码,所以最好就是去向别人解释代码是怎么工作的,因为要解释清楚得先学习搞清楚。一开始是解释不清楚的,不清楚就是去问 AI,中间我也会帮助解释一下,反复几次把每一行代码都讲一遍,中间再对代码做一些修改对比看修改后的效果加深理解。 我是费曼学习法的忠实信徒,一直坚信最高效的学习方法就是把学到的东西解释给别人听,能把代码从头到尾讲清楚就能学到东西。 4. 迭代增加新功能 最初的版本只有显示文字版的列表,基于它之上再加上显示图片、增加本地存储、显示未读条数等等功能,通过迭代,一方面让程序更实用,另一方面也是做中学。继续跟 AI 结对,继续讲解代码。 我教编程的方法总结下来就是:做点能用的上的东西,跟 AI 结对编程,不懂的让 AI 教,写出来的代码要能解释给别人听,通过版本迭代不断完善不断学习。
宝玉
8个月前
春假两周在家教孩子编程,刚上大一,对编程没兴趣所以以前没学过我也没教过,但明年要学编程课了想提前跟我学一点,我教编程的方法很简单直接: 1. 首先找需求,看能做点什么自己用的上的东西 学编程最好是能学以致用,做一点能自己用的上的东西是最好的。最后一起讨论定下来做一个浏览器插件,点击插件可以显示学校网站的通知,这样就不用打开网站去看通知了,随时查看。 2. 跟 AI 结对,让 AI 帮助完成第一版本 最开始先教一点最基本的,通过 Chrome Dev Tool 去看网络请求,去找到相关API请求,复制fetch的代码出来,然后就自己去向 AI 描述需求,然后遇到问题让 AI 帮助解决。几个小时后就自己借助 AI 搞定了一个可用的版本。 3. 去解释代码是如何工作的 如果只是跟 AI 结对写代码,并不会理解代码,所以最好就是去向别人解释代码是怎么工作的,因为要解释清楚得先学习搞清楚。一开始是解释不清楚的,不清楚就是去问 AI,中间我也会帮助解释一下,反复几次把每一行代码都讲一遍,中间再对代码做一些修改对比看修改后的效果加深理解。 我是费曼学习法的忠实信徒,一直坚信最高效的学习方法就是把学到的东西解释给别人听,能把代码从头到尾讲清楚就能学到东西。 4. 迭代增加新功能 最初的版本只有显示文字版的列表,基于它之上再加上显示图片、增加本地存储、显示未读条数等等功能,通过迭代,一方面让程序更实用,另一方面也是做中学。继续跟 AI 结对,继续讲解代码。 我教编程的方法总结下来就是:做点能用的上的东西,跟 AI 结对编程,不懂的让 AI 教,写出来的代码要能解释给别人听,通过版本迭代不断完善不断学习。
宝玉
8个月前
实例演示我是如何和 AI 结对编程的 比如我要做一个功能模块,我自己有个大概的思路,然后我将需求抽象精简,包含在一个上下文中,只是一个大方向,不涉及太多细节。(参考图1) 1. 让 AI 根据需求出设计方案 同样的需求我用 3 个不同的会话生成 3 次(参考图2、图3),这样可以生成不同的结果对比,看看差异,如果觉得结果都有问题,那么就调整提示词,继续生成几次,直到和 AI 的思路比较一致了。 这一步尽量不要设计太多技术细节,最好让 AI 出方案,除非你很有把握,因为有时候 AI 能提出更好的方案,就算它提不出更好的,和你想的差不多也是对你的一种肯定。 这就好比你是个经理,让下面三个资深员工就同一个需求分别出方案,然后选一个最好的,如果需求没描述清楚就完善需求。同理如果你一开始就把细节定了,那么给员工的发挥余地就小了,所以最好让员工自己提方案,说不定会有更好的方案。 2. 设计方案确定后,填充细节生成代码 方案定下来后,就可以把方案的细节都补充上,避免 AI 在生成代码时遗漏,然后交给 AI 去生成(参考图4)。生成后简单 Review 下就知道是不是遵循了设计。 如果没有遵循设计,就完善提示词,让 AI 重新生成,指导遵循了设计 如果有 Bug,先尝试在回复中纠正,如果1-3次纠正还不能修复,重新调整提示词或者提示词都不用调整,直接重头生成,或者去试试其他更好的模型。 这同样也相当于你扮演经理的角色,定好设计后让员工去写代码,如果他们没搞明白设计就重新说明,如果写的有 Bug 就告诉他们 Bug 在哪让他们修复,如果修复几次都修不好,就开除换人重写。 总结下就是像一个开发经理一样,去跟 AI 员工描述需求,让手下几个 AI 员工去设计,AI 员工设计完挑选确认方案,方案确认后继续让 AI 员工帮你生成代码,代码不好就修改提示词重新生成。
宝玉
8个月前
宝玉
9个月前
问:体验了一下 AI 编程,我发现这个编程能力受限于上下文的限制,对于大型项目的构建能力偏弱,不知道有没有什么好的方法能够解决这个问题呢? 答:编程能力确实受限于上下文的限制,但是使用 Cursor 这样的开发工具,有一些技巧可以让你在大型项目中,也能大幅提升效率。 核心是两点: 1. 将复杂任务拆分成小任务,每次只实现一个小任务 2. 每次交互选取最相关的上下文,让它可以照葫芦画瓢 既然我们知道大语言模型的上下文窗口长度是有限的,那么就需要最大化的利用好上下文。最简单有效的就是每次任务小一点,输入的代码和提示词少一点,这样就可以让模型在上下文窗口限制内很好的完成任务。 比如说我要让 Cursor 帮我实现一个爬虫,抓取某个网站的数据,要抓一级页面、二级页面、三级页面、四级页面。每一级页面还有很多细节。 如果我一次性要求 AI 去实现,那可能无法实现,或者完成的不好。但是我可以拆成若干小任务。 所以我第一步会要求 Cursor 帮我实现一个最基本的爬虫功能,能抓取网页、能解析网页内容,能保存内容到静态文件,这个任务 Cursor 能完成的很好。 第二步我要求 Cursor 帮我实现抓取首页,把页面的 HTML 结构发给它,让它能解析首页的内容成结构化的数据,并且保存到一个 sqlite 数据库。这个任务 Cursor 能完成代码,执行时可能会有点小问题,但是稍微修改就能正常运行。并且对代码细节进行半手动半AI辅助的完善。 第三步继续要求 Cursor 实现一个记录抓取位置的功能,让它可以中断后从上一次抓取位置继续。然后再完善优化代码。 第四步让它对去抓取二级页面,提供二级页面的结构给它,并且把之前优化好的抓取解析代码添加到上下文,让它去抓取二级页面。由于提供了优化好的代码参考,新的代码也会参考优化好的代码。 后面的步骤都是类似的,就是把之前写好的优化好的代码作为上下文,加上新的需求,让它去实现。 这样一步步下来,一个复杂的模块就完成了,而使用过程中也没有超出上下文长度。 所以不用担心上下文窗口长度的限制,也不用担心你的项目太大它不理解,核心是要把复杂任务拆成简单的任务,要一点点迭代,先优化好前面的代码,然后生成新的代码的时候参照前面优化好的代码。 同步发布于博客:
宝玉
1年前
推荐阅读:《The Future is Rusty —— LLMs Make Programming Language Learning Curves Shallower》 众所周知,Rust 的学习曲线很陡峭,但现在,得益于大语言模型(LLMs)的发展,这个陡峭学习曲线的问题已经变得容易解决了。 无论是 Rust、Haskell 还是其他任何语言,借助大语言模型的帮助,现在学习起来都更加容易。事实上,如果你在学习难懂的材料时没有利用大语言模型的帮助,那么你的学习方式可能不是最佳的。 文章中提到了一个很有意思的概念叫 “The Intermediate Material Problem”,是指在学习某个技能或领域时,在初级和高级阶段之间存在的一种学习难点。具体来说,在编程语言学习中,这个问题特别明显,尤其是对于像 Rust 这样的复杂语言。 在初级阶段,学习者通过教程和基础课程获得基本的知识和技能。这些资源通常都是易于理解和遵循的,目的是帮助初学者快速入门。然而,当学习者试图从基础过渡到更复杂的应用和项目时,他们常常发现可用的学习材料突然变得稀少并且难度很高。例如,在 Rust 编程中,学习者可能已经掌握了基本的语法和概念,但在尝试开发更复杂的系统(如光线追踪器)时,他们需要理解更高级的概念,比如所有权规则和内存管理,这些通常不在初级教程中详细讲解。 这种情况造成了一个“中阶教材”缺口,学习者必须依靠自己的努力和探索来克服这个难关,这通常包括阅读高级文档、参与社区讨论,甚至通过试错来解决具体的编程难题。这个阶段通常伴随着挫折和困惑,因为学习者不再有清晰的指导和步骤可循,而是需要自己摸索前进。 这个问题并不限于编程或技术领域。在许多学习曲线陡峭的领域中,从初学者过渡到熟练者的过程中都可能遇到类似的“中阶教材问题”。 另外文章中还提到数学家陶哲轩都在借助 ChatGPT 辅助学习。如果我们这个时代最杰出的数学家都在用 ChatGPT 来帮助他进行证明,那么你也没有理由不尝试! 原文: 译文:
宝玉
1年前
少林寺方丈释永信前几天在 Meta 旧金山总部分享的:《禅宗遇到AI》 释永信方丈2023年11月2日于旧金山脸书(∞ Meta)公司总部/Abbot Shi Yongxin at Meta Company Headquarters in San Francisco on November 2, 2023. 尊敬的各位来宾和朋友: 大家好! 今天非常荣幸能同各位朋友分享“禅宗遇到AI”这个话题。随着人工智能技术的不断发展,它正在逐渐渗透到我们生活的各个领域。与此同时,这种技术的普及也对传统信仰产生了巨大影响。当古老的东方禅宗思想遇到21世纪尖端技术的人工智能,人文与科技的交汇势必会给当今世界的人们带来新的启示。 佛教到今天已经有2500余年的发展历史。禅宗是中国佛教影响最大、传播最广、发展最成熟的宗派,其中心思想可概括为“不立文字,教外别传,直指人心,见性成佛”。禅宗追求心灵的觉悟,它是对佛陀思想的继承和创新,同时又融汇了中国传统的儒家、道家思想,其修行方法以真修实证为主,不受任何知识、逻辑、思维乃至意识所束缚,是修禅者对解脱智慧的流露。禅宗思想深刻影响了中国的哲学、文学、艺术等领域,同时也在服务社会、净化人心、开启心智等方面做出了积极贡献。 少林寺始建于公元495年,禅宗初祖菩提达摩在少林寺面壁九年创立禅宗。少林寺作为禅宗祖庭,1500多年来传承不断,其主要以“禅”为核心,以养生、功夫、医药和禅艺等为表现形式,方便度化众生。少林养生功法以习练《易筋经》等气功为主,辅以素食、坐禅、经行等方法,以达到涵养精气神之妙用。少林功夫是中国首批非物质文化遗产,以佛教信仰和禅宗智慧为基础,具有完整的技击理论体系,形成有擒拿、格斗、卸骨、点穴、拳械等多种功法,并形成了标准化、规范化的少林功夫段品制的修学体系,其最高境界为“禅武合一”。少林医药来自对佛学“医方明”的继承,结合中国传统中医,主张运用佛法治心、草本治身,以达到调养身心之功效。少林禅艺则以绘画、书法、雕刻、梵呗、茶器及围棋等为载体,以艺入禅来传播禅宗文化。 少林文化通过不断的传承与交流,已在韩国、日本、东南亚等地区得到广泛传播,近几十年来,欧美各国也涌现出许多少林文化的爱好者。少林寺还积极参与国际交流活动,为服务人类健康做出了积极贡献。目前,少林寺在全世界150多个国家200多个地区都有少林文化交流中心。 少林寺在历史发展中几经兴衰,但是如今依然传承不断,其原因在于少林文化的内动力,它兼容并蓄,并且提倡人与自然,人与社会,人与自身的和合共生,同时少林文化在沟通国际关系、推动世界和平方面发挥了积极作用。少林寺在未来也依然会坚持传播平等、慈悲、清净、圆融的佛教普世价值观,更好的服务全人类。 当禅宗遇到人工智能时会发生什么?技术进步能否取代道德伦理进步?人工智能具有强大的数据处理和分析能力,并且经由程序和算法可能会表现出类似于人类的感知,但是人工智能并不能具备我们禅宗所讲的觉悟的心性。人类面对此人工智能应该保持头脑清醒,应该如禅宗所倡导的那样向内寻求,得到超越解脱的本觉智慧。 禅宗是强调修禅者通过自身的精进和努力,逐渐提升觉悟的境界,在这个过程中,常常会遇到诸多困惑和烦恼,AI作为一作工具,可以检索查找相关经典,从而对治各种疑惑,为修禅者提供辅助和便利。 科技的进步让人们的闲暇时间增多,我们不希望因为闲暇时间的增多而使大众变得懒散放逸。在未来,我希望禅宗智慧和人工智能可以有更多互动,特别是在少林文化方面,能够携手搭建一个交流平台,让大众在修学体验少林禅、武、医、艺文化时,能够更加身临其境地感受少林文化的独特魅力,追求精神上的圆满,也让少林文化更好地服务全人类身心灵健康。 最后,祝愿大家一切吉祥!阿弥陀佛!
宝玉
2年前
熟悉Prompt的同学们应该都知道,通常在写Prompt的时候要先设定角色:“你是XX方面的专家”,这并非玄学,而是有科学根据的。 GPT在训练的时候,有各种训练数据,有的质量高有的质量低,而默认情况下,生成高质量数据和低质量数据的概率差不多,但是当你给它设定XX专家的角色时,它会尽可能把概率分布在高质量的解决方案上。 详细内容建议看下面这段Andrej Karpathy在State of GPT中的一段演讲。 以下是这段视频的文字文字内容: ---------- 下面我要讲的这点对LLM的理解非常有趣,我觉得这算是LLM的一种心理特性:LLM并不追求成功,而是追求模仿。你希望它成功,那就需要向它明确要求。这里的意思是,在训练Transformer的过程中,它们有各种训练集,而这些训练数据中可能涵盖了各种不同质量的表现。比如,可能有一个关于物理问题的提示,然后可能有学生的解答完全错误,但也可能有专家的答案完全正确。尽管Transformer可以识别出低质量的解决方案和高质量的解决方案,但默认情况下,它们只会模仿所有的数据,因为它们仅仅是基于语言模型进行训练的。 在实际测试中,你其实需要明确要求它表现得好。在这篇论文的实验中,他们尝试了各种提示。例如,“让我们逐步思考”这种提示就很有效,因为它把推理过程分散到了许多记号上。但效果更好的是这样的提示:“让我们以一步一步的方式解决问题,以确保我们得到正确的答案。” 这就好像是在引导Transformer去得出正确的答案,这会使Transformer的表现更好,因为此时Transformer不再需要把它的概率质量分散到低质量的解决方案上,尽管这听起来很荒谬。 基本上,你可以自由地要求一个高质量的解决方案。比如,你可以告诉它,“你是这个话题的领先专家。假装你的智商是120。” 但不要尝试要求太高的智商,因为如果你要求智商400,可能就超出了数据分布的范围,更糟糕的是,你可能落入了类似科幻内容的数据分布,它可能会开始展现一些科幻的,或者说角色扮演类的东西。所以,你需要找到适合的智商要求。我想这可能是一个U型曲线的关系。