我为什么做开源?

开源到书籍

从《ChatGPT原理与应用开发》这本书开始吧,它获得了异步2024年影响力图书。这本身是一个开源项目HuggingLLM,当时(23年4月)的初衷很简单,就是想帮助更多的中小企业使用AI,让非算法的工程师也能借助AI实现算法相关功能和服务。另外,本书另一位作者玉琳说网上太多智商税的课程了,觉得我们应该做点什么,于是一拍即合就有了这个项目。但具体开始做的时候,我觉得还是应该有一些创新,并且内容的生命力尽量持久些。思来想去,再结合市场调研结果,决定以NLP算法常见任务为导向,通过借助LLM让普通程序员也能做NLP算法工程师的工作。同时内容尽量保持实战性,代码可直接复用到工作环境。这是从NLP范式角度展开的一本书,是最大的创新点,同时范式是不容易改变的,也保证了书籍的生命力。

书籍出版后,其实还是有点担心的,我当时对这本书的评价是有一定价值,但整体质量其实一般。不过有一点我觉得是好的,就是到现在为止书的框架依然是正确的,且目测会在很长一段时间内仍然有效。后来微信读书评价果然还可以,有评价说看得出作者在NLP领域浸淫多年,这是不错的,有些东西光眼看不经历实际项目是没用的。其实我当时还看了微信读书的基本同类型书,有些书质量不错,但也有些拼凑感很重,都是网上到处整理的资料,果然,这些书的评论里就有不少人提到了,看来读者的眼睛是雪亮的。说回本书,其实我觉得整体还是太粗糙了,毕竟时间点紧,没太多时间打磨,内容呢也比较简单,是真的非常简单,毕竟是给非行业人士看的。我都跟业内人说你们别看,太简单了,不要浪费时间,当然更不要买,网上都有全书电子稿。

开源的初衷

这个项目的初衷是帮助到更多人,把知识传播给更多人,虽然看起来有点脑子一热的感觉。不过也来到了本文的主题:我为什么做开源项目?迄今为止我做的开源项目主要是两大类:教程类和工具类。统计了下,从19年至今,将近30个开源项目,一年平均5个,其中教程类的21年开始,4年时间12个,占了60%。下面列的所有的项目都可以在我的GitHub找到。

  • 教程类
    • 2021年:daily-interview
    • 2022年:powerful-numpy、sweetalk-design-pattern、阿里云天池《数据科学》NumPy
    • 2023年:hugging-llm、llm-cookbook、hands-on-llm、百度《大模型应用开发课程》、魔搭社区《Sora原理与技术实战》
    • 2024年:llm-deploy、hands-on-llama、开放原子基金会《开源大模型入门》
  • 工具类
    • 2019年:pnlp、nlm、SuitJOB、Multi-Label-Text-Classification
    • 2020年:cppjieba、uuid-by-string
    • 2022年:hnlp、ptcls
    • 2023年:hcgf、bytepiece-rs、llama.np、InteractiveNLP、Chinese-FLAN
    • 2024年:wiseflow

从我个人的角度,肯定不是为了做开源项目而做开源项目,更不是为了得到任何人的认可。之前做过的所有开源项目也从没有宣传过,朋友圈都没发过,更没有网络乞讨过Star(非常理解这种行为,但个人不喜欢)。其实,大部分时候就是纯粹想填补某一个方面的空白,把内容随缘传递给需要的人或者顺带方便正好需要的人。所以,这些开源项目大部分都有个特点:就是之前没有雷同内容,一定在某个方面有创新。对我来说,如果网上已经有了,就会索然无趣,基本不会再碰了。更多的还是想做新东西,而不是跟在他人后面,做大量重复的工作。总的来说,就是做的东西自己觉得有价值,对自己有价值,所以有没有人关注都不看重。如果能顺带帮助他人,那当然更好了。这是典型的古典主义经济学思维,也是典型的内在动机型、向内求,典型的INTJ。这三个词本身也算是我的标签。

所以,做一个开源项目就是在创新,在填补国内空白,甚至全球的空白。拿上面的项目随便举几个例子。powerful-numpy是一个NumPy教程,为什么做?就是觉得已有的内容不太贴合实际,所以我把最常用的功能通过例子做成了基础版,学习者可以在很短时间内学会核心功能,然后就可以开始直接用了;但同时还有非常系统的进阶版,适合想进一步提升的学习者。hands-on-llm是从训练到部署全流程的LLM教程,当时也是集合了九位业内一线专家通力完成的,国内到现在都没有类似教程。hands-on-llama是纯NumPy实现所有推理相关知识,其中涉及到的llama.np也是全球第一个纯NumPy实现LLM推理的开源项目。LLM-Deploy则是部署推理的教程,其内容设计全网独一无二(除非有人和我一样的背景经历,同时还做了类似项目)。每个项目在决定做之前都会去调研,确实没有类似项目才会正式发起。这也包括合作的项目,比如Sora原理中的《Transformers 技术解析+实战(LLM)》一章,虽然标题很老,但内容也是很新颖的,当时也是花了不少时间绞尽脑汁地去设计。另外,其实HuggingLLM还是有后续的,都是规划了新内容的。去年随着MiniCPM、DeepSeek3的发展,我们看到了LLM在更小size、更低成本上的潜力,而近期的PRM、TTT、LTT更是往前推了一步。小模型大有可为,NLP算法有了新出路,我相信未来一定是一个O1带着一堆小LLM。HuggingLLM2将会在这样的背景下应运而生。

