ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

测 CAD 生成精度:港大 1.5B 模型走 TaoToken 的 API 记录

测 CAD 生成精度:港大 1.5B 模型走 TaoToken 的 API 记录 1. 从 CAD 参数级精度测试说起先把 TaoToken 的 Key 与 Base URL 固定下来把港大 1.5B 模型用于 CAD 参数级精度测试时我先在 TaoToken 官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentcad_api_log_intro 拿 Key再把工具里的 Base URL 指向https://taotoken.net/api。最近 CAD 生成圈在讨论小参数模型如何把参数级精度做细从“能不能画出形状”推进到“长度、半径、角度、孔距能不能对得上”。我不准备把文章写成模型排名评论而是把一次可复查的 CAD 生成精度测试拆成 API 记录请求日志怎么留、Key 环境变量怎么放、精度对照表怎么建。这样做的原因很直接CAD 参数级测试不是单轮聊天同一提示、同一模型、同一参数集只要网络重试、模型名写错、温度漂移最后误差表就不可信。API 记录留痕能把“模型生成结果”和“这一次请求到底发了什么、花了多久、返回了什么”绑定在一起。后面所有步骤都可以本地执行不需要把 CAD 文件或生产数据交给不可控链路。这类测试最容易踩的坑是把注意力全放在“模型出图效果”上却没有留下请求侧证据。比如同一个零件要求生成length120mm、hole_diameter8mm、hole_distance60mm模型这次返回 120.02下次返回 119.7如果没有run_id、prompt_hash、model、latency_ms你根本不知道差异来自提示词、采样参数、模型版本还是网络重试。TaoToken 在这里承担的是统一 API 入口和调用记录入口先把 Key 管起来再把 Base URL 固定最后让每次 CAD 生成请求都能落到 JSONL 日志里。本篇的目标不是证明某个模型一定更强而是给出一套能跟做的记录方法。产出有三个第一可追加的请求日志第二可复制的 Key 环境变量配置第三可汇总的精度对照表。下面从创建 Key 开始。2. 在 TaoToken 官网创建 Key 并写入环境变量请求日志的起点先打开 TaoToken 官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentcad_api_log_key按控制台引导创建 API Key。创建完成后不要直接把 Key 写进代码也不要提交到 Git。建议统一用环境变量管理后续 Python 脚本、Claude Code、Codex 都从环境变量读取。macOS / Linux 写法export TAOTOKEN_API_KEYYOUR_API_KEY export TAOTOKEN_BASE_URLhttps://taotoken.net/apiWindows PowerShell 写法$env:TAOTOKEN_API_KEYYOUR_API_KEY $env:TAOTOKEN_BASE_URLhttps://taotoken.net/api如果你习惯用.env文件可以这样写TAOTOKEN_API_KEYYOUR_API_KEY TAOTOKEN_BASE_URLhttps://taotoken.net/api这里要特别区分两个 URL官网入口https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_content...用于拿 Key、看文档、进控制台。API Base URLhttps://taotoken.net/api用于工具配置和代码请求不要带 UTM 参数。创建完 Key 后可以用一条最小请求验证环境变量是否生效curl -sS https://taotoken.net/api/v1/models \ -H Authorization: Bearer ${TAOTOKEN_API_KEY} \ -H Content-Type: application/json | head -c 500如果这里返回 401优先检查TAOTOKEN_API_KEY是否真的被 shell 读取而不是只写进了编辑器但没重新打开终端。如果返回 404优先检查 Base URL 是否被误写成官网带 UTM 的地址。记住工具配置里只认https://taotoken.net/api。3. 用 Python 采集请求日志把 CAD 生成调用写成 JSONLCAD 参数级精度测试需要稳定记录。推荐用 JSONL 而不是普通文本日志因为每一行就是一个独立 JSON后续既可以用jq过滤也可以直接读进 pandas 做误差汇总。下面这个脚本只做一件事发送 CAD 参数生成请求并把请求上下文、响应文本、耗时、错误信息追加到cad_api_calls.jsonl。模型 ID 请从 TaoToken 的模型对话页复制不要凭记忆手写。import hashlib import json import os import time import uuid from pathlib import Path import requests BASE_URL os.environ.get(TAOTOKEN_BASE_URL, https://taotoken.net/api) API_KEY os.environ[TAOTOKEN_API_KEY] LOG_FILE Path(cad_api_calls.jsonl) def stable_hash(text: str) - str: return hashlib.sha256(text.encode(utf-8)).hexdigest()[:16] def call_cad_model(prompt: str, model: str, temperature: float 0.0) - dict: url f{BASE_URL}/v1/chat/completions payload { model: model, messages: [ {role: system, content: 你只输出 JSON不要解释。}, {role: user, content: prompt}, ], temperature: temperature, } headers { Authorization: fBearer {API_KEY}, Content-Type: application/json, } run_id str(uuid.uuid4()) started time.time() error None response_json None response_text None try: resp requests.post(url, headersheaders, jsonpayload, timeout180) latency_ms int((time.time() - started) * 1000) response_text resp.text if resp.status_code 200: response_json resp.json() else: error fHTTP {resp.status_code} except Exception as exc: latency_ms int((time.time() - started) * 1000) error repr(exc) record { run_id: run_id, ts: time.time(), model: model, prompt_hash: stable_hash(prompt), prompt: prompt, temperature: temperature, latency_ms: latency_ms, http_error: error, response_text: response_text, usage: (response_json or {}).get(usage), request_id: (response_json or {}).get(id), } with LOG_FILE.open(a, encodingutf-8) as f: f.write(json.dumps(record, ensure_asciiFalse) \n) if error: raise RuntimeError(error) return response_json这段脚本有几个刻意设计先写日志再抛异常。这样即使请求失败也能留下失败记录。prompt_hash用来确认两次运行是不是同一套提示词。request_id来自响应体便于和服务端记录对齐。latency_ms用来判断 CAD 长输出是否接近超时。temperature0.0是精度测试的默认起点减少采样随机性。调用示例prompt 请生成一个 CAD 参数化零件 JSON零件名为 plate。 必须包含参数 - length: 120 mm - width: 80 mm - hole_diameter: 8 mm - hole_distance: 60 mm - angle: 45 deg 输出格式 {part:plate,params:[{name:length,unit:mm,value:120.0}]} result call_cad_model( promptprompt, model从模型对话页复制的模型ID, temperature0.0, ) print(json.dumps(result, ensure_asciiFalse, indent2))如果模型返回的不是严格 JSON不要急着改模型先把response_text原样落盘。后续可以用解析器重放历史日志而不是重新请求。对于港大 1.5B 这类 CAD 生成模型参数级精度测试的关键往往不是第一次能不能返回而是失败样本能不能被复盘。4. 精度对照表从 CAD 参数 JSON 到绝对误差和通过率请求日志解决“当时发了什么”精度对照表解决“生成结果差了 Compatible 多少”。建议让模型输出统一结构例如{ part: plate, params: [ {name: length, unit: mm, value: 120.0}, {name: width, unit: mm, value: 80.0}, {name: hole_diameter, unit: mm, value: 8.0}, {name: hole_distance, unit: mm, value: 60.0}, {name: angle, unit: deg, value: 45.0} ] }然后写一个解析和比较函数import json def extract_params(response_json): content response_json[choices][0][message][content] data json.loads(content) return {p[name]: p for p in data[params]} def build_compare_rows(run_id, model, target, generated, tolerances): rows [] for name, t in target.items(): g generated.get(name) target_value float(t[value]) gen_value float(g[value]) if g and value in g else None abs_error None if gen_value is None else abs(gen_value - target_value) rel_error None if gen_value is not None and target_value ! 0: rel_error abs_error / abs(target_value) tol tolerances.get(name, {abs: 0.01, rel: 0.001}) passed ( gen_value is not None and abs_error tol[abs] and (rel_error is None or rel_error tol[rel]) ) rows.append({ run_id: run_id, model: model, param: name, unit: t.get(unit), target: target_value, generated: gen_value, abs_error: abs_error, rel_error: rel_error, passed: passed, }) return rows建议对照表字段固定为run_id,model,part,param,unit,target,generated,abs_error,rel_error,passed,latency_ms,request_id对应的 Markdown 模板可以这样记录run_idmodelparamunittargetgeneratedabs_errorrel_errorpassed本地生成的 UUID模型 IDlengthmm120.0120.020.020.00017true本地生成的 UUID模型 IDhole_diametermm8.07.980.020.0025可能 false本地生成的 UUID模型 IDangledeg45.045.00.00.0true注意这里示例数字只用于说明字段不代表任何模型实测结论。真正要对比时应该固定同一套题集、同一套提示词、同一套容差并把run_id与 JSONL 请求日志关联起来。如果你想比较“港大 1.5B 模型走 TaoToken API 记录”和其他模型路由不要只看平均值至少同时看完全通过率所有参数都在容差内的样本占比。参数级通过率单个参数维度上的通过比例。最大绝对误差最差参数偏差。最大相对误差适合不同尺度零件的比较。空值率模型没有返回该参数的比例。重试率需要重复请求才成功的比例。精度对照表不是越复杂越好而是每次结论都能回查到原始响应。只要run_id能对上 JSONL任何异常数字都能被重新打开。5. Claude Code 配置settings.json 与 ANTHROPIC_* 指向 TaoToken如果你用 Claude Code 整理 CAD 测试项目、查看日志、检查配置文件可以把模型服务切到 TaoToken。配置入口先看官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentcad_api_log_config然后按下面方式写settings.json。{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: YOUR_API_KEY, ANTHROPIC_MODEL: 从模型对话页复制的模型ID, ANTHROPIC_SMALL_FAST_MODEL: 从模型对话页复制的轻量模型ID } }如果你不用settings.json也可以用环境变量export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_AUTH_TOKENYOUR_API_KEY export ANTHROPIC_MODEL从模型对话页复制的模型ID export ANTHROPIC_SMALL_FAST_MODEL从模型对话页复制的轻量模型IDClaude Code 的关键是它使用ANTHROPIC_*这一组变量。不要把这一组变量照抄到 Codex 的配置里两者不是同一套配置协议。如果你用 CC Switch 管理多套配置可以把它理解成“三件套”{ name: TaoToken, baseUrl: https://taotoken.net/api, apiKey: YOUR_API_KEY, model: 从模型对话页复制的模型ID }三件套分别是Provider 名称例如TaoToken方便在多个供应商之间切换。Base URL固定为https://taotoken.net/api不加 UTM。API Key使用YOUR_API_KEY占位真实 Key 只放本地环境变量或密钥管理工具。切换完后建议在终端里执行一次简单请求或打开 Claude Code 做一次最小对话确认没有 401 和 404。然后回到 CAD 测试脚本继续用TAOTOKEN_API_KEY和TAOTOKEN_BASE_URL跑批量请求。Claude Code 和 Python 脚本可以共用同一个 Key但日志要分开Claude Code 的交互记录不等于 CAD 批量测试的请求日志。6. Codex 配置config.toml 使用 TaoToken不要把 ANTHROPIC_* 抄过来Codex 的配置方式与 Claude Code 不同。它通常使用~/.codex/config.toml通过model_provider指定供应商通过env_key读取 API Key。不要在这里写ANTHROPIC_BASE_URL或ANTHROPIC_AUTH_TOKEN。示例model 从模型对话页复制的模型ID model_provider taotoken [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 --config ~/.codex/config.toml这里的base_url同样固定为https://taotoken.net/api不要带utm_source、utm_content等参数。env_key写的是环境变量名不是 Key 本身。Codex 读取的是TAOTOKEN_API_KEY不会去读ANTHROPIC_AUTH_TOKEN。如果团队里同时有人用 Claude Code、有人用 Codex建议配置分文件或分 shell 会话Claude Codesettings.jsonANTHROPIC_*。Codexconfig.tomlTAOTOKEN_API_KEY。Python 批量脚本.envTAOTOKEN_API_KEY、TAOTOKEN_BASE_URL。不要在 Codex 里混用 Claude Code 的环境变量。混用最常见的后果是终端里ANTHROPIC_BASE_URL看起来存在但 Codex 完全不读它最后表现为 401 或模型名找不到。7. 排障401、404、模型名、超时、日志断档CAD 参数级测试的排障最好按“请求前、请求中、请求后”分段看。下面这张表可以作为排查清单。现象高概率原因处理方式401 unauthorizedKey 未写入环境变量或 Authorization 头缺失重新从 TaoToken 官网创建 Key确认YOUR_API_KEY已替换404 /v1/chat/completionsBase URL 被写成官网带 UTM 链接或端点拼接错误工具配置统一为https://taotoken.net/api脚本再拼/v1/chat/completionsmodel not found模型 ID 不是模型对话页里的实际 ID从模型对话页复制模型 ID不要手写简写请求超时CAD 输出较长或网络波动将 timeout 调到 180 秒并把latency_ms写入日志日志断档先raise_for_status再写日志失败时没有记录先写 JSONL再抛异常精度漂移temperature 高、提示词变体、模型版本变化固定temperature0.0记录prompt_hash和model返回不是 JSON模型未按格式输出保留response_text后续离线重放解析不要直接丢掉失败样本多个请求串味并发时共用一个 run_id每个请求生成独立run_id和request_id还有一个常见误区把 Key 打到日志里。请求日志只记录Authorization是否存在不要记录完整 Header。如果需要定位 Key可以只记录 Key 的后四位或哈希不要记录全文。排障时也不要跳过最小验证。先跑curl看模型列表再跑 Python 单条 CAD 请求最后才跑批量。批量失败往往不是模型问题而是环境变量、Base URL、模型 ID 三个基础项之一没有对齐。8. 把流水线跑成可复现请求日志、Key 环境变量、精度对照表三件套到这里可以把整套流程固定成流水线打开 TaoToken 官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentcad_api_log_pipeline 创建 Key。在本地 shell 写入TAOTOKEN_API_KEY和TAOTOKEN_BASE_URL。准备 CAD 参数题集每个零件包含目标参数、单位、容差。用 Python 脚本调用 API把每次请求追加到cad_api_calls.jsonl。从response_text解析参数生成run_id级别的精度对照表。对失败样本做抽样复测比较prompt_hash、model、temperature、latency_ms是否一致。重要结论只从对照表里出不从单次对话截图里出。这套流程不依赖特定 CAD 软件也不要求把生产库或敏感文件交给外部服务。命令和 SQL 都由读者在本地或测试环境执行。你测的可以是港大 1.5B 模型也可以是其他 CAD 生成模型真正可复用的部分是 Key 环境变量、API Base URL、请求日志和精度对照表。如果你要先把 CAD 参数级生成测试跑起来可以按这个路径走先到 模型对话 确认模型 ID 和返回格式需要长期跑批量请求看 Coding Plan到 API Keys 创建YOUR_API_KEY对应密钥配置 Claude Code 时参考 Claude Code 文档。最后再把 Base URL 固定为https://taotoken.net/api每次请求先落run_id、model、prompt_hash、latency_ms、response_text再谈参数级精度。这样无论你对比的是哪个 CAD 生成模型结果都能回到请求日志里复查。
返回列表