Kimi K3 修Bug,越修越多!

我们之前已经拿 K3 测过很多前端项目,也曾基于一个不太好的结果反复迭代,提升到了一个比较好的效果。也尝试让它重构了一万行的单文件代码。

整体来说表现都还是不错的!

但是今天这个项目好像翻车了!

今天的主要测试内容是让它帮我修改一个真实的 Bug

我前段时间开发了一个图片生成和编辑软件,叫 JImage。软件中有一个模仿 QQ 截图的功能,遗留了一个截图错位的 Bug!

这个 Bug 稍微有点难度,之前 Opus 4.8 改了一轮没改出来,后来是让 Fable 5 给我改好的。

我就把没有修改之前的代码提取出来,直接让 Kimi K3 也来帮我改一次。

它刚开始做得还挺好的,但是改完 Bug 的时候引入了 3 个小问题。我就让它帮忙修复一下,然后就越改越乱了,最后兜不住了。

下面来看一下完整的过程!

核心需求

截图功能存在两个明显问题:覆盖层与桌面错位悬停自动选中窗口无效 。 要求分析实现方式并重构,做到「准确、完整、丝滑,接近 QQ 截图

这里最难最关键的就是要修复错位的问题。

我可以用上面的图片给大家演示一下:

比如黄色框就是整个屏幕,红色框就是截图软件选中的全屏。很明显,选中的区域和实际的屏幕区域有一个明显的错位。这次重点就是解决这个问题,让红色框跟黄色框重叠就可以了。

这个问题看起来很简单,但是由于 DPI、边框、阴影、自定义主题窗口、圆角这些因素的影响,导致 AI 无法简单判断边缘,所以就出现了一点点难度!这已经不单单是一个前端页面的问题了,而是和操作系统和窗口的机制息息相关。

说清楚了,我们就可以开始往下看了。

轮次 1:启动开发环境

我使用的技术方案是支持热更新的,所以为了方便观察,我先让它把开发环境的软件启动起来。

需求 :启动 JImage 的 dev

处理 :后台运行 pnpm tauri:dev

结果:启动成功,全程作为后续改动的热重载环境。

这一步是没有任何难度的,轻松搞定!

轮次 2:错位 + 窗口识别

启动之后,我们就进入正题了,解决我们的两个核心问题。

需求:修复错位与窗口自动识别,接近 QQ 截图。

分析:

markdown 复制代码
1. 错位根因:覆盖层用 `set_position + set_size(PhysicalSize)` 手动摆放,Windows 下与显示器物理矩形存在 DPI 取整/隐形边框偏差。

2. 识别失效根因:`collect_windows` 在覆盖层显示**之后**枚举,置顶全屏的覆盖层自身位于 z 序最顶,hover 永远先命中自己;且 xcap 矩形含 DWM 隐形边框(约 8px 偏移)。

处理

markdown 复制代码
- 覆盖层改 `set_fullscreen(true)`(后被证明不可靠,见轮次 5)。

- 窗口枚举改 Win32 `EnumWindows` + `DWMWA_EXTENDED_FRAME_BOUNDS`(可见框架,QQ 同款),
过滤不可见/cloaked/工具窗口,按进程排除自己;枚举时序移到覆盖层显示之前。

- 前端:物理→CSS 换算改用 `devicePixelRatio`;canvas 后备缓冲按截图物理尺寸分配;mousemove 改 `requestAnimationFrame` 合帧。

- `Cargo.toml` 新增 `windows` 依赖。

结果:编译通过。为后续轮次打下基础,但全屏方案埋了新问题。

这一轮整体表现还不错!原因分析和处理,说得头头是道,结果确实也有明显的改善。

全屏截图已经没有错位了,移动到某个窗口,自动用虚线框选中也 OK 了。 这个时候我已经开始感叹了,K3 果然有点东西啊,能一次定位和修改这两个点也是很厉害了。

但是,我发现了 3 个小问题,所以我再让它优化一下。

轮次 3:全屏实线框 + 取消时桌面抖动

上面说的三个小问题,主要就是全屏预选状态下没有任何标识,我要求它显示一个虚线框。另外一个问题是无法选中它自己。还有一个问题:当我点击选中某个区域,按 Esc 取消,窗口会抖动。

这一轮主要让它帮我解决这三个问题。

需求

①确认软件自身窗口是否排除;

②未悬停窗口时(默认全屏)应显示全屏实线框;

③Esc 取消时桌面会抖一下。

处理

①已按 PID 排除(后被轮次 7 改为主窗口可选)。

②hover 全屏时补画 2px 实线框(内缩 1px)。

③退出顺序从「先退全屏再隐藏」改为「先隐藏再退全屏」。

结果:实线框补上;抖动有所缓解(根子在轮次 4 进一步处理)。

这一轮整体来说解决得还可以,但是有一步会错了我的意。我问它为什么不能选中自己,而它却理解成了要排除自己。

就像我问他:"你为什么不能考个100分呢?",他特意给我考了个99分!

这理解能力,有点过分了啊!

刚开始,我都没看明白,我以为他改掉了,后来才发现这个问题还在。

除了解决上面几个问题之外,它突然引入了另外一个问题。当我按下截图快捷键之后,它突然出现了一个 1/4 屏幕的透明层。

这个不影响使用的,但是视觉上有影响,必须要修复!

