机器学习数据看 Science,public-apis 与 TaoToken 的 Agent 路径
2026/9/19 1:33:59 网站建设 项目流程

1. 从 public-apis 的 Science & Math 分类出发:Agent 先整理候选表,不先写爬虫

当你在 Claude Code 或 Codex 里让 Agent 去 public-apis 的 Science & Math 分类整理机器学习数据源时,最先撞到的往往不是“没有数据”,而是 README 链接 404/410、Auth 字段看不懂、CORS 状态未知。我的顺序是:先到 TaoToken(https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=science_math_ml_agent)创建 Key,再把 Agent 的 Base URL 指向 https://taotoken.net/api,让 Agent 只做数据源整理、文档入口核对和字段说明,不碰生产库。

public-apis 这类社区目录的价值,不是替你提供一个统一 API,而是把天气、地图、财经、新闻、开放数据、测试数据、科学与数学等场景的文档入口按分类摆在一起。对科研和模型训练数据准备者来说,它的正确用法不是“看到链接就写爬虫”,而是先得到一张候选表:哪些来源可能适合监督学习、时间序列、地理空间、文本分类或图数据;哪些需要 apiKey、OAuth;哪些标了 HTTPS 和 CORS;哪些只是文档入口,真正字段、限流、许可证还要回到原文档确认。

所以更稳的 Agent 路径是:

  1. 在本地保存一份 public-apis 仓库副本;
  2. 用脚本或命令抽出 Science & Math 分类的条目;
  3. 让 Agent 把条目整理成 Markdown 表;
  4. 你人工核对 Auth、HTTPS、CORS、许可证和限流;
  5. 用本地 curl 或 Python 请求做最小验证;
  6. 再把请求结果归一化成 JSONL,进入后续训练或分析流程。

不要让 Agent 直接连公司生产库、数据仓库或线上业务数据库。数据源筛选阶段只处理公开文档、README、样例响应和本地文件。所有下载、请求、转换命令都由你在本地终端执行。

先准备本地目录:

mkdir -p ~/work/science-ml-data cd ~/work/science-ml-data # 仓库地址请从 public-apis 项目首页复制到变量,避免在脚本里硬编码 export PUBLIC_APIS_REPO_URL="<public-apis-repo-url>" git clone "$PUBLIC_APIS_REPO_URL" ~/work/science-ml-data/public-apis cd ~/work/science-ml-data/public-apis ls

如果你已经有一份 README,可以直接抽取 Science & Math 部分。下面这个 Python 脚本只做本地解析,不访问外部服务:

import csv import pathlib import re readme_path = pathlib.Path("README.md") text = readme_path.read_text(encoding="utf-8") # public-apis 的分类标题通常以 ### 开头,这里只抓 Science & Math 段 pattern = re.compile(r"###\s+Science\s*&\s*Math\s*\n(.*?)(?=\n###\s+|\Z)", re.S) match = pattern.search(text) if not match: raise SystemExit("未找到 Science & Math 分类,请确认 README 结构") section = match.group(1) rows = [] for line in section.splitlines(): line = line.strip() if not line.startswith("|"): continue if "---" in line: continue cells = [c.strip() for c in line.strip("|").split("|")] if len(cells) < 5: continue if cells[0].lower() in {"api", "name"}: continue rows.append(cells[:6]) out = pathlib.Path("science_math_candidates.csv") with out.open("w", newline="", encoding="utf-8") as f: writer = csv.writer(f) writer.writerow(["api", "description", "auth", "https", "cors", "link"]) writer.writerows(rows) print(f"已写入 {out},共 {len(rows)} 条候选")

运行后你会得到类似这样的候选表:

apidescriptionauthhttpscorslink
候选服务 A地球观测/气象数据apiKeyYesUnknown文档入口
候选服务 B地震事件/时间序列NoYesUnknown文档入口
候选服务 C物种分布/分类数据NoYesYes文档入口
候选服务 D论文元数据/文本NoYesUnknown文档入口
候选服务 E空间位置/实时状态NoYesUnknown文档入口

