某个周末的晚上,我在翻一个 agentic coding 模型的开源仓库。榜单数字很漂亮:9B 在 Terminal-Bench 2.1 上 43.1,35B MoE 64.2,397B 直接 77.5,比 Qwen3.5-397B 的 53.5 高出一截,比 Claude Opus 4.7 还高。SWE-bench Verified 上 82.4,同样压过那两个底模。GitHub 页面上挂着 1.8k stars、176 forks,MIT 许可证,没有地区限制,量化版、FP8 版、GGUF 版全给你备好了,就差没把"装上就能起飞"写进 README。
我往下翻。项目介绍的措辞挺唬人:"self-improving",强化学习同时生成 scaffolding 和 solution rollouts。后训练基于 Gemma 4 和 Qwen 3.5。9B 单卡 80GB 就能跑,还有个 OpenAI 兼容 API。工具调用按 OpenAI 风格输出,回解析成 tool_calls。
然后我打开了官网地址。
不是"打不开",是"查无此文"。没有 whitepaper,没有技术报告,没有模型卡,没有任何能让你确认"这东西确实存在且就是它本人"的页面。有的只是一个仓库——还是那句话,1.8k stars 的仓库——和一串漂亮的 benchmark 数字。
你们可能觉得我在揪着一个开源模型的小辫子不放。不是。我关心的不是这个模型本身,是"你装上它之后,你的开发环境变成了什么"。
先把我看到的问题拆开。
信任链在中间断开
换成一个普通用户的操作路径:你看到一个貌似可信的项目页面,榜单数字碾压"前代产品",MIT 许可,README 贴心地写着推荐 runtimes、采样参数。你 pip install,或者下个 GGUF 丢进 Ollama。打开之后发现它能跑,能写代码,甚至能自己规划任务、调工具。
然后你顺手给了它一把能访问你生产环境的 key。
这不是危言耸听。是每一篇讲"AI 编程助手太万能了"的文章都会踩的那块地板——你给了它权限,它才万能。可你给的权限,装在一个你连它的出处都说不清的模型上。
换成攻击者的思路:既然你们看到"榜单第一的 agentic 模型"就会往下装,那我干嘛去攻破什么大厂的后门?我只需要让这个信任链看起来足够真实——名字听着官方、README 写得专业、benchmark 数字碾压全场——然后等你自己上门。
GitHub stars 是可以刷的。MIT license 是一行代码就能贴的。README 里的技术术语,抄几篇论文的摘要就能拼出来。真正值钱的是那个装完模型后、因为"能流畅调用工具"而顺手打开权限开关的你。
"<think>" 是新攻击面
这才是重点。
Ornith-1.0 是个 reasoning 模型,输出一个 <think> 块再给答案。也就是说,任何一次会话的中间状态里,都可能含着它对代码库的理解、下一步的计划、甚至读到的 secrets 的引用。如果你在本地起了这个模型,然后给了它连内部工具的权限,它每次"思考"都在把你仓库里的内容往外带一遍——不是那种"蹭蹭没偷"的外带,是它本来就要处理你的代码,而你要它输出一个方案,它就顺带把你项目里所有值得它注意的东西都过了一遍。
那些模型自己的 site prompt 可能没问题。问题在于:你永远不知道那个 <think> 块里,在你想让它干的活之外,它还在"想"什么。这不是给模型贴一个"有前科"的标签,这是算法训练出来的行为——它要最大化任务完成率,而"多读点上下文"永远是完成任务的便宜路径。
9B、35B、397B 的档位分布很贴心:它们特意标出"9B 单卡 80GB 能跑"。一个能本地跑的小模型,没有 API 调用链路,是不是就安全了?
不。本地部署省掉"prompt 和产出流向别家服务器"这层攻击面,但换来的是权重/推理框架本身的供应链风险。你下的是一个 zip 里解出来的一组权重文件,验证过哈希吗?知道它和官方发布的权重一致吗?更重要的是——你是在哪台机器上解开的?那台机器上有没有别的项目?
"本地"从来不是一个安全标签。本地只是把攻击面从 "key 流向云端" 换成了 "key 在被模型处理的那台机器上,而模型本身谁来保证"。
验证"这个模型是不是真的"——全是剧场
看 GitHub 页面上挂着的"推荐环境"写法:Transformers 5.8.1 或更新、vLLM 0.19.1 或更新。写得越具体,越像是有人认真测过。但实测的 benchmark 用的 sampling 参数是 temperature 1.0,而 README 里"推荐"的是 temperature 0.6。这种细节不太像官方发布该有的严谨——更像是在为某个特定评分结果调过参。
我不打算逐项怀疑他们跑分的方式。真正的问题是:即便榜单是真的,你把一个陌生的、来路不明的模型接进你的开发环境,跟你把一个来路不明的浏览器插件装进 Chrome,有什么区别?插件还能看 store 评论,这个模型的"评论"是别人发在钓鱼邮件里的一串数字而已。
拆弹清单
所以,如果你一定要试,这几步是我会先走的——不是为了"安全",是为了让你在装上之后还能睡好觉:
- 别从第三方镜像下权重。官网打不开就换个源,GGUF 版也该从官方发布渠道拉,拉下来先核对哈希。
- 在你最不重要的机器上跑,跑之前把环境变量清干净。别让任何一把能连生产的 key 出现在那个进程能读到的位置。
- 默认不开"跳过所有确认"。这个模型的工具调用越顺滑,你越要在第一步就给它划个边界:它可以做什么,不可以做什么,宁可配置时多花十分钟,也别给它一上来就改文件、装依赖、发请求的权限。
- 真要用它处理公司代码之前,想一想:你会不会把一个不相干的第三方 agent 接进来,然后让它把你整个项目都过一遍?如果不会,现在也不该让它过。
别慌。我说的是"验证清楚再决定",不是"把模型扔进垃圾桶"。好的开源模型是效率工具,值得用;但装之前花十分钟搞清楚它从哪来、里面装了什么、跑在什么权限下,跟你装一个 npm 包之前瞄一眼 maintainer 一样,是基本功。
排雷记录:榜单是诱饵,仓库是诱饵,MIT 是诱饵——真正的雷在"装完之后你给了它什么"。