轮次 4-6:1/4 半透明层

我就让它分析了这个透明层的问题。

需求:准备截图时左上角出现一个半透明小窗。

分析:预热窗口是停在屏幕外的 200×200 小窗,激活时「显示→全屏化」过渡瞬间小窗闪现在左上角。

处理 :预热窗口直接按主显示器尺寸创建并隐藏在主屏原位;取消时只 hide() 不退出全屏,覆盖层常驻全屏状态。

结果 :编译通过,但该方案依赖 set_fullscreen,问题未根除(见轮次 5)

它好像也没说自己不知道啊,说得头头是道的,我觉得也挺有道理的。但实际上,它并没有解决这个问题。而且这个问题持续了大概 3 轮对话才最终解决

解决之后呢,又突然引入了一堆新问题!把最初我要它改的这个问题又给整出来了,而且更严重。

轮次 7:边框问题再现

这一次出现了一大堆问题啊。最早是让它解决截图框和全屏框的错位问题。现在又出现了截图框比全屏框小的问题。只有顶部那条线是对齐的,左边、右边、下边都出现了空位。

更离谱的是,窗口自动选择的选择框也出现了问题。 很明显是大小和位置都不匹配了!

这就很难受了,到这一步,我感觉它已经脑子不太好使了。但是我还是想试着让它帮我改一下。

需求

①覆盖层边缘出现圆角,全屏框包不满桌面;

②窗口虚线框与软件边缘错位;

③JImage 主窗口无法选中

分析

①Win11 DWM 默认给所有顶层窗口削圆角,四角露出桌面。

DWMWA_EXTENDED_FRAME_BOUNDS 取径失败时回退 GetWindowRect(含 8px 隐形边框)会错位。

③此前按 PID 排除了整个进程。

处理

①覆盖层设 DWMWA_WINDOW_CORNER_PREFERENCE = DONOTROUND

②加逐窗口日志(标题/矩形/取径)+ 前端打印 CSS 矩形与 dpr,用于定位。

③改为只按 HWND 排除覆盖层自身,主窗口恢复可选。

结果

✅ 主窗口可选。

❌ 未解决:全屏选择时上下仍有空隙;窗口预选框偏移,下方和右侧有空隙(见下)。

从他的处理记录中可以看到,关于第2️⃣点,它是加了一个日志进行定位。也就是说,以他当前的认知和理解能力,已经无法直接定位这个问题了,必须要通过日志来定位。

以我的经验来讲,一旦到这个地步,后面解决这个问题就有点麻烦了。除了麻烦之外,重点是会消耗大量大量的 Token,这些 Token 本来都是不应该产生的。

鉴于这种情况,我不太想浪费时间了,所以我就让它停了,让它先帮我记录一下之前改的那些内容。让它记录完内容之后,我再死马当活马医,让它继续修这个 Bug。果不其然,它一直在某个陷阱里反复地徘徊,浪费 Token。

我看了一下它的上下文,大概才用了 14 万,按理说就这点东西,应该不会出现降智!那么可能遇到的只是它的盲区了。

因为这个代码本来就是 AI 写的,然后 AI 兜不住了,这个时候就会很无助了。你反复地跟它磨,是有可能走出这个困境的,但是会消耗巨多的 Token 和时间。

同样的问题,Claude 是两轮解决的! 一轮解决一个问题,没有反复!

所以辩证地看,Claude 家的模型可能才是真的性价比模型!

我们平时都在比说一次调用 Token 要多少钱,但现实中,关键点是:解决一个问题要多少钱。

那 Opus 可能一次就解决了,而另外一个模型很便宜,但是它需要 10 次才能解决。那最终算下来, Opus 更有性价比!

如果要 10 次才能解决,消耗的不光是 Token,还有你的时间和精力!如果每个问题都是差 10 次,那 10 个问题就差 100 次了。而这 10 个问题可能相互独立的,也可能是相互关联的。最终的差距就很难估算了。

都在说 K3 牛逼,这篇文章,就当是给大家降降温吧!

这个不是一个测试题目,而是一个实实在在的问题,不解决,功能就有缺陷,解决了,就可以安心搞其它功能了。

相关推荐
Litluecat1 小时前
2026年7月20日科技热点新闻
人工智能·科技·新闻·每日·速览
达达尼昂1 小时前
AI 编程的工程化实践:Flutter AI Harness 的设计与落地
人工智能·后端·全栈
廋到被风吹走1 小时前
【AI】从“卖能力“到“卖信任“,合规与安全成为新战场
人工智能·安全
蓝速科技2 小时前
蓝速科技 3D 全息舱展览馆落地实测:降噪算力与成像质量深度评测
人工智能·科技·3d
小小测试开发2 小时前
PromptFoo 源码分析与工程实战:LLM 测试框架的架构与最佳实践
人工智能·架构
IT_陈寒2 小时前
React的useEffect依赖项把我坑惨了
前端·人工智能·后端
dozenyaoyida2 小时前
AI与大模型新闻日报 | 2026-07-22
人工智能·搜索引擎·新闻·gpt-5.6·claude fable5
GeekArch2 小时前
第28讲:避坑——AI堆栈分配错误、栈溢出BUG
c语言·人工智能·stm32·mcu·学习·bug
ShallWeL3 小时前
【机器学习】(23)—— 神经网络入门
人工智能·神经网络·机器学习