这张表就是 Agent 的输入。可以让 Claude Code 或 Codex 继续补充“适合的机器学习任务”和“待核对字段”,但要求它只基于本地 CSV 和文档入口,不要凭空编造接口参数。

一个可用的 Agent 提示词如下:

请读取 science_math_candidates.csv,只做以下工作: 1. 保留 api、description、auth、https、cors、link 六列; 2. 为每条候选打上可能的 ML 任务标签:时间序列、地理空间、文本分类、图像、图数据、回归、异常检测; 3. 新增三列:待核对文档项、建议最小请求、建议归一化字段; 4. 待核对文档项必须包含许可证、限流、字段示例、是否允许商用; 5. 不要生成注册脚本,不要访问任何生产数据库,不要假设接口一定可用。 输出 Markdown 表格,并在表格后列出“优先验证的 5 条候选”及理由。

这样做的结果是:你拿到的是数据源表、文档入口和字段假设,而不是一段看似能跑、实际上密钥、配额、字段全不对的爬虫代码。

2. 读懂 Auth、HTTPS、CORS:科研选数据的三个前置字段

public-apis 每个条目通常会有 Auth、HTTPS、CORS 等列。对模型训练数据准备者来说,这三列比“是否免费”更早决定一个来源能不能进入你的流程。

Auth 表示鉴权方式。No 表示请求本身不要求认证;apiKey 表示通常要申请密钥;OAuth 表示要处理授权流程。注意,No 只说明不必携带认证信息,不能推导出没有额度、频率限制或使用条款。科研场景里尤其要看数据许可证和再分发限制,不能因为接口能匿名请求就直接用于论文附录或公开数据集。

HTTPS 表示是否提供加密访问。对训练数据抓取来说,HTTPS 不是万能保障,但至少影响传输安全和部分运行环境的兼容性。若某服务只提供 HTTP,要评估数据敏感性和本地网络策略,不要默认它适合长期采集。

CORS 更直接影响 Web 前端。标为 Yes 的服务,浏览器跨域调用通常更省事;标为 No 时,通常只适合服务端调用;Unknown 则要自己用浏览器和文档确认。很多“本地 curl 成功、上线页面被拦截”的问题,根源就在这里。对数据准备者来说,如果你只是本地跑 Python 或 curl,CORS 不是第一优先级;但如果你要做标注页面、演示面板或浏览器插件,就要优先选 CORS 为 Yes 的候选。

建议按下面的顺序筛选:

  1. 先按科研任务筛选场景:时间序列、地理空间、文本、图像、图数据、开放科学数据;
  2. 再看 Auth:No 和 apiKey 优先做最小验证,OAuth 放到后面;
  3. 再看 HTTPS:生产流程优先 Yes;
  4. 再看 CORS:只有浏览器端调用时才作为硬条件;
  5. 最后回到原始文档核对许可证、限流、字段、商用限制和地区可用性。

可以建一个更细的候选表:

字段含义对训练数据的影响
api服务名称标识来源
description简短说明判断业务场景
authNo/apiKey/OAuth决定是否要申请凭据
httpsYes/No决定传输方式
corsYes/No/Unknown决定浏览器端可用性
license数据许可证决定能否再分发、商用、发论文
quota限流与免费层决定采集规模和频率
fields返回字段决定特征工程难度
last_checked最近验证日期避免使用过期链接
docs_action文档核对动作记录待确认项

public-apis 的收录原则通常强调服务可免费使用或至少有免费层,并且要求文档规范。但这不替你确认当前套餐。接口的限流、免费额度、数据授权、商用限制和地区可用性都可能变动。做 Demo 时,可以先找 Auth 为 No 且 CORS 为 Yes 的候选;准备上正式项目时,要回到原始文档逐项核对配额、价格、隐私政策和服务稳定性。

更可靠的方法是:按业务场景选三到五个候选,分别跑一个最小请求,再从响应质量、调用限制和文档完整度中选出最终服务。不要只看服务名称,也不要只因为“免费”就把它写进训练流水线。

3. 把 Claude Code、Codex、CC Switch 切到 TaoToken:三套可复制配置

