文档表格生成交给 Claude Docs,TaoToken 的 Base URL 放在 CI 变量

文档表格生成交给 Claude Docs,TaoToken 的 Base URL 放在 CI 变量 1. 从 Claude Docs 统一入口到 CI 表格TaoToken 的 Base URL 先落变量Anthropic 把 Claude Chat 与 Claude Cowork 合并为统一体验并推出 Claude Docs 和 Claude Slides。对普通用户来说这是入口变化对在 CI 里维护文档表格的 DevOps 工程师来说真正要处理的是另一件事表格生成任务能不能在流水线里稳定鉴权、稳定出表、稳定校验。以前我把表格生成提示词直接塞进after_scriptKey 写在 CI 明文变量里Base URL 散落在三个脚本中结果换一个 Runner 就报401 Unauthorized换一个模型名就报404 model_not_found。后来我把配置收敛成两步先到 TaoToken 官网注册并创建 Key再让所有 Claude Code 请求统一走 TaoToken 的 Base URL。TaoToken 官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentci_docs_table 创建好 Key 后把请求 Base URL 设为https://taotoken.net/api并且只通过 CI 变量注入不写进仓库。这套做法和 Claude Docs 的统一入口并不冲突。Claude Docs 负责把文档、表格、幻灯片的生成体验放到同一个聊天界面里CI 负责把“文档表格生成”变成可复现的流水线步骤。我的建议是本地用 Claude Docs 或模型对话验证提示词确认表格列、排序、缺失值策略之后再把提示词固化到流水线脚本流水线只依赖三个值ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN、ANTHROPIC_MODEL。其中 Base URL 固定为 TaoToken 的地址Key 来自 CI Secret模型名与 TaoToken 控制台或 Coding Plan 里的可用模型对齐。下面这份内容按 DevOps 视角展开先给 CI 变量表再给 Claude Codesettings.json然后给 Codexconfig.toml和 CC Switch 三件套最后给流水线命令、表格生成对照和排障清单。所有命令都可以按你的仓库路径调整涉及数据库或生产环境的 SQL 不要在 Agent 里直连执行应由读者在本地或受控终端执行。2. CI 变量表TAOTOKEN_API_KEY、ANTHROPIC_BASE_URL 和模型名分开管先把变量命名定清楚。很多 401 不是 Key 错而是变量名对不上脚本里读TAOTOKEN_API_KEYCI 里存的是ANTHROPIC_AUTH_TOKEN或者 Claude Code 读ANTHROPIC_BASE_URLCodex 读base_url两者被混成一个值。建议至少拆成下面这几个变量名类型示例值用途TAOTOKEN_API_KEYSecretYOUR_API_KEY唯一 Key 来源不直接在脚本里出现TAOTOKEN_BASE_URLVariablehttps://taotoken.net/api统一 Base URL不带 UTMANTHROPIC_BASE_URLVariablehttps://taotoken.net/apiClaude Code 读取的 Base URLANTHROPIC_AUTH_TOKENSecret 引用$TAOTOKEN_API_KEYClaude Code 鉴权ANTHROPIC_MODELVariable按控制台可用模型填写Claude Code 模型名CLAUDE_DOCS_SOURCE_DIRVariabledocs文档输入目录CLAUDE_DOCS_TABLE_OUTVariabledocs/generated/summary-table.md表格产物路径在 GitHub Actions 中可以这样配置环境变量。注意 Secret 不要出现在run的 echo 里GitHub 只会自动遮蔽已知 Secret手动打印仍然有泄漏风险。name: docs-table on: pull_request: paths: - docs/**.md - .github/workflows/docs-table.yml workflow_dispatch: jobs: generate-docs-table: runs-on: ubuntu-latest timeout-minutes: 15 env: TAOTOKEN_BASE_URL: ${{ vars.TAOTOKEN_BASE_URL }} ANTHROPIC_BASE_URL: ${{ vars.TAOTOKEN_BASE_URL }} ANTHROPIC_AUTH_TOKEN: ${{ secrets.TAOTOKEN_API_KEY }} ANTHROPIC_MODEL: ${{ vars.TAOTOKEN_MODEL }} CLAUDE_DOCS_SOURCE_DIR: docs CLAUDE_DOCS_TABLE_OUT: docs/generated/summary-table.md steps: - name: Checkout uses: actions/checkoutv4 - name: Setup Node uses: actions/setup-nodev4 with: node-version: 20 - name: Install Claude Code CLI run: npm install -g anthropic-ai/claude-code - name: Generate docs table run: bash scripts/generate-docs-table.sh - name: Upload table artifact uses: actions/upload-artifactv4 with: name: docs-table path: docs/generated/summary-table.md如果你用 GitLab CI可以在项目Settings CI/CD Variables里添加TAOTOKEN_API_KEY为 Masked再在.gitlab-ci.yml中映射。不要把 Key 写进.gitlab-ci.yml因为它会进仓库历史。stages: - docs variables: TAOTOKEN_BASE_URL: https://taotoken.net/api ANTHROPIC_BASE_URL: https://taotoken.net/api ANTHROPIC_MODEL: YOUR_MODEL CLAUDE_DOCS_SOURCE_DIR: docs CLAUDE_DOCS_TABLE_OUT: docs/generated/summary-table.md generate_docs_table: stage: docs image: node:20 timeout: 15m script: - npm install -g anthropic-ai/claude-code - export ANTHROPIC_AUTH_TOKEN${TAOTOKEN_API_KEY} - bash scripts/generate-docs-table.sh artifacts: paths: - docs/generated/summary-table.md expire_in: 7 days这里的重点是TAOTOKEN_BASE_URL和ANTHROPIC_BASE_URL都固定为https://taotoken.net/api不要自作聪明加/v1/messages或/chat/completions。客户端通常会根据自己的协议拼接路径手动加后缀更容易 404。TaoToken 的官网入口放在这里供你创建 Keyhttps://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentci_env_setup 。第一次配置建议先跑workflow_dispatch不要直接绑到主分支 push 上。3. Claude Code settings.jsonCI 里生成文档表格的最小可复制配置Claude Code 的配置可以放在settings.json。本地开发时你可以用用户级配置CI 里更推荐用环境变量覆盖避免把 Key 提交到仓库。下面是一份最小示例ANTHROPIC_BASE_URL指向 TaoToken 的 Base URLANTHROPIC_AUTH_TOKEN用占位符提交时只提交settings.example.json。{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: YOUR_API_KEY, ANTHROPIC_MODEL: YOUR_CLAUDE_MODEL }, permissions: { allow: [ Read(docs/**), Write(docs/generated/**) ], deny: [ Read(.env), Read(.git/**), Read(secrets/**) ] } }把这份文件放到项目.claude/settings.json时不要带真实 Key。CI 里通过环境变量注入ANTHROPIC_AUTH_TOKENClaude Code 会优先读取运行环境。如果你的流水线需要同时兼容本地和 CI可以保留一个settings.example.json在 CI 脚本里只检查必填变量不生成真实配置文件。接下来是核心脚本scripts/generate-docs-table.sh。它做四件事检查变量、创建输出目录、调用 Claude Code 非交互模式生成表格、校验表头。这里不直接连接任何生产数据库也不执行远程 SQL文档来源就是仓库里的 Markdown。#!/usr/bin/env bash set -euo pipefail : ${ANTHROPIC_BASE_URL:?ANTHROPIC_BASE_URL 未设置} : ${ANTHROPIC_AUTH_TOKEN:?ANTHROPIC_AUTH_TOKEN 未设置} : ${ANTHROPIC_MODEL:?ANTHROPIC_MODEL 未设置} SRC_DIR${CLAUDE_DOCS_SOURCE_DIR:-docs} OUT_FILE${CLAUDE_DOCS_TABLE_OUT:-docs/generated/summary-table.md} mkdir -p $(dirname $OUT_FILE) claude -p $(cat PROMPT 读取当前仓库 docs 目录下的 Markdown 文档。 生成一张模块级文档表格列固定为 | 模块 | 负责人 | 状态 | 最后更新 | 风险项 | 要求 1. 只输出 Markdown 表格本身不要解释不要加代码块围栏。 2. 缺失字段填“待补充”。 3. 按模块名升序排列。 4. 不要读取 docs 目录之外的文件。 PROMPT ) \ --add-dir $SRC_DIR \ --output-format text $OUT_FILE if ! head -n 1 $OUT_FILE | grep -q ^| 模块 | 负责人 | 状态 | 最后更新 | 风险项 |$; then echo 表格表头不符合预期请检查提示词或模型输出。 cat $OUT_FILE exit 1 fi echo 文档表格已生成$OUT_FILE这个脚本可以直接放进 CI。注意claude -p的提示词用了 heredoc避免 shell 引号转义。--add-dir只给docs权限收窄。输出文件写到docs/generated/这样产物可以归档但不会覆盖手写文档。如果你在本地想验证同一套配置可以这样跑export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_AUTH_TOKENYOUR_API_KEY export ANTHROPIC_MODELYOUR_CLAUDE_MODEL export CLAUDE_DOCS_SOURCE_DIRdocs export CLAUDE_DOCS_TABLE_OUTdocs/generated/summary-table.md bash scripts/generate-docs-table.sh本地验证通过后再去 CI 里配置 Secret。这样做的好处是提示词、列定义、校验规则都在仓库里版本化Key 和 Base URL 留在 CI 变量里模型名变化时只改变量不用改脚本。4. Codex config.toml 与 CC Switch 三件套不要把 ANTHROPIC_* 套给 Codex同一个团队里可能有人用 Claude Code有人用 Codex。这里最容易犯的错误是把ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN直接套到 Codex 的config.toml。Codex 不读 Anthropic 的变量它有自己的 provider 配置。正确做法是给 TaoToken 单独建一个 providerKey 用TAOTOKEN_API_KEYBase URL 仍然用https://taotoken.net/api。下面是一份 Codexconfig.toml骨架。字段名和取值请以你本地 Codex 版本为准如果 TaoToken 文档对wire_api有明确要求就按文档调整但不要写成ANTHROPIC_*。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 [profiles.ci-docs] model YOUR_CODEX_MODEL model_provider taotoken approval_policy never sandbox_mode workspace-write在 CI 里运行 Codex 时只需要保证TAOTOKEN_API_KEY来自 Secretexport TAOTOKEN_API_KEYYOUR_API_KEY export CODEX_HOME$PWD/.codex codex exec --profile ci-docs 读取 docs 目录生成接口清单表格只输出 Markdown 表格再说 CC Switch 三件套。可以把 CC Switch 理解成“供应商、Key、模型”三个槽位而不是一个 Key 走天下三件套建议值检查点供应商档案名称TaoTokenBase URLhttps://taotoken.net/api不要带 UTM不要带/v1/messagesKey 引用环境变量TAOTOKEN_API_KEY不要明文写进config.toml或settings.json默认模型与ANTHROPIC_MODEL或 Codexmodel对齐Claude Code 和 Codex 模型名不要互抄CC Switch 的用途是本地快速切换供应商。CI 里不建议动态切换固定一个 provider、固定一个 Base URL 更容易排障。如果你在本地用 CC Switch 验证 Claude Code 配置确认它能导出或映射到ANTHROPIC_BASE_URL和ANTHROPIC_AUTH_TOKEN验证 Codex 时则确认它写入的是 Codex 自己的 provider 字段。两者不要混。5. 流水线命令PR 触发、表格生成、表头校验、产物归档这一节给一条完整的流水线路径。目标不是“生成一张好看的表格”而是让表格在 PR 里可检查、可归档、可回滚。建议只在文档目录变更时触发减少无意义消耗。GitHub Actions 的步骤可以拆成五段触发条件docs/**.md或工作流自身变更。安装依赖Node 20 Claude Code CLI。注入变量ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN、ANTHROPIC_MODEL。执行脚本scripts/generate-docs-table.sh。校验并归档表头校验失败则 job 失败成功则上传 artifact。完整工作流示例name: docs-table on: pull_request: paths: - docs/**.md - .github/workflows/docs-table.yml workflow_dispatch: permissions: contents: read jobs: docs-table: runs-on: ubuntu-latest timeout-minutes: 15 env: ANTHROPIC_BASE_URL: ${{ vars.TAOTOKEN_BASE_URL }} ANTHROPIC_AUTH_TOKEN: ${{ secrets.TAOTOKEN_API_KEY }} ANTHROPIC_MODEL: ${{ vars.TAOTOKEN_MODEL }} CLAUDE_DOCS_SOURCE_DIR: docs CLAUDE_DOCS_TABLE_OUT: docs/generated/summary-table.md steps: - uses: actions/checkoutv4 - uses: actions/setup-nodev4 with: node-version: 20 cache: npm - name: Install Claude Code run: npm install -g anthropic-ai/claude-code - name: Generate docs table run: bash scripts/generate-docs-table.sh - name: Validate table columns run: | node - NODE const fs require(fs); const file process.env.CLAUDE_DOCS_TABLE_OUT; const first fs.readFileSync(file, utf8).split(/\r?\n/)[0]; const expected | 模块 | 负责人 | 状态 | 最后更新 | 风险项 |; if (first.trim() ! expected) { console.error(表头不匹配实际为${first}); process.exit(1); } console.log(表头校验通过); NODE - name: Upload artifact uses: actions/upload-artifactv4 with: name: docs-table path: docs/generated/summary-table.md if-no-files-found: error如果你使用 GitLab CI可以用rules:changes控制触发generate_docs_table: stage: docs image: node:20 rules: - changes: - docs/**/*.md - scripts/generate-docs-table.sh script: - npm install -g anthropic-ai/claude-code - export ANTHROPIC_BASE_URLhttps://taotoken.net/api - export ANTHROPIC_AUTH_TOKEN${TAOTOKEN_API_KEY} - export ANTHROPIC_MODEL${TAOTOKEN_MODEL} - bash scripts/generate-docs-table.sh artifacts: paths: - docs/generated/summary-table.md注意不要把ANTHROPIC_AUTH_TOKEN打到日志里。GitHub Actions 和 GitLab CI 都有 Mask Secret 能力但set -x可能让变量进入日志脚本里不要开调试输出。如果表格生成失败先看 HTTP 状态和错误类型不要直接打印完整请求头。6. 表格生成对照README、OpenAPI、CHANGELOG、ADR 分别怎么出表Claude Docs 的价值在于统一入口但 CI 里的表格不能“想怎么出就怎么出”。不同文档源要固定不同列这样表头校验才有意义。下面给一份对照表你可以直接改成自己仓库的规则。输入材料表格目标提示词约束输出列校验方式docs/modules/*.md模块清单只读模块文档按模块名排序模块、负责人、状态、最后更新、风险项首行表头必须完全匹配api/openapi.yaml接口清单只提取 path 和 method不要编造未出现的接口端点、方法、鉴权、版本、负责人统计行数是否大于 0CHANGELOG.md版本变更表只读取 CHANGELOG按版本倒序版本、日期、破坏性变更、迁移动作检查版本列去重docs/adr/*.md架构决策表按 ADR 编号升序编号、标题、状态、影响模块、日期检查编号唯一docs/runbook/*.md值班服务表按服务名分组不合并不同服务服务、负责人、告警级别、升级路径检查服务名非空对应的提示词不要写得太泛。比如模块表格可以固定成读取 docs/modules 目录下的 Markdown 文件。 只输出一张 Markdown 表格不要解释不要代码块围栏。 列固定为| 模块 | 负责人 | 状态 | 最后更新 | 风险项 | 规则 - 模块名取文件名去掉 .md。 - 负责人取文档中“负责人”后的内容缺失填“待补充”。 - 状态只允许设计、开发、测试、已发布、维护中。 - 最后更新取文档中“最后更新”后的日期。 - 风险项取“风险”后的内容缺失填“无”。接口清单表格可以固定成读取 api/openapi.yaml。 只输出 Markdown 表格不要解释。 列固定为| 端点 | 方法 | 鉴权 | 版本 | 负责人 | 规则 - 端点来自 paths。 - 方法来自该 path 下的 HTTP 动词。 - 鉴权字段读取 security缺失填“待确认”。 - 版本读取 info.version。 - 负责人读取 x-owner缺失填“待补充”。 - 不要生成未在文件中出现的接口。版本变更表可以固定成读取 CHANGELOG.md。 只输出 Markdown 表格不要解释。 列固定为| 版本 | 日期 | 破坏性变更 | 迁移动作 | 规则 - 按版本号从新到旧排列。 - 破坏性变更只填“是”或“否”。 - 迁移动作从对应版本段落中提取缺失填“无”。这些规则写进脚本后CI 的失败模式就清晰了表头不对说明模型输出漂移行数为 0说明输入目录或文件匹配有问题列数不一致说明提示词需要收紧。不要把所有文档混在一个提示词里一次生成那样很难定位问题。7. 401/404/超时/表格漂移CI 文档表格排障清单排障时按下面顺序查基本能覆盖大多数 CI 表格生成失败。第一401 Unauthorized或authentication_error。优先检查ANTHROPIC_AUTH_TOKEN是否真的从 Secret 注入。GitHub Actions 里secrets.TAOTOKEN_API_KEY只在同仓库 PR 或受信触发中可用fork PR 默认拿不到 Secret。GitLab 里检查变量是否 Masked、是否保护分支。不要通过echo $ANTHROPIC_AUTH_TOKEN来验证可以打印变量长度或前缀或者直接看服务端返回的错误类型。第二404 model_not_found或not_found_error。这通常不是 Base URL 错而是模型名不对。Claude Code 的ANTHROPIC_MODEL与 Codex 的model可能不同不要互相复制。先到 TaoToken 控制台确认可用模型再更新 CI Variable。如果 Base URL 被写成了https://taotoken.net/api/v1/messages或带/chat/completions也可能出现 404。正确的基础地址是https://taotoken.net/api。第三连接超时或 DNS 失败。检查 Runner 出网策略、代理变量、DNS。不要把 UTM 参数带进 Base URLUTM 是页面追踪参数不是 API 路径。Base URL 只保留https://taotoken.net/api。如果你还没创建 Key可以回到 TaoToken 官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentci_var_troubleshooting 处理。第四表格漂移。模型输出了“好的以下是表格”或者用代码块包住了表格导致表头校验失败。解决办法有三条提示词里明确“只输出表格不要解释不要代码块围栏”脚本里增加表头校验CI 里失败时把产物作为 artifact 上传方便对比。不要把失败输出直接丢弃否则下次还会踩同一个坑。第五变量未注入。Claude Code 读取ANTHROPIC_BASE_URLCodex 读取config.toml里的base_url。如果你把ANTHROPIC_*写进 CodexCodex 不会认。同理把 Codex 的TAOTOKEN_API_KEY写成OPENAI_API_KEY也可能导致鉴权失败。变量命名与工具匹配是这类问题的根因。第六权限过宽。CI 里让模型读取整个仓库可能把.env、密钥文件、构建产物一起读进去。建议只挂载docs或api目录输出只写docs/generated。如果确实需要读取多个目录显式列出来不要用/或..。第七数据库和生产环境。本文的表格生成只读取仓库文档不连接数据库。涉及 SQL 的校验命令由读者在本地或受控终端执行不要让流水线里的 Agent 直连生产库。这个边界要在团队规范里写清楚。8. 从模型对话到 Coding PlanTaoToken 接入路径与文末 CTA把 Claude Docs 的表格生成工作流搬进 CI本质上就是把“聊天界面里的一次性操作”变成“仓库里的可审计步骤”。你可以在本地先用模型对话验证提示词确认输出列和格式再把提示词写入scripts/generate-docs-table.sh。当表格生成频率变高、需要更多模型调用时再考虑 Coding Plan 和 Key 管理。无论哪一步Base URL 都保持https://taotoken.net/apiKey 都用 CI Secret 注入。推荐接入路径如下模型对话先在统一聊天入口验证文档表格提示词确认列名、排序和缺失值策略。https://taotoken.net/models/detail/chat?utm_sourcetaotoken_aicg_blog_endutm_contentci_docs_chatCoding Plan如果 CI 里每天都会生成文档表格、接口清单、CHANGELOG 表评估调用频率和并发。https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentci_docs_plan创建 Key在控制台创建或轮换 API Key把 Key 放到 CI Secret变量名用TAOTOKEN_API_KEY。https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentci_docs_keysClaude Code 文档按文档配置settings.json或环境变量确认ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN、ANTHROPIC_MODEL三项。https://taotoken.net/doc/ClaudeCodeAnthropic?utm_sourcetaotoken_aicg_blog_endutm_contentci_docs_claudecode如果你的仓库还没有开始做这件事可以先从一张最小的模块表格开始只读取docs/modules/*.md只输出五列只校验首行表头。跑通之后再把 OpenAPI、CHANGELOG、ADR、Runbook 逐类加进去。每次加一类就增加一条表头校验和一条输入目录校验。这样表格生成不再是“碰运气”而是和单元测试一样有明确失败条件的流水线步骤。TaoToken 的官网入口和 Key 创建仍然从 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentci_docs_final 开始Base URL 始终写https://taotoken.net/apiKey 占位符统一用YOUR_API_KEY不要提交真实值。