Files
DemonGatanjieu-Anomalous_Mo…/docs/architecture/tool-exam.md
T
DemonGatanjieuandClaude Opus 5.5 46eca1b594 Run a picture's own workflow, keep a task on one page, read a big canvas whole
- 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>
2026-11-07 01:16:17 +08:00

18 KiB
Raw Blame History

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 还是顺的。

怎么考

  1. 在隔离的测试 ComfyUI(8199 端口,自己的 user 和 output 文件夹,模型只读)上开 AMB,页面开着(画布上的事由页面做)。关卡里把"下载模型""联网扫描""挪动模型文件"设成"不许做"。

  2. 在测试 ComfyUI 的工作流页存好三个工作流:exam_txt2img(一个能出图的文生图)、exam_missing(同一个,主模型的文件名改成这台电脑没有的)、exam_broken(同一个,KSampler 的 model 线断开)。

  3. AI 软件连到这个测试 ComfyUI(Antigravity:MCP 设置里 anomalous 的地址改成 8199,考完改回来)。连之前、每次开考之前都先问用户。

  4. 每道题先在 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 不去读工具说明文件,参数名靠猜,比在界面里开的对话更难,算"最差情况"。

  5. 全部做完后打分:

    node tools/tool_exam.mjs <测试 ComfyUI 的 user 文件夹>/anomalous/ai_tasks --since=2026-10-26T20:00
    

    每道题一行:AI 调用了几次(calls)、失败几次(failed)、绕路几次(detours:以前版本的查工具,或者拿着旧的工具列表来调用)、问了你几次、你答了几次、跑了几次图、失败几次、有没有收尾、用了几分钟。最后一行是总数,下面一行是失败率和绕路率。

  6. 和上一次的分数比:失败率、绕路率不能变高,每题的调用次数不能明显变多。

考题

# 开头那句话 你怎么答 合格
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 题它在换模型之前先跑了一张原图。