关于 ask-many-models
Ask Many Models 是一项技能,可将提示词并行发送给多个 AI 模型,并综合回复形成分析。它会引导澄清和确认提示词,并要求用户先选择模型,再执行查询。
主要功能
- 01澄清并起草初始提示词
- 02建议可纳入的相关问题
- 03查询前提供模型选择
- 04并行查询选定模型
- 05综合回复生成统一分析
适用场景
- 01收集多个模型对问题的观点
- 02通过补充背景完善提示词
- 03比较模型对决策或评审的回复
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ hartreeworks/ skill--ask-many-models --skill ask-many-models安装后在 Claude Code 中输入/ask-many-models确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
.gitignore.env.examplepackage.jsonREADME.mdmodels.jsonconfig.example.jsontsconfig.jsonyarn.lockcommands/amm.mddata/user-defaults.example.jsonreferences/cli-reference.mdsynthesis-prompts.mdscripts/context.tsnotify.tsvalidate-keys.tssynthesis.tsresynthesise.tsmodels.tsdeep-research-query.tsquery.ts详细介绍
询问多个模型
将同一提示词并行发送给多个 AI 模型,并综合它们的回复,形成统一分析。
触发此技能时(通过 /amm 或自然语言),请执行以下步骤。不要只描述此技能的作用。
步骤 1:获取种子提示词
A)冷启动(对话刚开始,没有先前讨论): 如果用户提供了提示词或问题,就将其作为种子。否则询问:“你想发送给多个 AI 模型的问题是什么?”
B)对话进行中(此前已有实质性讨论): 将用户的调用消息作为种子,并将此前的对话作为背景信息。
种子确定后,继续执行步骤 1a。
步骤 1a:决定是否需要澄清
仅凭种子很少能写出最有力的提示词。简短的澄清问答通常能带来更好的结果——但对已经具体明确的提示词强行提问,只会增加阻碍。
如果符合以下任一条件,跳过问答,直接开始起草(步骤 1d):
- 用户明确表示“直接起草”“开始”“跳过问题”“不要提问”或类似意思。
- 种子已经足够长且具体(大约超过 300 个字符,并说明意图、受众和限制条件)。
- 对话进行中,且此前的讨论已经明确了意图。
只有这三种情况可以跳过。澄清和构思环节是此技能的关键,因此,笼统认为用户想继续推进——包括在自动模式下运行——并不能作为跳过的理由。
如果情况不明确,只问一次。如果可以使用 AskUserQuestion,就调用一次 AskUserQuestion,提出一个问题。如果无法使用,则输出:“我可以先问 2–3 个简短的澄清问题,也可以直接起草——你选哪种?(1)澄清(2)起草”,然后等待回复。
步骤 1b:明确意图(定制问答)
目标:找出这个问题背后真正的动机,以及什么样的回答会让人觉得有用。提出 2–4 个定制问题。切勿使用套话。
始终包含一个动机问题。 根据具体的种子问题拟定 3–4 个动机选项,再加一个“其他”自由文本字段。定制比面面俱到更重要——泛泛的动机选项还不如不问。
示例——对于类似 “我该重写某个邮件应用的引导流程吗?” 的种子问题:
- 决定是否要重写
- 对我已经在计划的重写方案进行压力测试
- 想出我尚未考虑过的方案
- 找出不该这么做的理由
对于类似 “解释 MCP 服务的工作原理” 的种子问题:
- 快速建立心智模型,便于快速浏览
- 深入理解,以便自己实现一个
- 与替代方案(插件、钩子)进行比较
- 向非技术人员解释
然后,根据问题类型再添加 1–2 个定制问题:
- 决策 → 决策标准(成本 / 速度 / 可逆性 / 选择余地)和时间范围。
- 解释说明 → 深度、受众、已有知识。
- 批评或评审 → 希望得到哪种质疑(唱反调 / 为替代方案辩护 / 侧重数据 / 发现风险)。
- 生成方案 → 约束范围(时间限制、预算、还涉及哪些人)。
- 预测或预判 → 时间范围,以及哪些情况会改变用户的看法。
不好的示例(套话——不要这样做):
- “背景是什么?”
- “受众是谁?”
- “回答要多长?”
好的示例(针对 “我该淘汰 Outlook 插件吗?”):
- 真正的驱动因素是什么?(4 个动机选项 + 其他)
- 哪个更重要:减轻维护负担,还是让用户群满意?
- 时间范围——接下来 3 个月,还是接下来 2 年?
提问方式:
当 AskUserQuestion 可用时(Claude Code),使用一次 AskUserQuestion 调用,包含全部 2–4 个问题。采用单选(multiSelect: false)。每个选项都要有一个简短标签和一行说明。每个问题只提供 3–4 个实际选项——运行时会自动添加“其他”自由文本字段。不要手动添加“其他”选项(这会使问题超过 4 个选项的上限)。
当 AskUserQuestion 不可用时(Codex 或其他运行环境),以编号列表形式列出问题。为每个问题明确添加“其他(自由填写)”选项,因为运行时不会自动添加。请用户每个问题回复一行。格式示例:
A few quick clarifying questions:
Q1 — What's really driving this?
1. Decide whether to do the rewrite at all
2. Stress-test a rewrite I'm already planning
3. Generate options I haven't considered
4. Find reasons NOT to do it
5. Other (type freely)
Q2 — Which matters more: cutting maintenance burden, or keeping the user base happy?
1. Cutting maintenance burden
2. Keeping the user base happy
3. Other (type freely)
Reply with one line per question, e.g.:
Q1: 2
Q2: 1
or use free text where Other applies, e.g. "Q1: I want to compare against alternatives I haven't thought of".
步骤 1c:构思延伸角度(相关角度)
澄清后,拟定 3–5 个种子问题未明确提出、但通常很有帮助的相关角度或子问题。每个选项都需要一行理由说明。
针对 “我该淘汰 Outlook 插件吗?” 的示例:
- “还可以问:要看到什么,我才会改变主意?”——找出观点更新的条件。
- “还可以问:无论如何,最主要的 3 个失败模式是什么?”——对称地分析风险。
- “换个角度:如果我今天才开始,会不会开发这个?”——厘清沉没成本。
- “还可以问:先验证这个假设的最低成本实验是什么?”——找出成本更低的替代方案。
以多选形式呈现。始终包含一个“都不选——只回答原始问题”选项。
当 AskUserQuestion 可用时,使用一次 AskUserQuestion 调用,并设置 multiSelect: true。
当 AskUserQuestion 不可用时,以编号列表形式列出选项,并要求用户用逗号分隔的数字回复(或回复“都不选”):
Adjacent angles I could bundle in (pick any, comma-separated, or "none"):
1. Also ask: what would I need to see to change my mind?
— surfaces update conditions, useful for forecasting decisions
2. Also ask: top 3 failure modes either way
— symmetric risk analysis
3. Reframe as: if I were starting today, would I build this?
— disentangles sunk cost from forward-looking value
4. Also ask: cheapest experiment to test the hypothesis first
— surfaces lower-cost alternatives
5. None
Reply with numbers (e.g. "1, 3") or "none".
如果用户选择都不选或跳过,也没关系——继续处理。
Step 1d:起草并批准提示词
起草一份全面的提示词。直接纳入 Step 1b 的回答:用它们填充草稿中的动机、标准、受众、深度和时间范围。根据 Step 1c 中选择和跳过的延伸问题,决定要将哪些子问题合并进去。
提示词应:
- 涵盖完整背景 —— 相关背景、约束和目标。
- 包含实质内容 —— 实际摘录、代码片段或数据,而不只是文件引用。
- 说明明确的动机 —— 从 Step 1b 的动机回答中提炼出一行明确表述:"我想做 X,因为 Y。"
- 清楚说明核心问题 —— 主要问题,以及 Step 1c 中合并的任何延伸问题。
- 注明约束或偏好 —— 深度、格式、受众、时间范围(根据 Step 1b 的回答提取)。
提示词起草检查清单:
- 背景信息(至少 2–4 个段落)
- 任何相关文件内容或代码(包含实际内容,而不是“参见附件”)
- 明确说明动机(摘自 Step 1b)
- 主要问题 + 合并的延伸问题(摘自 Step 1c)
- 约束/受众/时间范围(摘自 Step 1b)
- 有用的回复格式/深度
宁可提供更多背景,也不要少于所需。其他模型无法访问这段对话,它们只能看到提示词。看起来“太长”的提示词通常长度刚好。
使用 heredoc 将草稿保存到一个独一无二的文件名,以避免与并发会话冲突,并保留格式:
slug="$(date +%s)"
cat > "/tmp/amm-prompt-draft-$slug.md" <<'EOF'
<paste full prompt text here>
EOF
open "/tmp/amm-prompt-draft-$slug.md"
打开文件后,还要用 2–3 句话在线总结,让用户无需切换窗口即可反馈。
批准消息取决于已执行的步骤:
-
如果 Step 1b 和 Step 1c 都已执行,且用户至少选择了一个延伸问题:
"已起草。**已包含的延伸问题:**失败模式、成本最低的实验。**已跳过:**重新界定问题、改变主意的条件。如果你想修改,请告诉我;或者回复“go”继续。"
-
如果已执行 Step 1c,但用户选择了“none”:
"已根据你的澄清回答起草——未合并额外延伸问题。如果你想修改,请告诉我;或者回复“go”继续。"
-
如果 Step 1a 跳过了澄清:
"我已起草提示词。请检查并告诉我是否需要修改,或者回复“go”继续。"
Step 2:模型选择
始终显示模型选择菜单,并在运行任何查询前等待用户选择。绝不要假设用户想用哪些模型,即使用户提供了提示词文件路径或似乎想要快速回答。始终由用户选择。
通过运行命令来打印菜单——models.json 是唯一可信来源,切勿凭记忆转录选项:
cd "$HOME/.claude/skills/ask-many-models" && yarn query menu
向用户显示其输出并等待用户输入数字。此处不要使用 AskUserQuestion;它最多只能显示四个选项。
用户可以只输入数字(例如 1),也可以输入数字后跟 SYS(例如 1 SYS、2 sys)。解析数字以选择模型。如果存在 SYS(不区分大小写),则在确定模型后继续执行 Step 2b。
最后一个选项是选择单个模型。如果用户选择此项,则打印选择器并要求用户输入以逗号分隔的数字:
cd "$HOME/.claude/skills/ask-many-models" && yarn query menu --pick
根据该输出将用户输入的数字映射回模型 ID,并像上面一样检查是否包含 SYS。
步骤 2b:系统提示词(仅当用户输入了 SYS)
仅当用户在模型选择输入中包含 SYS 时才运行此步骤。否则跳至步骤 3。
- 检查已保存的提示词:查看
$HOME/.claude/skills/ask-many-models/data/system-prompts.json。如果文件不存在,则将已保存提示词列表视为空。 - 如果存在已保存的提示词,使用字母标签显示:
Saved system prompts:
A) Expert VC analyst — You are an experienced venture capital...
B) Devil's advocate — Challenge every assumption...
N) Write a new system prompt
Select (A/B/.../N):
- 如果用户选择了一个字母,则将对应已保存提示词的内容用作系统提示词。
- 如果用户选择 N,请让他们输入或粘贴系统提示词。然后询问他们是否要保存:
- 如果要保存,请询问名称,然后使用以下命令将其添加到
system-prompts.json:mkdir -p "$HOME/.claude/skills/ask-many-models/data" if [ ! -f "$HOME/.claude/skills/ask-many-models/data/system-prompts.json" ]; then printf '{"prompts":[]}\n' > "$HOME/.claude/skills/ask-many-models/data/system-prompts.json"; fi jq --arg name "<name>" --arg content "<content>" '.prompts += [{"name": $name, "content": $content}]' "$HOME/.claude/skills/ask-many-models/data/system-prompts.json" > /tmp/amm-sysprompts-tmp.json && mv /tmp/amm-sysprompts-tmp.json "$HOME/.claude/skills/ask-many-models/data/system-prompts.json"
- 如果要保存,请询问名称,然后使用以下命令将其添加到
- 将系统提示词保存到临时文件,并在步骤 4 中通过
--system-prompt <path>传入。
如果用户直接按 Enter(输入为空),则跳过,不使用系统提示词。
步骤 3:检查图片
如果对话中包含图片,将其保存到:
$HOME/.claude/skills/ask-many-models/data/model-outputs/image-TIMESTAMP.png
不支持视觉的模型只会收到文本提示词,以及一条说明已提供图片的备注。menu --pick 的输出会标记哪些模型支持图片。
步骤 4:运行查询
如果用户选择了预设,则传入预设名称;如果用户自行选择了模型,则传入明确的模型 ID。
不要使用 --synthesise 运行——综合结果会在步骤 4b 中通过会话内子 Agent 生成,这样使用的是操作者现有的计划额度,而不是按量计费的 Anthropic API:
cd "$HOME/.claude/skills/ask-many-models" && yarn query \
--preset "<preset-name>" \
--output-format both \
[--image "<path>"] \
[--system-prompt "<path>"] \
"<prompt>"
对于用户单独选择的模型集合,将 --preset 替换为 --models "<id1>,<id2>,..."。
脚本会打印自动生成的输出目录路径(data/model-outputs/<timestamp>-<slug>/),并写入 results.md、results.html、responses.json、prompt.md 和 individual/<model>.md 文件。
开始运行深度研究预设之前,请提醒用户所需时长——这些模型每个需要 10–20 分钟。
步骤 4b:在会话内综合结果(子 Agent)
从步骤 4 的标准输出中获取输出目录路径,然后启动一个通用子 Agent 来生成综合结果:
Agent tool with subagent_type: "general-purpose"
description: "Synthesise multi-model responses"
prompt: |
Read the following files and produce a synthesis of the model responses.
Prompt: <output-dir>/prompt.md
Individual model responses: <output-dir>/individual/*.md
(Skip any file whose content starts with "**Error:**" — that model failed.)
Produce an executive-depth synthesis with these sections, using British English
and sentence-case headings:
## Overview
(1 short paragraph — the core question and the shape of the answer.)
## Points of consensus
(Bullets — points where 2+ models agree, with [model] attribution tags.)
## Points of disagreement
(Bullets — contradictions with a short pros/cons. Tag each view with [model].)
## Unique insights
(Bullets — valuable points only one model raised. Tag with [model].)
## Confidence level
(One paragraph — how much to trust this synthesis and why.)
Write the synthesis to /tmp/amm-synthesis-<slug>.md and return only the file path.
Do NOT edit results.md, results.html, or any file in the output directory —
the orchestrator will handle insertion.
子 Agent 返回综合结果文件路径后,运行插入辅助程序:
cd "$HOME/.claude/skills/ask-many-models" && \
npx tsx scripts/resynthesise.ts "<output-dir>" --file "<synthesis-file>"
这会将综合结果插入 results.md 顶部(位于 # Multi-Model Query 元数据之后、首个模型部分之前),并重新生成 results.html。
备用方案——如果因任何原因需要通过 API 综合结果(无人值守运行,或会话内上下文卡住),省略 --file:
npx tsx scripts/resynthesise.ts "<output-dir>"
这会通过 Anthropic API 调用 Claude Opus 4.8,并消耗令牌。
步骤 5:打开结果
告知用户“正在查询:[models]”,然后打开结果文件。如果 data/user-defaults.json 存在,请检查其中的 open_preference:
"html"→open "<output-dir>/results.html""markdown"(或未设置)→open "<output-dir>/results.md"
资源
references/cli-reference.md— 完整的命令和选项参考、模型配置、API 密钥、输出结构、综合结果、深度研究和错误处理。models.json— 模型和预设的唯一事实来源。只需在其中添加模型;菜单会据此生成。