标签 Web开发 下的文章

功能介绍

  • 在兼容所有操作系统的基础上,为 Antigravity 右侧聊天面板自定义功能,建设了基础框架。用户可以在此基础上按照 SPA Web 项目开发的理念,自定义任何自己想要的功能。拉低了用户自定义的门槛。
  • 安装过程简单,甚至可以用傻瓜来形容。只需要复制一个 html 文件进行替换即可.
  • v0.1.1 演示版包括三个功能,分别为:
      1. 替换聊天窗口各个位置文字的颜色。
      1. 为用户发送的任务内容、AI 的思考过程和 AI 的反馈结果三处增加一键复制按钮
      1. 允许用户替换当前对话发送快捷键 (Enter),可以替换为 Cmd + Enter / Ctrl + Enter 等自定义快捷键
  • 所有开发内容集中在一个 html 文件内。方便统一管理和保证安装简便。虽然略显臃肿,但对于一个本地项目,这不算问题。
  • 架构设计遵循 "零性能损耗模式",使用 Web 弹窗的形式来控制功能的开启状态,以应对中后期功能较多的场景,基本可以做到不启用不占用性能.

开源信息

项目截图



📌 转载信息
原作者:
lygmqkl
转载时间:
2026/1/21 22:14:45

当Python的科学计算与JavaScript的前端交互禀赋在浏览器环境中实现无界交融,一种颠覆传统开发逻辑的协同范式正悄然重塑Web开发的底层逻辑。这种无需后端中转、摆脱环境依赖的直接互操作,绝非简单的语法移植或功能拼接,而是基于运行时深度耦合的能力重构。在长期的探索中逐渐发现,浏览器内跨语言协作的核心价值,在于打破两种语言固有的生态壁垒,让数据流转与功能调用脱离接口协议的束缚,形成原生级的协同闭环。无论是需要前端承载复杂数据建模的可视化应用,还是依赖密集计算的交互式工具,这种互操作模式都能将Python在数据分析、机器学习领域的生态优势,与JavaScript在DOM操作、用户交互上的灵活性无缝衔接,构建出更轻量化、高效率的开发路径。这种变革背后,是对Web开发本质的重新认知——前端不再仅仅是界面呈现的载体,而是能够整合多语言能力的综合计算平台,让前端开发者无需切换开发环境即可调用全量Python工具链,同时为数据科学家提供了将模型与可视化成果直接嵌入网页的便捷途径,实现了技术能力的双向赋能与价值放大。在实际体验中,这种协同模式带来的不仅是开发效率的提升,更是思维方式的转变,让跨语言协作从“按需适配”升级为“原生共生”,为Web应用的功能边界与体验深度开辟了全新可能。

浏览器内JS与Python互操作的底层实现,其核心逻辑在于通过字节码转译技术构建共享执行空间,彻底摆脱了传统跨进程通信的性能瓶颈与复杂度。这种基于WebAssembly的沙箱化运行环境,能够让Python解释器在浏览器中原生启动,同时建立与JavaScript引擎的直接通信链路,实现两种语言的内存级交互。双向调用的实现并非依赖标准化的接口定义,而是通过构建动态适配层,完成类型系统的隐式转换与函数签名的智能映射,让不同语言的函数能够像原生函数一样被直接调用。在实践探索中发现,这种通信机制支持同步与异步两种调用模式,同步调用适用于轻量级计算场景,能够确保数据实时反馈,满足界面交互的即时性需求;异步调用则通过事件循环的协同调度,将Python的密集计算任务分流至后台,避免阻塞JavaScript的前端渲染进程,保障界面的流畅性。更具价值的是,借助Web Worker的并行处理能力,可以将Python的计算任务分配至独立的线程中,实现两种语言的并行执行,既充分发挥了Python在数据处理、模型计算上的效率优势,又保留了JavaScript对前端界面的精准控制。这种底层架构的创新,让跨语言调用的延迟降至微秒级,为复杂场景的应用提供了坚实的技术支撑。在实际测试中,即便是处理大规模数据集的转换与分析,也能实现无感知的实时响应,这种原生级的协同体验,是传统跨语言方案难以企及的。

环境适配是浏览器内JS与Python互操作落地的关键环节,其核心挑战在于解决Python生态与浏览器运行环境的兼容性鸿沟。Python的众多第三方库在设计之初并未考虑浏览器场景的限制,大量依赖系统级API与C扩展模块,直接迁移至浏览器环境必然面临功能失效的问题。实践中采用的惰性加载适配策略,并非简单的库移植,而是基于依赖分析的按需加载机制——通过静态分析工具识别Python代码的依赖链条,仅在实际功能被调用时,动态引入所需模块及其适配版本,既大幅减少了初始加载的资源体积与耗时,又有效降低了内存占用。对于包含C扩展的复杂库,通过编译层面的深度改造,将C代码转换为浏览器可识别的WebAssembly字节码,同时保留原有API的调用方式与参数规范,确保开发者无需修改代码即可直接使用。针对两种语言的数据类型差异,构建了智能转换机制,能够自动识别数值、序列、映射等不同类型的数据,在传递过程中完成格式适配与精度保留,避免手动转换带来的繁琐操作与数据丢失风险。此外,在适配过程中充分考虑了不同浏览器对WebAssembly的支持差异,通过特征检测与降级处理,确保在主流浏览器中都能获得一致的运行体验。这种环境适配的思路,既尊重了两种语言的原生特性与生态完整性,又通过灵活的适配层设计,实现了生态资源的最大化利用,为互操作模式的广泛应用奠定了基础。

能力封装的核心目标在于构建无感知的跨语言调用层,让开发者能够摆脱底层实现细节的束缚,以原生函数调用的体验实现JS与Python的相互调用。这种封装并非简单的函数包裹,而是基于接口标准化与功能模块化的设计理念,将Python的核心能力拆解为高内聚、低耦合的功能单元,同时为Python提供访问浏览器API的统一入口,实现双向能力的无缝渗透。在设计过程中,重点强化了函数调用的语法一致性,无论是从JavaScript调用Python的数据分析函数,还是从Python调用JavaScript的DOM操作方法,都采用统一的调用语法与参数传递规则,降低了跨语言开发的认知成本。针对异步场景,通过回调机制与Promise异步模式的深度融合,解决了跨语言调用中的异步协同问题,确保数据处理与界面响应的有序进行,同时提供了完善的异常捕获机制,让跨语言调用过程中的错误能够被精准定位与处理。此外,封装层还具备良好的可扩展性,支持开发者根据具体需求自定义类型转换规则与函数适配逻辑,实现个性化的协同方案。在实际使用中,这种封装策略不仅大幅降低了开发门槛,更实现了两种语言能力的有机整合,让开发者能够根据场景需求灵活组合使用两种语言的优势功能——比如用Python处理复杂的数值计算与数据建模,用JavaScript实现流畅的交互反馈与可视化呈现,构建出功能更强大、架构更简洁的应用,真正实现了“1+1>2”的协同效应。

