☰
Darwin Gödel Machine 配 TaoToken:自改进智能体开放式进化的 config.toml 骨架
2026/9/26 12:36:19 网站建设 项目流程

1. 当自改进智能体开始“自己改自己”,Key 通道先要稳住

Darwin Gödel Machine(达尔文·哥德尔机器,简称 DGM)是一类让编码智能体通过修改自身代码库来持续变强的系统。它把“自我修改”和“下游任务评估”交替执行:从智能体存档里挑一个父代,让它读自己的失败日志、提出改进点、改自己的代码,生成子代,再拿编码基准测一遍,能保留基本编辑能力的就进存档。适合谁?适合正在做 Self-Improving Agents、Open-Ended Evolution 实验,或者想把多模型调用统一到一个 Key/API 通道的开发者。

我关注 DGM 落地时踩到的第一个坑,其实不在算法,而在“调用通道”。DGM 一次完整运行动辄几十次迭代,每次迭代里父代诊断、子代生成、基准评估都要打模型接口。如果每个环节各写一套 base_url、各配一个 Key,日志里根本分不清哪次请求属于自我修改、哪次属于评估,排查起来非常痛苦。所以这篇给出一份可复制的config.toml骨架,把模型调用统一收敛到 TaoToken 的 API 通道,再附上验证动作:启动后检查自改进循环是否正常调用 API、日志里确认请求通道生效。

TaoToken 在这里的角色是统一 Key/API 通道:官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 入口 https://taotoken.net/api 。下面所有配置都围绕“一个通道、多模型、可追溯”来写。

2. 前置准备:把 TaoToken 通道接进 DGM 的调用层

DGM 的代码库通常把模型调用封装在一个 client 里,父代诊断、子代生成、评估打分都走这个 client。我们要做的不是改算法,而是把 client 的 base_url 和 api_key 指向 TaoToken,让所有请求经过同一通道。

先拿 Key。打开 API Keys 页面 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite ,创建一个项目级 Key。建议按用途分 Key:一个给“自我修改”阶段,一个给“基准评估”阶段,这样日志里能直接区分两类流量。创建后复制保存,后面写进config.toml。

接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,里面说明了兼容的请求格式。DGM 大多用 OpenAI 兼容的 chat completions 接口,所以 base_url 填https://taotoken.net/api即可,路径拼接交给 SDK。

这里有个容易忽略的点:DGM 的父代诊断模型和子代生成模型可能不是同一个。比如诊断用推理强的模型,生成用编码强的模型。TaoToken 通道支持在请求里指定不同 model 字段,所以config.toml里要留出“按角色分配模型”的位置,而不是全局写死一个模型名。

3. 可复制的 config.toml 骨架

下面这份骨架按 DGM 的三个调用角色分区:self_modify(自我修改)、evaluate(基准评估)、diagnose(失败日志诊断)。每个角色独立配置模型和 Key 别名,但都指向同一个 TaoToken 通道。

# config.toml —— Darwin Gödel Machine 调用通道骨架 [channel] # 统一 API 通道,所有角色共用 base_url = "https://taotoken.net/api" api_key_env = "TAOTOKEN_API_KEY" # 从环境变量读取,不硬编码 timeout_seconds = 120 max_retries = 3 [channel.headers] # 便于在服务端日志里区分 DGM 流量 X-Client = "dgm-self-improving-agent" [roles.self_modify] # 父代改自己代码库时使用 model = "claude-3-5-sonnet" temperature = 0.2 max_tokens = 8192 api_key_env = "TAOTOKEN_API_KEY_MODIFY" [roles.diagnose] # 分析失败评估日志、提出改进建议 model = "o3-mini" temperature = 0.0 max_tokens = 4096 api_key_env = "TAOTOKEN_API_KEY_DIAGNOSE" [roles.evaluate] # 基准评估阶段,跑 SWE-bench / Polyglot 子集 model = "claude-3-5-sonnet" temperature = 0.0 max_tokens = 4096 api_key_env = "TAOTOKEN_API_KEY_EVAL" [archive] # 智能体存档,开放式探索的核心 path = "./dgm_archive" keep_all = true # 保留所有具备编辑能力的智能体 select_by = ["score", "novelty"] [loop] max_iterations = 80 parallel_workers = 2 # SWE-bench 建议 2,Polyglot 可到 4 log_dir = "./logs/dgm" log_request_channel = true # 关键:日志记录每次请求走的通道

几个参数说明。api_key_env全部走环境变量,避免 Key 进版本库。log_request_channel = true是验证通道生效的关键开关,它会让 client 在每次请求后记录 base_url 和角色名。keep_all = true对应 DGM 的开放式探索——所有保留编辑能力的智能体都进存档,哪怕当前分数不高,因为它可能是未来的“垫脚石”。

环境变量这样设置:

export TAOTOKEN_API_KEY="你的项目级Key" export TAOTOKEN_API_KEY_MODIFY="自我修改专用Key" export TAOTOKEN_API_KEY_DIAGNOSE="诊断专用Key" export TAOTOKEN_API_KEY_EVAL="评估专用Key"

如果你只想用一个 Key 跑通,把三个api_key_env都指向TAOTOKEN_API_KEY即可,先验证链路,再按角色拆分。