在让 Agent 整理数据源之前,先把模型调用通道配好。创建 Key、查看控制台、复制模型入口,都到 TaoToken 官网处理:

  • TaoToken 官网:https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=claude_code_key
  • API Keys 页面:https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=ml_data_api_keys

Base URL 固定配置为:

https://taotoken.net/api

Key 统一使用占位符YOUR_API_KEY,不要把真实 Key 写进仓库、脚本或 Markdown。

3.1 Claude Code:settings.json 与 ANTHROPIC_* 环境变量

Claude Code 常用配置文件在~/.claude/settings.json。可以这样写:

{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "YOUR_API_KEY", "ANTHROPIC_MODEL": "MODEL_ID_FROM_TAOTOKEN" } }

如果你更习惯用 shell 环境变量,也可以在当前终端临时导出:

export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_API_KEY="YOUR_API_KEY" export ANTHROPIC_MODEL="MODEL_ID_FROM_TAOTOKEN"

然后启动 Claude Code:

claude

进入项目目录后,先让它读取本地 CSV,而不是直接访问外部服务:

cd ~/work/science-ml-data/public-apis claude

在 Claude Code 里输入类似指令:

请读取当前目录的 science_math_candidates.csv。 不要联网,不要调用外部 API。 请输出一张 Markdown 表,列为:api、ML任务、Auth、HTTPS、CORS、待核对文档项、建议最小请求、建议归一化字段。 再按“适合先做最小验证”的顺序排序,并说明排序理由。

如果 Claude Code 报认证失败,优先检查ANTHROPIC_BASE_URL是否为https://taotoken.net/api,以及ANTHROPIC_API_KEY是否用了YOUR_API_KEY对应的真实 Key。不要把 ANTHROPIC_* 这套配置复制到 Codex。

3.2 Codex:config.toml 配置

Codex 使用~/.codex/config.toml。示例:

model = "MODEL_ID_FROM_TAOTOKEN" model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY" wire_api = "chat"

然后在 shell 中导出自己的 Key:

export TAOTOKEN_API_KEY="YOUR_API_KEY"

启动 Codex:

codex

在 Codex 里同样只处理本地文件:

请读取 science_math_candidates.csv,按时间序列、地理空间、文本、图像、图数据、异常检测分类。 输出候选表,并标出每一条需要回原始文档确认的许可证、限流和字段示例。 不要生成注册脚本,不要连接任何数据库。

注意:Codex 不要套用ANTHROPIC_*。Claude Code 和 Codex 的配置体系不同,混用只会增加排障成本。

3.3 CC Switch:填写三件套

如果你使用 CC Switch 管理多个 Claude Code 配置,核心就是三件套:

供应商名称:TaoToken Base URL:https://taotoken.net/api API Key:YOUR_API_KEY

模型 ID 从 TaoToken 控制台复制,填到对应的模型字段。保存后切换到这个配置,再启动 Claude Code。如果切换后仍走旧通道,检查:

echo "$ANTHROPIC_BASE_URL" echo "$ANTHROPIC_API_KEY"

确认当前终端的变量没有被旧配置覆盖。TaoToken 官网入口可从这里进入:

https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=cc_switch_key

Key 安全上,至少做到三点:

  1. 不把YOUR_API_KEY替换成真实 Key 后提交到 Git;
  2. 不把 Key 写进公开的 Jupyter Notebook 输出;
  3. 不在 Agent 提示词里粘贴真实 Key。

4. 可复现请求:从文档入口到 JSONL 样本的本地命令

Agent 整理出候选表后,下一步是做最小请求。所有请求都在本地终端执行,不要让它直连生产库。先准备通用变量:

export API_URL="https://<service-domain>/<endpoint>" export SERVICE_TOKEN="<service-token-if-needed>" export OUT_DIR="$HOME/work/science-ml-data/raw" mkdir -p "$OUT_DIR"

如果候选服务声明 Auth 为 No,可以先不带 token:

curl -sS "$API_URL" \ -H "Accept: application/json" \ -o "$OUT_DIR/candidate_a.json" python -m json.tool "$OUT_DIR/candidate_a.json" | head -n 40