性能优化是浏览器内JS与Python互操作走向实用的关键,其核心在于突破数据传输与计算调度的双重瓶颈,实现跨语言协同的高效稳定运行。在数据传输方面,摒弃了传统的JSON序列化与反序列化方式,采用基于内存视图的直接数据访问模式,让两种语言能够共享同一块内存区域,数据在传递过程中无需进行格式转换与拷贝,大幅降低了传输延迟与性能损耗。对于大规模数据集的处理,通过分块传输与流式处理相结合的方式,将数据分解为可并行处理的单元,既减少了单次传输的资源压力,又通过并行计算提高了整体处理效率。在计算调度上,构建了动态负载均衡机制,通过实时监控浏览器的CPU、内存占用情况,智能分配JavaScript与Python的计算任务,当前端界面需要响应用户操作时,自动降低Python计算任务的资源占用,确保界面流畅;当处于后台计算场景时,则充分利用空闲资源提升Python的计算效率。针对Python在浏览器中运行的特性,对垃圾回收机制进行了优化调整,通过动态调整回收时机与回收策略,避免长时间运行导致的内存泄漏问题,同时减少垃圾回收过程对前端交互的影响。此外,还通过代码层面的优化,比如Python函数的惰性执行、重复计算的缓存机制等,进一步提升运行效率。在实际测试中,经过多维度优化后,跨语言调用的性能损耗已降低至可忽略的范围,即便是处理百万级数据的分析任务,也能保持流畅的用户体验,为复杂场景的落地提供了性能保障。

生态融合与场景落地是浏览器内JS与Python互操作的最终价值体现,这种协同模式正在重构多个前端应用场景的开发逻辑,催生全新的应用形态。在数据可视化领域,Python的数据分析库能够直接处理前端获取的原始数据,完成数据清洗、建模、统计分析等复杂操作,生成的结果无需转换即可通过JavaScript的可视化工具渲染为交互式图表,实现从数据处理到界面呈现的全流程浏览器内完成,既减少了数据传输的延迟,又提升了可视化的实时性与交互性。在在线教育场景中,借助这种互操作模式,可构建轻量化的在线编程环境,学习者能够在网页中直接编写运行Python代码,通过JavaScript实现实时的代码校验、结果反馈与错误提示,同时结合前端交互设计,打造沉浸式的编程学习体验,让编程教育突破环境限制,更具便捷性与普及性。在科研工具开发中,可将Python的专业计算模型与JavaScript的交互界面相结合,打造无需安装、跨平台的科研辅助工具,科研人员能够通过前端界面输入参数、调整模型,实时获取计算结果与可视化分析,大幅降低科研工具的使用门槛。

祝 jQuery 20岁生日快乐。

自 John Resig 在 2006 年发布 jQuery 以来,这个库已经陪伴 Web 开发走过了二十个年头。而在距离上一次主要版本发布近十年后,jQuery 团队正式推出了 jQuery 4.0.0

image.png

很多人可能觉得 jQuery 已经是时代的眼泪,但看到 jQuery 4.0.0 正式发布的消息时,还是不得不感叹法拉利老了还是法拉利。

这次更新可不是简单的修修补补,这次团队清理了多年的技术债务,移除了过时的 API,这个经典库终于也能跟上现代 Web 开发的节奏。

以下是这次更新中几个最值得关注的变化:

告别旧版的浏览器

这应该是最喜闻乐见的改动了。jQuery 4.0.0 正式停止支持 IE 10 及以下版本。目前仅保留对 IE 11 的支持,但这只是暂时的,团队计划在未来的 jQuery 5.0 中彻底移除 IE 支持。此外,旧版 Edge(Edge Legacy)、iOS 11 以下版本、Firefox 65 以下版本以及旧版 Android 浏览器的支持也被移除。

只要不是做古董级项目,包体积会更小,运行速度也会更快。

移除过时的 API

随着原生 JavaScript(ES6+)功能的完善,许多 jQuery 早期的辅助函数已失去存在的意义。4.0 版本移除了大量此类 API,包括用于去除字符串空格的 jQuery.trim、判断数组的 jQuery.isArray、解析 JSON 的 jQuery.parseJSON 等。

image.png

此外,一些仅供内部使用的数组方法(如 pushsortsplice)也从 jQuery 原型中移除。现在,开发者应直接使用原生的 JavaScript 方法来替代这些旧功能。

源码 迁移至 ES Modules

jQuery 的源码终于从旧式的 AMD 模块系统迁移到了 ES Modules。 这下 jQuery 能更丝滑地融入 Vite、Rollup 或 Webpack 等现代构建工具链。而且,在浏览器中可以通过模块化的方式直接加载和运行 jQuery,符合现代开发流程。

焦点事件顺序回归 W3C 标准

在很长一段时间里,不同浏览器对焦点事件(focus/blur/focusin/focusout)的触发顺序存在分歧。jQuery 曾为了统一行为而强制了一套自己的顺序。

现在,所有主流浏览器已达成一致,jQuery 4.0.0 决定不再进行人工干预,直接遵循 W3C 标准顺序,blur -> focusout -> focus -> focusin。这属于破坏性更新,如果现有项目严重依赖特定的事件触发顺序,升级时需格外注意。

更轻量的 Slim 版本

新的 Slim 版本(精简版)移除了 Deferreds 和 Callbacks 模块,体积进一步缩小(gzip 后减少约 8KB)。

由于现代浏览器(除 IE11 外)都已原生支持 Promise,大多数异步操作已不再需要 jQuery 的 Deferreds。如果是面向现代浏览器的项目,Slim 版本将是更优的选择。

快速上手体验

即使不为了新项目,仅仅为了情怀,很多人也想试试这个 4.0 版本。最快的方法就是通过 npm 安装 jquery@4.0.0 跑个 Demo,那一个稳定且配置好的 Node.js 环境必不可少。

