ARTICLE DETAIL

资讯详情

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

CodexBar 接入 ai(aiand.com)用量统计:基于请求日志 API 的 30 天组织支出汇总指南

CodexBar 接入 ai(aiand.com)用量统计:基于请求日志 API 的 30 天组织支出汇总指南 CodexBar 接入 aiaiand.com用量统计基于请求日志 API 的 30 天组织支出汇总指南【免费下载链接】CodexBarShow usage stats for OpenAI Codex and Claude Code, without having to login.项目地址: https://gitcode.com/GitHub_Trending/co/CodexBar导读本文讲解 CodexBar 如何将 aiaiand.com接入为用量统计 Provider从 API Key 的创建与配置图形界面、环境变量、CLI 三种方式到请求日志 API 的认证、游标分页与按行cost字段求和的数据链路再到菜单栏中API spend行的展示语义、异常码排查与部分汇总标记。读完本文你将掌握 ai 组织级支出的完整采集原理、原生取数器native fetcher的边界行为以及如何在代码与测试中验证这些行为。ai 是一个兼容 OpenAI/Anthropic 协议的推理网关inference gateway可支撑 Claude Code、Codex CLI 与 opencode 三种命令行工具ai 官方文档为三者均提供了专门集成指南。CodexBar 仅依赖 ai 公开的 request-log API 读取组织级支出无需登录 ai 控制台、无需读取浏览器 Cookie 或会话。本文以 docs/aiand.md 为骨架结合仓库源码 AiAndUsageFetcher.swift、AiAndProviderDescriptor.swift、AiAndProviderImplementation.swift 与测试 AiAndProviderTests.swift 展开。一、为什么选 request-logs API成本数据的唯一公开来源CodexBar 采集 ai 用量时面临一个现实约束截至 2026-07-17ai 的文档化cost_usd字段在实时的GET /analytics/summary响应中缺失该端点只返回请求/Token 计数与 Token 时间序列/analytics/metrics也没有成本序列。相比之下/logs端点与其文档完全一致并且是唯一公开报告成本cost的端点。因此 CodexBar 选择从请求日志 API 逐行读取并汇总支出而不是使用分析摘要端点。这一决策直接体现在代码中AiAndUsageFetcher将请求地址固定为https://api.aiand.com/logs见 AiAndUsageFetcher.swift并只消费日志行中的cost与currency两个元数据字段——不读取推理提示词prompt内容、浏览器 Cookie、控制台会话等任何敏感数据。二、认证与 API Key 配置2.1 在 ai 控制台创建密钥在 ai 控制台 的 Settings → API Keys → Create 创建 API Key。密钥以sk-前缀开头仅在创建时展示一次之后无法再次查看务必立即保存。2.2 在 CodexBar 图形界面配置打开 CodexBar 的 Settings → Providers → ai在 API key 字段粘贴密钥。该字段由AiAndProviderImplementation.settingsFields声明为.secure类型占位符为sk-…并附带一个 Open ai Console 链接按钮可直接跳转到https://console.aiand.com见 AiAndProviderImplementation.swift。密钥最终存入 CodexBar 的配置文件。2.3 通过环境变量配置export AIAND_API_KEY...环境变量名AIAND_API_KEY在 AiAndSettingsReader.swift 中定义。AiAndAPIFetchStrategy.isAvailable会检测该变量是否存在来决定是否启用 ai 取数策略AiAndProviderImplementation.isAvailable同时检查环境变量与图形界面配置任一存在即视为可用。读取环境变量时AiAndSettingsReader.cleaned会先做规范化去掉首尾空白剥离成对的单引号或双引号后再去一次空白空串或纯空白返回nil。也就是说AIAND_API_KEYsk-...这类带引号的值也能被正确清洗。2.4 通过 CLI 写入配置printf %s $AIAND_API_KEY | codexbar config set-api-key --provider aiand --stdincodexbar config set-api-key命令在 CLIConfigCommand.swift 中路由支持的子命令还包括config validate、config dump、config providers、config enable、config disable。使用--stdin可以从管道安全地传入密钥避免密钥出现在 shell 历史中该命令会把密钥写入解析出的配置文件并默认启用该 Provider。此外ProviderConfigEnvironment.applyAPIKeyOverride支持把配置中的apiKey注入取数环境测试config API key projects into the fetch environment验证了这一点。说明aiand是 CLI 与配置中使用的规范化 Provider 名cliName: aiand此外还注册了ai与ai-and两个别名见 AiAndProviderDescriptor.swift。三、数据源与请求协议3.1 请求参数与分页CodexBar 每次刷新向日志端点发起如下请求GET https://api.aiand.com/logs?range30dayslimit100并遵循next_after/next_after_id游标分页规则两个游标总是同时携带ai 文档要求如此最多翻 10 页。对应代码为 AiAndUsageFetcher.swift每页固定limit100pageLimit10 页即最多覆盖窗口内最新的 1,000 条请求记录maxPages第一页不携带游标后续页把上一页响应的next_after与next_after_id一并放入 query如果服务器返回has_more true却没有同时给出两个游标出于文档对单独使用after不安全的警告取数会立即停止并把结果标记为 partial部分汇总若 10 页用尽仍未到达窗口末尾同样标记为 partial见 3.4 节。一个实现细节游标时间戳携带00偏移URLComponents在 query 中会原样保留而服务器端可能把解码为空格因此代码在组装完 query 后把显式替换为%2B见 AiAndUsageFetcher.swift。3.2 认证与请求头请求携带Authorization: Bearer AIAND_API_KEY密钥只通过 Bearer 头传递绝不进入 URL query测试credential is only sent as a bearer header断言 URL 中不包含密钥Accept: application/json超时时间 15 秒requestTimeoutSeconds。请求日志的响应体形如脱敏后的真实样例取自测试 AiAndProviderTests.swift{ data: [ { id: cdd2b25d-0000-4000-8000-000000000001, model: zai-org/glm-5.2, api_key: masked, status_code: 200, input_tokens: 170569, output_tokens: 248, cost: 7.02344000, currency: jpy, created_at: 2026-07-17 10:24:30.09437400 } ], has_more: false, next_after: null, next_after_id: null }CodexBar 的LogsEnvelope解码器只关心data、has_more、next_after、next_after_id四个字段日志行只取cost与currency两个字段见 AiAndUsageFetcher.swift。3.3 金额累加十进制字符串绝不使用浮点支出是每个日志行cost字段的求和。关键约束cost以十进制字符串解析全程使用Decimal累加绝不使用浮点数见 AiAndUsageFetcher.swift用Decimal(string:locale:)配合en_US_POSIX区域解析保证小数点语义稳定跳过cost为 null、解析失败的行例如status_code 500的失败请求行货币取自每行currency字段小写归一化如jpy、usd求和时只累加最新一行定价行的币种对应的行——若日志行币种不一致只累计与最新行币种一致的行其余跳过测试mixed currencies keep the newest rows currency and skip the rest验证最新行为 JPY 时USD 行不计入总额最终输出时币种代码转大写JPY、USD。用Decimal而非Double的原因在测试decimal money strings sum exactly中写得很直白0.1 0.1 0.1用Decimal累加恰好等于0.3而Double求和会产生漂移——这正是金额必须精确的记账场景。3.4 窗口边界与部分汇总标记汇总结果的语义在AiAndUsageSnapshot中显式建模见 AiAndUsageFetcher.swiftlast30DaysSpend窗口内有定价行时是一个Spend(amount, currencyCode)窗口内无任何请求无日志行时该值为nil——因为组织币种只能从日志行观察空窗口没有任何币种来源宁可省略成本也不猜测币种isCompletefalse表示 10 页上限被命中或游标缺失汇总只覆盖最新的 1,000 条请求映射到UsageSnapshot时完整汇总的周期标签为Last 30 days部分汇总为Last 30 days (partial)dataConfidence分别为.exact与.estimatedai 按预付费额度计费、没有配额窗口因此primary/secondary/RateWindows一律为nil只产出providerCostlimit: 0表示无上限。测试覆盖了空窗口empty window omits the cost snapshot instead of guessing a currency、无币种行rows without a currency are skipped…、命中页数上限hitting the page cap marks the spend partial与游标缺失missing pagination cursor marks the spend partial四类边界。四、展示语义菜单栏中的 API spend 行4.1 菜单卡片内容ai 的菜单卡片展示最近 30 天的组织支出以组织计费币种呈现行标题为 API spend由 AiAndProviderDescriptor.swift 的 cost presenter 根据limit 0判定为.apiSpend样式。由于 ai 是预付费无配额窗口模式不显示 session 或每周weekly计量条sessionLabel/weeklyLabel均为 Spend 但实际不渲染 meter不显示百分比percentUsed/percentLine为 nil因为不存在限额-已用结构不显示剩余额度预付费余额只在 ai 控制台可见公开 API 不暴露该数据。测试menu card renders spend through the generic API-spend path断言model.metrics为空、creditsText为 nil、providerCost.title API spend支出行显示为类似Last 30 days: ¥8的文本。4.2 原生取数器保持权威性文档与实现都强调原生取数器native fetcher是权威数据源。空窗口时必须省略成本而不是猜测币种产出一个没有窗口、没有成本、没有明细的成功快照当前的插件plugin快照契约拒绝这种成功但无 cost的结果这也是 ai 不采用插件式取数的原因之一。五、CLI 用法codexbar usage --provider aiandai与ai-and同样可以作为 Provider 别名使用由 AiAndProviderDescriptor.swift 的cli.aliases注册。该命令会走AiAndAPIFetchStrategy的.apiToken取数管线sourceModes: [.auto, .api]命中环境变量或配置文件中的密钥后调用AiAndUsageFetcher.fetchUsage并输出 30 天支出汇总。六、故障排查现象含义处理方式401ai 拒绝了 API Key在控制台重新创建密钥密钥只展示一次并更新 CodexBar 配置402组织预付费额度已耗尽前往 console.aiand.com 充值429命中每分钟速率限制无需手动操作CodexBar 会在下一个刷新周期自动重试(partial)周期标签命中 10 页上限汇总仅覆盖窗口内最新 1,000 条请求不存在静默截断快照无 cost窗口内无定价日志行属于预期行为空窗口无币种来源宁缺毋滥错误映射逻辑集中在 AiAndUsageFetcher.swift 与AiAndUsageError的错误描述中401 →authenticationRejected、402 →insufficientCredits、429 →rateLimited、其他非 2xx →apiError(statusCode)解析失败 →parseFailed未配置密钥 →notConfigured。每条错误信息都带有可操作提示例如 401 提示前往 console.aiand.com 创建新密钥测试invalid api key maps to an actionable error等用例对此逐一验证。七、其他值得注意的边界行为日志保留期恰好等于汇总窗口ai 仅保留 30 天请求日志与 CodexBar 求和窗口一致API Key 是组织级作用域同一组织内任意密钥返回的均为组织级支出不同密钥看到同一份总额币种来源只有日志行CodexBar 从不臆测币种若组织在窗口内没有请求就没有任何币种来源此时不显示支出行隐私边界取数器只读取每行cost/currency元数据不读取浏览器 Cookie、控制台会话与推理提示词内容。八、源码地图快速定位数据获取与汇总Sources/CodexBarCore/Providers/AiAnd/AiAndUsageFetcher.swiftProvider 描述符展示、品牌色、CLI 别名、取数计划Sources/CodexBarCore/Providers/AiAnd/AiAndProviderDescriptor.swift环境变量与密钥清洗Sources/CodexBarCore/Providers/AiAnd/AiAndSettingsReader.swift图形界面设置字段与可用性判定Sources/CodexBar/Providers/AiAnd/AiAndProviderImplementation.swift行为验证测试分页、币种、空窗口、错误映射、菜单渲染Tests/CodexBarTests/AiAndProviderTests.swift配置写入命令入口Sources/CodexBarCLI/CLIConfigCommand.swift通过以上链路CodexBar 无需登录即可获得 ai 组织最近 30 天的精确支出并以明确的完整/部分语义保证任何汇总都不会被静默截断。【免费下载链接】CodexBarShow usage stats for OpenAI Codex and Claude Code, without having to login.项目地址: https://gitcode.com/GitHub_Trending/co/CodexBar创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表