0.5.3 · MIT 开源 · 本地运行零上传

给 Agent 工具层,
加一道质量门禁

工具和 skill 越装越多,模型开始选错、或者干脆不调用。mf 扫描工具定义,静态检查描述、参数与边界;安装时毫秒级门禁,需要证据时再跑真实模型评分卡。

安装门禁 · 毫秒级 静态检查 · 零模型调用 评分卡 · 可跨版本比较 干扰归因
mf · 终端
# 扫工具与 skill
$ npx -y modelfunction-cli@0.5.3 scan --root ./agent
✓ 12 tools · 3 skills · MCP stdio

# 静态体检:lint + 族边界 + 覆盖 + 挂载
$ mf audit --suite mf.suite.json
✓ 不调用模型 · 无网络 · 可转发报告
! 2 个族需要补选择边界

# 安装时门禁:一包新能力 × 已装能力
$ mf check --manifests pack.json --installed installed.json
warn gitcrawl × tag-duplicate-prs-issues
适配你已经在用的工具格式
function.json OpenAPI MCP stdio MCP HTTP SKILL.md Python @tool TS zod / TypeBox 运行时工具数组
问题

装得越多,边界越糊

模型不会告诉你“我分不清这两个工具”,它只会在用户面前选错,或者干脆不调用。

工具一多,选择就漂

新增工具或改描述后,原来选对的工具开始被别的工具抢走,等用户报错才发现。

skill 装进来了,模型就是不用

description 写得太泛或和已有能力重叠,模型只能靠字面猜,最后没人触发。

必填参数模型拿不到

会话 ID、租户 ID、任务 ID 只能由系统注入;模型不知道从哪来,可能直接放弃调用。

换模型靠感觉,改完没基线

想换更便宜的模型,却不知道 function calling 会不会退化;没有复核过的用例,复现全靠回忆。

怎么工作

先静态,后模型

安装路径上永远不调模型。静态检查零成本、毫秒级;真实模型只留给需要证据的评分卡。

01

扫出工具与 skill

读 function.json、OpenAPI、MCP 配置和 SKILL.md;需要时连 MCP server 拉真实 tools/list。

$ mf scan --root . --probe
✓ 12 tools · 3 skills
✓ mcp: filesystem (8)
02

静态体检与安装门禁

lint、覆盖、族内边界和挂载一次出报告;新能力可以和已装能力做增量门禁。

$ mf audit --suite mf.suite.json
✓ lint · boundaries · coverage
$ mf check --manifests pack.json
warn: 1 对互抢
03

需要证据时再跑评分卡

用你或编码 Agent 写的复核用例,跑选择、参数、通过率;换版本前 compare 一次。

select  92%
args    100%
pass    92%
p50     2.1s · ¥0.0009/次
能力

只做 Agent 工具这一层

不评测聊天、不做托管、不替你调用线上工具;把“选不选得到、填不填得对”测清楚。

工具与 skill 自动发现

function.json、OpenAPI、MCP(stdio / streamable HTTP)、SKILL.md、Python @tool、TS zod/TypeBox,或运行时导出的数组。

安装门禁 check()

新装一个或一包能力时,与已装能力做静态比较:混淆、必填来源、schema 错误。advisory 不阻断,纯静态毫秒级。

静态 lint 与 audit

描述、命名、必填、参数说明和工具对边界;skills 走同一套检查。重复规则自动合并,报告可直接转发。

多模型评分卡

选择准确率、参数准确率、通过率,加上延迟与单次成本;同一套用例横向比,不靠榜单拍脑袋。

跨版本可比

工具、用例、套件的内容指纹写进评分卡;定义变了就明确告诉你“不可直接比较”,不拿噪声当结论。

干扰归因

混淆矩阵告诉你“被谁抢走”;留一法 ablate 告诉你这个工具是干扰、帮助还是中性。

对比

不是又一个通用评测框架

手写脚本能跑,通用框架能调模型;但工具定义、安装门禁、可比性和干扰归因还得自己搭。

能力 手写脚本 通用 eval 框架 ModelFunction
工具 / skill 定义来源 手抄 手抄或导 JSON 自动扫描 function.json / OpenAPI / MCP / SKILL.md
安装时质量门禁 无 通常不在安装路径 check() / checkMany,纯静态、毫秒级
用例校验与复核 自己写 自己写 mf case add 校验 + 未复核不计分
能否跨版本比较 自己保证 需自己保证一致 内容指纹判定可比性
工具间干扰归因 无 需自己实现 混淆矩阵 + 留一法 ablate
数据去哪了 自己保管 多为云端 本地运行,零上传

基于 2026-11 公开资料与产品定位的简化对比,具体能力以各家为准。

FAQ

你可能想问

和 promptfoo / LangSmith 这些有什么区别?

通用评测框架解决“怎么调模型、怎么写断言”;mf 只解决 Agent 工具这一层:自动发现工具定义、按工具组织用例、算选择/参数/执行、比较版本、归因工具间干扰。安装门禁是现有框架之外的一道工具质量检查。

安装门禁会不会调模型、拖慢安装?

不会。check() / checkMany 是同步纯静态函数:不调模型、不联网、不读文件、不写状态。真实 100 个能力约 40ms;输入形状不对会直接报错,不会静默放过。

会不会上传我的代码、工具定义或 Key?

CLI 全本地运行,无遥测、无服务端地址。唯一出站是你配置的模型端点和你自己的 MCP server。评分卡会把用例输入与工具描述发给被测模型供应商——敏感数据请选境内供应商或本地模型;Key 只从环境变量或本地 credentials 读取。

支持哪些模型和工具格式?

模型:任何 OpenAI 兼容接口,内置 DeepSeek、Qwen、GLM、Kimi、硅基流动、Ollama 适配。工具:function.json、OpenAPI、MCP(stdio / streamable HTTP)、SKILL.md、Python @tool、TS zod/TypeBox,也支持运行时导出的工具数组。

用例谁写?能让 Claude Code 写吗?

可以。用例由你或你的编码 Agent 撰写,mf case add 会校验结构与覆盖,并默认标记“未复核”;未复核用例不计入正式分。写用例的规则模板在包内 skills/mf-cases/SKILL.md。

现在能用吗?怎么收费?

CLI 已发布到 npm,MIT 开源、本地免费:npx -y modelfunction-cli@0.5.3 --version。云端历史与团队基线尚未开放;内网平台如果需要私有部署或参考集成,直接发邮件聊。

试用 / 合作

拿你自己的工具集跑一次

我们最想看到的不是“功能列表是否完整”,而是你的真实工具集里有没有选错、有没有装了不用的 skill、有没有模型拿不到的必填参数。

  • 发工具清单或仓库路径,我们帮你看第一份报告
  • 内网平台:可以聊私有部署与安装链路接入
  • 不收集数据、不要求注册、不需要提供 Key

直接发邮件

附上工具数量、遇到的误选/不调用问题,或想要的检查方式即可。1–2 个工作日内回复。

hi@yunzerui.com 先去 npm 看看