如果你不想为了尝鲜就在本地折腾一堆 Node.js 配置,或者单纯觉得配环境很麻烦,可以试试 ServBay。它能一键把 Node.js 环境部署好,自动搞定路径配置和版本管理。

image.png

环境弄好后,直接在目录里运行 npm 命令拉取最新的 jQuery 就能直接玩,省时省力。

结语

jQuery 4.0.0 的发布证明了它并躺平,而是在努力适应现代 Web 标准,就像一个武林高手,闭关10年,出关后变得更强了。

无论是为了维护现有资产,还是为了在特定场景下快速开发,这个新版本都交出了一份合格的答卷。

最后,这个时代的眼泪还有多少用户知道?

一、

最近,我写了好几篇 AI 教程,就收到留言,要我谈谈我自己的 AI 编程。

今天就来分享我的 AI 编程,也就是大家说的"氛围编程"(vibe coding)。

声明一下,我只是 AI 初级用户,不是高手。除了不想藏私,更多是为了抛砖引玉,跟大家交流。

二、

平时,我很少用 AI 生成新项目。因为每次看 AI 产出的代码,我总觉得那是别人的代码,不是我的。

如果整个项目都用 AI 生成,潜意识里,我感觉不到那是自己的项目。我的习惯是,更愿意自己写新项目的主体代码。

我主要把 AI 用在别人的项目和历史遗留代码,这可以避免读懂他人代码的巨大时间成本。

就拿历史遗留代码为例,(1)很多时候没有足够的文档,也没有作者的说明,(2)技术栈和工具库都过时了,读懂代码还要翻找以前的标准,(3)最极端的情况下,只有构建产物,没有源代码,根本无法着手。

AI 简直就是这类代码的救星,再古老的代码,它都能读懂和修改,甚至还能对构建产物进行逆向工程。

下面就是我怎么用 AI 处理历史遗留代码,平时我基本就是这样来 AI 编程。

三、

我的 AI 编程工具是 Claude Code。因为命令行对我更方便,也容易跟其他工具集成。

我使用的 AI 模型,大部分时间是国产的 MiniMax M2。我测过它的功能,相当不错,能够满足需要,它的排名也很靠前。

另外,它有包月价(29元人民币),属于最便宜的编程模型之一,可以放心大量使用,反复试错。要是改用大家都趋之若鹜的 Claude 系列模型,20美元的 Pro 套餐不够用,200美元的 Max 套餐又太贵。

MiniMax 接入 Claude Code 的方法,参考我的这篇教程

四、

就在我写这篇文章的时候,MiniMax 本周进行了一次大升级,M2 模型升级到了 M2.1

因为跟自己相关,我特别关注这次升级。

根据官方的发布声明,这次升级特别加强了"多语言编程能力",对于常用编程语言(Rust、Java、Golang、C++、Kotlin、Objective-C、TypeScript、JavaScript 等)有专门强化。

它的 WebDev 与 AppDev 开发能力因此有大幅提升,可以用来开发复杂的 Web 应用和 Android/iOS 的原生 App。

"在软件工程相关场景的核心榜单上,MiniMax M2.1 相比于 M2 有了显著的提升,尤其是在多语言场景上,超过 Claude Sonnet 4.5 和 Gemini 3 Pro,并接近 Claude Opus 4.5。"

根据上面这段介绍,它的编程能力,超出或接近了国外旗舰模型。

这个模型已经上线了,现在就能用。那么,这篇文章正好测一下,官方的介绍是否准确,它的 Web 开发能力到底有没有变强。

至于价格,跟原来一样。但是,官方表示"响应速度显著提升,Token 消耗明显下降",也算变相降价了。

M2.1 接入 Claude Code,我的参数如下。

五、

我这次选择的历史遗留项目是 wechat-format,一个 Web 应用,将 Markdown 文本转为微信公众号的样式。

上图左侧的文本框输入 Markdown 文本,右侧立刻显示自动渲染的结果,可以直接复制到微信公众号的编辑器。

它非常好用,大家可以去试试看。我的公众号现在就用它做排版,效果不错(下图)。

问题是,原作者六年前就放弃了,这个项目不再更新了。我看过源码,它用的是老版本的 Vue.js 和 CodeMirror 编辑器,没有任何文档和说明,还经过了编译工具的处理,注释都删掉了。

如果不熟悉它的技术栈,想要修改这些代码是很困难的,可能要投入大量时间。

那么废话少说,直接让 AI 上场,把这些代码交给 MiniMax M2.1 模型。

六、

接手老项目的第一步,是对项目进行一个总体的了解。

我首先会让 AI 生成项目概述。大家可以跟着一起做,跟我的结果相对照。


# 克隆代码库
$ git clone [email protected]:ruanyf/wechat-format.git

# 进入项目目录
$ cd wechat-format

# 启动 Claude Code
$ claude-minimax

上面的claude-minimax是我的自定义命令,用来在 Claude Code 里面调用 MiniMax 模型(参见教程)。

输入"生成这个仓库的概述"。

AI 很快就给出了详细说明,包括项目的总体介绍、核心功能、技术栈和文件结构(下图)。

有了总体了解以后,我会让 AI 解释主要脚本文件的代码。

【提示词】解释 index.html 文件的代码

它会给出代码结构和页面布局(上图),然后是 JS 脚本加载顺序和 Vue 应用逻辑,甚至包括了流程图(下图),这可是我没想到的。

做完这一步,代码库的大致情况应该就相当了解了,而 AI 花费的时间不到一分钟。

七、

既然这个模型号称有"多语言编程能力",我就让它把项目语言从 JavaScript 改成 TypeScript。

对于很多老项目来说,这也是常见需求,难度不低。

它先制定了迁移计划,然后生成了 tsconfig.json 和 types.d.ts,并逐个将 JS 文件转为对应的 TS 文件(下图)。

修改完成后,它试着运行这个应用,发现有报错(下图),于是又逐个解决错误。

最终,迁移完成,它给出了任务总结(下图)。

我在浏览器运行这个应用,遇到了两个报错:CodeMirror 和 FuriganaMD 未定义。

我把报错信息提交给模型,它很快修改了代码,这次就顺利在浏览器跑起来了。

至此,这个多年前的 JavaScript 应用就成功改成了 TypeScript 应用,并且所有内部对象都有了完整的类型定义。

你还可以接着添加单元测试,这里就省略了。

八、

简单的测试就到此为止,我目前的 AI 编程大概就到这个程度,用 AI 来解释和修改代码。我也建议大家,以后遇到历史遗留代码,一律先交给 AI。