开源的收获

很多人可能以为开源能收获名气,出书还有钱。当然,这些肯定有,但其实名气对求职并没有帮助,大部分公司(尤其是好公司、大厂)不会因为你写了本相关的书就降低要求,可能性不大。至于出书得到的现金收益,其实并不多,抵不上半个月工资,和付出相比肯定是不成正比的,而且内容都是开源免费的,就更不会有多少收益了。其实最大的收获还是内在的,简单来说,就是重新梳理自己的知识体系,在掌握这个领域的知识后做出创新,从而将自己的认知提升到新的层面。这是我理解的收获,想来想去,这个远比所有的外在更重要,如果只关注外在,我是不会做开源的,至少不会像现在这么做开源。

记得之前参加过一些活动,看到很多很简单的项目却很多人关注,我有点不太不理解。和朋友沟通交流后有两个观点:第一就是可能在我看着简单但其他人看着并不简单;第二就是要面向市场和需求,市场需要这样的内容。我后面想了想,很认同,我也看了很多热门项目,发现大部分人他需要的不光是你给他嚼碎,还得给他喂到嘴里。就是大部分人需要直接就能跑的,但凡需要自己探索,就拦住了很多人。而我做的开源项目(主要是教程)只会教他怎么探索,怎么吃,至于嚼碎,吃到嘴里,我觉得那应该是学习者自己的职责。这是我做教程的核心,也是我认为的一个“教程”的核心,但确实对很多人不友好,这是我的问题。不过我自己确实也不喜欢做那种嚼碎的教程(难以创新,自己没有提升),那种嚼碎喂嘴里的,我会尽量直接写成软件。这只能算一种个人选择吧,做开源你有收获,我也得有收获,而且我只关注内在收获。

有必要解释一下我的理由。我本人是一路摸索过来的,很清楚的知道,要掌握一个知识,就得去磕磕碰碰,得去亲自实践。我17年转行,之前没有写过完整的py文件,记得当时为了解决一个虚拟机的问题,翻遍了几百页的官方手册终于找到答案。我始终觉得重要的不是结论,而是探索的过程,这其中的乐趣比学习到什么更重要。我也始终觉得,通过嚼碎的内容是没法成为一个优秀工程师的,也不是一个大学生更不是一个已经工作的人应该使用的学习方式。所以,我的所有教程都没有环境部分,我觉得要是连环境都搞不定,可能真的不适合这个行业。当然,这可能和我一直是INTJ有关,独立的孤狼。

现在的社会更加浮躁,从浓缩书、浓缩电影、浓缩剧,到现在的短剧,连tm游戏(王者)都是15分钟,我个人非常不喜欢。我喜欢读书,每年大概在50-60本,去年带娃,读了不到30本。我以前还跟一个浓缩书app供过稿,后来没搞了,我觉得这样不行。所有的浓缩系列,你看似好像知道了,但其实缺少了大量的信息,和看完整内容大相径庭。

我喜欢一个人一步步探索去寻找答案,喜欢一个人安静地读书,尤其是哲学和文学类,这其中的乐趣是迄今为止没有任何体验能够替代的。我在探索和读书时会彻底沉浸其中,尤其是阅读时。读代码(喜欢读优秀的源码)、读哲学(喜欢萨特、叔本华、尼采)时,仿佛作者就在身边,我们在对话;读小说(喜欢毛姆、莫言、克拉克、刘慈欣、鲁迅)时,仿佛就身处其中,经历了主人公的一生。这种顶级享受和体验,我不知道还有哪里能有。

初心与改变

其实我本人不喜欢迎合市场,不太关注外部,相反我更喜欢创造(对,我喜欢乔布斯)。做开源本来就是在工作之余,工作中几乎完全客户导向,自己做点东西难道不能按自己想法来?其实我对开源项目和自己的博客都是抱有类似的心态:主要是愉悦自己,如果能顺带帮助他人,那再好不过了。我是一个热衷钻研技术的工程师,在技术上是有一些情怀和要求的,对管理和创业没有多大兴趣,拒绝过不少机会。这点我想大概率是不会变了。

但慢慢地我也觉得,情怀和坚守未必就一定和市场需求冲突,为什么不尝试既要又要。这当然需要付出更多的心力和精力,但我想这样可能更有意义。“改变自己,影响他人”,我想这应该是自己未来长期的主题。未来的我可能需要更加创新,不光是内容上的设计,还包括形式上的设计。