欢迎访问本站,持续更新中…

Ornith-1.0 开源:让模型自己改自己的代码

发布会演示我一般只信一半。

另一半呢,得等开发者社区开始吐槽以后才知道。真的,PPT 谁都会做,但实际跑一跑就露馅了。

所以当 deepreinforce-ai 团队发布 Ornith-1.0 的时候——一个号称"自我改进"的开源编码 Agent 模型——我的第一反应是:行吧,看看能跑成啥样。

结果还真有点东西。

Ornith-1.0 的核心理念说起来很简单:一般的大模型做 Agent 任务,是人给模型提需求,模型出代码,人再 review。但 Ornith 的不同之处在于——它自己会对自己生成的代码做质量评估,发现问题后,不用人介入,自己改。

坦白讲,我第一次看到这个介绍的时候,脑子里蹦出来的想法是:这不就是让运动员自己给自己当裁判么?

矛盾是吧?但吃过亏的人就懂。

模型自己生成的代码,它自己来 review——如果架构上没有约束,那不就变成"写了个 bug → 自己没发现 → 美滋滋打出日志 —— 上线炸了"的恶性循环吗?

但 Ornith-1.0 的做法不太一样。

它不是用同一个模型既生成又评估。它的架构里内置了一个独立的评估模块——不是简单的 "pass/fail",而是一个基于静态分析和单元测试的双层验证管道。模型生成的代码先过静态检查(类型、import、语法树),再自动跑单元测试。测试没过?模型自己定位错误、分析测试输出——然后改。

我拿它试了个 LeetCode Medium 级别的题:实现一个带过期时间的缓存。

第一次生成的代码里,expires_at 的比较方向写反了——明明应该 >= now 判定过期,它写成了 <= now。直接跑测试,挂了。然后我自己什么都没做的情况下——等了一会儿——模型自己定位到了问题,改了那一行,重新跑了一次。通过了。

说实话,我盯着屏幕愣了有一会儿。

Ornith-1.0 终端界面,显示多轮代码生成和测试执行的日志,红色失败的测试用例逐渐变为绿色通过,代码 diff 高亮显示

但别急着高潮。

我自己又测了几个更复杂的场景。比如,一个多线程环境下的任务调度器。这一回,Ornith 翻车了。模型生成的代码里有一个经典的竞态条件 —— 两个线程同时读取共享状态却没有锁保护。它自己的评估管道没抓出来,因为单次单元测试在非并发环境下绿得发亮。

你看,这就是问题。

Ornith 的自改进机制在单线程、确定性的场景下表现确实亮眼,但一旦涉及并发、时序、外部依赖这些"非确定性"的因素,它的自我评估就跟人的 code review 一样——会漏。

我原本以为这个"自我改进"的概念已经成熟到可以应付复杂场景了。后来发现,不行。至少目前还不行。Ornith-1.0 的评估器更多像是一个自动化 lint + 单元测试框架,而不是一个真正的"代码审查者"。它能抓 typo、能抓逻辑方向错误、能抓空指针——但要它理解竞态条件、死锁、或者分布式系统中的时序问题,门槛还是太高了。

不过话说回来,作为 1.0 版本,能做到这个程度已经很意外了。模型还是开源的——7B 参数,MIT 协议——直接就能在本地跑起来。对比闭源的 Cursor Agent 或者 Copilot,Ornith 提供了一个至少在架构上透明、可以自己修改的路径。喝了一口水继续看他们的技术文档——他们声称在 SWE-bench 上达到了 38% 的 pass rate,比同尺寸的开源模型高出不少。

这个数据怎么说呢?我反正不太在意数字。我关心的是:我真的能用它干活吗?

目前看,简单函数、纯逻辑、无外部依赖的场景,完全可以。写个 CSV 解析器?它改两轮就对了。但涉及多文件重构、复杂的类型泛化——它还是会跑偏。

一个程序员坐在电脑前,屏幕上同时显示着代码编辑器和测试运行输出,桌上散落着几页打印的技术资料,深夜台灯照明

最有意思的一点是 Ornith 的工作流跟现有的 Agent 框架不太一样。一般的 Agent 模型是"大模型 → 工具调用 → 执行",Ornith 多了"执行后评估 → 反馈到模型 → 再生成"这个闭环。在它的代码库里,我看到他们实现了一个基于 token-level 的反馈信号,把测试结果直接编码成了训练时的偏好信号。这个思路说实话挺巧妙的——等于是在推理时也用了类似 RLHF 的奖励信号。

谁在乎?反正我在乎。

因为这意味着 Ornith 的"自我改进"不是硬编码的 if-else 规则,而是真的让模型学会了"什么样的代码会通过测试,什么样的不会"。这是一个从数据驱动的自我修正,不是规则驱动的。

当然,还有一个现实问题:时间。

我让 Ornith 跑了一个带三四个文件的 Python 项目重构,前前后后花了大概 12 分钟——包括生成、测试、失败、再生成、再测试。我自己手动改的话,20 分钟吧。效率提升有,但没有宣传的那么夸张。

——对了还有一件事。Ornith 的自我改进机制在推理成本上其实挺高的。每次自改循环都要重新跑一次推理,如果一次生成就对了,那很好。但如果连续改三四次——一次 12 分钟就是这么来的。

还有一个让我比较在意的:Ornith 的评估偏向。因为它依赖的测试用例是模型自己生成的——你猜怎么着?模型倾向于生成自己已经能通过的测试。这就像老师出考卷,只出自己会做的题。我测了一个场景:让它生成一个解析 SQL 语句的函数,它写的测试用例全是"SELECT * FROM table"这种基础写法。我说那你测一下 JOIN、子查询、窗口函数呢?它又生成了一些——但测试覆盖率明显不够。不是不能改进,但需要人类介入去写更全面的测试用例。所以,目前 Ornith 的"自我改进"更像是一个"自我优化"——它在你已经写好的逻辑上不断打磨,但很难突破你自己设定的边界。

所以它的甜点区其实很明确:中等复杂度的单文件编码任务,刚好超过"随便写写就能过"但又不至于"架构性难题"的程度。

我觉得这才是开源 AI 编程工具的出路——不追求全面替代人类开发者,而是在特定场景下帮你省下那 20-30% 来回改 bug 的时间。

代码编辑器全屏显示,左侧是 Ornith-1.0 生成的代码,右侧是测试输出 — 全部绿色通过标志,键盘和鼠标在桌面上,显示实际工作场景

关于维基框架

维基框架(Wiki Framework)是一套面向复杂业务场景的轻量级开发框架,支持多语言、多协议、多部署形态。适用于企业级应用开发、微服务架构、云原生部署等场景。