ef22b3661a
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
8.2 KiB
8.2 KiB
提示词怎么写:调研结论
2026-10-03 第零轮两次真实测试后,监督者为改提示词派子 Agent 做了两次调研。一次查同类系统"让模型提出方向"那一步的提示词怎么写,一次查写得好的 skill 和系统提示词。这里只记结论和出处。
出处路径相对 /home/iomgaa/Projects/RivalBits/reference/(参考项目克隆的同类系统源码和论文),只读。参考项目自己早先的同类调研在 /home/iomgaa/Projects/RivalBits/research-wiki/reference/ 下:调研_提示词写作准则.md、调研_人写的提示词与skill.md、调研_skill写法范例与现状体检.md、调研_让研究者真正独立.md。
一、第零轮测出来的教训(本项目自己的证据)
| 问题 | 证据 | 改法 |
|---|---|---|
| 提示词里的例子会被照抄 | 写入口的提示词里唯一的"好例子",本身就是一条好路线(固定圆心求半径)。3 次运行 9 位研究者,第 1 个入口都照它写,连句式都一样 | 例子换成和题目无关的领域,而且给几个类型不同的 |
| 提示词泄露解法 | 研究者角色提示词和提案、挑刺、解释、收尾等任务提示词里,写满了参考项目跑填圆时的具体做法(线性规划、结构起点、扰动后重跑优化、多起点 SLSQP)。5 条关键想法泄露了 4 条 | 全部换成别的领域,或者写成和领域无关的抽象说法 |
| 唯一一个"没人站的路"的例子,会把所有人推到那条路上 | 讨论提示词举的是"没人去看评测",结果每次运行都有人写评测入口 | 只描述形状,不点名方向 |
| 去掉泄露和锚点后,模型自己想得到好方向 | 改提示词后,"联合优化"3 次都出现在入口里(改前 0 次) | — |
| 模型偏爱自己写的东西 | 6 次运行 18 位研究者,认领时都把自己写的入口排第一 | 记作现象;入口不约束后面的提案,暂不改方法 |
二、同类系统怎么写"提出方向"
- 例子一律用别的领域,或者不给。
- OpenEvolve、ShinkaEvolve、alpha-research 的格式示例都是矩阵乘法(
openevolve/openevolve/prompt/templates.py:48-60、ShinkaEvolve/shinka/prompts/prompts_diff.py:22-37)。 - CodeEvolve 用
exp函数,并写"Avoid Over-fitting … The goal is a new perspective"(codeevolve/src/codeevolve/prompt/template.py)。 - AlphaEvolve 的填圆提示只有题目、接口、判定和时限,没有方法提示和示例(
alphaevolve_repository_of_problems/.../packing_circles_max_sum_of_radii.ipynb第 11 个 cell)。 - AI-Scientist v1 把种子例子当作"你已经提过的"放进存档,例子变成了"别再重复"的清单(
AI-Scientist/ai_scientist/generate_ideas.py:19-23, 99-102)。 - 只写一句"别照抄例子"不够(
papers/AnchoringLLM-Lou_2412.06593.pdf:"Ignoring Anchor Hints … not sufficient")。
- OpenEvolve、ShinkaEvolve、alpha-research 的格式示例都是矩阵乘法(
- 先盘点有哪几类做法,再挑。
- EvoX 要求"span at least two distinct approach families. Don't anchor on one paradigm"(
skydiscover/.../evox/utils/variation_operator_generator.py:25-125)。 - AdaEvolve 先问"决策变量是什么、连续还是离散、彼此怎么依赖",再要求几个想法"DIFFERENT types, NOT variations of the same approach"(
skydiscover/.../adaevolve/paradigm/generator.py:361-403, 528-541)。 - DeepScientist 先发散 6–12 个,"If all surviving candidates belong to the same mechanism family, widen once"(
DeepScientist/src/skills/idea/SKILL.md:343-344)。 - 证据最强的是"先列一长串,再改得不一样"的分步写法(
papers/PromptingDiverseIdeas-Meincke_2402.01727.pdf)。 - 越线的反例:EvoX 那段写着"The FULL joint optimization over all these variables is the real problem",AdaEvolve 的示例写着"Use scipy.optimize.minimize with SLSQP"。这两处已经是在给答案,我们不能这样写。
- EvoX 要求"span at least two distinct approach families. Don't anchor on one paradigm"(
- 框定直接决定方法族。
- OpenEvolve 第一阶段要求"写显式构造,不要写迭代搜索",卡在 2.377;第二阶段改成"trying fundamentally different approaches"才到 2.634(
openevolve/examples/circle_packing/config_phase_1.yaml:24-34、config_phase_2.yaml:24-35)。
- OpenEvolve 第一阶段要求"写显式构造,不要写迭代搜索",卡在 2.377;第二阶段改成"trying fundamentally different approaches"才到 2.634(
- 几个人用同一个模型时怎么拉开。
- co-scientist 每次随机抽推理方式(第一性原理、类比、反事实……)(
open-coscientist-agents/.../reasoning_types.py:4-14)。 - ShinkaEvolve、ThetaEvolve 随机抽系统提示(
ShinkaEvolve/shinka/prompts/prompts_full.py:35-153)。 - DMAD 证明"给不同的推理方法"比"只换人设"有效(
papers/DMAD-BreakingMentalSet_ICLR2025.pdf)。 - 先闭门写能减少锚定(
papers/DiversityCollapseMAS-Ideation_2604.18005.pdf)。
- co-scientist 每次随机抽推理方式(第一性原理、类比、反事实……)(
三、写得好的 skill 和系统提示词的共同原则
- 先讲处境和目的,再讲要求。 说清这一步在做什么、交给谁读、做得好是什么样(
system_prompts_leaks/Anthropic/anthropic-interviewer.md:4-10;skills/skills/frontend-design/SKILL.md:9)。 - 讲为什么,讲对读者的后果。 模型能从解释里自己推到没写到的情形(
theory/anthropic_prompting-best-practices.md:69-85;system_prompts_leaks/Anthropic/claude-science.md:57)。 - 少用大写、"必须"和加粗(
skills/skills/skill-creator/SKILL.md:302:"If you find yourself writing ALWAYS or NEVER in all caps … that's a yellow flag")。 - 要发散,就点出"模型默认会走的路",不给目标答案。 点名时只写"默认是哪种形状",不写具体内容,否则被点名的内容会变成新的汇聚点(
skills/skills/frontend-design/SKILL.md:38-45, 53;theory/anthropic_prompting-best-practices.md:1069-1071)。 - 一个具体例子就是一个锚。 例子要么不给,要么给几个互相不同的(
theory/anthropic_prompting-best-practices.md:94;Interviewer:30:"enough information to set the scope … but not so much that you influence the responses")。 - 写法跟着失败的类型走。 判断类、"写成什么样"类的问题,用正面描述怎么做;只有"明知该做、有压力时偷懒"的纪律类问题,才用禁令和"红旗"念头表。禁令用在"写成什么样"的问题上反而更糟,也不要加"除非……"的例外从句(
superpowers/skills/writing-skills/SKILL.md:461-476)。 - "何时做 / 何时不做"成对写,并给默认值(
skills/skills/discernment-nudge/SKILL.md:72-78;superpowers/skills/brainstorming/SKILL.md:86)。 - "做不到、不知道"写成正常结果,说清谁接手(
superpowers/skills/subagent-driven-development/implementer-prompt.md:76-90)。 - 自由度和任务的脆弱程度相配。 开阔的判断任务给方向,窄桥式的任务给具体步骤(
papers/web/skills-best-practices.md:60-133)。 - 自查写成问题,放在动手之前或最后,不要求写出来(
skills/skills/frontend-design/SKILL.md:53)。 - 精简:只写模型不知道的;读真实运行的记录,删掉让模型白费力气的句子(
skills/skills/skill-creator/SKILL.md:300)。
四、放到本项目时要注意
- 角色模型是 glm-5.3,上面的结论大多是在 Claude 上测的。改完要用真实运行验证,不能只凭写法。
- 研究者子会话不加载 skill(
src/agents/session.ts会核对并拒绝)。所以正文的写法可以照搬,"描述写成何时触发""详见某文件、按需读"这类机制用不了。角色提示词每个任务都整份发,等价的按需加载只能由程序按任务挑内容。 - "现在交什么"由程序从 vocab 的字段说明生成(
src/materials/prompts.ts的closing)。字段怎么写放在 vocab 的字段说明里,任务提示词不再写一遍。 - 子会话里没有人可问。别人的"问用户、等批准"要改成"在提交里写明不确定的地方,或者不交并写清原因"。
- 不泄露解法:提示词里不出现任何任务的具体做法、具体数值或参考项目跑出来的具体经历。真实教训改写成不带领域细节的形状。检查办法:用这个任务的关键词搜一遍全部提示词(填圆的关键词:半径、圆心、线性规划、SLSQP、扰动、六角、布局、摆法、结构起点、compute_max_radii 等),搜不到才算过。