虽然这个测试比较简单,不足以考验 MiniMax M2.1 的能力上限,但如果人工来做上面这些事情,可能一个工作日还搞不定,但是它只需要十几分钟。

总体上,我对它的表现比较满意。大家都看到了,我的提示词很简单,就是一句话,但是它正确理解了意图,如果一次没有成功,最多再修改一两次就正确了。

而且,就像发布说明说的一样,它运行速度很快,思考过程和生成过程最多也就两三分钟,不像有的模型要等很久。

另外,不管什么操作,它都会给出详细的讲解和代码注释。

总之,就我测试的情况来看,这个模型的 Web 开发能力确实很不错,可以用于实际工作。

最后,说一点题外话。著名开发者 Simon Willison 最近说,评测大模型越来越困难,"我识别不出两个模型之间的实质性差异",因为主流的新模型都已经足够强大,足以解决常见任务,只有不断升级评测的难度,才能测出它们的强弱。

这意味着,对于普通程序员的常见编程任务,不同模型不会构成重大差异,没必要迷信国外的旗舰模型,国产模型就很好用。

(完)

一、

最近,我写了好几篇 AI 教程,就收到留言,要我谈谈我自己的 AI 编程。

今天就来分享我的 AI 编程,也就是大家说的"氛围编程"(vibe coding)。

声明一下,我只是 AI 初级用户,不是高手。除了不想藏私,更多是为了抛砖引玉,跟大家交流。

二、

平时,我很少用 AI 生成新项目。因为每次看 AI 产出的代码,我总觉得那是别人的代码,不是我的。

如果整个项目都用 AI 生成,潜意识里,我感觉不到那是自己的项目。我的习惯是,更愿意自己写新项目的主体代码。

我主要把 AI 用在别人的项目和历史遗留代码,这可以避免读懂他人代码的巨大时间成本。

就拿历史遗留代码为例,(1)很多时候没有足够的文档,也没有作者的说明,(2)技术栈和工具库都过时了,读懂代码还要翻找以前的标准,(3)最极端的情况下,只有构建产物,没有源代码,根本无法着手。

AI 简直就是这类代码的救星,再古老的代码,它都能读懂和修改,甚至还能对构建产物进行逆向工程。

下面就是我怎么用 AI 处理历史遗留代码,平时我基本就是这样来 AI 编程。

三、

我的 AI 编程工具是 Claude Code。因为命令行对我更方便,也容易跟其他工具集成。

我使用的 AI 模型,大部分时间是国产的 MiniMax M2。我测过它的功能,相当不错,能够满足需要,它的排名也很靠前。

另外,它有包月价(29元人民币),属于最便宜的编程模型之一,可以放心大量使用,反复试错。要是改用大家都趋之若鹜的 Claude 系列模型,20美元的 Pro 套餐不够用,200美元的 Max 套餐又太贵。

MiniMax 接入 Claude Code 的方法,参考我的这篇教程

四、

就在我写这篇文章的时候,MiniMax 本周进行了一次大升级,M2 模型升级到了 M2.1

因为跟自己相关,我特别关注这次升级。

根据官方的发布声明,这次升级特别加强了"多语言编程能力",对于常用编程语言(Rust、Java、Golang、C++、Kotlin、Objective-C、TypeScript、JavaScript 等)有专门强化。

它的 WebDev 与 AppDev 开发能力因此有大幅提升,可以用来开发复杂的 Web 应用和 Android/iOS 的原生 App。

"在软件工程相关场景的核心榜单上,MiniMax M2.1 相比于 M2 有了显著的提升,尤其是在多语言场景上,超过 Claude Sonnet 4.5 和 Gemini 3 Pro,并接近 Claude Opus 4.5。"

根据上面这段介绍,它的编程能力,超出或接近了国外旗舰模型。

这个模型已经上线了,现在就能用。那么,这篇文章正好测一下,官方的介绍是否准确,它的 Web 开发能力到底有没有变强。

至于价格,跟原来一样。但是,官方表示"响应速度显著提升,Token 消耗明显下降",也算变相降价了。

M2.1 接入 Claude Code,我的参数如下。

五、

我这次选择的历史遗留项目是 wechat-format,一个 Web 应用,将 Markdown 文本转为微信公众号的样式。

上图左侧的文本框输入 Markdown 文本,右侧立刻显示自动渲染的结果,可以直接复制到微信公众号的编辑器。

它非常好用,大家可以去试试看。我的公众号现在就用它做排版,效果不错(下图)。

问题是,原作者六年前就放弃了,这个项目不再更新了。我看过源码,它用的是老版本的 Vue.js 和 CodeMirror 编辑器,没有任何文档和说明,还经过了编译工具的处理,注释都删掉了。

如果不熟悉它的技术栈,想要修改这些代码是很困难的,可能要投入大量时间。

那么废话少说,直接让 AI 上场,把这些代码交给 MiniMax M2.1 模型。

六、

接手老项目的第一步,是对项目进行一个总体的了解。

我首先会让 AI 生成项目概述。大家可以跟着一起做,跟我的结果相对照。


# 克隆代码库
$ git clone [email protected]:ruanyf/wechat-format.git

# 进入项目目录
$ cd wechat-format

# 启动 Claude Code
$ claude-minimax

上面的claude-minimax是我的自定义命令,用来在 Claude Code 里面调用 MiniMax 模型(参见教程)。

输入"生成这个仓库的概述"。

AI 很快就给出了详细说明,包括项目的总体介绍、核心功能、技术栈和文件结构(下图)。

有了总体了解以后,我会让 AI 解释主要脚本文件的代码。

【提示词】解释 index.html 文件的代码

它会给出代码结构和页面布局(上图),然后是 JS 脚本加载顺序和 Vue 应用逻辑,甚至包括了流程图(下图),这可是我没想到的。

做完这一步,代码库的大致情况应该就相当了解了,而 AI 花费的时间不到一分钟。

七、

既然这个模型号称有"多语言编程能力",我就让它把项目语言从 JavaScript 改成 TypeScript。

对于很多老项目来说,这也是常见需求,难度不低。

它先制定了迁移计划,然后生成了 tsconfig.json 和 types.d.ts,并逐个将 JS 文件转为对应的 TS 文件(下图)。

修改完成后,它试着运行这个应用,发现有报错(下图),于是又逐个解决错误。

最终,迁移完成,它给出了任务总结(下图)。

我在浏览器运行这个应用,遇到了两个报错:CodeMirror 和 FuriganaMD 未定义。

