Machine Learning and Data Science are awesome!
更多机器学习/深度学习/LLM 和数据科学等技术博客文章欢迎访问 mloasisblog.com。
2024年涌现了许多令人印象深刻的产品、模型和技术博客。本文将重点介绍我最喜欢的三个:Cursor,一款革新代码编辑体验的IDE;Claude 3.5-Sonnet,拥有强大编码能力的杰出模型;以及Jina 持续输出高质量技术内容的博客。
Cursor
Cursor 算是一个 AI-Native 的产品,是当之无愧今年我最喜欢的产品,没有之一。
我的技能栈是机器学习与数据科学,因此编程是我绕不过去的需要提升的核心能力之一。在实际工作中,编程不仅是实现算法和模型的工具,更是解决问题、优化性能和提升效率的关键手段。同时在使用 Python 做数据分析的时候,对于一些 DataFrame 与可视化的处理也需要经常编程实现,这样自由度更高一些。
Cursor 将我编程的效率至少提升了 5 倍以上。
刚开始接触 Cursor 的时候,我更多还是沿用 GitHub Copilot 的使用习惯,在 Jupyter Notebook 或者其他脚本中进行局部的代码自动补全与编辑修改(command+k),这一习惯主要是因为我早先的编程更多是在做模型实验与数据分析,而 Jupyter Notebook 是最合适的。但是 Cursor 的 Chat 与 Composer 模式目前似乎还是不太能将代码直接 Apply 到 Jupyter Notebook,如果只是把 Cursor 用成自带 Chat 的 IDE,那有点浪费了。
Chat 模式是一个强大的交互工具,允许开发者与代码进行直接对话,用户可以通过快捷键 ctrl + L 或者 command + L 打开聊天面板,在这里提问或获取代码的解释和建议,然后将建议的代码应用到工作区。
Composer 模式则更专注于复杂的代码生成和修改任务,是另一个更加强大的工具,用户可以通过快捷键 ctrl + I 或者 command + I 打开,它适合需要跨文件操作或全局修改的场景。
Cursor 的 Chat 和 Composer 模式各有侧重。Chat 模式适合快速、灵活的互动和简单问题解答,而 Composer 模式则专注于复杂任务的处理和跨文件操作。开发者可以根据具体需求选择合适的模式,以提高编码效率和质量。
慢慢的我开始减少 Notebook 的使用,转向使用更多的 py 脚本,Notebook 依然在做简单的实验与数据分析时很有用,代码 Cell 直观的输入输出很方便查看数据处理中的每一步中间结果,也很方便进行数据可视化。但在构建更复杂且更自动化的实验与项目时,py 脚本显得更加灵活和高效。
当我使用越来越多的 py 脚本构建复杂一点的项目的时候,Cursor 的 Composer 帮我真正打开了编程的大门,带给我更多编程的乐趣(当然也有 debug 的痛苦),虽然我目前的编程水平离工业上真正的软件工程化还有距离,但是独立开发的前景对我来说是越来越可触摸了。
案例一
于是我开始在一个文本分类的模型训练与评估实验中引入越来越多的 py 自动化脚本,按照数据处理,LLM 标注,模型训练,模型评估与应用分成各个模块。有了基本规划以后,只要清晰地告诉 Composer 我的想法,选择底座模型 Claude3.5-Sonnet,根据任务需要添加不同脚本作为上下文或者直接@codebase 让模型尽可能读取整个项目代码,最后 Cursor 就会开始跨文件理解,修改局部代码或者生成全新 py 脚本实现需求。
实际中使用 Composer 描述数据处理需求的例子:
写一个脚本,读取“nlp/data/article1”里面的所有 csv 文件,合并成一个 df1,然后在读取“nlp/data/article2”中的所有 csv 文件,合并成 df2, 把 df1 和 df2 通过列 _id 合并到一起
而我要做的就是做好规划,清晰描述需求,然后根据 IDE 中的 diff 做 review 与理解,选择性的 Accept 或 Reject 就能很好的快速打完草稿,然后在继续迭代,一个人让整个实验快速实施并一定程度上实现自动化,省去了我在 Notebook 中手动运行代码块做实验的麻烦。
案例二
之前我用 Gradio 这个库做了几个研究实验的网页端可交互 demo ,这个相比于给领导或者同事看 Notebook 会更直观更动态,省得给他们看代码。
Gradio 是一个开源的 Python 库,旨在快速构建机器学习模型的交互式 Web 界面。用户无需编写前端代码,即可通过简单的 Python 函数创建可视化界面,支持多种输入(如文本、图像、音频)和输出(如文本、图像、HTML)类型。使用 Gradio,开发者可以轻松展示、调试和分享模型,适合各种机器学习和数据科学应用。
但是 Gradio 做出来的前端页面相对简单,当我最近想自己做一个更类似于自己的小产品的时候,涉及较多前后端交互与逻辑处理的时候,Gradio 就不太适合了。
我不会写前端,我仅有的前端知识就是在 Obsidian 里面修改 css ,还有自己搭建个人博客的时候简单用的 Tailwind。至于后端我也只会写 Python,Java 与 Go 啥的都不熟悉…
不过我要做的是基于 LLM 的 demo 小工具,Python 是必须的且用于后台的数据与逻辑处理够了,至于前端交给 Cursor 就好了,它用什么我就用什么。
于是描述完需求,同样选择 Claude3.5-Sonne,Cursor 用 Python 的 Flask 库来作为网页的后端框架,前端用 JavaScript,一步步给我搭起来整个前后端,什么 html 和 css 文件啊全部由它完成,而我专注于处理后端的模型交互与数据处理,边做也边了解了前端的知识,但至始至终我没有写过一行前端代码,目前看下来 AI 写前端代码与页面设计真的太合适了。
实际中使用 Composer 描述前端需求的例子:
搜索页面参考输入图片:
1. 输入框改大一点,允许输入多行;
2. 在没有输入任何搜索前,将输入框放在页面正中间;
3. 图片的其他元素就不要了
搭建个人的小工具过程中,Cursor 团队也在持续迭代产品,添加了更多功能,比如在 Composer 中支持 Agent 模式。普通模式下模型基本是照本宣科的完成提示的需求,而在 Agent 模式下,模型开始进行反思与工具使用,模型会把提示的需求按照思维链的方式进行拆解,然后一步步地完成子任务,在需要的时候检索并访问项目中的某些相关脚本或者联网查询最新文档。Agent 模式下模型解决问题的能力会有一定的提升,但是对于 token 的消耗会更多。
另外一个 Composer 的最近更新让我很是惊叹:可以直接在 Composer 的对话框中运行终端命令!这有个好处就是 Composer 可直接获取终端的报错信息,加上读取相关脚本的代码,在一次对话中持续反复的修改错误!很多时候一次对话解决不了一个报错,需要多次复制粘贴 debug,而现在 Composer 可以修改脚本代码的同时也给出终端命令给我们,它不会自动执行,需要我门手动点运行命令(注意确保命令安全),运行后根据返回的错误信息进行 debug。
更适合什么人 ?
Cursor 更适合有一定编程经验的开发者提升编程效率。
Cursor 这个产品的开发者很懂开发者,Cursor 的工程师也在用 Cursor 开发 Cursor,他们的产品功能肯定融入了很多作为开发者自身的思考,才能打造出完胜 GitHub Copilot 的产品与用户体验,不仅仅是调用 LLM API 那么简单,如果你对这个产品的思考与开发有兴趣,可以参考创始成员的访谈:Cursor:如何构建 AI Coding 最佳实践?。
Cursor 刚开始爆火的时候经常看到“纯小白用 Cursor XX 小时内就做出了一个网页或者 App”的标题,用 Cursor 是可以实现简单的项目的,但是遇到相对复杂一点的项目时,没有编程经验甚至没有编程概念的普通用户就没辙了,所以我不认为 Cursor 是专门为编程小白用户设计的,更多是面向开发者。
Cursor 目前没有帮小白用户完全解决编程第一大拦路虎——环境配置——的问题,比较好解决这个问题的是 Stackblitz 的产品 Bolt.new 和 Vercel 的产品 v0 这两个,Bolt.new 采用 web container 这种容器概念的技术帮助用户配置好独立的相关环境,v0 支持网页基于 vercel 直接快速部署网页。当然不确定将来 Cursor 会不会解决环境与部署的问题,也不确定 Cursor 还会不会依旧基于 IDE 的产品形态迭代,不过软件开发很可能会像 Photoshop 与 Figma 这样分化成不同的产品形态。
Bolt.new 是由 StackBlitz 开发的在线开发平台,集成 AI 和 WebContainers 技术,使开发者无需本地配置即可在浏览器中运行完整的 Node.js 环境。核心功能包括:
对话式开发:通过自然语言生成代码框架,降低开发门槛。 无缝体验:跨平台支持,打开浏览器即可开发。 多框架兼容:支持 React、Vue、Angular 等主流前端框架。 实时编辑与预览:即时修改代码并验证效果。 一键部署:轻松将项目部署至云平台(如 Netlify)。 团队协作:多人同步编辑与更新,提升协作效率。
Vercel v0 是一款生成式用户界面(UI)开发工具,结合自然语言处理和 AI 技术,简化前端开发。核心功能包括:
文本生成代码:通过自然语言描述,自动生成 HTML、CSS,并支持 React 和 Tailwind CSS。 实时预览与迭代:即时查看生成的界面效果,支持快速修改与多版本迭代。 图像识别:上传网页截图生成相似代码,简化复杂页面制作。 易于集成:生成代码可直接用于现有项目。
ChatGPT 与 Perplexity
另外这两个产品已经不是今年推出的了,但是经过今年的迭代,让我更喜欢用了,尤其是 ChatGPT。
ChatGPT 最深得我心的是数据分析功能,支持上传相关的 excel 或者 csv(注意数据安全),然后后台调用 Python 代码进行文件读取与分析,同时进行可视化,界面还支持对 excel 文件的交互,对于数据分析来说简直是太好用了,好用到我怀疑有可能会让普通的取数分析这一类型的数据分析师大大降低竞争力,当然依旧无法取代熟悉业务这一类型的数据分析师。
我日常遇到数据分析的工作基本都用这一功能,在用 sql 获取到相关的原始数据后,把数据的关键信息脱敏后,将整个 csv 文件扔到 ChatGPT 中,经过一番数据转换、统计与可视化后,把最终整理后的数据重新下载成 csv 回来,有时也直接下载 ChatGPT 可视化的图,一进一出,快的话半个钟就搞定了,更多的时间是花在思考在怎么让 ChatGPT 处理数据,避免误差和得出令人“信服”的结论。
此外,ChatGPT 的高级语音功能日常用来进行英语对话,练习口语还是很不错的。
最后,Perplexity 还是当前 AI 搜索做的最好的产品,尽管 ChatGPT 开放了 Search GPT 进行联网,但是它搜索到的信息与回答的质量还是没有 Perplexity 好(可能是因为 GPT 背后用的 Bing 作为搜索引擎的原因)。
Claude3.5-Sonnet
Year of Model 毫无疑问属于 Anthropic 的 Claude3.5-Sonnet,其强大的 coding 能力正是 2024 年模型能力进化的最佳体现。
Claude3.5-Sonnet 是一个让很多产品实现 PMF 的模型,比如上述我提到的最喜欢的产品 Cursor 就说到底座模型要选 Claude3.5-Sonnet,Cursor 的爆火也是在接入 Claude3.5-Sonnet 之后。
Claude3.5-Sonnet 对代码的理解与编辑明显要好过 OpenAI 的 GPT-4o,但是对比 o1 我不太清楚,因为在 Cursor 开启 o1 需要在订阅之外额外付 API 的钱,所以我没开。我很喜欢 Claude3.5-Sonnet 写的代码,就我目前接触最多的 Python 代码来讲,Claude3.5-Sonnet 在完成我的需求时会在有需要的时候主动考虑异常捕获、可视化美观和异步处理等等,其规范的代码和清晰的注释在某方面也是我提升编程能力的的高质量语料?。
其他模型
其他闭源模型也有各自的特点,Gemini 超长的上下文窗口,o1 强大的推理能力都很不错,但是这两个我个人用的比较少。
开源模型我用的比较多的就是阿里的 Qwen2.5,还有智源的 Embedding 模型 bge。Qwen2.5-7b 我拿来给内部数据标注,其表现还是好过中文微调后同等大小的 Llama 3.1 的,无论是生成的质量和速度都比 Llama 好。
而 bge 感觉像是 Embedding 模型的业界标杆,相关论文老是看到拿它来做 Benchmark 进行比较,比如 Jina 的 Embedding 模型就经常拿它做比较。bge 这个模型我主要用来做文本的向量化,今年用它作过聚类和 RAG 中的向量搜索,效果都挺不错的,感觉这个是社区中用的最多的 Embedding 模型(中文方面?)。Jina 的相关模型也很推荐,不过我光看他们博客和论文了,实际中还没怎么用过,明年多多尝试比较下。
最喜欢的 BlogJina.ai
Jina News[https://jina.ai/news]
Jina AI 的核心产品是其搜索底座平台,该平台包含向量模型、重排器和小语言模型,支持处理文本、图像、音频和视频等非结构化数据。用户可以利用这些工具构建高性能的生成式 AI 和智能搜索应用。
Jina.ai 的技术博客是我今年看过最多的,我喜欢看他们分享实践中的经验,比如如何训练 Embedding 模型和零样本/少样本的分类器,还有如何提升 RAG 的效果,印象较深的有他们提出的 Late Chunking 技术,还有他们端到端的做 HTML-to-Markdown 的模型:
Jina Reader 刚发布那几周,我们收到了大量用户反馈,主要是对内容质量的意见。有人觉得内容太详细,有人又嫌不够详细,还有人说 Readability 过滤器删错了东西,或者 Turndown 转换 HTML 有问题。还好,很多问题通过正则表达式和一些小技巧解决了。
但是,我们一直在思考:与其不停地修修补补(维护起来很麻烦,还不支持多语言),能不能直接用语言模型直接端对端地解决这个问题?
端到端不一定是解决所有问题的灵丹妙药,但这个思路我觉得值得思考,毕竟端到端是对用户体验最好的解决方案(大概率是),看 Jina 的博客中介绍他们如何尝试端到端解决问题对我很有启发,我不太可能接触得到大模型的训练(自信点,不可能接触得到),但是端到端训练具体某项功能的小模型的需求我觉得大概率会遇到,正如 Jina CEO 的观点:
我认为 1B 参数量以下小模型是未来的趋势,垂直领域,为解决特定任务而设计的小模型是让我兴奋的点。
Anthropic 和 Hugging Face
Anthropic Research[https://www.anthropic.com/research#overview] Hugging Face Blog[https://huggingface.co/blog/zh]
这两个公司的技术博客也是我很喜欢的,除了 Jina 的技术博客外,这两个是我读的最多的。
HuggingFace 的技术博客内容丰富,既涵盖模型基础知识的科普,也介绍前沿技术的落地实践和如何将其集成到 Transformer 库中。Transformer 库是许多机器学习工程师的常用工具,博客中提供了大量关于该库使用的示例。此外,博客还介绍了 HuggingFace 开发的其他工具库及其用法,例如用于微调的 trl 库,为开发者提供实用指导。
Anthropic 的技术博客阅读的难度会更大一点,有些文章相对会更长,涉及到的知识也比较难懂,尤其是涉及模型可解释性这方面。官方 research 主要分为三大块:
- Interpretability
可解释性团队致力于更好地规划一个安全的 AI 未来,去理解大模型。 - Alignment
对齐科学团队致力于理解未来的挑战并创建安全地训练、评估和监控高能力模型的协议。 - Societal Impacts
社会影响团队使用来自各个领域的工具,以促进人工智能与人类之间的积极关系。
Anthropic 的官网 UI 与配色我看起来很舒服,我就特别喜欢那些很有设计感的博客网站,好看且图文并茂的技术文章有一种特别的美感。
