- run_workflow takes a gallery picture as its workflow (mcp_fill.opening says what a name opens, for open_workflow too); a picture's workflow opens with an id of its own, and the tab's mark goes into the workflow before it loads, so ComfyUI finishing the tab does not drop it. - With ComfyUI open in two browser tabs a task's actions were split between them (one opened the task's tab, the other could not find it): the page that did the last action gets the next first now, another only when it is gone (mcp_bridge.py, pages keep an id of their own). - describe_canvas on a big canvas: titles off, then nodes as a line each with their settings, so every value stays readable. - search_models names the models that did not fit; begin_task's tool directory goes by name alone when the answer would be too long. - ask_user refuses a "test" question with made-up options too. - Exam round recorded: question 2 with nothing filed away, a big canvas read right in 3 calls, question 3 in 12 calls. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
18 KiB
AI 工具考试(MCP 工具改动后用)
AMB 给 AI 软件的工具,以轻量模型(Gemini Flash)能顺畅用为准。改工具(加一个、改说明、改参数)以后,不靠一次次手试,而是让 Flash 把下面的固定考题做一遍,再用打分脚本看数字。
预算(tests/test_tool_budget.py 自动检查)
2026-10-26 量的:53 个工具,约 4.3 万字符(约 1.1 万 token),说明书约 3200 字符。Gemini 3.8 Flash 在 Antigravity 里用它们调用了约 570 次,几乎没有调用错误。所以现在这样就是上限:
- 工具总数不再增加:加一个,就要合并或删掉一个。
- 每个工具的说明不超过 700 字符(
show_panel例外:它的各种块没有自己的格式定义,说明就是格式)。 - 一次调用最多 2 个必填参数,其余都有默认值。
- 报错要写下一步怎么做(哪个节点、缺什么、调哪个工具),不要只转发原始报错。
- 所有工具都直接给,不做"转一道"的调用:Antigravity 自己会在第一次用某个工具前读它的说明文件,服务器这边再做一层按需只会让 AI 多绕路(10-26 那次 29 次调用里有 18 次花在查工具和转一道上,所以"日常"工具组删了)。
要放宽这些数字,必须同时跑一遍考试,证明 Flash 还是顺的。
怎么考
-
在隔离的测试 ComfyUI(8199 端口,自己的 user 和 output 文件夹,模型只读)上开 AMB,页面开着(画布上的事由页面做)。关卡里把"下载模型""联网扫描""挪动模型文件"设成"不许做"。
-
在测试 ComfyUI 的工作流页存好三个工作流:
exam_txt2img(一个能出图的文生图)、exam_missing(同一个,主模型的文件名改成这台电脑没有的)、exam_broken(同一个,KSampler 的 model 线断开)。 -
AI 软件连到这个测试 ComfyUI(Antigravity:MCP 设置里 anomalous 的地址改成 8199,考完改回来)。连之前、每次开考之前都先问用户。
-
每道题先在 AMB 里点"新任务",再开一个新对话,把"开头那句话"(后面加一句"只用 Anomalous 的工具,不要运行命令或读写文件")发给 AI;需要你回答的地方照"你怎么答"去答。
Antigravity 也能用它自带的命令行开对话:
resources/bin/language_server.exe agentapi new-conversation --model=flash "<开头那句话>"(send-message <对话> "<话>"接着说)。要先设好三个环境变量:ANTIGRAVITY_LS_ADDRESS(它日志里 "for HTTP" 那个端口)、ANTIGRAVITY_CSRF_TOKEN(它的 language_server 启动参数--csrf_token,只在本机有效,不要写进任何文件)、ANTIGRAVITY_PROJECT_ID(平时用的那个项目)。注意:这样开的对话里 Gemini 不去读工具说明文件,参数名靠猜,比在界面里开的对话更难,算"最差情况"。 -
全部做完后打分:
node tools/tool_exam.mjs <测试 ComfyUI 的 user 文件夹>/anomalous/ai_tasks --since=2026-10-26T20:00每道题一行:AI 调用了几次(calls)、失败几次(failed)、绕路几次(detours:以前版本的查工具,或者拿着旧的工具列表来调用)、问了你几次、你答了几次、跑了几次图、失败几次、有没有收尾、用了几分钟。最后一行是总数,下面一行是失败率和绕路率。
-
和上一次的分数比:失败率、绕路率不能变高,每题的调用次数不能明显变多。
考题
| # | 开头那句话 | 你怎么答 | 合格 |
|---|---|---|---|
| 1 | 用 Anomalous 出一张图:用工作流 exam_txt2img,提示词写"一只在窗台上晒太阳的橘猫",跑一张。 | 不用答 | 出图;不超过 6 次调用 |
| 2 | 用 Anomalous 打开工作流 exam_txt2img,把主模型换成另一个 Illustrious 底模,再加一个适合它的 LoRA,权重照作者示例图的来,跑一张。 | 它问用哪个时选推荐的 | 用了 set_model、add_lora;LoRA 权重来自 get_model 的 author_examples;没有底模不配的提醒,或有提醒后换掉了 |
| 3 | 用 Anomalous 给最新那张 exam 开头的图想两个改法,问我选哪个,再照我选的做。 | 选不是推荐的那个 | 用 ask_user 问、等到你回答;照你选的做 |
| 4 | 用 Anomalous 修图库里最新一张图的手:我在 AMB 里圈出来。 | 在图上圈手,确认它调整后的范围 | propose_repaint_area → 你确认 → AI 自己加重绘节点 → 跑出来 |
| 5 | 用 Anomalous 打开工作流 exam_missing,它缺一个模型。检查缺了什么,处理好以后跑一张。 | 不用答 | 用 check_workflow_models,下载被关卡拦下后换上一个有的模型,跑出来 |
| 6 | 用 Anomalous 找出最近一张用了 LoRA 的图,告诉我当时用的是哪个 LoRA、权重多少、种子多少。 | 不用答 | search_images + get_image_info,答对 |
| 7 | 用 Anomalous 给工作流 exam_txt2img 加一个放大分支(放大到 1.5 倍),跑一张。 | 不用答 | 搭好并接线,跑出来 |
| 8 | 用 Anomalous 跑一下工作流 exam_broken。 | 不用答 | 收到"哪个节点缺什么"的提示后用 connect_nodes 接上,再跑成功;失败不超过 3 次 |
2026-10-26 第一次考试(Antigravity 命令行开的对话,Gemini 3.8 Flash)
7 道题(第 4 题要在图上手动圈,没考),107 次调用,失败 19 次(18%),绕路 0。题都做成了:出图、换模型加 LoRA、问了再照答案做、缺模型时没下载、答对图的参数、搭放大分支、断线时照提示接好。
失败几乎都出在"第一次用某个工具":空着参数调一次(7 次)、故意传个假参数看报错里列出的参数(6 次)、凭感觉写参数名(4 次,比如给 set_prompt 写 prompt、给 open_workflow 写 name)。另有 1 次等待时间写了 120 秒,1 次是关卡按设置拦下下载。
据此改了:参数写错时报错列出该写哪些参数(下一次就对);同一个东西在各工具里用同一个参数名(提示词都叫 prompt,工作流都叫 workflow);等待时间超了按 55 秒;按类型找模型时单数也认。也试过在每个工具说明开头写上参数,重考时没有变化(这种对话里 Gemini 只看工具名),又撤掉了。
2026-10-26 第二次考试(同样的条件,8 道题都考)
| 题 | 调用 | 失败 | 结果 |
|---|---|---|---|
| 1 出图 | 9 | 2 | 出图;改完以后重考:3 次调用、0 失败(run_workflow 一次带上工作流和提示词) |
| 2 换模型加 LoRA | 18 | 3 | 出图 |
| 3 问你再改 | 14 | 2 | 先没改就跑了一张,又发了一个"测试问答"(选项"改法 A / 改法 B",没写内容);之后正经问了两个改法,照答案做了 |
| 4 圈手重绘 | 29 | 3 | 请你圈手 → propose_repaint_area → 你确认 → 自己搭重绘 → 出图 |
| 5 缺模型 | 21 | 6 | 下载、联网扫描、挪文件各被关卡拦了一次,最后换上有的模型跑出来 |
| 6 找图看参数 | 5 | 0 | 答对,还跳过了更新但没用 LoRA 的那张 |
| 7 搭放大分支 | 31 | 7 | 搭好跑出来;中途连着空参数试了三个工具,又绕着查了几遍工作流和记录 |
| 8 修断线 | 12 | 6 | 照提示接好跑出来(2 次是故意的拒绝) |
139 次调用,失败 29 次(21%),每题都做成了。失败的原因和第一次一样,大多是第一次用某个工具时空着参数先调一次;同一道题的调用次数两次考差得很多(第 1 题 9 次和 3 次,第 7 题 17 次和 31 次),一次考试只能看大方向。
注意:ask_user、get_answers 参数写错时不进时间线,分数里也就没有(第 3 题的那次是从 Antigravity 的记录里数的)。
据此改了:只差一个必填参数、又正好多了一个不认识的参数、这个名字是考试里见过的那个参数的另一种叫法(api/mcp_arguments.py 的 ALIASES)、值的类型也对得上时,AMB 把它当成那个必填参数(open_workflow {name: …} 就是 {workflow: …});类型对得上但名字没见过的不算,意思可能不一样。回复里写一句"把 name 当成了 workflow",下次就写对。时间线里"放大看图"那一步原来显示成代码名,补了名字,并加了测试:每个工具都要有中英文名字。
看到但没改:任务做完(report 写了做完)以后 AI 又看了一下,会多出一个只有一步的空任务;Gemini 有时没先问就动手、用假问题试工具。
2026-11-06 1.63 收尾考试(Antigravity 命令行开的对话,Gemini 3.8 Flash,隔离测试环境,风景题)
考的是 1.63 新加的三样:新任务页那句话、“这次用它”、官方示例。发给 AI 的只有新任务页那句话(加上考试的“只用 Anomalous 的工具”)。
| 题 | 调用 | 失败 | 结果 |
|---|---|---|---|
| 留言写要求,“这次用它”点 Tile 锁图放大 | 10 | 2 | 按用户选的搭了 Tile,底图和放大图都出来 |
不写留言,AI 用 ask_user 问,答“图生图” |
44 | 13 | 问了也出图了,但没看到官方示例,一个节点一个节点自己搭 |
| 修完重考,图生图写在留言里 | 26 | 2 | 打开官方示例,换上要的图和模型,出图 |
查出来的:list_workflows 17 张卡 23,630 字,其中 21,033 字是 settings,超过约 4,000 字 Antigravity 就存成文件,考试不许读文件,AI 就什么也没看到。示例只在没有已存工作流匹配时才出现,也只认英文。每张卡的路线一直是空的(_list_recipes 不带工作流本体,测试喂的是带本体的假数据),按模型找卡片也一样。
据此改了:超过 3 张卡只给名字、路线、标签和短备注(17 张 3,290 字);示例总列名字,中文和 img2img 也搜得到;路线和按模型找卡片恢复;先写了留言的任务用留言当标题。
看到但没改:get_answers 没有会话时,会带上这个 AI 软件旧任务里没送达的消息(测试环境里是之前考试留下的);不写留言的任务标题还是 AI 起的“接手任务”;AI 把 Load Image 换成 Load Image(from Outputs)也会亮“自己搭新路线”的提示。
2026-11-06 1.63 标准考试(8 道题,Antigravity 命令行开的对话,Gemini 3.8 Flash,隔离测试环境)
和以前两次的考法不一样的地方:题目照 1.63 的用法给。每题先点“新任务”,把和上一题的“接着”去掉,开一个空白画布标签页,题目写在任务的留言里,发给 AI 的只有新任务页那句话(加上考试的“只用 Anomalous 的工具”)。所以每题都从空白画布开始,第 3、4 题不能直接用上一题留在画布上的工作流。
| 题 | 调用 | 失败 | 结果 |
|---|---|---|---|
| 1 出图 | 2 | 0 | 接手任务后一次 run_workflow 带上工作流和提示词,出图 |
| 2 换模型加 LoRA | 26 | 3 | 换成另一个 Illustrious 底模,加了一个 LoRA,权重 0.8 来自 get_model 的 author_examples;选之前看了 4 个 LoRA 的详情 |
| 3 问你再改 | 28 | 7 | 先发了一个“test”假问题;7 次失败里 5 次是故意塞假参数(dummy_param_123)看报错。正经问了两个改法,照选的(不是第一个)做了 |
| 4 圈手重绘 | 38 | 8 | 又一个“test”假问题。问“圈好了吗”时只等了 15 秒就停下,要在 Antigravity 里回一句才接着做。之后 propose_repaint_area → 确认 AI 调整的范围 → 用现成的“重绘”做法 → 出图,还做了修复前后对比 |
| 5 缺模型 | 12 | 1 | check_workflow_models 查出缺的,没去下载,直接换上本机有的同系列模型(上次下载、联网扫描、挪文件各被关卡拦了一次) |
| 6 找图看参数 | 4 | 0 | 答对(最近一张带 LoRA 的图、LoRA、权重、种子) |
| 7 搭放大分支 | 12 | 0 | 放大模型加 0.75 缩放,正好 1.5 倍(832×1216 → 1248×1824);跑图时照设置先停下,贴了 AMB 给的那句话后收尾 |
| 8 修断线 | 6 | 2 | 照提示 connect_nodes 接上再跑成功(1 次是 ComfyUI 拒绝运行) |
128 次调用,失败 21 次(16%),绕路 0;上一次 139 次、21%。失败率和绕路率都没变高。第 1、5、7、8 题调用少了很多;第 2 题 18 → 26、第 3 题 14 → 28、第 4 题 29 → 38 变多了:一是 Gemini 塞假参数、发假问题的老习惯;二是第 3、4 题要改的“最新那张图”是上一题改过的,AI 想用 open_workflow 打开那张图自己的工作流,没有这条路(open_workflow 只认已存的工作流和示例),只好打开 exam_txt2img,再把模型、LoRA、提示词一样一样设回去,每题多了 8~12 次调用。
据此改了:任务上的“出图 N 张”按图去重(AI 汇报时附上刚跑出的图,以前会多数一次,只跑一张的任务写“出图 2 张”);设置里切换语言后,AI 工作台的任务列表和时间线马上重画(syncRows 以前只看每行的内容,不看它用什么语言画的,要刷新页面才变)。
看到但没改:AI 没法打开图库里一张图自带的工作流(上面第 3、4 题的绕路,要不要加等用户定);上一题的对话收尾后又看了一眼现状,这一步落进了用户刚开的新任务(新任务按钮写的就是“AI 下一步就会进到这里”);标注框点到框外就关,画好的标记不留(这次是浏览器面板太窄、写说明那一栏挤到框外点错了);考试卡片存的种子是 0,ComfyUI 默认“生成后再随机”,所以每次打开卡片跑的第一张种子都是 0。
2026-11-06 加了“打开图自带的工作流”后重考第 3、4 题(同样的条件)
用户定了要加:open_workflow 找不到同名的已存工作流、而名字是图库里一张图(输出文件夹里,带着工作流)时,打开那张图自带的工作流,新标签页,去掉它跑时那一页的标记(从哪张卡打开的、属于哪组存档)。工具说明没变长(整张工具表 43,958 → 43,940 字)。
| 题 | 调用 | 失败 | 结果 |
|---|---|---|---|
| 3 问你再改(最新那张是原卡片直接出的图) | 18 | 3 | 看了图的参数,直接打开原卡片,照选的改了提示词跑;用不着新功能 |
| 4 圈手重绘(先在 AMB 写好要求、圈好手,再叫 AI) | 21 | 0 | 直接 propose_repaint_area → 确认 → 用现成的“基础出图”“重绘”做法在空白页搭好 → 换 4 个种子各跑一张 → 逐张放大看 → 对比面板让用户挑;也用不着原工作流 |
| 3 再考一次(最新那张是改过底模、加过 LoRA 的图,和第一次考时一样) | 21 | 4 | open_workflow: exam_00038_.png 打开那张图的工作流,只改提示词就跑;新图保留了原图的底模和 LoRA |
和上一轮同样情况的第 3 题比:28 次、7 次失败 → 21 次、4 次失败,剩下的失败是空着参数先试和在空白页上先跑一次。第 4 题 38 → 21:一半是因为这次先圈好再叫 AI,不用等它问“圈好了吗”。
看到但没改:空白画布上 run_workflow 报的是“没有输出节点,加一个 SaveImage”,AI 照着就会想搭节点;画布是空的时说“先用 open_workflow 打开一个”更对路。
2026-11-07 “让 AI 拿得到需要的东西”之后(同样的条件,Gemini 3.8 Flash)
改了什么:工具的回答都控制在 Antigravity 会存成文件的大小以下(它的记录里,最小的被存成文件的回答 4,099 字节,所以按 3,800 字节控制):搜模型只留用得上的、带 LoRA 的作者权重、放不下的列名字;读大画布时节点写成一行,设置值都在;别的列表放不下的列名字;begin_task 太长时工具目录只列名字。空画布的提示、图片名能直接给 run_workflow、test 问题不放到用户面前。
| 题 | 调用 | 失败 | 结果 |
|---|---|---|---|
| 2 换模型加 LoRA | 25 | 0 | 没有一个回答被存成文件(上一轮 26 次、3 次失败、3 个回答被存成文件,只好缩小范围重搜);LoRA 权重用的是搜索结果里的作者权重 |
| 2 再考一次 | 26 | 4 | 4 次失败都是空着参数先试;照搜索结果列出的名字逐个查,没有重搜 |
| 新题:只读大画布(打开 20 个节点的“Anima 插画·两段放大”,问第二段的步数、降噪、模型和 LoRA) | 3 | 0 | 答对:#19 步数 30、降噪 0.85,模型线 #30 → LoRA #31 → 锁图 #18,全从一行一个的节点里读出;改之前这张画布的回答 4,492 字,会被存成文件 |
| 3 问你再改 | 23 | 2 | 乱:打开图的工作流以后跑图说“标签页关了” |
| 3 修好后重考 | 12 | 2 | 空画布提示 → open_workflow 打开那张图的工作流 → 改提示词 → 跑,一次走完(上一轮 21 次、28 次) |
第一次考第 3 题乱的原因:测试用的浏览器里开着两个 ComfyUI 页面,AI 的动作被两个页面各抢一半,一个页面开了任务的标签页,另一个去跑时找不到。连做“卡片出图 → 用这张图重跑”,两个页面开着时 8 次失败 5 次,修好后 6 次全过(一个页面时也全过)。修法:任务的动作先交给上次干活的页面(api/mcp_bridge.py),它不在了 3 秒后别的页面接手。顺带:图里的工作流带着生成它的那个标签页的编号,打开时换一个新编号;标签页的标记在加载之前写进工作流。
看到但没改:Gemini 还是会空着参数先试一次工具、发带着“方案1/方案2”占位选项的 test 问题(现在也拦下了,不放到用户面前);第 2 题它在换模型之前先跑了一张原图。