从 .env.example 到最小闭环:AHE 的 LLM_API_KEY 与 LLM_BASE_URL 到底怎么填
AHE(Agentic Harness Engineering)跑实验前,第一步就是复制 .env.example 为 .env,然后填 LLM_API_KEY 和 LLM_BASE_URL。这一步没配对,Code Agent 和 Agent Debugger 调模型时会直接断在认证环节,后面的 trace、analysis、change_manifest 全都无从谈起。本文就围绕这个排障槽展开:用 TaoToken 创建一把 Key,把 .env 里的两个变量填对,让 AHE 的最小闭环先跑起来。TaoToken 只提供 Key 和兼容 Base URL,AHE 的 Evolve Agent 依然负责读 trace、改 middleware 和回滚,两者职责不重叠。
一、原问题与场景:AHE 卡在 LLM API 认证
AHE 的仓库结构里,agents/code_agent_simple/ 是 seed coding agent,agents/evolve_agent/ 是负责改 harness 文件的演化 agent,evolve.py 编排整个评测、诊断、修改、验证、回滚流程。这条链路里有两个角色会直接调模型:
- Code Agent:在 benchmark 上执行 coding task,需要 LLM 完成推理和工具调用。
- Agent Debugger:读取 Code Agent 的 trace,把长轨迹压缩成可读的失败报告,同样需要 LLM。
这两个角色都从环境变量里读模型配置。AHE 的 .env.example 里至少包含:
LLM_API_KEY
LLM_BASE_URL
E2B_API_KEY
SERPER_API_KEY
GITHUB_TOKEN
其中 E2B_API_KEY 对应 sandbox,SERPER_API_KEY 对应搜索,GITHUB_TOKEN 对应仓库操作。而 LLM_API_KEY 和 LLM_BASE_URL 是模型接入的入口。很多人第一次跑 AHE 时,E2B_API_KEY 和 SERPER_API_KEY 都填了,唯独 LLM_API_KEY 留空或者填了一个无效值,结果 uv run 启动后 Code Agent 第一步就报认证失败,Agent Debugger 也跟着断,整个演化循环根本进不去。
典型报错形态包括:
AuthenticationError: Invalid API key401 Unauthorized或403 ForbiddenConnection error或APIConnectionErrormodel not found或invalid base url
这些报错的共同点是:它们发生在模型调用层,而不是 AHE 的 harness 逻辑层。换句话说,AHE 的代码没问题,是 .env 里的模型接入配置没配对。
二、TaoToken 前置:注册、创建 Key、拿到 Base URL
在填 .env 之前,先把 TaoToken 这边的准备工作做完。
打开 TaoToken 官网 注册账号,进入控制台后创建一把 API Key。这把 Key 就是后面要填进 LLM_API_KEY 的值。
创建 Key 的入口在 API Keys 页面,创建后复制保存,注意不要泄露。
Base URL 固定为:
https://taotoken.net/api
这里有两个容易踩的坑:
- 不要加
/v1。TaoToken 的兼容 Base URL 就是https://taotoken.net/api,很多 OpenAI 兼容客户端习惯性加/v1,在 AHE 的配置里会导致路径拼接错误。 - 不要带 UTM 参数。
.env里的LLM_BASE_URL是给程序读的,不是给浏览器点的,带上?utm_source=...会让请求 URL 变形。
如果你还想确认模型 ID 和可用模型列表,可以到 模型对话页面 查看,或者直接在 接入文档 里对照配置示例。
三、可复制配置:.env 里这两个变量这样填
进入 AHE 仓库根目录,复制环境变量模板:
cp .env.example .env
然后用编辑器打开 .env,找到 LLM_API_KEY 和 LLM_BASE_URL 两行,改成:
LLM_API_KEY=YOUR_API_KEY
LLM_BASE_URL=https://taotoken.net/api
把 YOUR_API_KEY 替换成你在 TaoToken 控制台创建的那把 Key。注意:
- 等号两边不要加空格,
.env解析器对空格敏感。 - 值不要加引号,除非你的 Key 里真的包含特殊字符。
LLM_BASE_URL末尾不要加/,也不要加/v1。
如果 AHE 的 .env.example 里还有 LLM_MODEL 或类似的模型 ID 变量,按你实际要用的模型填。模型 ID 可以在 模型对话页面 确认。
Agent Debugger 如果单独配置了模型 endpoint,也要检查那一组变量是否指向同一个 Base URL。有些版本的 AHE 会把 debugger 的模型配置和 code agent 分开,如果只改了 LLM_BASE_URL 而 debugger 用的是另一组变量,debugger 依然会断。
填完后,.env 里和模型相关的部分应该长这样:
LLM_API_KEY=YOUR_API_KEY
LLM_BASE_URL=https://taotoken.net/api
其他变量(E2B_API_KEY、SERPER_API_KEY、GITHUB_TOKEN)按你自己的账号填,本文不展开。
四、验证请求与成功结果:最小闭环跑起来
配置填好后,先做一次最小验证,确认模型调用能通。
AHE 的完整实验需要 benchmark 数据、E2B sandbox 和并发调度,成本不低。建议先复制一份小配置:
cp configs/experiments/exp-simple-code-gpt54.yaml configs/experiments/exp-mini.yaml
然后把 exp-mini.yaml 里的参数调小:
max_iterations: 2
harbor:
k: 2
n_concurrent: 4
如果配置支持指定任务子集,只放 3 到 5 个任务。小实验的目标是验证流程,不是追求分数。
启动演化实验:
./scripts/evolve.sh configs/experiments/exp-mini.yaml
或者直接看脚本内部如何调用 evolve.py,手动启动。
如果 LLM_API_KEY 和 LLM_BASE_URL 配对正确,你会看到:
- Code Agent 开始执行任务,trace 逐步产生。
- Agent Debugger 读取 trace,生成
analysis/overview.md和analysis/detail/*.md。 - Evolve Agent 修改 harness 文件,写入
change_manifest.json。 - 下一轮评测后,
change_evaluation.json判断改动效果。
跑完后重点看这些产物:
runs/iteration_*/
analysis/overview.md
analysis/detail/*.md
change_manifest.json
change_evaluation.json
agent/nexau_in_memory_tracer.cleaned.json
verifier/reward.txt
如果这些文件都出现了,说明 AHE 的核心闭环已经跑通,LLM_API_KEY 和 LLM_BASE_URL 的配置没问题。
如果启动后立刻报认证错误,说明 Key 或 Base URL 还有问题,回到上一节检查。
五、本篇常见错排查
错误 1:401 Unauthorized 或 Invalid API key
原因:LLM_API_KEY 填错、填空、或者 Key 已失效。
排查:打开 .env,确认 LLM_API_KEY 的值和 TaoToken 控制台里创建的那把 Key 完全一致。注意不要有多余空格或换行。如果 Key 是在 API Keys 页面 刚创建的,确认没有复制错位。
错误 2:Connection error 或 APIConnectionError
原因:LLM_BASE_URL 填错,或者网络无法到达。
排查:确认 LLM_BASE_URL=https://taotoken.net/api,不要加 /v1,不要加 UTM 参数,末尾不要加 /。可以在终端里用 curl 测一下:
curl -I https://taotoken.net/api
如果返回 4xx 或 5xx,说明 Base URL 本身有问题;如果返回连接超时,说明网络层有问题。
错误 3:model not found 或 invalid model
原因:模型 ID 填错,或者该模型在当前 Key 下不可用。
排查:到 模型对话页面 确认可用模型列表,把 .env 里的模型 ID 改成列表里的值。
错误 4:Code Agent 能跑,但 Agent Debugger 断
原因:debugger 用了单独的模型配置变量,只改了 LLM_BASE_URL 没改 debugger 那组。
排查:打开 .env.example,看是否有 DEBUGGER_LLM_API_KEY、DEBUGGER_LLM_BASE_URL 之类的变量。如果有,同样填成 TaoToken 的 Key 和 Base URL。
错误 5:.env 改了但没生效
原因:程序启动时读取的是旧的环境变量,或者 .env 没有被正确加载。
排查:确认 evolve.sh 或 evolve.py 启动时会加载 .env。有些项目用 python-dotenv,有些用 uv 的环境注入,确认加载路径是仓库根目录的 .env。改完后重新启动实验。
错误 6:Base URL 带了 /v1
原因:习惯性按 OpenAI 官方格式填了 https://taotoken.net/api/v1。
排查:TaoToken 的兼容 Base URL 就是 https://taotoken.net/api,不要加 /v1。如果客户端库内部会自动拼 /v1,那更不应该在 Base URL 里重复。
六、语义一致 CTA:配通之后往哪走
LLM_API_KEY 和 LLM_BASE_URL 配通,只是 AHE 最小闭环的起点。接下来你会遇到更多 harness 层面的问题:trace 怎么读、middleware 怎么改、change_manifest 怎么写、回滚怎么触发。这些属于 AHE 自身的工程逻辑,TaoToken 不介入。
如果你在接入过程中遇到 Key 或 Base URL 的问题,可以到 API Keys 页面 重新创建 Key,或者对照 接入文档 检查配置格式。
如果你要长期跑 AHE 的演化实验,模型调用量会比较大,可以了解 Coding Plan 的额度方案,避免实验中途因为额度问题中断。
如果你只是想先确认模型能不能正常对话,可以到 模型对话页面 直接试一次请求,确认 Key 和 Base URL 都通,再回到 AHE 里跑实验。
配通 .env 里的这两个变量,AHE 的 Code Agent 和 Agent Debugger 就能正常调模型,trace、analysis、change_manifest、change_evaluation 这条链路才能转起来。剩下的 harness 演化逻辑,交给 AHE 自己。




被折叠的 条评论
为什么被折叠?