我把报错信息提交给模型,它很快修改了代码,这次就顺利在浏览器跑起来了。

至此,这个多年前的 JavaScript 应用就成功改成了 TypeScript 应用,并且所有内部对象都有了完整的类型定义。

你还可以接着添加单元测试,这里就省略了。

八、

简单的测试就到此为止,我目前的 AI 编程大概就到这个程度,用 AI 来解释和修改代码。我也建议大家,以后遇到历史遗留代码,一律先交给 AI。

虽然这个测试比较简单,不足以考验 MiniMax M2.1 的能力上限,但如果人工来做上面这些事情,可能一个工作日还搞不定,但是它只需要十几分钟。

总体上,我对它的表现比较满意。大家都看到了,我的提示词很简单,就是一句话,但是它正确理解了意图,如果一次没有成功,最多再修改一两次就正确了。

而且,就像发布说明说的一样,它运行速度很快,思考过程和生成过程最多也就两三分钟,不像有的模型要等很久。

另外,不管什么操作,它都会给出详细的讲解和代码注释。

总之,就我测试的情况来看,这个模型的 Web 开发能力确实很不错,可以用于实际工作。

最后,说一点题外话。著名开发者 Simon Willison 最近说,评测大模型越来越困难,"我识别不出两个模型之间的实质性差异",因为主流的新模型都已经足够强大,足以解决常见任务,只有不断升级评测的难度,才能测出它们的强弱。

这意味着,对于普通程序员的常见编程任务,不同模型不会构成重大差异,没必要迷信国外的旗舰模型,国产模型就很好用。

(完)

前言

最近在优化网站访问链路的过程中,部署了一套 WAF 防火墙,它大部分功能都做的挺好,美中不足的地方就是针对于网站访客的相关功能需要付费( 3600 元/年)才能用。

付费是不可能付费的,找了一圈 nginx 日志分析的开源项目,大部分都做的挺简陋的,要么就是做的很重,需要部署其他服务。

既然找不到合适的,那就自己动手写一个吧!

如果看不到图片的话,直接访问我个人网站上发布的。https://www.kaisir.cn/post/186

实现效果

做了 4 个模块对日志数据进行分析。

  • 访问概况
  • 数据日报
  • 实时访问
  • 访问明细

image-20260108124900609

访问概况

概况模块中,做了 8 个维度的数据分析。

核心指标

在这个维度中,针对 http 状态码、浏览量、访客数、会话数做了更细致的划分。

image-20260108125517344

每一个划分中,在详情面板里,都可以看到这个访客在什么时间做了什么事情。

image-20260108125954027

image-20260108130323366

image-20260108130405011

image-20260108130452437

趋势分析 & 新老访客

这一部分可以看到每天的访问趋势以及当天与前一天的新老访客占比。

image-20260108130725966

来路、受访页、入口页

这部分可以看到访客的来源,以及每个路径的访问次数。

image-20260108131048943

地域 & 终端设备

这部分可以看到每个省份的访问情况以及访问设备的分布情况。

image-20260108131213706

数据日报

在这个模块中,可以看到每天的浏览量、访客数、平均访问时长等信息。

image-20260108134815067

image-20260108140538356

实时访问

在这个模块里,可以查看最近 5/15/30 分钟内的访问情况

image-20260108141207205

访问明细

这个模块就以表格的形式展示每一条日志。

image-20260108141436301

如何使用

为了方便使用,我已经将这个项目打包成镜像发布到 dockerhub 上了,镜像名为magiccoders/nginxpulse,可以通过 docker 的形式使用,也可以通过 docker compose 的形式使用。

需要传入的参数:

  • WEBSITES 它的值是个数组,一个对象就是一个网站,需要传入网站名、日志路径、网址(或者内网 ip ,主要用于站内/站外的区分)
  • ports 端口映射,容器内暴露出来的端口是 8088
  • volumes 文件挂载,这里需要挂载:日志文件、容器内产生的数据文件、时区

此处我以 docker compose 的形式举例:

version: "3"
services:
  nginxpulse:
    image: magiccoders/nginxpulse:latest
    container_name: local_nginxpulse
    ports:
      - "9200:8088"
    environment:
      WEBSITES: '[{"name":"神奇的程序员","logPath":"/var/log/nginx/access.log","domains":["kaisir.cn","www.kaisir.cn"]}]' #domains 用于“来源( referer )统计”的站内/站外分类
      PV_EXCLUDE_IPS: '["127.0.0.1", "::1", "10.10.0.1", "192.168.30.21"]' #pv 统计时需要排除的 ip
    volumes:
      - ./nginx_data/logs/all/access.log:/var/log/nginx/access.log
      - ./nginxpulse_data:/app/nginxpulse_data
      - /etc/localtime:/etc/localtime
    restart: unless-stopped

写在最后

至此,文章就分享完毕了。

我是神奇的程序员,一位前端开发工程师。

如果你对我感兴趣,请移步我的个人网站,进一步了解。

一、

最近,我写了好几篇 AI 教程,就收到留言,要我谈谈我自己的 AI 编程。

今天就来分享我的 AI 编程,也就是大家说的"氛围编程"(vibe coding)。

声明一下,我只是 AI 初级用户,不是高手。除了不想藏私,更多是为了抛砖引玉,跟大家交流。

二、

平时,我很少用 AI 生成新项目。因为每次看 AI 产出的代码,我总觉得那是别人的代码,不是我的。

如果整个项目都用 AI 生成,潜意识里,我感觉不到那是自己的项目。我的习惯是,更愿意自己写新项目的主体代码。

我主要把 AI 用在别人的项目和历史遗留代码,这可以避免读懂他人代码的巨大时间成本。

就拿历史遗留代码为例,(1)很多时候没有足够的文档,也没有作者的说明,(2)技术栈和工具库都过时了,读懂代码还要翻找以前的标准,(3)最极端的情况下,只有构建产物,没有源代码,根本无法着手。

AI 简直就是这类代码的救星,再古老的代码,它都能读懂和修改,甚至还能对构建产物进行逆向工程。

下面就是我怎么用 AI 处理历史遗留代码,平时我基本就是这样来 AI 编程。

三、

我的 AI 编程工具是 Claude Code。因为命令行对我更方便,也容易跟其他工具集成。

我使用的 AI 模型,大部分时间是国产的 MiniMax M2。我测过它的功能,相当不错,能够满足需要,它的排名也很靠前。

