
复现 AGENT KB 之前我以为最难的部分是理解它的异构轨迹抽象。真正打开官方仓库跑 GAIA 才发现最先卡住我的是一行 model_id表 1 里那个 18.7% 是用 GPT-4.1 在 smolagents 上跑出来的我想对照 Qwen-3 的结果就得在同一份代码里反复切换底座模型。每次切换都要换一套环境变量、换一把 Key、再重启一次进程。为了把这部分成本压下去我先到 TaoToken 建了一把 Key后续所有模型请求都走这同一个入口。等真正跑起来我才意识到AGENT KB 本身的设计并不难理解难的是论文复现里那些「跟 Agent 能力无关」的工程琐事。论文表 1 对比的是多个底座模型在 GAIA 上的表现复现的人自然想把 GPT-4.1、Qwen-3、DeepSeek 都切换一遍看 AGENT KB 的经验复用是不是对所有模型都有效。可官方实验里每个模型都用自己的 API Key、自己的 Base URL复现到一半时间全耗在配置上。这篇文章就记录我这次复现 AGENT KB 时怎么用同一把 Key 把 GPT-4.1 切到 Qwen-3 跑完 GAIA 的对比实验。AGENT KB 的逻辑我一行没改改的只是模型接入层Base URL 统一填https://taotoken.net/apiKey 统一用同一个切换模型时只动 model 名。这样一次配置后面所有底座模型都能连续跑。1. 复现 AGENT KB 第 0 步把「换模型」的成本先降下来1.1 论文表 1 的 18.7% 背后是来回折腾的环境变量表 1 的数据确实值得复现以 GPT-4.1 为底座模型时smolagents 加上 AGENT KB 之后GAIA 平均准确率从 55.2% 提到 73.9%涨了 18.7 个百分点Level 2 难度下更是涨了 19.2 个百分点。这个提升幅度相当可观而且它是在完全不微调模型的前提下获得的。但复现这个数字要做的事情远不止「把代码 clone 下来跑一遍」。你得先把 AGENT KB 的依赖装好把 smolagents 接进去然后在 GAIA 的验证集上跑 baseline再跑带 AGENT KB 的版本。等你想换 Qwen-3 对照时麻烦就来了官方 Key 是跟着模型走的GPT-4.1 一个 KeyQwen-3 另一个 KeyBase URL 可能也不一样。我当时的状态是main.py 里写着模型名config 目录里放着各种环境变量每次切模型都要改三四个地方。改完还要确认没有其他地方引用旧 Key否则跑了一个小时才发现调的还是上一个模型。这感觉不像做研究像在给模型搬家。1.2 框架孤岛的另一面Key 和 Base URL 也各管各的AGENT KB 这篇论文解决的是「经验孤岛」不同框架的执行轨迹互相不通用一个框架踩过的坑另一个框架还会再踩一遍。可我复现的时候发现除了经验孤岛还有一层更现实的「配置孤岛」。smolagents 里配模型是一套写法OpenHands 里配模型是另一套写法GPT-4.1 用 OpenAI 兼容接口Qwen-3 如果走官方渠道可能又是另一个 Base URL。AGENT KB 明明已经把轨迹抽象成了统一格式到了模型接入层我们还得手工维护一堆 Key 和地址。所以我当时的判断是复现 AGENT KB 的对比实验之前先把模型接入层统一掉。TaoToken 这类统一 API 通道解决的就是这个问题它不替代 AGENT KB 的知识库逻辑只负责把不同模型请求转发到合适的端点。AGENT KB 里的Reason-Retrieve-Refine循环该怎么跑还怎么跑我只把模型入口从「每个模型一套配置」改成「所有模型共用一把 Key」。2. AGENT KB 到底改了什么异构轨迹抽象 Reason-Retrieve-Refine2.1 异构轨迹抽象把零散执行记录变成可复用的「经验单元」在动手改配置之前最好先搞懂 AGENT KB 的代码仓库里在做什么。简单说它不直接存原始日志而是把不同 Agent 框架的执行轨迹抽象成结构化的经验单元。一条经验单元大致包含任务描述、调用了哪些工具、得到什么结果、踩了什么坑、最后怎么解决的。生活里一个老员工带新人时不会把十倍于新任务的历史聊天记录全丢过去而是挑几段关键经验讲清楚这个接口要传什么参数、那个格式容易解析失败。AGENT KB 的做法类似它把 smolagents 跑出来的轨迹、OpenHands 跑出来的轨迹统一转成这种结构化的经验方便跨框架检索。复现 GAIA 的场景里这个机制的价值很直接GAIA 的题目经常藏在文件解析、网页抓取、多步推理的细节里比如论文里那个解析 PDB 文件算原子距离的例子新手 Agent 可能把水分子的 ANISOU 记录也算进去而 AGENT KB 里如果有「只用 ATOM 记录」的经验检索到之后就能直接避开这个坑。2.2 混合检索与 β-weighted 门控既找得到又不被带偏AGENT KB 检索不是单纯拼语义相似度它用了文本相似度和语义相似度混合的方式。论文里图 4 结果显示混合检索在大多数情况下比单独用任何一种都好在 GAIA Level 2 上 Pass1 达到 67.44%。更关键的是 β-weighted 门控机制。它的作用是防止错误经验污染当前的推理过程即使检索到一条看似相关的旧轨迹如果它与当前任务的置信度不匹配系统会降低它的权重。这相当于给知识库配了一个质检员避免「一看相关就用用了才发现是错的」。明白这套机制之后再回去看代码你就知道哪些地方不该碰知识库的构建逻辑、检索逻辑、门控逻辑都是论文的核心贡献复现时保持原样。需要动的地方只有一个——模型请求从哪出去。这就是为什么我有底气只改 Base URLAGENT KB 内部根本不知道模型 API 是官方直连还是走 TaoToken 的统一通道它只知道自己在调一个大模型接口。3. 在 smolagents 里复现 GAIA底座模型只改名字不换 Key3.1 原来怎么配每换一个模型动一遍环境变量官方仓库的复现方式简单来说是靠环境变量切换模型。以 smolagents 为例代码里通过LiteLLMModel加载模型模型名和 Key 都从环境变量读。平时开发框用哪个模型就在.env里改哪个变量。跑 GAIA 时需要反复切换就得来回改非常繁琐。在没统一通道时切模型的改动量大概是这样的# 跑 GPT-4.1 export LLM_MODELgpt-4.1 export OPENAI_API_KEYsk-gpt4-key # 切到 Qwen-3又要换一套 export LLM_MODELqwen-3 export DASHSCOPE_API_KEYsk-qwen-key改完环境变量不算完还要重启 Python 进程让配置重新加载。跑一轮 GAIA 要花不少时间如果中途发现模型名写错浪费的就是整个实验周期。3.2 现在怎么配Base URL 指向统一 API 通道TaoToken 的做法是把「模型选择」和「密钥管理」解耦。先打开 TaoToken 注册并创建 API Key然后 Base URL 固定填https://taotoken.net/apiKey 固定填你创建的那一把唯一的变量就是 model_id。切换模型时代码里只改一行。以下是接入后的示例代码在 smolagents 里直接用 LiteLLMModel 指定 TaoToken 作为请求入口from smolagents import LiteLLMModel # GPT-4.1 跑 GAIA baseline model LiteLLMModel( model_idopenai/gpt-4.1, # 模型 ID 以 TaoToken 模型广场列表为准 api_basehttps://taotoken.net/api, # 统一 API 通道末尾不要加 /v1 api_keyYOUR_API_KEY, # 在 TaoToken 控制台创建 )切到 Qwen-3 时环境变量完全不用动只换 model_id 这一行# 切到 Qwen-3继续跑同一份 AGENT KB 配置 model LiteLLMModel( model_idopenai/qwen-3, # 只改这一行Key 不变 api_basehttps://taotoken.net/api, api_keyYOUR_API_KEY, )如果你需要反复跑多个模型更推荐封装一个工厂函数def build_model(model_id: str): return LiteLLMModel( model_idfopenai/{model_id}, api_basehttps://taotoken.net/api, api_keyYOUR_API_KEY, ) # 用法 gpt_baseline build_model(gpt-4.1) qwen_kb build_model(qwen-3)这里有一个容易踩的坑api_base不能写https://taotoken.net/api/v1。OpenAI SDK 的习惯是 Base URL 末尾带v1但 TaoToken 的统一 API 地址就是https://taotoken.net/api多写一个/v1反而拼出错误的路径。另外不要把 UTM 参数加到 API 地址上UTM 只用于官网落地页和引导链接填进工具的地址保持干净。跑的过程中 AGENT KB 自己的知识库检索逻辑保持原样TaoToken 只负责稳定转发模型请求。我实际对比下来切换模型的开销从「改环境变量 重启进程」降到了「改一行字符串」。这样复现论文里跨模型的经验复用实验重点可以放在结果分析上而不是配置上。4. 把 TaoToken 的 API 地址写进项目步骤与注意事项4.1 拿到 Key 之后的三步如果你也想复现这个对比准备材料就三样TaoToken 账号、一把 API Key、一个模型 ID。具体操作如下。第一打开 TaoToken 注册并登录进入控制台创建 API Key。创建后把它保存到本地后面填到代码里的YOUR_API_KEY位置。第二在 TaoToken 的模型广场确认当前可用的模型 ID。论文和标题里写的是 GPT-4.1、Qwen-3但实际能用的模型列表会随时间变化不要凭记忆猜 ID以模型广场当时列表为准。第三把api_base和api_key填进复现脚本。如果你用的是 AGENT KB 官方仓库通常只需要在模型初始化那段替换。如果你的复现脚本里已经有环境变量读取逻辑可以直接设置export OPENAI_API_BASEhttps://taotoken.net/api export OPENAI_API_KEYYOUR_API_KEY注意这里的环境变量只是示例具体名称取决于你的代码里 LiteLLM 读的是哪几个变量。如果你用的是 smolagents 的LiteLLMModel直接在构造函数里传api_base和api_key更明确不受环境变量残留干扰。4.2 这些细节写错会白跑一轮配置这块有四个细节我复现时都踩过写出来帮你避坑。第一个是 Base URL 末尾不要加/v1也不要带任何 UTM 参数。TaoToken 的接口地址就是https://taotoken.net/apiUTM 参数只用于官网链接和落地页用在 API 请求里没有意义。第二个是 Key 创建后要及时复制。控制台通常只显示一次完整 Key刷新页面之后就看不到了。忘了复制只能删掉重新创建。第三个是同一个 Key 别同时开太多并发任务。GAIA 复现经常要并行跑多个任务如果一瞬间把请求量拉满接口会返回限流错误。复现实验时建议把并发数调低一点跑完一个任务再开下一批。第四个是模型 ID 一定要去模型广场核实。论文里写的是 Qwen-3但模型广场上可能区分不同量化版本或不同上下文长度ID 写错会直接抛 404。别自己脑补一个带日期后缀的 ID那只会浪费时间。5. 复现 GAIA 时最容易翻车的三个报错5.1 401 UnauthorizedKey 没填对这个报错最常见。排查思路很简单先把代码里的api_key和 TaoToken 控制台新创建的 Key 逐字符对比确认没有多复制空格、没有截断。如果是在环境变量里读的 Key用print(os.environ.get(OPENAI_API_KEY))打印出来看看是不是旧值。有个很隐蔽的情况复制 Key 时把前后引号也复制进去了字符串变成sk-xxx带引号的状态。这种情况单看日志很难发现建议在代码里strip()一下再传给 LiteLLM。5.2 404 model not found模型 ID 与模型广场不一致错误信息一般会提示某个 model 不存在。原因基本是你写的 ID 在模型广场上没有对应项。比如把qwen-3写成了qwen-3-20250401这种带日期的版本号或者把gpt-4.1写成了gpt-4.1-mini。处理办法很简单打开 TaoToken 模型广场从列表里复制确切的模型 ID再贴回代码。不要凭印象输入字符差一点都不行。5.3 环境变量残留LiteLLM 仍在使用旧地址这是最坑的一个。你明明在代码里传了api_basehttps://taotoken.net/api但跑起来之后发现请求还是发到了 OpenAI 官方地址。原因是你之前配置过OPENAI_BASE_URLLiteLLM 初始化时优先读了环境变量。解决方式是在代码里显式覆盖或者启动前清掉旧变量unset OPENAI_BASE_URL unset OPENAI_API_BASE如果你还需要用环境变量方式配置确保这几个变量都指向 TaoToken而不是残留的官方地址。6. 跑通之后再回头验证一遍调用记录6.1 先去模型对话里试同一把 Key第一次把配置写进 smolagents 之后我建议先别急着跑完整 GAIA而是先用同一把 Key 在 TaoToken 模型对话 里发一条测试消息。这样能快速确认两件事Key 真的能用模型 ID 拼得对。对话页面出错的信息比代码日志更直观方便提前发现配置问题。6.2 回控制台看这次 GAIA 调用是否入账等 smolagents 的 GAIA 任务跑完回到 TaoToken 控制台 看一下调用记录。重点查两处请求是否成功以及用的模型是不是你预期的那个。这一步能帮你确认整个链路没有悄悄走了某个废弃配置。确认无误之后就可以放心连跑多组实验了。我当时是把 GPT-4.1、Qwen-3 各跑了一遍 baseline 和 AGENT KB中间除了切换 model_id 之外几乎没动过其他代码。最后把准确率记录下来正好可以对着论文表 1 看趋势是否一致。如果你需要长期做这种跨模型对比建议直接开通 Coding Plan 这类套餐成本更可控Key 不够用的话随时在 API Keys 页面 再创建。配置统一了AGENT KB 复现剩下的就只是一个跑数据、对比结果的过程。