1. Baseten Hosted Tools 的 Grounded Inference,为什么先拆 Key 再谈接入
Baseten 发布 Hosted Tools,首个 Grounded Inference 把网络搜索接进托管模型。平台工程师看到这个能力,第一反应通常不是“怎么开”,而是“Key 从哪里来、端点归谁管、搜索链路会不会污染模型推理配额”。如果模型推理走一个 Key,搜索 Provider 又走另一个 Key,排障时却只有一个Authorization头,问题就会被拖到生产环境才爆。本文按平台工程视角,把 TaoToken 端点与 Key 分开管:TaoToken 官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=baseten_grounded_intro 拿 Key,Base URL 用https://taotoken.net/api,Baseten 托管模型侧的 Grounded Inference 单独配置搜索 Provider。文中会给出端点与 Key 分离表、环境变量样例、调用链截图说明,并覆盖 Claude Code、Codex、CC Switch 三件套的配置差异。
Grounded Inference 的关键词是“可配置调用网络搜索”,支持 Exa、Keenable、Parallel 和 You.com 四家搜索提供商。它不是一个孤立的模型接口,而是一条工具链:客户端请求模型,模型决定是否触发搜索,Hosted Tools 再去调用搜索 Provider,最后把结果拼回上下文。平台工程师要管的是这条链路上的凭证、端点、配额和审计。最糟糕的做法是把所有 Key 塞进一个.env,然后让前端、后端、CI、本地 CLI 共用。一旦搜索 Provider 返回 429,你会误判成模型限流;一旦模型 Key 泄漏,搜索账单也可能被一起刷走。
所以先做一次责任拆分:
- 模型推理侧:TaoToken 提供统一 Base URL 和 API Key,负责模型对话、Coding Plan、Key 控制台。
- 搜索工具侧:Baseten Hosted Tools 配置 Exa、Keenable、Parallel、You.com 的 Provider Key。
- 客户端侧:Claude Code 使用
ANTHROPIC_*,Codex 使用config.toml,两者不能互相套。 - 平台侧:环境变量、K8s Secret、审计日志、轮换策略。
这个拆分不是形式主义,而是为了在调用链出问题时能快速定位。下面先给出分离表,再给可复制的环境变量和客户端配置。
2. 端点与 Key 分离表:TaoToken 管模型侧,Baseten 管搜索侧
平台工程里最常见的混乱是:端点、Key、控制台三者的归属不一致。建议把模型侧统一收口到 TaoToken,搜索侧保留在 Baseten Hosted Tools。TaoToken 官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=baseten_grounded_key_table 可以进入控制台,Base URL 固定为https://taotoken.net/api。不要在每个项目里复制不同来源的模型 Key,否则后续无法做统一轮换。
| 层级 | 端点/控制台 | Key 名称 | 环境变量示例 | 责任方 | 是否入 Git |
|---|---|---|---|---|---|
| 模型对话 | https://taotoken.net/api | TaoToken API Key | TAOTOKEN_API_KEY | 平台/应用 | 否 |
| 模型控制台 | API Keys 页面 | TaoToken API Key | TAOTOKEN_API_KEY | 平台管理员 | 否 |
| Coding Plan | TaoToken Coding Plan | 套餐绑定的 Key | TAOTOKEN_API_KEY | 开发者 | 否 |
| 搜索 Provider | Baseten Hosted Tools | Exa/Keenable/Parallel/You.com Key | EXA_API_KEY等 | 搜索平台管理员 | 否 |
| 客户端 CLI | Claude Code | ANTHROPIC_AUTH_TOKEN | ANTHROPIC_AUTH_TOKEN | 开发者本地 | 否 |
| 客户端 CLI | Codex | TAOTOKEN_API_KEY | TAOTOKEN_API_KEY | 开发者本地 | 否 |
表格里的“是否入 Git”必须全部为否。即使是测试 Key,也不要提交到仓库。很多团队会用.env.example只保留占位符,这是可接受的;但真实 Key 应进入 Secret 管理系统。TaoToken 的 Key 创建入口建议直接走 API Keys,创建后只显示一次,复制到平台 Secret 中。
再补一张“调用链责任表”:
| 调用段 | 发起方 | 目标 | 凭证 | 失败时先查 |
|---|---|---|---|---|
| 1 | 应用/CLI | TaoToken Base URL | TAOTOKEN_API_KEY | Key 是否有效、余额/套餐 |
| 2 | TaoToken | 模型推理端点 | 平台内部 | 模型名、区域、超时 |
| 3 | Baseten 模型 | Hosted Tools | Baseten 侧配置 | Grounded Inference 是否开启 |
| 4 | Hosted Tools | 搜索 Provider | EXA_API_KEY等 | Provider 配额、网络、策略 |
| 5 | 模型 | 应用 | 无 | citations、响应结构 |
这张表的价值在于:当客户端看到 401,先查第 1 段;当模型回复没有引用来源,先查第 3、4 段;当响应很慢,先看第 2 段和第 4 段的耗时拆分。把 TaoToken 端点和搜索 Key 分开管,排障路径就从“猜”变成“按段查”。
3. 环境变量样例:让 Baseten Grounded Inference 与 TaoToken 端点互不污染
下面给一份可复制的环境变量样例。注意两点:第一,TaoToken 的 Base URL 是https://taotoken.net/api;第二,搜索 Provider Key 只给 Baseten Hosted Tools 使用,不要传给模型客户端。
# .env.example # ===== 模型推理侧:TaoToken ===== TAOTOKEN_API_KEY=YOUR_API_KEY TAOTOKEN_BASE_URL=https://taotoken.net/api TAOTOKEN_MODEL=your-model-name # ===== Baseten Hosted Tools:Grounded Inference ===== BASETEN_HOSTED_TOOLS_ENABLED=true GROUNDED_INFERENCE_ENABLED=true GROUNDED_INFERENCE_PROVIDER=exa # 四家搜索提供商按需选择,不要全部同时启用 EXA_API_KEY=your_exa_key KEENABLE_API_KEY=your_keenable_key PARALLEL_API_KEY=your_parallel_key YOUCOM_API_KEY=your_youcom_key # ===== 客户端侧:Claude Code 专用 ===== ANTHROPIC_BASE_URL=https://taotoken.net/api ANTHROPIC_AUTH_TOKEN=YOUR_API_KEY ANTHROPIC_MODEL=your-claude-model # ===== 客户端侧:Codex 专用 ===== TAOTOKEN_API_KEY=YOUR_API_KEY如果你用 Docker Compose 本地复现,可以这样注入:
services: app: image: your-app:latest environment: - TAOTOKEN_API_KEY=${TAOTOKEN_API_KEY} - TAOTOKEN_BASE_URL=https://taotoken.net/api - BASETEN_HOSTED_TOOLS_ENABLED=true - GROUNDED_INFERENCE_ENABLED=true - GROUNDED_INFERENCE_PROVIDER=exa - EXA_API_KEY=${EXA_API_KEY} ports: - "8080:8080"本地 shell 临时调试可以这样导出:
export TAOTOKEN_API_KEY="YOUR_API_KEY" export TAOTOKEN_BASE_URL="https://taotoken.net/api" export GROUNDED_INFERENCE_ENABLED="true" export GROUNDED_INFERENCE_PROVIDER="exa" export EXA_API_KEY="your_exa_key"这里最容易犯的错是把EXA_API_KEY也写成TAOTOKEN_API_KEY,或者反过来把TAOTOKEN_API_KEY传给 Baseten 搜索工具。两者用途不同:
TAOTOKEN_API_KEY:调用 TaoToken 模型端点。EXA_API_KEY/KEENABLE_API_KEY/PARALLEL_API_KEY/YOUCOM_API_KEY:调用搜索 Provider。ANTHROPIC_AUTH_TOKEN:只给 Claude Code,值可以填YOUR_API_KEY,但变量名不要混。
平台工程建议用命名空间区分:TAOTOKEN_*、BASETEN_*、SEARCH_*、CLIENT_*。这样在日志脱敏时也能按前缀处理。
4. Claude Code settings.json 与 Codex config.toml:两套客户端不要互相套用
很多接入问题不是服务端造成的,而是客户端配置串了。Claude Code 和 Codex 的配置格式不同,环境变量也不同。Claude Code 使用settings.json和ANTHROPIC_*;Codex 使用config.toml。不要把ANTHROPIC_*写到 Codex 的配置里,也不要把 Codex 的model_providers套到 Claude Code。
Claude Code 的settings.json示例:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY", "ANTHROPIC_MODEL": "your-claude-model" } }保存后重启 Claude Code,或者用/config确认当前生效的 Base URL。如果仍然请求旧地址,检查是否被系统环境变量覆盖。Claude Code 文档可参考 Claude Code 文档。
Codex 的config.toml示例:
model = "your-model-name" model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY" wire_api = "chat"然后在 shell 中导出:
export TAOTOKEN_API_KEY="YOUR_API_KEY"Codex 不会读取ANTHROPIC_AUTH_TOKEN作为模型 Key。如果你在 Codex 里配了ANTHROPIC_*,大概率会得到认证失败或请求发往错误端点。CC Switch 三件套也按这个逻辑拆:
- 供应商地址:
https://taotoken.net/api - API Key:
YOUR_API_KEY - 模型名:按套餐或控制台可用模型填写
在 CC Switch 中切换供应商时,确认当前模式是 Claude Code 还是 Codex。切换后做一次最小请求验证,不要直接跑完整项目。
5. 在 Baseten 托管模型上开启 Grounded Inference 的配置清单
Baseten 侧的重点是 Hosted Tools 和 Grounded Inference 的开关,以及搜索 Provider 的选择。原文信息表明它支持 Exa、Keenable、Parallel 和 You.com 四家。平台工程师不要一次性全开,建议按环境分:
- 开发环境:开一家 Provider,例如 Exa,便于观察引用格式。
- 预发环境:开两家,做回退测试。
- 生产环境:只开经过配额评估的 Provider,并设置超时和降级。
Baseten 侧配置通常围绕以下变量或配置项:
BASETEN_HOSTED_TOOLS_ENABLED=true GROUNDED_INFERENCE_ENABLED=true GROUNDED_INFERENCE_PROVIDER=exa GROUNDED_INFERENCE_MAX_RESULTS=5 GROUNDED_INFERENCE_TIMEOUT_MS=8000 EXA_API_KEY=your_exa_key如果使用 Keenable、Parallel 或 You.com,替换 Provider 和 Key:
GROUNDED_INFERENCE_PROVIDER=keenable KEENABLE_API_KEY=your_keenable_key # 或 GROUNDED_INFERENCE_PROVIDER=parallel PARALLEL_API_KEY=your_parallel_key # 或 GROUNDED_INFERENCE_PROVIDER=you.com YOUCOM_API_KEY=your_youcom_key配置完成后,先用 curl 验证 TaoToken 模型端点是否通:
curl -sS https://taotoken.net/api/chat/completions \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "your-model-name", "messages": [ {"role": "user", "content": "用一句话说明 Grounded Inference 的作用"} ] }'返回 200 且 JSON 中有choices,说明 TaoToken 侧 Key 和 Base URL 正常。再去 Baseten 侧触发带搜索的请求,观察是否返回 citations。常见问题可以按表排查:
| 现象 | 可能原因 | 检查项 |
|---|---|---|
| 401 Unauthorized | TaoToken Key 错误或未带 Bearer | TAOTOKEN_API_KEY、请求头 |
| 400 provider key missing | 搜索 Provider Key 未配置 | EXA_API_KEY等 |
| 429 Too Many Requests | 搜索 Provider 配额耗尽 | Provider 控制台、限流配置 |
| 模型回复无引用 | Grounded Inference 未开启 | GROUNDED_INFERENCE_ENABLED |
| 请求超时 | 搜索链路超时 | GROUNDED_INFERENCE_TIMEOUT_MS |
| 结果与问题无关 | Provider 选择或查询改写问题 | 切换 Provider、调整提示词 |
注意不要让 MCP 或 Agent 直连生产数据库。搜索工具只应访问公开网络或经过白名单的检索源,数据库查询由读者在本地或受控环境执行。
6. 调用链验证与截图说明:从 TaoToken 端点看到 citations
配置完成后,需要一张“调用链截图说明”来固定验收标准。截图不是随便截一张响应,而是标出五个位置:
- 客户端请求 URL:应显示
https://taotoken.net/api/...。 - 请求头:
Authorization: Bearer YOUR_API_KEY,截图中 Key 要脱敏。 - TaoToken 响应:
choices、usage、model字段。 - Baseten/Hosted Tools 日志:Grounded Inference 触发记录。
- 搜索 Provider 日志:Exa/Keenable/Parallel/You.com 的请求与结果数。
用 Python 做一次最小调用:
import os import requests base_url = os.environ.get("TAOTOKEN_BASE_URL", "https://taotoken.net/api") api_key = os.environ["TAOTOKEN_API_KEY"] resp = requests.post( f"{base_url}/chat/completions", headers={ "Authorization": f"Bearer {api_key}", "Content-Type": "application/json", }, json={ "model": "your-model-name", "messages": [ {"role": "user", "content": "检索最近关于 Grounded Inference 的公开资料,并给出引用。"} ], "metadata": { "enable_grounded_inference": True, "search_provider": "exa" } }, timeout=30, ) print(resp.status_code) print(resp.json())注意:metadata字段是否支持取决于 Baseten Hosted Tools 的实际配置方式。如果不支持,就按 Baseten 侧配置开启,而不是在客户端硬塞。截图时重点看响应中是否有 citations 或引用片段。如果没有,回到第 5 节的排查表。
调用链日志建议结构化:
{ "trace_id": "req-20250101-001", "stage": "taotoken_request", "endpoint": "https://taotoken.net/api/chat/completions", "model": "your-model-name", "status": 200, "latency_ms": 1280, "grounded_inference": true, "search_provider": "exa", "search_result_count": 5 }平台侧把trace_id从客户端透传到 TaoToken,再透传到 Baseten 搜索链路。这样 401、429、超时都能按同一trace_id聚合。
7. 平台工程加固:Key 轮换、配额、审计与回滚
Key 分离之后,才能谈轮换和审计。TaoToken Key 在控制台创建,建议按环境分 Key:开发、预发、生产各一个。搜索 Provider Key 同样按环境分。不要多个环境共用一个 Key,否则测试流量会污染生产配额。
K8s Secret 示例:
apiVersion: v1 kind: Secret metadata: name: tao-token-secret type: Opaque stringData: TAOTOKEN_API_KEY: "YOUR_API_KEY" TAOTOKEN_BASE_URL: "https://taotoken.net/api" --- apiVersion: v1 kind: Secret metadata: name: baseten-search-secret type: Opaque stringData: GROUNDED_INFERENCE_PROVIDER: "exa" EXA_API_KEY: "your_exa_key"轮换流程建议:
- 在 TaoToken 控制台创建新 Key,旧 Key 保留 24 小时。
- 更新 K8s Secret,滚动重启应用。
- 观察 401 和 429 指标,确认新 Key 全量生效。
- 删除旧 Key。
- 搜索 Provider Key 同理,先加新 Key,再切流量,最后删旧 Key。
监控指标至少包括:
- TaoToken 端点成功率、P95 延迟、401/429 计数。
- Grounded Inference 触发次数、搜索 Provider 成功率、结果数。
- citations 命中率,用于判断搜索链路是否真的被使用。
- 每个 Key 的独立配额,按环境、按服务拆分。
回滚策略:
- 如果搜索 Provider 不稳定,先关闭
GROUNDED_INFERENCE_ENABLED,模型推理仍走 TaoToken,不影响基础对话。 - 如果 TaoToken 端点异常,切换备用 Base URL 或备用 Key,但不要改搜索 Provider 配置。
- 如果客户端配置错误,Claude Code 回退
settings.json,Codex 回退config.toml,不要互相复制。
平台工程的目标不是“永远不出错”,而是出错时能按段隔离。TaoToken 官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=baseten_grounded_platform 提供 Key 管理入口,Base URL 保持https://taotoken.net/api,Baseten 侧只管 Hosted Tools 和搜索 Provider。两侧通过环境变量和trace_id连接,而不是通过同一个 Key 硬绑。
8. 文末 CTA:模型对话 → Coding Plan → 创建 Key → Claude Code 文档
如果你已经按上面的分离表完成配置,接下来可以直接进入 TaoToken 的对应页面验证:
- 先试模型对话:https://taotoken.net/models/detail/chat?utm_source=taotoken_aicg_blog_end&utm_content=baseten_grounded_cta_chat
- 需要 CLI 开发套餐,看 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=baseten_grounded_cta_coding
- 创建或轮换 Key:https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=baseten_grounded_cta_keys
- Claude Code 配置细节:https://taotoken.net/doc/ClaudeCodeAnthropic?utm_source=taotoken_aicg_blog_end&utm_content=baseten_grounded_cta_doc
配置时记住三件事:TaoToken 的 Base URL 是https://taotoken.net/api,Key 用YOUR_API_KEY占位,Claude Code 和 Codex 的配置不要互相套用。把端点与 Key 分开管,Baseten Grounded Inference 的搜索链路才可控、可审计、可回滚。