2026/9/18 21:06:56

部署 CAD 参数级生成服务,TaoToken 只改环境变量

部署 CAD 参数级生成服务,TaoToken 只改环境变量 1. 部署 CAD 参数级生成服务前先把 TaoToken Key 和 Base URL 抽象出来近期港大团队把 CAD 生成推进到参数级轻量模型让参数化建模服务更容易跑起来。但真正部署时拖慢上线的往往不是模型本身而是 API 入口散落在 Python 代码、Shell 启动脚本、CI 变量和本地工具配置里。本文给出一套可复制的部署路径先在 TaoToken 官网创建 Key入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentcad_deploy_intro 然后把 CAD 参数生成服务的 Base URL 统一指向 https://taotoken.net/api 。之后无论是本地调试、Docker 启动还是拆到测试环境只改环境变量不碰业务代码。这套方案的目标很明确产出一个.env环境变量文件、一条可复制的启动命令以及一份服务自检结果。CAD 参数级生成服务和普通聊天服务不同它要求输出结构化参数例如零件类型、单位、长宽厚、孔位、约束、公差。只要 API 入口被硬编码后面每次换环境都要重新改代码、重新构建镜像排障成本会成倍增加。把 TaoToken 的 Key 和 Base URL 抽到环境变量后服务部署、Claude Code 接入、Codex 接入、CC Switch 切换可以共用同一套供应商信息维护边界会清晰很多。本文不会把重点放在热点新闻上而是直接写接入、配置和排障。你如果正在部署 CAD 参数级生成服务可以按下面的顺序走拿 Key、写.env、启动 FastAPI、自检/health和/generate、接入 Claude Code、接入 Codex、用 CC Switch 管理多套配置。2. 从 TaoToken 官网创建 Key先验证模型对话再落到 API Keys第一步不是写代码而是把 Key 和 Base URL 确认下来。打开 TaoToken 官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentcad_deploy_key 完成登录后进入控制台。建议先用模型对话页面做一次最小验证确认目标模型能理解 CAD 参数化需求并尽量返回 JSON。模型对话入口是 https://taotoken.net/models/detail/chat?utm_sourcetaotoken_aicg_blog_endutm_contentcad_deploy_chat 。在对话页可以输入类似需求生成一个 L 型支架单位 mm长 80宽 40厚 5两个 M4 通孔孔中心距边缘 10输出 JSON。如果返回内容里包含part_type、units、length、width、thickness、holes等字段说明模型侧基本可用。接下来进入 API Keys 页面创建 Key地址是 https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentcad_deploy_keys 。创建后复制 Key只显示一次先放到密码管理器或本地临时环境变量里不要直接写进代码仓库。本文统一用占位符YOUR_API_KEYBase URL 固定为https://taotoken.net/api注意Base URL 在工具配置中不加 UTM 参数。Claude Code、Codex、CC Switch 以及你自己的 CAD 服务都使用这个统一入口。模型名称不要猜直接从模型对话页或控制台可用列表里复制本文用YOUR_MODEL_NAME占位。3. 环境变量文件CAD 参数级生成服务的最小可部署配置部署 CAD 参数级生成服务时建议第一版就按“配置与代码分离”来做。项目根目录创建.env本地开发用.env.local覆盖生产环境用容器 Secret 或 K8s Secret 注入。下面是一份最小可用环境变量文件# TaoToken 供应商配置 TAOTOKEN_API_KEYYOUR_API_KEY TAOTOKEN_BASE_URLhttps://taotoken.net/api TAOTOKEN_MODELYOUR_MODEL_NAME # CAD 服务配置 CAD_SERVICE_HOST0.0.0.0 CAD_SERVICE_PORT8000 CAD_REQUEST_TIMEOUT120 CAD_USE_JSON_MODEtrue CAD_LOG_LEVELINFO字段说明TAOTOKEN_API_KEY从 TaoToken API Keys 页面创建占位符为YOUR_API_KEY。TAOTOKEN_BASE_URL统一指向https://taotoken.net/api不要在每个模块里重复写。TAOTOKEN_MODEL填写你在模型对话页验证通过的模型名。CAD_SERVICE_HOST本地调试可写127.0.0.1容器部署通常写0.0.0.0。CAD_SERVICE_PORT服务监听端口默认 8000。CAD_REQUEST_TIMEOUTCAD 参数生成可能需要较长推理时间建议 120 秒起步。CAD_USE_JSON_MODE控制是否启用 JSON 输出模式如果模型不支持可设为false改用提示词约束。CAD_LOG_LEVEL日志级别生产环境不要打印 Key 和完整请求体。如果你使用 Docker不要把.env直接打进镜像。推荐启动时注入docker run --rm -p 8000:8000 \ --env-file .env \ cad-param-service:latest在 K8s 中则拆成 ConfigMap 和 SecretTAOTOKEN_BASE_URL、TAOTOKEN_MODEL可以放 ConfigMapTAOTOKEN_API_KEY放 Secret。这样部署 CAD 参数级生成服务时切换供应商只需要替换环境变量不需要重新改镜像。4. FastAPI 服务代码用 OpenAI 兼容 SDK 指向 TaoToken Base URL下面给出一个最小 CAD 参数生成服务。它使用 FastAPI 暴露/health和/generate内部通过 OpenAI 兼容 SDK 调用 TaoToken。代码中的 Key、Base URL、模型名全部来自环境变量。# app/main.py import os import json from typing import Any from dotenv import load_dotenv from fastapi import FastAPI, HTTPException from openai import OpenAI from pydantic import BaseModel, Field load_dotenv() TAOTOKEN_API_KEY os.getenv(TAOTOKEN_API_KEY) TAOTOKEN_BASE_URL os.getenv(TAOTOKEN_BASE_URL, https://taotoken.net/api) TAOTOKEN_MODEL os.getenv(TAOTOKEN_MODEL, YOUR_MODEL_NAME) CAD_USE_JSON_MODE os.getenv(CAD_USE_JSON_MODE, true).lower() true if not TAOTOKEN_API_KEY: raise RuntimeError(TAOTOKEN_API_KEY 未设置请先在 TaoToken 官网创建 Key) client OpenAI( api_keyTAOTOKEN_API_KEY, base_urlTAOTOKEN_BASE_URL, timeoutfloat(os.getenv(CAD_REQUEST_TIMEOUT, 120)), ) app FastAPI(titleCAD Param Generator, version1.0.0) class CadRequest(BaseModel): prompt: str Field(..., min_length4, descriptionCAD 参数化需求) units: str Field(mm, pattern^(mm|cm|inch)$) tolerance: float Field(0.01, ge0.001, le1.0) SYSTEM_PROMPT 你是 CAD 参数级生成服务。 只输出 JSON不要 Markdown不要解释。 JSON 必须包含以下字段 - part_type: 零件类型 - units: 单位 - parameters: 数值参数对象 - holes: 孔位数组 - constraints: 约束数组 - warnings: 缺失信息或不确定项 如果用户没有给出某个尺寸不要编造写入 warnings。 def extract_json(text: str) - dict[str, Any]: text text.strip() if text.startswith(): text text.strip() if text.startswith(json): text text[4:].strip() try: return json.loads(text) except json.JSONDecodeError as exc: raise HTTPException(status_code502, detailf模型返回不是合法 JSON: {exc}) app.get(/health) def health(): return { status: ok, base_url: TAOTOKEN_BASE_URL, model: TAOTOKEN_MODEL, json_mode: CAD_USE_JSON_MODE, } app.post(/generate) def generate(req: CadRequest): user_content ( f单位{req.units}\n f公差{req.tolerance}\n f需求{req.prompt} ) kwargs: dict[str, Any] { model: TAOTOKEN_MODEL, messages: [ {role: system, content: SYSTEM_PROMPT}, {role: user, content: user_content}, ], temperature: 0.1, } if CAD_USE_JSON_MODE: kwargs[response_format] {type: json_object} try: resp client.chat.completions.create(**kwargs) except Exception as exc: raise HTTPException(status_code502, detailfTaoToken 调用失败: {exc}) content resp.choices[0].message.content or data extract_json(content) return {status: ok, data: data}这段代码的关键点有三个base_url来自TAOTOKEN_BASE_URL默认就是https://taotoken.net/api。api_key来自TAOTOKEN_API_KEY生产环境不要写死。model来自TAOTOKEN_MODEL从 TaoToken 模型对话或控制台复制。如果你的模型不支持response_format把CAD_USE_JSON_MODE设为false并依靠系统提示词约束 JSON。此时建议在extract_json里增加重试或修复逻辑例如先截取第一个{到最后一个}。5. 启动命令与本地自检结果安装依赖并启动服务。建议使用虚拟环境避免污染系统 Pythonpython -m venv .venv source .venv/bin/activate # Windows PowerShell: .venv\Scripts\Activate.ps1 pip install fastapi uvicorn python-dotenv openai pydantic启动命令uvicorn app.main:app \ --host ${CAD_SERVICE_HOST:-0.0.0.0} \ --port ${CAD_SERVICE_PORT:-8000} \ --reload如果你把环境变量写在.envpython-dotenv会在代码中加载。生产环境建议由进程管理器或容器平台注入不要依赖.env文件。服务启动后先做健康检查curl -s http://127.0.0.1:8000/health | jq预期自检结果{ status: ok, base_url: https://taotoken.net/api, model: YOUR_MODEL_NAME, json_mode: true }如果base_url不是https://taotoken.net/api说明环境变量没生效。检查.env是否在项目根目录、当前工作目录是否正确、系统环境变量是否覆盖了文件值。再做一次 CAD 参数生成自检curl -s http://127.0.0.1:8000/generate \ -H Content-Type: application/json \ -d { prompt: 生成一个 L 型支架长 80mm宽 40mm厚 5mm两个 M4 通孔孔中心距边缘 10mm, units: mm, tolerance: 0.01 } | jq预期返回结构{ status: ok, data: { part_type: L_bracket, units: mm, parameters: { length: 80, width: 40, thickness: 5 }, holes: [ { type: through, diameter: 4.5, position: [10, 10] }, { type: through, diameter: 4.5, position: [70, 30] } ], constraints: [holes_vertical_to_base], warnings: [] } }自检通过的标准不是每个尺寸都完全固定而是HTTP 200、status为ok、base_url正确、data是合法 JSON、关键参数可被上层 CAD 脚本消费。如果返回 502优先看detail里的 TaoToken 调用错误。6. Claude Code settings.json用 ANTHROPIC_* 接入 TaoToken如果你在开发 CAD 参数生成服务时使用 Claude Code可以在settings.json中配置 TaoToken。Claude Code 使用ANTHROPIC_*环境变量不要和 Codex 配置混用。示例{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: YOUR_API_KEY, ANTHROPIC_MODEL: YOUR_MODEL_NAME, ANTHROPIC_SMALL_FAST_MODEL: YOUR_MODEL_NAME } }放置位置通常是你本机 Claude Code 的用户配置目录或项目级.claude/settings.json具体以你当前版本为准。配置后重启 Claude Code让它重新读取环境变量。验证时可以问一个 CAD 参数化问题例如请用 JSON 描述一个法兰盘参数单位 mm外径 100内径 40厚 106 个 M6 孔均布。如果 Claude Code 能正常返回并且你的服务日志里能看到来自https://taotoken.net/api的请求说明接入成功。更完整的 Claude Code 配置说明可参考 TaoToken 文档https://taotoken.net/doc/ClaudeCodeAnthropic?utm_sourcetaotoken_aicg_blog_endutm_contentcad_deploy_claude_doc 。这里再次强调Claude Code 用ANTHROPIC_*Codex 不要套用这一组变量。7. Codex config.toml走 OpenAI 兼容配置别把 ANTHROPIC_* 混进来Codex 使用config.toml配置模型供应商。它走的是 OpenAI 兼容风格不要写ANTHROPIC_BASE_URL或ANTHROPIC_AUTH_TOKEN。示例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_KEYYOUR_API_KEYWindows PowerShell 可以用$env:TAOTOKEN_API_KEYYOUR_API_KEYCodex 启动后用一个小任务验证读取当前目录下的 CAD 参数需求文件输出一个 JSON 参数草稿不要修改源文件。如果出现 401检查TAOTOKEN_API_KEY是否在当前终端可见如果出现 404检查base_url是否为https://taotoken.net/api不要自己拼接多余路径如果出现模型不存在回到模型对话页复制准确的模型名。Codex 配置和 Claude Code 配置可以共用同一个 Key但变量名和配置文件要分开管理。这样排障时不会因为变量串用导致误判。8. CC Switch 三件套Claude Code、Codex、供应商条目如果你同时维护 Claude Code、Codex 和自定义 CAD 服务用 CC Switch 做供应商切换会更稳。这里说的“三件套”是Claude Code 配置settings.json中的ANTHROPIC_*。Codex 配置config.toml中的model_providers。CC Switch 供应商条目把同一个 TaoToken Base URL 和 Key 映射到不同工具。CC Switch 不同版本字段名可能略有差异以你本机导入模板为准。下面是一个通用结构示例{ providers: [ { id: taotoken-claude, name: TaoToken Claude Code, kind: claude, baseUrl: https://taotoken.net/api, apiKeyEnv: TAOTOKEN_API_KEY, model: YOUR_MODEL_NAME }, { id: taotoken-codex, name: TaoToken Codex, kind: codex, baseUrl: https://taotoken.net/api, apiKeyEnv: TAOTOKEN_API_KEY, model: YOUR_MODEL_NAME } ] }切换完成后分别做三项检查Claude Code新建会话确认请求走 TaoToken Base URL。Codex执行一次只读任务确认没有使用旧的 OpenAI 或 Anthropic 配置。CAD 服务调用/health确认返回的base_url仍是https://taotoken.net/api。如果 CC Switch 切换后 Claude Code 正常、Codex 报错优先检查 Codex 的config.toml是否被旧内容覆盖以及是否误把ANTHROPIC_*写进了 Codex 环境。9. 排障手册401、404、超时、JSON 截断、参数漂移部署 CAD 参数级生成服务时常见问题集中在下面几类。401 UnauthorizedKey 没有传到服务。检查.env中TAOTOKEN_API_KEYYOUR_API_KEY是否已替换容器启动是否用了--env-fileK8s Secret 是否挂载正确。不要在日志里打印完整 Key只打印前四位和后四位。404 Not FoundBase URL 写错。统一使用https://taotoken.net/api不要自己加/v1/chat/completions之类路径除非你的 SDK 配置明确要求。OpenAI SDK 会根据base_url拼接接口路径。模型不存在TAOTOKEN_MODEL填错。回到模型对话页复制准确名称不要凭记忆拼写。模型名通常区分大小写和连字符。请求超时CAD 参数生成可能比普通对话慢。把CAD_REQUEST_TIMEOUT调到 120 或 180并在 FastAPI 前加反向代理超时配置。如果使用 Nginx同步调整proxy_read_timeout。JSON 截断模型输出过长或最大 token 不足。解决方式在系统提示词里要求精简字段减少无关解释必要时分两步生成先生成零件主参数再生成孔位和约束。参数漂移同一句需求多次生成结果差异大。把temperature降到 0.1 或 0并在系统提示词里固定单位、公差、字段顺序。服务层增加 Pydantic 校验例如尺寸必须为正数、孔径必须大于 0、孔位必须在轮廓内。日志泄露不要记录Authorization头、完整请求体和完整响应体。只记录请求 ID、模型名、耗时、状态码和错误摘要。CAD 需求本身可能包含产品结构信息生产环境要按敏感数据处理。并发限制如果多个 CAD 任务同时打进来服务层要做队列或信号量。不要在 FastAPI 路由里无限并发调用上游。可以用asyncio.Semaphore限制并发数超时后返回明确错误。10. 上线检查清单与 CTA模型对话 → Coding Plan → 创建 Key → Claude Code 文档上线前按这份清单逐项确认.env中没有把YOUR_API_KEY提交到 Git。TAOTOKEN_BASE_URL固定为https://taotoken.net/api。TAOTOKEN_MODEL来自模型对话页验证结果。/health返回status: ok和正确 Base URL。/generate能返回合法 JSON关键参数可被 CAD 脚本消费。Claude Code 使用ANTHROPIC_*Codex 使用config.toml两者没有混用。CC Switch 中 Claude Code 和 Codex 供应商条目均已指向 TaoToken。日志已脱敏没有打印 Key、Authorization 头和完整 CAD 需求。容器或 K8s 中使用 Secret 注入 Key而不是硬编码。有超时、重试、并发限制和失败告警。如果你还没有完成 Key 创建和模型验证建议按下面顺序走一遍先到模型对话页验证 CAD 参数生成效果https://taotoken.net/models/detail/chat?utm_sourcetaotoken_aicg_blog_endutm_contentcad_deploy_chat查看 Coding Plan 是否适合你的使用频率https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcad_deploy_plan在 API Keys 页面创建并保存 Keyhttps://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentcad_deploy_keys按 Claude Code 文档完成工具侧配置https://taotoken.net/doc/ClaudeCodeAnthropic?utm_sourcetaotoken_aicg_blog_endutm_contentcad_deploy_claude_doc回到部署这件事本身CAD 参数级生成服务的核心不是把模型权重塞进代码而是把供应商入口、模型名、超时、并发和日志做成可替换的环境变量。TaoToken 在这里承担统一 API 入口的角色先在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentcad_deploy_env 创建 Key然后把服务、Claude Code、Codex 和 CC Switch 都指向https://taotoken.net/api。后续换环境、扩容或排障时你只需要改环境变量不需要动 CAD 参数生成逻辑。