另外,它有包月价(29元人民币),属于最便宜的编程模型之一,可以放心大量使用,反复试错。要是改用大家都趋之若鹜的 Claude 系列模型,20美元的 Pro 套餐不够用,200美元的 Max 套餐又太贵。

MiniMax 接入 Claude Code 的方法,参考我的这篇教程

四、

就在我写这篇文章的时候,MiniMax 本周进行了一次大升级,M2 模型升级到了 M2.1

因为跟自己相关,我特别关注这次升级。

根据官方的发布声明,这次升级特别加强了"多语言编程能力",对于常用编程语言(Rust、Java、Golang、C++、Kotlin、Objective-C、TypeScript、JavaScript 等)有专门强化。

它的 WebDev 与 AppDev 开发能力因此有大幅提升,可以用来开发复杂的 Web 应用和 Android/iOS 的原生 App。

"在软件工程相关场景的核心榜单上,MiniMax M2.1 相比于 M2 有了显著的提升,尤其是在多语言场景上,超过 Claude Sonnet 4.5 和 Gemini 3 Pro,并接近 Claude Opus 4.5。"

根据上面这段介绍,它的编程能力,超出或接近了国外旗舰模型。

这个模型已经上线了,现在就能用。那么,这篇文章正好测一下,官方的介绍是否准确,它的 Web 开发能力到底有没有变强。

至于价格,跟原来一样。但是,官方表示"响应速度显著提升,Token 消耗明显下降",也算变相降价了。

M2.1 接入 Claude Code,我的参数如下。

五、

我这次选择的历史遗留项目是 wechat-format,一个 Web 应用,将 Markdown 文本转为微信公众号的样式。

上图左侧的文本框输入 Markdown 文本,右侧立刻显示自动渲染的结果,可以直接复制到微信公众号的编辑器。

它非常好用,大家可以去试试看。我的公众号现在就用它做排版,效果不错(下图)。

问题是,原作者六年前就放弃了,这个项目不再更新了。我看过源码,它用的是老版本的 Vue.js 和 CodeMirror 编辑器,没有任何文档和说明,还经过了编译工具的处理,注释都删掉了。

如果不熟悉它的技术栈,想要修改这些代码是很困难的,可能要投入大量时间。

那么废话少说,直接让 AI 上场,把这些代码交给 MiniMax M2.1 模型。

六、

接手老项目的第一步,是对项目进行一个总体的了解。

我首先会让 AI 生成项目概述。大家可以跟着一起做,跟我的结果相对照。


# 克隆代码库
$ git clone [email protected]:ruanyf/wechat-format.git

# 进入项目目录
$ cd wechat-format

# 启动 Claude Code
$ claude-minimax

上面的claude-minimax是我的自定义命令,用来在 Claude Code 里面调用 MiniMax 模型(参见教程)。

输入"生成这个仓库的概述"。

AI 很快就给出了详细说明,包括项目的总体介绍、核心功能、技术栈和文件结构(下图)。

有了总体了解以后,我会让 AI 解释主要脚本文件的代码。

【提示词】解释 index.html 文件的代码

它会给出代码结构和页面布局(上图),然后是 JS 脚本加载顺序和 Vue 应用逻辑,甚至包括了流程图(下图),这可是我没想到的。

做完这一步,代码库的大致情况应该就相当了解了,而 AI 花费的时间不到一分钟。

七、

既然这个模型号称有"多语言编程能力",我就让它把项目语言从 JavaScript 改成 TypeScript。

对于很多老项目来说,这也是常见需求,难度不低。

它先制定了迁移计划,然后生成了 tsconfig.json 和 types.d.ts,并逐个将 JS 文件转为对应的 TS 文件(下图)。

修改完成后,它试着运行这个应用,发现有报错(下图),于是又逐个解决错误。

最终,迁移完成,它给出了任务总结(下图)。

我在浏览器运行这个应用,遇到了两个报错:CodeMirror 和 FuriganaMD 未定义。

我把报错信息提交给模型,它很快修改了代码,这次就顺利在浏览器跑起来了。

至此,这个多年前的 JavaScript 应用就成功改成了 TypeScript 应用,并且所有内部对象都有了完整的类型定义。

你还可以接着添加单元测试,这里就省略了。

八、

简单的测试就到此为止,我目前的 AI 编程大概就到这个程度,用 AI 来解释和修改代码。我也建议大家,以后遇到历史遗留代码,一律先交给 AI。

虽然这个测试比较简单,不足以考验 MiniMax M2.1 的能力上限,但如果人工来做上面这些事情,可能一个工作日还搞不定,但是它只需要十几分钟。

总体上,我对它的表现比较满意。大家都看到了,我的提示词很简单,就是一句话,但是它正确理解了意图,如果一次没有成功,最多再修改一两次就正确了。

而且,就像发布说明说的一样,它运行速度很快,思考过程和生成过程最多也就两三分钟,不像有的模型要等很久。

另外,不管什么操作,它都会给出详细的讲解和代码注释。

总之,就我测试的情况来看,这个模型的 Web 开发能力确实很不错,可以用于实际工作。

最后,说一点题外话。著名开发者 Simon Willison 最近说,评测大模型越来越困难,"我识别不出两个模型之间的实质性差异",因为主流的新模型都已经足够强大,足以解决常见任务,只有不断升级评测的难度,才能测出它们的强弱。

这意味着,对于普通程序员的常见编程任务,不同模型不会构成重大差异,没必要迷信国外的旗舰模型,国产模型就很好用。

(完)

一、

最近,我写了好几篇 AI 教程,就收到留言,要我谈谈我自己的 AI 编程。

今天就来分享我的 AI 编程,也就是大家说的"氛围编程"(vibe coding)。

声明一下,我只是 AI 初级用户,不是高手。除了不想藏私,更多是为了抛砖引玉,跟大家交流。

二、

平时,我很少用 AI 生成新项目。因为每次看 AI 产出的代码,我总觉得那是别人的代码,不是我的。

如果整个项目都用 AI 生成,潜意识里,我感觉不到那是自己的项目。我的习惯是,更愿意自己写新项目的主体代码。

我主要把 AI 用在别人的项目和历史遗留代码,这可以避免读懂他人代码的巨大时间成本。

就拿历史遗留代码为例,(1)很多时候没有足够的文档,也没有作者的说明,(2)技术栈和工具库都过时了,读懂代码还要翻找以前的标准,(3)最极端的情况下,只有构建产物,没有源代码,根本无法着手。

