为什么做这个

这次笔试可以在三个方向里选一个,我选了 AI API 费用估算器。API 价格跟 AI 从业者的日常工作很近:如果连一次对话大概要花多少钱都估不出来,就很难判断一个功能上线后的费用。我想先做一个范围明确的小页面,输入每次请求的输入 token、输出 token 和每月调用次数,直接看到几种模型的预计月费用。它不调用模型 API,所以也不需要把密钥放进前端或仓库。

我亲手完成的部分

我以前更多接触 Java,对这种纯前端页面没有现成思路。Codex 先搭好 HTML/CSS 页面和输入校验,我按“读取输入、检查、计算、显示”理解每段代码。我打开 OpenAI 和 Anthropic 的官方价格页,核对四个模型的输入价与输出价,并记下查询时间。价格的单位是每百万 token,而页面让人填的是一次请求的 token 数;因此每次费用要除以 1,000,000,最后再乘月调用次数。我在 Codex 的提示下亲自写了这段计算函数,用 2,000 输入 token、500 输出 token、每月 1,000 次手算和页面对照,得到 $10、$1、$9 和 $4.50。之后我还试了空值、负数和极小用量,并自己完成多次 Git 提交、创建公开仓库、操作部署和手机检查。

两个错误比顺利的部分更有用

第一次点“更新估算”时,控制台报 ReferenceError: outputCost is not defined。我把变量名拼错了,改好后四个默认结果才显示出来。这让我知道页面上的“—”不能简单理解为价格还没填,应该先看 Console 和具体调用位置。

另一个错误来自 Codex 给的初版显示代码:它用 toFixed(2) 保留两位小数。我把用量改成 1 个输入 token、0 个输出 token、调用 1 次时,Luna 明明有 $0.0000002 的费用,页面却显示 $0.00。计算公式没有错,错在最后的展示。我改用 Intl.NumberFormat,正常金额仍显示两位,小额费用最多显示八位。AI 给的代码省了起步时间,但这一步如果不自己试边界值,就会把错误带到线上。

部署为什么花了约一小时

最久的是 Cloudflare 部署,大约花了一个小时。我一开始进了 Workers 的创建流程,后台的 Visit 按钮能打开页面,看起来像已经完成。但把地址贴进无痕窗口时,浏览器报 ERR_NAME_NOT_RESOLVED,公共 DNS 查询也找不到这个域名。后来我在创建页找到 “Continue to Pages”,把同一个 GitHub 仓库接到 Cloudflare Pages。新的 pages.dev 地址有 DNS 记录,首页、脚本和样式文件都能返回 200;我又用无痕窗口和手机检查,才敢把它当作可提交的链接。部署面板显示成功,与陌生人能打开,是两项不同的检查。

下次我会先做什么

如果再做一次,我会更早把最小页面推到公开仓库并接上部署,提前暴露域名和平台配置问题。计算功能会继续用一组手算样例核对,再补空值、负数和小额费用测试。这个版本仍有边界:价格是手工记录的,之后可能变化;缓存、长上下文、批处理以及不同模型的分词差异都没有计入。它适合粗估预算,不能当账单。下次每做完一步,我都要拿一个真实输入或一个无痕窗口去验证,不等到最后才发现问题。