尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

读 Agentic RL 日志:DeepSWE 62 分模型接 TaoToken

读 Agentic RL 日志:DeepSWE 62 分模型接 TaoToken 1. 从直播日志到 JSONLDeepSWE 62 分调用链先拆字段当你在终端里 tail 一场 Agentic RL 后训练直播留下的 JSONL第一眼看到的往往不是某个分数而是混在一起的字段model、task、tool、reward、latency、cost、trace_id。社区底稿里提到小米直播中对mimo-v2.6-pro和flash做 Agentic RL 后训练DeepSWE 一项mimo-v2.6-pro是 62另一个 flash 模型是 74.2作者按直播窗口推算每秒约 10 美元。这些数字更适合当作“日志阅读背景”而不是最终榜单结论。真正可复现的动作是先把日志整理成可被jq稳定查询的 JSONL再把模型调用接到 TaoToken 网关做对照。准备jq解析日志时我会先到 TaoToken 官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentdeepswe62_intro 获取 API Key并把请求 Base URL 设为https://taotoken.net/api。这一步不是为了把训练日志换成另一个黑盒而是为了给“模型调用”建立一条可追踪、可过滤、可复盘的请求侧关联键。读 DeepSWE 62 分模型调用日志最容易犯的错误是把所有行都当成同一种事件。Agentic RL 后训练日志通常至少有四层训练事件层rollout、reward、advantage、kl、clip、optimizer step。模型调用层每次模型生成请求的模型名、prompt tokens、completion tokens、latency、request_id。工具调用层Agent 执行 bash、python、文件读写、浏览器动作后的返回码、耗时、错误。评分与成本层DeepSWE 分数、任务通过率、成本估算、每秒烧钱速率。如果你用grep 62去捞日志会把时间戳里的 62、Token 数里的 62、随机 ID 里的 62 全部捞出来最后得不到调用链。正确做法是先统一 JSONL再按事件类型过滤。下面是一段最小的环境准备mkdir -p ~/deepswe-log cd ~/deepswe-log export TAOTOKEN_API_KEYYOUR_API_KEY export TAOTOKEN_BASE_URLhttps://taotoken.net/api这里TAOTOKEN_BASE_URL固定为https://taotoken.net/api不要在后面附加查询参数也不要带 UTM。UTM 只用于官网入口和文档跳转工具配置里的 Base URL 必须保持干净。Key 占位符统一用YOUR_API_KEY真实 Key 只放在本机环境变量或密钥管理工具里不要写进日志文件。如果你要在请求侧留下和训练日志一致的关联 ID可以在调用模型时带上自己的x-trace-id再把网关返回的 request id 写入模型调用日志。示例TRACE_IDdeepswe62-$(date %s)-001 curl -sS $TAOTOKEN_BASE_URL/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -H x-trace-id: $TRACE_ID \ -d { model: YOUR_MODEL_ID, messages: [ {role: system, content: You are an agentic coding evaluator.}, {role: user, content: Read the local log and summarize tool errors.} ], stream: false } | jq .如果当前 SDK 要求 Base URL 后追加版本路径以 TaoToken 控制台或文档显示为准但本机配置中仍然以https://taotoken.net/api作为供应商 Base URL 的主值。把请求跑通之后再回到日志侧做jq查询顺序不要反。2. 让 jq 有稳定输入把 Agentic RL 日志规范成 JSONLjq的强项是处理结构化 JSON不是靠正则猜文本。因此第一步不是写复杂过滤器而是把日志规范成每行一个 JSON 对象。你可以保留原始日志另存一份清洗后的 JSONL。建议每条模型调用至少包含这些字段{ ts: 2026-04-20T10:00:00Z, event: model_call, trace_id: deepswe62-001, span_id: span-001, parent_span_id: root, model: mimo-v2.6-pro, task: DeepSWE, score: 62, tool: null, latency_ms: 1812, prompt_tokens: 4096, completion_tokens: 512, error: null, request_id: req_xxx }工具调用可以另起一行{ ts: 2026-04-20T10:00:03Z, event: tool_call, trace_id: deepswe62-001, span_id: span-002, parent_span_id: span-001, model: mimo-v2.6-pro, task: DeepSWE, score: null, tool: bash, latency_ms: 224, prompt_tokens: 0, completion_tokens: 0, error: null, request_id: req_xxx }评分事件可以这样{ ts: 2026-04-20T10:03:00Z, event: score, trace_id: deepswe62-001, span_id: span-009, parent_span_id: root, model: mimo-v2.6-pro, task: DeepSWE, score: 62, tool: null, latency_ms: 0, prompt_tokens: 0, completion_tokens: 0, error: null, request_id: null }清洗时你不需要一次写完整套解析器。先用jq -c把每行压成单行 JSON再补默认字段。下面命令适合本地执行不连接任何生产库# 假设 raw.log 里混有文本和 JSON 行先只提取以 { 开头的行 grep ^{ raw.log raw-jsonl.log # 给缺失字段补默认值统一输出到 agentic-rl.jsonl jq -c . { event: (.event // unknown), trace_id: (.trace_id // no-trace), model: (.model // unknown), task: (.task // unknown), score: (.score // null), tool: (.tool // null), latency_ms: (.latency_ms // 0), prompt_tokens: (.prompt_tokens // 0), completion_tokens: (.completion_tokens // 0), error: (.error // null) } raw-jsonl.log agentic-rl.jsonl wc -l agentic-rl.jsonl此时你得到的是可被jq稳定处理的日志。再看 DeepSWE 62就不会被文本里的杂音干扰。比如查看任务分布jq -r .task agentic-rl.jsonl | sort | uniq -c | sort -nr查看模型分布jq -r .model agentic-rl.jsonl | sort | uniq -c | sort -nr这一步的产出看似简单但它决定了后面的过滤是否可复现。如果没有统一 JSONL任何“DeepSWE 62 调用日志摘要”都只是一次性的人工浏览无法在训练继续跑、日志继续追加时复用。3. jq 过滤命令抽出 DeepSWE 62 的模型调用与工具链现在进入核心部分。我们关心三个问题哪些调用属于 DeepSWE 任务哪些调用落在mimo-v2.6-pro或 flash 对照模型上哪些工具调用最终影响了 62 这个分数。下面是一组可复现的jq命令。先过滤出 DeepSWE 相关调用并保留关键字段jq -c select(.task DeepSWE) | select(.event model_call or .event tool_call or .event score) | { ts, event, trace_id, span_id, parent_span_id, model, task, tool, score, latency_ms, error, request_id } agentic-rl.jsonl deepswe62-calls.jsonl wc -l deepswe62-calls.jsonl head -n 5 deepswe62-calls.jsonl再按模型汇总调用量、工具调用量、平均延迟和分数范围jq -s group_by(.model) | map({ model: .[0].model, total_events: length, model_calls: (map(select(.event model_call)) | length), tool_calls: (map(select(.event tool_call)) | length), avg_latency_ms: ( (map(.latency_ms // 0) | add) / length ), max_score: (map(.score // empty) | max), min_score: (map(.score // empty) | min), last_score: (map(.score // empty) | last) }) deepswe62-calls.jsonl如果你只想看 trace 级别把一次 DeepSWE 任务的所有 span 聚起来找延迟最高或工具调用最多的调用链jq -s map(select(.task DeepSWE)) | group_by(.trace_id) | map({ trace_id: .[0].trace_id, models: (map(.model) | unique), score: (map(.score // empty) | last), tool_steps: (map(select(.event tool_call)) | length), model_steps: (map(select(.event model_call)) | length), total_latency_ms: (map(.latency_ms // 0) | add), errors: (map(select(.error ! null)) | length) }) | sort_by(.total_latency_ms) | reverse | .[0:10] agentic-rl.jsonl然后专门抽score 62的调用链jq -c select(.task DeepSWE and .score 62) | { trace_id, model, event, tool, latency_ms, error, request_id } agentic-rl.jsonl如果你还在对照 flash 的 74.2 分数不要直接把两个数字放在同一张“排名表”里而应做条件对照同一任务、同一工具集、同一评测版本、同一时间窗口。命令可以写成jq -s map(select(.task DeepSWE)) | group_by(.model) | map({ model: .[0].model, trace_count: (map(.trace_id) | unique | length), score_seen: (map(.score // empty) | unique), avg_tool_steps: ( (map(select(.event tool_call)) | length) / (map(.trace_id) | unique | length) ), avg_latency_ms: ( (map(.latency_ms // 0) | add) / length ) }) agentic-rl.jsonl一个可复现的 DeepSWE 62 调用日志摘要大概长这样{ task: DeepSWE, model_under_watch: mimo-v2.6-pro, score_seen: 62, compare_model_hint: flash 的 74.2 只作对照不作最终排名, total_events: 128, model_calls: 31, tool_calls: 97, avg_latency_ms: 1834, error_count: 3, top_error_tool: bash, cost_watch: { source_note: 直播底稿作者按窗口推算每秒约 10 美元仅用于设置告警阈值不等于最终账单, threshold_suggestion: 当每秒成本估算超过 10 美元时先看 trace 级工具重试 } }这个摘要的价值在于它把 62 分拆成了调用次数、工具步骤、延迟和错误数而不是只留下一个分数。下一步再接 TaoToken就可以用同一套jq查询对比不同供应商下的请求表现。4. TaoToken Key 与 Base URL请求侧配置和日志侧关联如果你已经准备好jq解析日志接下来要处理 Key 和 Base URL。申请 Key 的步骤不要从直播弹幕或第三方截图里找入口直接到 TaoToken 官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentdeepswe62_key_console 进入控制台创建 API Key。创建后本机只保留占位符替换不要把真实 Key 提交到 Git。推荐的环境变量写法export TAOTOKEN_API_KEYYOUR_API_KEY export TAOTOKEN_BASE_URLhttps://taotoken.net/api注意两点Base URL 不加 UTM。官网链接可以带utm_source和utm_content但工具配置里的base_url必须是https://taotoken.net/api。Key 不进日志。如果你在请求日志里记录 header先脱敏只记录Authorization: Bearer YOUR_API_KEY或只记录 Key 后四位。请求侧关联日志侧的做法是在发起模型调用时生成trace_id把网关返回的request_id写入 JSONL。这样你用jq过滤 DeepSWE 62 时就能同时看到哪一次模型调用属于哪个 trace这次调用用了哪个模型工具调用是串行还是并行失败后是否重试重试是否把每秒成本推高。一个本地验证请求可以这样写TRACE_IDdeepswe62-check-$(date %s) curl -sS $TAOTOKEN_BASE_URL/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -H x-trace-id: $TRACE_ID \ -d { model: YOUR_MODEL_ID, messages: [ {role: user, content: Return a JSON object with keys: ok, model, trace_id.} ], temperature: 0, stream: false } | jq .如果返回结构正常再把这个request_id补进日志jq -c if .trace_id $TRACE_ID then . {request_id: REPLACE_WITH_RESPONSE_ID} else . end agentic-rl.jsonl agentic-rl.with-request-id.jsonl然后把deepswe62-calls.jsonl重新生成一遍确保过滤链路包含request_id。这时你读日志的顺序就变成了先看 DeepSWE 任务再看模型调用再看工具调用最后看成本窗口。DeepSWE 62 不再是一个孤立数字而是一条可以回溯的调用链。5. Claude Code settings.json只让 Claude Code 读 ANTHROPIC_*Claude Code 的配置走settings.json和ANTHROPIC_*环境变量不要把这一套写到 Codex 的config.toml里。你可以在 TaoToken 官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentdeepswe62_claude_json 获取 Key 后按下面方式配置。示例中的模型名用YOUR_CLAUDE_CODE_MODEL占位实际以控制台可用模型为准。{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: YOUR_API_KEY, ANTHROPIC_MODEL: YOUR_CLAUDE_CODE_MODEL, ANTHROPIC_SMALL_FAST_MODEL: YOUR_FAST_MODEL }, permissions: { allow: [ Read, Bash(jq:*), Bash(grep:*), Bash(wc:*) ] } }保存位置通常是你本机的 Claude Code 配置目录。配置完成后启动前可以再用 shell 覆盖一次export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_AUTH_TOKEN$TAOTOKEN_API_KEY验证 Claude Code 是否读到配置claude --version claude 请只回复当前 Base URL 的主机名然后回到日志侧用jq查看 Claude Code 产生的调用是否进入model_calljq -c select(.event model_call) | select(.model | test(claude|YOUR_CLAUDE_CODE_MODEL; i)) | {ts, trace_id, model, latency_ms, prompt_tokens, completion_tokens, error} agentic-rl.jsonl | tail -n 20如果你在日志里看到ANTHROPIC_BASE_URL被写进了 Codex 配置说明配置串了。Claude Code 用ANTHROPIC_*Codex 用config.toml两者不要互相复制。6. Codex config.toml不要混入 ANTHROPIC_*Codex 的配置走config.toml。到 TaoToken 官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentdeepswe62_codex_toml 获取 Key 后可以按下面的字段骨架配置。注意Codex 不读ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN不要把这些变量塞进config.toml。model YOUR_CODEX_MODEL model_provider taotoken approval_policy on-request [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key TAOTOKEN_API_KEY wire_api chat本机环境变量export TAOTOKEN_API_KEYYOUR_API_KEY如果你使用的 Codex 版本对wire_api或模型提供商字段有差异以你本地codex --help和 TaoToken 文档为准但核心三件事不变供应商名、Base URL、Key 环境变量。Base URL 仍然是https://taotoken.net/api不要带 UTM。验证 Codex 是否读到配置codex --version codex 只输出一个 JSON{\ok\:true}日志侧查询 Codex 产生的调用jq -c select(.event model_call) | select(.model | test(codex|YOUR_CODEX_MODEL; i)) | {ts, trace_id, model, latency_ms, prompt_tokens, completion_tokens, error} agentic-rl.jsonl | tail -n 20如果 Codex 调用失败先查三处env_key TAOTOKEN_API_KEY是否和 shell 里的环境变量同名base_url是否误写成带/v1、带 UTM 或带空格的字符串是否把 Claude Code 的ANTHROPIC_*变量误当成 Codex 配置。这三步能排除大部分“配置看起来对但请求发不出去”的问题。7. CC Switch 三件套供应商条目、Claude 配置、Codex 配置如果你用 CC Switch 管理多个供应商核心是“三件套”分别落到正确位置。不同版本的 CC Switch 字段名可能不同但结构可以抽象成下面三类。第一件供应商条目。里面必须有名称、Base URL、Key、可用模型。示例仅表达字段关系{ name: TaoToken, baseUrl: https://taotoken.net/api, apiKey: YOUR_API_KEY, models: { claude: YOUR_CLAUDE_CODE_MODEL, codex: YOUR_CODEX_MODEL } }第二件Claude Code 配置文件。它接收ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN、ANTHROPIC_MODEL。示例{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: YOUR_API_KEY, ANTHROPIC_MODEL: YOUR_CLAUDE_CODE_MODEL } }第三件Codex 配置文件。它接收config.toml里的model_provider、base_url、env_key。示例model YOUR_CODEX_MODEL model_provider taotoken [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key TAOTOKEN_API_KEY wire_api chat三件套的切换顺序建议是先在 CC Switch 里选中 TaoToken 供应商确认 Claude Code 读的是ANTHROPIC_*确认 Codex 读的是config.toml分别运行一次最小请求最后再用jq查日志。日志验证命令可以统一成jq -c select(.event model_call) | { ts, trace_id, model, provider: (.provider // unknown), latency_ms, error } agentic-rl.jsonl | tail -n 30如果日志里provider仍然显示旧供应商说明 CC Switch 只改了界面没有落到对应配置文件。此时回到三件套逐项核对不要继续在日志层猜。8. 读摘要而不是读情绪DeepSWE 62 与 flash 74.2 的 jq 视角社区直播底稿里最容易引发情绪的是分数对比mimo-v2.6-pro的 DeepSWE 为 62flash 为 74.2作者推算每秒约 10 美元且判断还在训练早期。读日志时你要把这些信息拆成三类事实输入日志里确实出现了哪些模型、任务、分数、工具调用、延迟、错误。推断输入每秒成本是作者按直播窗口推算不是最终账单74.2 是同一评测版本下的对照不是永久排名。行动输入当成本告警触发时先看哪些 trace 在重试工具哪些模型调用拉高了延迟。用jq做一份更像“排障摘要”的输出jq -s map(select(.task DeepSWE)) | { total_traces: (map(.trace_id) | unique | length), models: (map(.model) | unique), scores: (map(.score // empty) | unique), tool_errors: ( map(select(.event tool_call and .error ! null)) | group_by(.tool) | map({tool: .[0].tool, count: length}) ), slowest_model_calls: ( map(select(.event model_call)) | sort_by(.latency_ms) | reverse | .[0:5] | map({trace_id, model, latency_ms, prompt_tokens, completion_tokens}) ) } agentic-rl.jsonl这份摘要不会告诉你“哪个模型一定更强”但会告诉你62 分对应的 trace 是否伴随大量工具错误flash 的 74.2 是否在同一批任务、同一工具集下取得每秒约 10 美元的成本推算是否集中在少数长链路 trace接入 TaoToken 后相同jq查询下请求延迟、失败率、重试次数是否变化。如果你要把 TaoToken 接入现有 Agentic RL 工作流建议保留两套 Key一套用于日志阅读和人工验证一套用于自动化任务。两套都从 TaoToken 官网获取不要把 Key 写进deepswe62-calls.jsonl。请求侧 Base URL 始终是https://taotoken.net/api工具配置里不要加 UTM。最后给一个最小闭环# 1. 过滤 DeepSWE 62 调用链 jq -c select(.taskDeepSWE and .score62) | {trace_id,model,tool,latency_ms,error} agentic-rl.jsonl deepswe62-score62.jsonl # 2. 汇总模型调用 jq -s group_by(.model) | map({model:.[0].model, calls:length, avg_latency_ms:((map(.latency_ms // 0)|add)/length)}) deepswe62-calls.jsonl # 3. 查看工具错误 jq -s map(select(.eventtool_call and .error!null)) | group_by(.tool) | map({tool:.[0].tool, errors:length}) deepswe62-calls.jsonl # 4. 查看成本告警窗口 jq -s map(select(.eventmodel_call)) | {calls:length, total_prompt_tokens:(map(.prompt_tokens // 0)|add), total_completion_tokens:(map(.completion_tokens // 0)|add)} deepswe62-calls.jsonl当你能稳定产出这些摘要再去看 DeepSWE 62、flash 74.2 和每秒约 10 美元的推算就不会被单一数字带着跑。日志阅读的目标是还原调用链而不是给训练早期下终局判断。文末按这条路径继续先到模型对话验证一次请求再选 Coding Plan然后创建 API Key最后按 Claude Code 文档完成工具配置。模型对话https://taotoken.net/models/detail/chat?utm_sourcetaotoken_aicg_blog_endutm_contentdeepswe62_chatCoding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentdeepswe62_coding_plan创建 API Keyhttps://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentdeepswe62_api_keysClaude Code 文档https://taotoken.net/doc/ClaudeCodeAnthropic?utm_sourcetaotoken_aicg_blog_endutm_contentdeepswe62_claude_code_doc
返回列表