AI 简直就是这类代码的救星,再古老的代码,它都能读懂和修改,甚至还能对构建产物进行逆向工程。

下面就是我怎么用 AI 处理历史遗留代码,平时我基本就是这样来 AI 编程。

三、

我的 AI 编程工具是 Claude Code。因为命令行对我更方便,也容易跟其他工具集成。

我使用的 AI 模型,大部分时间是国产的 MiniMax M2。我测过它的功能,相当不错,能够满足需要,它的排名也很靠前。

另外,它有包月价(29元人民币),属于最便宜的编程模型之一,可以放心大量使用,反复试错。要是改用大家都趋之若鹜的 Claude 系列模型,20美元的 Pro 套餐不够用,200美元的 Max 套餐又太贵。

MiniMax 接入 Claude Code 的方法,参考我的这篇教程

四、

就在我写这篇文章的时候,MiniMax 本周进行了一次大升级,M2 模型升级到了 M2.1

因为跟自己相关,我特别关注这次升级。

根据官方的发布声明,这次升级特别加强了"多语言编程能力",对于常用编程语言(Rust、Java、Golang、C++、Kotlin、Objective-C、TypeScript、JavaScript 等)有专门强化。

它的 WebDev 与 AppDev 开发能力因此有大幅提升,可以用来开发复杂的 Web 应用和 Android/iOS 的原生 App。

"在软件工程相关场景的核心榜单上,MiniMax M2.1 相比于 M2 有了显著的提升,尤其是在多语言场景上,超过 Claude Sonnet 4.5 和 Gemini 3 Pro,并接近 Claude Opus 4.5。"

根据上面这段介绍,它的编程能力,超出或接近了国外旗舰模型。

这个模型已经上线了,现在就能用。那么,这篇文章正好测一下,官方的介绍是否准确,它的 Web 开发能力到底有没有变强。

至于价格,跟原来一样。但是,官方表示"响应速度显著提升,Token 消耗明显下降",也算变相降价了。

M2.1 接入 Claude Code,我的参数如下。

五、

我这次选择的历史遗留项目是 wechat-format,一个 Web 应用,将 Markdown 文本转为微信公众号的样式。

上图左侧的文本框输入 Markdown 文本,右侧立刻显示自动渲染的结果,可以直接复制到微信公众号的编辑器。

它非常好用,大家可以去试试看。我的公众号现在就用它做排版,效果不错(下图)。

问题是,原作者六年前就放弃了,这个项目不再更新了。我看过源码,它用的是老版本的 Vue.js 和 CodeMirror 编辑器,没有任何文档和说明,还经过了编译工具的处理,注释都删掉了。

如果不熟悉它的技术栈,想要修改这些代码是很困难的,可能要投入大量时间。

那么废话少说,直接让 AI 上场,把这些代码交给 MiniMax M2.1 模型。

六、

接手老项目的第一步,是对项目进行一个总体的了解。

我首先会让 AI 生成项目概述。大家可以跟着一起做,跟我的结果相对照。


# 克隆代码库
$ git clone [email protected]:ruanyf/wechat-format.git

# 进入项目目录
$ cd wechat-format

# 启动 Claude Code
$ claude-minimax

上面的claude-minimax是我的自定义命令,用来在 Claude Code 里面调用 MiniMax 模型(参见教程)。

输入"生成这个仓库的概述"。

AI 很快就给出了详细说明,包括项目的总体介绍、核心功能、技术栈和文件结构(下图)。

有了总体了解以后,我会让 AI 解释主要脚本文件的代码。

【提示词】解释 index.html 文件的代码

它会给出代码结构和页面布局(上图),然后是 JS 脚本加载顺序和 Vue 应用逻辑,甚至包括了流程图(下图),这可是我没想到的。

做完这一步,代码库的大致情况应该就相当了解了,而 AI 花费的时间不到一分钟。

七、

既然这个模型号称有"多语言编程能力",我就让它把项目语言从 JavaScript 改成 TypeScript。

对于很多老项目来说,这也是常见需求,难度不低。

它先制定了迁移计划,然后生成了 tsconfig.json 和 types.d.ts,并逐个将 JS 文件转为对应的 TS 文件(下图)。

修改完成后,它试着运行这个应用,发现有报错(下图),于是又逐个解决错误。

最终,迁移完成,它给出了任务总结(下图)。

我在浏览器运行这个应用,遇到了两个报错:CodeMirror 和 FuriganaMD 未定义。

我把报错信息提交给模型,它很快修改了代码,这次就顺利在浏览器跑起来了。

至此,这个多年前的 JavaScript 应用就成功改成了 TypeScript 应用,并且所有内部对象都有了完整的类型定义。

你还可以接着添加单元测试,这里就省略了。

八、

简单的测试就到此为止,我目前的 AI 编程大概就到这个程度,用 AI 来解释和修改代码。我也建议大家,以后遇到历史遗留代码,一律先交给 AI。

虽然这个测试比较简单,不足以考验 MiniMax M2.1 的能力上限,但如果人工来做上面这些事情,可能一个工作日还搞不定,但是它只需要十几分钟。

总体上,我对它的表现比较满意。大家都看到了,我的提示词很简单,就是一句话,但是它正确理解了意图,如果一次没有成功,最多再修改一两次就正确了。

而且,就像发布说明说的一样,它运行速度很快,思考过程和生成过程最多也就两三分钟,不像有的模型要等很久。

另外,不管什么操作,它都会给出详细的讲解和代码注释。

总之,就我测试的情况来看,这个模型的 Web 开发能力确实很不错,可以用于实际工作。

最后,说一点题外话。著名开发者 Simon Willison 最近说,评测大模型越来越困难,"我识别不出两个模型之间的实质性差异",因为主流的新模型都已经足够强大,足以解决常见任务,只有不断升级评测的难度,才能测出它们的强弱。

这意味着,对于普通程序员的常见编程任务,不同模型不会构成重大差异,没必要迷信国外的旗舰模型,国产模型就很好用。

(完)

一、

最近,我写了好几篇 AI 教程,就收到留言,要我谈谈我自己的 AI 编程。


今天就来分享我的 AI 编程,也就是大家说的"氛围编程"(vibe coding)。

声明一下,我只是 AI 初级用户,不是高手。除了不想藏私,更多是为了抛砖引玉,跟大家交流。

二、

平时,我很少用 AI 生成新项目。因为每次看 AI 产出的代码,我总觉得那是别人的代码,不是我的。