4. 验证请求:确认自改进循环真的走了 TaoToken 通道

配置写完,先别急着跑 80 次迭代。用一个小循环验证通道。下面这段 Python 模拟 DGM 的一次“诊断→修改→评估”调用,确认三个角色都能通。

import os import toml from openai import OpenAI cfg = toml.load("config.toml") channel = cfg["channel"] def make_client(role): role_cfg = cfg["roles"][role] return OpenAI( base_url=channel["base_url"], api_key=os.environ[role_cfg["api_key_env"]], ), role_cfg def call(role, prompt): client, role_cfg = make_client(role) resp = client.chat.completions.create( model=role_cfg["model"], messages=[{"role": "user", "content": prompt}], temperature=role_cfg["temperature"], max_tokens=role_cfg["max_tokens"], ) return resp.choices[0].message.content # 模拟 DGM 一次迭代的三个调用 diag = call("diagnose", "分析这段失败日志,给出一个改进点:...") mod = call("self_modify", f"基于建议实现改进:{diag}") score = call("evaluate", "评估这个补丁是否通过测试:...") print("diagnose ok:", diag[:60]) print("self_modify ok:", mod[:60]) print("evaluate ok:", score[:60])

跑通后,去./logs/dgm看日志。你应该能看到类似这样的记录:

[2025-xx-xx 10:12:03] role=diagnose channel=https://taotoken.net/api model=o3-mini status=200 [2025-xx-xx 10:12:11] role=self_modify channel=https://taotoken.net/api model=claude-3-5-sonnet status=200 [2025-xx-xx 10:12:19] role=evaluate channel=https://taotoken.net/api model=claude-3-5-sonnet status=200

如果channel字段显示的是https://taotoken.net/api,说明请求通道生效。如果显示的是别的地址,检查 client 初始化时有没有被代码里硬编码的 base_url 覆盖。DGM 有些实现会在 client 内部再写一层默认地址,优先级高于config.toml,这是最常见的“配置没生效”原因。

再验证自改进循环本身。启动一次小规模运行:

python -m dgm.run --config config.toml --iterations 3 --benchmark swe-bench-mini

观察日志里是否出现完整的“选择父代→诊断→自我修改→评估→入存档”链路。正常输出会像:

[iter 1] selected parent=node_0 score=0.20 [iter 1] diagnose done, proposal=add_line_level_edit [iter 1] self_modify done, new_agent=node_1 [iter 1] evaluate done, score=0.24, archived=true

archived=true表示子代保留了编辑能力,进了存档。如果连续几次都是archived=false,说明自我修改把编辑工具改坏了,这时候要回看self_modify角色的输出,通常是提示词里没强调“必须保留文件编辑能力”。

5. 本篇常见错排查

报错一:401 Unauthorized,但 Key 明明是对的。先确认环境变量有没有被 shell 会话继承。export只在当前终端有效,如果你用nohup或 systemd 启动,要在对应配置里重新声明。另一个原因是 Key 别名写错,config.toml里api_key_env写的是变量名,不是 Key 本身,别把 Key 直接填进去。

报错二:请求超时,尤其self_modify角色。自我修改阶段要读整个代码库、生成大段补丁,max_tokens给太小会截断,给太大又容易超时。建议timeout_seconds设 120 以上,max_retries设 3。如果还是超时,把self_modify的模型换成响应更快的,或者把代码库分块喂给模型。

报错三:日志里channel字段为空。说明 client 没走config.toml的通道配置。检查 DGM 代码里创建 client 的地方,是不是有OpenAI(base_url="...")这样的硬编码。把它改成从config.toml读取。这是接入统一通道时最高频的问题。

报错四:评估分数一直不涨,存档里全是低分节点。这不一定是通道问题,但通道配置会影响它。如果evaluate角色和self_modify角色用了同一个 Key 但不同模型,确认模型名没写错。模型名写错时接口可能返回一个默认模型的结果,分数自然不对。另外检查keep_all = true是否生效,如果存档只留最高分,开放式探索就退化成爬山,DGM 论文里明确说这会变差。

报错五:并行迭代时日志串行混乱。parallel_workers大于 1 时,多个迭代同时写日志。给每个 worker 单独一个log_dir子目录,或者在日志行里加worker_id。TaoToken 通道本身支持并发,问题一般出在本地日志写入。

6. 把通道固定下来,再让智能体去进化

DGM 这类自改进系统的魅力在于,它会把“改进能力”本身也当成可优化的对象。但前提是每次调用的输入输出都可追溯,否则你根本不知道某一代变强是因为改对了工具,还是因为某次请求悄悄换了模型。把 Key/API 通道统一到 TaoToken 之后,config.toml里的角色分区让自我修改、诊断、评估三类流量各走各的 Key,日志里一眼能看出哪次请求属于哪个阶段。

如果你接下来要长期跑编码类 Agent,或者想让多个自改进循环共享同一套模型通道,可以看看 Coding Plan https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite ,它更适合持续性的编码调用场景。想先手动验证某个模型在诊断任务上的表现,用模型对话 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite 直接试。接入细节和参数对照都在接入文档 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 里,配置卡住时优先翻它。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询