词元之母TOK.MOM - 平台充值汇率 1:1 即 1 人民币充值到账 1 美元,支持一个 Key 调用近 600+ 海内外模型,限时特价模型低至 1 折,欢迎上岸!
| 来源 | 可选 — 通过 hermes skills install official/research/darwinian-evolver 安装 |
| 路径 | optional-skills/research/darwinian-evolver |
| 版本 | 0.1.0 |
| 作者 | Bihruze (Asahi0x), Hermes Agent |
| 许可证 | MIT |
| 平台 | linux, macos |
| 标签 | evolution, optimization, prompt-engineering, research |
| 相关 skill | arxiv, jupyter-live-kernel |
Problem 定义subprocess/uv rungit、uv(或 pip)OPENROUTER_API_KEY、ANTHROPIC_API_KEY 或 OPENAI_API_KEYparrot_openrouter.py 驱动脚本,通过 OpenAI SDK 使用 OPENROUTER_API_KEY,ANTHROPIC_API_KEY。terminal 工具运行:ANTHROPIC_API_KEY):/tmp/parrot_demo/snapshots/iteration_N.pkl —— 每次迭代的 pickle 序列化种群/tmp/parrot_demo/<jsonl> —— 每次迭代的 JSON 日志(路径在结束时打印)~/.hermes/cache/darwinian-evolver/darwinian_evolver/darwinian_evolver/lineage_visualizer.htmlscripts/parrot_openrouter.py —— 同样的 parrot 问题,但 LLM 调用通过scripts/show_snapshot.py 查看结果:Say {{ phrase }} 得分为 0.000)。templates/custom_problem_template.py —— 复制、编辑、运行。Organism —— 一个 Pydantic BaseModel 子类,持有被进化的制品(prompt_template: str、regex_pattern: str、sql_query: str、code_block: str 等)。添加一个 run(*args) 方法来执行它。Evaluator —— .evaluate(organism) -> EvaluationResult(score=..., trainable_failure_cases=[...], holdout_failure_cases=[...], is_viable=True)。score 在 [0, 1] 范围内,越高越好。trainable_failure_cases —— mutator 所看到的内容。包含足够的上下文(输入、期望值、实际值),以便 LLM 进行诊断。holdout_failure_cases —— 对 mutator 隐藏。用于检测过拟合。is_viable=True,除非 organism 完全损坏(抛出异常、返回 None 等)。得分为 0 的可行 organism 是可以的 —— 它只是在父代选择中权重较低。Mutator —— .mutate(organism, failure_cases, learning_log_entries) -> list[Organism]。Organism。解析失败时返回 [] —— 循环会处理这种情况。Problem(initial_organism, evaluator, [mutators]) 接入EvolveProblemLoop,并在 loop.run(num_iterations=N) 上迭代 —— 附带的scripts/parrot_openrouter.py 是参考实现。| 参数 | 默认值 | 何时调整 |
|---|---|---|
--num_iterations | 5 | 一旦信任 evaluator,调高至 10–20 |
--num_parents_per_iteration | 4 | 降至 2 以进行低成本探索 |
--mutator_concurrency | 10 | 降至 2–4 以避免速率限制 |
--evaluator_concurrency | 10 | 同上;evaluator 也会调用 LLM |
--batch_size | 1 | 一旦 mutator 能处理多个失败案例,调高至 3–5 |
--verify_mutations | 关闭 | 一旦 mutator 浪费严重时开启(据 Imbue,后续运行可节省 >10× 成本) |
--midpoint_score | p75 | 除非分数聚集,否则保持不变 |
--sharpness | 10 | 保持不变 |
Initial organism must be viable —— 即使种子得分为 0,也要在 EvaluationResult 中设置 is_viable=True。循环拒绝不可行的 organism,因为这意味着循环没有任何可进化的起点。try/except 中,并返回 f"<LLM_ERROR: {e}>" —— evolver 会将该 organism 评分为 0 并继续。loop.run() 是一个生成器 —— 调用它不会执行任何操作,直到你对其迭代。使用 for snap in loop.run(num_iterations=N):。iteration_N.pkl 包含一个带有 population_snapshot(更多 pickle 字节)的字典。要反序列化,必须让 Organism 类在与 pickle 时相同的点分路径下可导入。uv run darwinian_evolver <problem> 会查找 ANTHROPIC_API_KEY 并使用 Claude Sonnet。要使用其他提供商,请编写类似 parrot_openrouter.py 的驱动脚本。from darwinian_evolver import ...。~/.hermes/skills/... 下的自定义驱动脚本属于用户侧,没有问题。pip install darwinian-evolver 会安装错误的东西。始终从 GitHub 仓库安装。