如果声明 Auth 为 apiKey,再用环境变量传入:

curl -sS "$API_URL" \ -H "Accept: application/json" \ -H "Authorization: Bearer $SERVICE_TOKEN" \ -o "$OUT_DIR/candidate_b.json" python -m json.tool "$OUT_DIR/candidate_b.json" | head -n 40

不要一上来就批量拉取。先看三件事:

  1. HTTP 状态码是否 200;
  2. 返回体是 JSON、XML 还是 CSV;
  3. 字段是否稳定,是否存在分页、时间范围、地理范围参数。

可以用curl -i查看响应头:

curl -i -sS "$API_URL" \ -H "Accept: application/json" \ -H "Authorization: Bearer $SERVICE_TOKEN" \ | head -n 30

如果是 JSON 数组,可以用jq归一化成 JSONL。下面是一个通用模板,字段名按实际响应替换:

jq -c '.[] | { sample_id: (.id // .uuid // .name // "unknown"), timestamp: (.timestamp // .time // .date // null), latitude: (.latitude // .lat // .coordinates[1] // null), longitude: (.longitude // .lon // .lng // .coordinates[0] // null), value: (.value // .magnitude // .score // null), label: (.type // .category // .status // "unknown"), source: "science_math_candidate", license: "TO_VERIFY", last_checked: "YYYY-MM-DD" }' "$OUT_DIR/candidate_b.json" > "$OUT_DIR/science_math_samples.jsonl"

检查 JSONL 行数和前几行:

wc -l "$OUT_DIR/science_math_samples.jsonl" head -n 3 "$OUT_DIR/science_math_samples.jsonl"

用 Python 快速读取:

import json from pathlib import Path path = Path.home() / "work/science-ml-data/raw/science_math_samples.jsonl" rows = [] with path.open(encoding="utf-8") as f: for line in f: if line.strip(): rows.append(json.loads(line)) print("样本数:", len(rows)) print("字段示例:", rows[0].keys() if rows else "空")

如果你的数据源返回嵌套结构,不要急着写复杂解析。先让 Agent 根据样例响应生成字段说明,再由你本地执行转换。例如:

下面是一段候选 API 的样例响应: <粘贴脱敏后的 JSON> 请输出: 1. 可用于机器学习的字段; 2. 建议的 JSONL 归一化字段名; 3. 缺失值处理建议; 4. 需要回到文档确认的许可证和限流项。 不要生成访问生产库的代码。

5. 数据源表与字段说明:给模型训练准备者的统一中间格式

为了让不同来源最终能合进同一个训练流程,建议固定一张数据源表。可以先用 Markdown 维护,再导出 CSV。

字段类型说明示例
source_idstring来源唯一标识sci_math_001
api_namestringpublic-apis 条目名称Candidate API A
categorystringScience & Math 子场景地理空间
ml_taskstring适合的 ML 任务回归/异常检测
auth_typestringAuth 列No/apiKey/OAuth
httpsstringHTTPS 列Yes/No
corsstringCORS 列Yes/No/Unknown
doc_actionstring文档核对动作查许可证、限流、字段
min_requeststring最小请求路径/v1/items?limit=1
norm_fieldsstring建议归一化字段id,timestamp,lat,lon,value,label
license_statusstring许可证结论TO_VERIFY/OK/BLOCKED
quotastring限流与额度1000/day
last_checkeddate最近验证日期2026-09-17

对应的字段说明表可以这样写:

归一化字段来源字段示例用途缺失处理
sample_idid/uuid/name样本去重用来源名+时间戳哈希
timestamptimestamp/time/date时间序列切分无时间字段则标记 unknown
latitudelatitude/lat/coordinates[1]地理空间特征无坐标则置空
longitudelongitude/lon/lng/coordinates[0]地理空间特征无坐标则置空
valuevalue/magnitude/score回归目标缺失则剔除或插值
labeltype/category/status分类标签保留 unknown
source固定值来源追踪不允许为空
license文档核对合规检查未确认前不公开分发
last_checked本地日期数据新鲜度每月更新

批量做最小请求时,可以写一个只读脚本,控制频率:

