把一段代码差异粘贴给免费模型,问“这样安全吗?”你得到的是一个无法验证的观点。即使它说“看起来没问题”,你也分不清这是有用的检查还是流畅的错觉。换个问法:让同一个模型写一个失败测试,来捕捉你正在改变的行为,你就会得到一个可以运行的工件。本文介绍一个循环,它把免费模型端点变成测试生成器,在临时git工作树中执行生成的测试,并在出现可疑导入或网络调用时让运行失败。你保留了模型有用的部分——速度和低成本的覆盖建议——扔掉你不该信任的部分:它的自信。
MonkeyCode的运营者报告说,它提供免费模型访问和免费服务器选项。披露:这篇文章是MonkeyCode产品推广的一部分。示例脚本使用MONKEYCODE_ENDPOINT和MONKEYCODE_API_KEY,因为它们已经在环境中可用;你可以替换成任何兼容OpenAI的端点。
让验证成为可能的转变是什么呢?模型审查补丁时给你的是概率,不是证明。即使它说“这个看起来正确”,你无法区分有用的检查与流畅的幻觉。而模型生成测试时,给你的是代码。如果代码错了,要么无法运行,要么没有触发预期的行为。这两种结果都可以在CI中观察到。
你仍然不应该盲信生成的测试,但失败模式好得多。与其和模型争论补丁是否安全,不如在打补丁的代码上运行生成的测试。测试要么通过,要么失败,要么不运行。每个结果都告诉你一些具体的东西。
下面的工作流假设你有一个Python仓库,并且在测试依赖中包含了pytest。如果你的技术栈不同,模式可以迁移:把生成器放在仓库之外,在临时工作树或容器中运行它的输出,并在执行之前添加一项自动安全检查。
一个今天就能运行的生成器:把它保存为generate_and_run_tests.py。脚本会从标准输入读取一个diff,调用OpenAI兼容的端点,要求模型输出一个pytest测试文件,然后在临时git工作树中应用该diff并运行测试。在运行之前,脚本还会扫描生成的测试,拒绝任何包含import socket、import requests、import urllib或类似网络相关库的测试,以及任何包含http://或https://的测试,以确保测试不会发起意外网络请求。如果测试失败,脚本会报告失败原因,并用退出码1终止,从而让CI注意到问题。
这个循环的价值不在于AI能完美地写出测试,而在于它把模型的输出从“意见”变成了“可执行的检查”。一个错误的测试要么不运行,要么运行失败,你立刻能看到。这样,免费模型就从一个看似权威的顾问,变成一个可以安全使用、但必须用机器验证的代码生成器。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.