如果整个项目都用 AI 生成,潜意识里,我感觉不到那是自己的项目。我的习惯是,更愿意自己写新项目的主体代码。

我主要把 AI 用在别人的项目和历史遗留代码,这可以避免读懂他人代码的巨大时间成本。

就拿历史遗留代码为例,(1)很多时候没有足够的文档,也没有作者的说明,(2)技术栈和工具库都过时了,读懂代码还要翻找以前的标准,(3)最极端的情况下,只有构建产物,没有源代码,根本无法着手。

AI 简直就是这类代码的救星,再古老的代码,它都能读懂和修改,甚至还能对构建产物进行逆向工程。

下面就是我怎么用 AI 处理历史遗留代码,平时我基本就是这样来 AI 编程。

三、

我的 AI 编程工具是 Claude Code。因为命令行对我更方便,也容易跟其他工具集成。

我使用的 AI 模型,大部分时间是国产的 MiniMax M2。我测过它的功能,相当不错,能够满足需要,它的排名也很靠前。

另外,它有包月价(29元人民币),属于最便宜的编程模型之一,可以放心大量使用,反复试错。要是改用大家都趋之若鹜的 Claude 系列模型,20美元的 Pro 套餐不够用,200美元的 Max 套餐又太贵。

MiniMax 接入 Claude Code 的方法,参考我的这篇教程

四、

就在我写这篇文章的时候,MiniMax 本周进行了一次大升级,M2 模型升级到了 M2.1

因为跟自己相关,我特别关注这次升级。

根据官方的发布声明,这次升级特别加强了"多语言编程能力",对于常用编程语言(Rust、Java、Golang、C++、Kotlin、Objective-C、TypeScript、JavaScript 等)有专门强化。

它的 WebDev 与 AppDev 开发能力因此有大幅提升,可以用来开发复杂的 Web 应用和 Android/iOS 的原生 App。

"在软件工程相关场景的核心榜单上,MiniMax M2.1 相比于 M2 有了显著的提升,尤其是在多语言场景上,超过 Claude Sonnet 4.5 和 Gemini 3 Pro,并接近 Claude Opus 4.5。"

根据上面这段介绍,它的编程能力,超出或接近了国外旗舰模型。

这个模型已经上线了,现在就能用。那么,这篇文章正好测一下,官方的介绍是否准确,它的 Web 开发能力到底有没有变强。

至于价格,跟原来一样。但是,官方表示"响应速度显著提升,Token 消耗明显下降",也算变相降价了。

M2.1 接入 Claude Code,我的参数如下。

五、

我这次选择的历史遗留项目是 wechat-format,一个 Web 应用,将 Markdown 文本转为微信公众号的样式。

上图左侧的文本框输入 Markdown 文本,右侧立刻显示自动渲染的结果,可以直接复制到微信公众号的编辑器。

它非常好用,大家可以去试试看。我的公众号现在就用它做排版,效果不错(下图)。

问题是,原作者六年前就放弃了,这个项目不再更新了。我看过源码,它用的是老版本的 Vue.js 和 CodeMirror 编辑器,没有任何文档和说明,还经过了编译工具的处理,注释都删掉了。

如果不熟悉它的技术栈,想要修改这些代码是很困难的,可能要投入大量时间。

那么废话少说,直接让 AI 上场,把这些代码交给 MiniMax M2.1 模型。

六、

接手老项目的第一步,是对项目进行一个总体的了解。

我首先会让 AI 生成项目概述。大家可以跟着一起做,跟我的结果相对照。


# 克隆代码库
$ git clone [email protected]:ruanyf/wechat-format.git

# 进入项目目录
$ cd wechat-format

# 启动 Claude Code
$ claude-minimax

上面的claude-minimax是我的自定义命令,用来在 Claude Code 里面调用 MiniMax 模型(参见教程)。

输入"生成这个仓库的概述"。

AI 很快就给出了详细说明,包括项目的总体介绍、核心功能、技术栈和文件结构(下图)。

有了总体了解以后,我会让 AI 解释主要脚本文件的代码。

【提示词】解释 index.html 文件的代码

它会给出代码结构和页面布局(上图),然后是 JS 脚本加载顺序和 Vue 应用逻辑,甚至包括了流程图(下图),这可是我没想到的。

做完这一步,代码库的大致情况应该就相当了解了,而 AI 花费的时间不到一分钟。

七、

既然这个模型号称有"多语言编程能力",我就让它把项目语言从 JavaScript 改成 TypeScript。

对于很多老项目来说,这也是常见需求,难度不低。

它先制定了迁移计划,然后生成了 tsconfig.json 和 types.d.ts,并逐个将 JS 文件转为对应的 TS 文件(下图)。

修改完成后,它试着运行这个应用,发现有报错(下图),于是又逐个解决错误。

最终,迁移完成,它给出了任务总结(下图)。

我在浏览器运行这个应用,遇到了两个报错:CodeMirror 和 FuriganaMD 未定义。

我把报错信息提交给模型,它很快修改了代码,这次就顺利在浏览器跑起来了。

至此,这个多年前的 JavaScript 应用就成功改成了 TypeScript 应用,并且所有内部对象都有了完整的类型定义。

你还可以接着添加单元测试,这里就省略了。

八、

简单的测试就到此为止,我目前的 AI 编程大概就到这个程度,用 AI 来解释和修改代码。我也建议大家,以后遇到历史遗留代码,一律先交给 AI。

虽然这个测试比较简单,不足以考验 MiniMax M2.1 的能力上限,但如果人工来做上面这些事情,可能一个工作日还搞不定,但是它只需要十几分钟。

总体上,我对它的表现比较满意。大家都看到了,我的提示词很简单,就是一句话,但是它正确理解了意图,如果一次没有成功,最多再修改一两次就正确了。

而且,就像发布说明说的一样,它运行速度很快,思考过程和生成过程最多也就两三分钟,不像有的模型要等很久。

另外,不管什么操作,它都会给出详细的讲解和代码注释。

总之,就我测试的情况来看,这个模型的 Web 开发能力确实很不错,可以用于实际工作。

最后,说一点题外话。著名开发者 Simon Willison 最近说,评测大模型越来越困难,"我识别不出两个模型之间的实质性差异",因为主流的新模型都已经足够强大,足以解决常见任务,只有不断升级评测的难度,才能测出它们的强弱。

这意味着,对于普通程序员的常见编程任务,不同模型不会构成重大差异,没必要迷信国外的旗舰模型,国产模型就很好用。

(完)