#!/usr/bin/env bash set -euo pipefail OUT_DIR="$HOME/work/science-ml-data/raw" mkdir -p "$OUT_DIR" while IFS=, read -r api_name api_url auth_type; do [ "$api_name" = "api_name" ] && continue echo "checking: $api_name" if [ "$auth_type" = "No" ]; then curl -sS --max-time 20 "$api_url" \ -H "Accept: application/json" \ -o "$OUT_DIR/${api_name}.json" || true else echo "skip $api_name: need token / manual check" fi sleep 2 done < candidates_minimal.csv

对应的candidates_minimal.csv示例:

api_name,api_url,auth_type candidate_a,https://<service-domain>/<endpoint>,No candidate_b,https://<service-domain>/<endpoint>,apiKey

注意:这个脚本只用于本地最小验证,不要把它接到生产采集任务。正式采集前,必须回文档确认限流、分页、许可证和商用条款。对于需要 apiKey 或 OAuth 的候选,先手动申请和核对,不要指望 Agent 自动完成授权。

6. 排障与收尾:404/410、CORS、限流和 Key 环境变量

数据源整理过程中最常见的排障点有四类。

第一类是链接失效。社区目录会过期,服务也会改版、迁移或下线。你可能会遇到 404 或 410。处理方式不是硬猜新地址,而是回到 public-apis 条目、搜索服务名、检查官方文档入口,或者直接放弃该候选。候选表里的last_checked就是为这件事准备的。

第二类是 CORS。本地 curl 成功不代表浏览器页面能调用。如果前端报跨域错误,先看条目的 CORS 列,再用浏览器开发者工具确认响应头。CORS 为 No 或 Unknown 时,优先把请求放到服务端本地脚本,不要在前端硬绕。

第三类是限流和额度。你会遇到 401、403、429。401 通常与 Key 有关;403 可能是权限或地区限制;429 是频率过高。处理顺序:

# 1. 确认 HTTP 状态 curl -i -sS "$API_URL" -H "Authorization: Bearer $SERVICE_TOKEN" | head -n 20 # 2. 降低频率,增加 sleep sleep 5 # 3. 检查文档中的 quota 和 rate limit

第四类是 Agent 配置不生效。Claude Code 检查:

echo "$ANTHROPIC_BASE_URL" echo "$ANTHROPIC_API_KEY"

Codex 检查:

echo "$TAOTOKEN_API_KEY" cat ~/.codex/config.toml

CC Switch 则回到三件套:供应商名称、Base URL、API Key。Base URL 统一为:

https://taotoken.net/api

Key 占位符统一写YOUR_API_KEY,真实 Key 只放在本地环境变量或受控配置文件中。

最后,把整个流程收束成可复现产出:

  1. science_math_candidates.csv:从 public-apis 抽出的 Science & Math 候选表;
  2. science_math_candidates.md:Agent 补充 ML 任务、待核对文档、建议字段后的表;
  3. raw/*.json:本地最小请求的原始响应;
  4. science_math_samples.jsonl:归一化后的训练样本;
  5. field_dictionary.md:字段说明和缺失处理记录;
  6. license_check.md:许可证、限流、商用限制的核对清单。

如果你还没有配置好模型调用通道,可以按这个顺序走:

  • 先在模型对话里验证数据源表的整理提示词:https://taotoken.net/models/detail/chat?utm_source=taotoken_aicg_blog_end&utm_content=ml_data_chat
  • 需要长期跑 Agent 整理和排障,再看 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=ml_data_coding_plan
  • 创建自己的 Key:https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=ml_data_api_keys
  • Claude Code 配置细节参考:https://taotoken.net/doc/ClaudeCodeAnthropic?utm_source=taotoken_aicg_blog_end&utm_content=ml_data_claude_code_doc
  • TaoToken 官网入口:https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=final_cta

把 Agent 放在“整理候选、核对文档、生成字段说明”的位置,把本地终端放在“请求、下载、转换、验证”的位置,public-apis 的 Science & Math 分类就不再是一堆会过期的链接,而会变成一条可复现、可审计的机器学习数据准备路径。

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

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

立即咨询