如何在命令行查火山CodingPlan用量"

admin 2026-10-20 12:56:30 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

cover_image

如何在命令行查火山 Coding Plan 用量

原创

hyang0
hyang0

生有可恋

2026年6月27日 09:00
湖北

在小说阅读器读本章

去阅读

火山提供了 Ark CLI 工具以及对应的 Claude Code Skill ,可以直接在 Claude Code 中查用量。

效果如下:

通过 arkcli 是可以查看所使用的 coding plan 的情况的。

不过使用前需要先通过 ark cli 登录,登录后 sso 状态会保留一段时间(47h)。

ark cli 安装:

npm install -g @volcengine/ark-cli

登录:

# 登录方式 :火山 SSO 浏览器登录 (推荐)arkcli auth login volc-sso

安装 skills :

# 装 skill 到你常用的 AI Agent (Claude Code / Cursor / trae / Gemini CLI 等)arkcli +connect

为了使用方便,我又将这个skill封了一层方便自己用。

封装好的 skill 使用效果如下:

测试了一下,底层使用的命令是:

$ arkcli usage plan

输出不是很直观:

除了使用安装的 skill ,也可以直接写一个 Python 脚本处理命令输出。

处理后的效果:

火山的 GLM-5.2 是不太够用,一轮对话差不多要用掉9.6%,查之前是0%,写了一个下面的脚本就用了周额度的1.3%,如果用的比较多的还真不够用。我两个号轮着在用,这个号用的比较少,可以作为用量参考。以后写代码都是要花钱的,古法编程不花钱。

脚本:

#!/usr/bin/env python3\"\"\"arkcli usage plan 输出封装工具方便查看 coding plan 用量\"\"\"import jsonimport subprocessimport sysfrom datetime import datetimedef get_usage_plan():    \"\"\"调用 arkcli usage plan 获取数据\"\"\"    try:        result = subprocess.run(            [\"arkcli\", \"usage\", \"plan\", \"--format\", \"json\"],            capture_output=True,            text=True,            check=True        )        return json.loads(result.stdout)    except FileNotFoundError:        print(\"错误: 未找到 arkcli 命令\", file=sys.stderr)        sys.exit(1)    except subprocess.CalledProcessError as e:        print(f\"错误: arkcli 命令执行失败\", file=sys.stderr)        if e.stderr:            try:                err_json = json.loads(e.stderr)                if err_json.get(\"error\", {}).get(\"message\"):                    print(f\"  {err_json['error']['message']}\", file=sys.stderr)            except:                print(f\"  {e.stderr}\", file=sys.stderr)        sys.exit(1)    except json.JSONDecodeError:        print(\"错误: 无法解析 arkcli 输出\", file=sys.stderr)        sys.exit(1)def format_timestamp(ts):    \"\"\"格式化时间戳 (自动处理秒/毫秒)\"\"\"    if ts == -1:        return \"无数据\"    try:        # 判断是秒还是毫秒        if ts > 9999999999:  # 大于这个值说明是毫秒            dt = datetime.fromtimestamp(ts / 1000)        else:            dt = datetime.fromtimestamp(ts)        return dt.strftime(\"%Y-%m-%d %H:%M:%S\")    except (ValueError, OSError):        return \"无效时间\"def get_progress_bar(percent, width=30):    \"\"\"生成进度条\"\"\"    filled = int(width * percent / 100)    bar = \"█\" * filled + \"░\" * (width - filled)    return bardef get_percent_color(percent):    \"\"\"根据百分比获取颜色代码\"\"\"    if percent >= 80:        return \"\\033[91m\"  # 红色    elif percent >= 50:        return \"\\033[93m\"  # 黄色    else:        return \"\\033[92m\"  # 绿色def print_coding_plan(item):    \"\"\"打印 Coding Plan 详情\"\"\"    product_name = {        \"coding-plan\": \"Coding Plan (个人版)\",        \"coding-plan-team\": \"Coding Plan (团队版)\"    }.get(item[\"product\"], item[\"product\"])    print(f\"\
\\033[1;34m{product_name}\\033[0m\")    print(\"─\" * 60)    if not item.get(\"subscribed\", False):        print(\"  未订阅\")        return    if \"updated_at\" in item:        print(f\"  数据更新: {format_timestamp(item['updated_at'])}\")    print()    periods = item.get(\"periods\", [])    if not periods:        print(\"  暂无用量数据\")        return    period_labels = {        \"session\": \"会话周期\",        \"weekly\": \"每周额度\",        \"monthly\": \"每月额度\",        \"5h\": \"5小时额度\"    }    for period in periods:        label = period_labels.get(period[\"label\"], period[\"label\"])        percent = float(period.get(\"percent\", 0))        color = get_percent_color(percent)        reset = \"\\033[0m\"        print(f\"  \\033[1m{label}\\033[0m\")        print(f\"    进度: {color}{get_progress_bar(percent)} {percent:.1f}%{reset}\")        if \"used\" in period and \"total\" in period:            used = period[\"used\"]            total = period[\"total\"]            remaining = total - used            print(f\"    用量: {used:,} / {total:,} (剩余: {remaining:,})\")        print(f\"    重置: {format_timestamp(period.get('reset_at', -1))}\")        print()def print_agent_plan(item):    \"\"\"打印 Agent Plan 详情\"\"\"    product_name = {        \"agent-plan\": \"Agent Plan (个人版)\",        \"agent-plan-team\": \"Agent Plan (团队版)\"    }.get(item[\"product\"], item[\"product\"])    tier = item.get(\"tier\", \"\")    if tier:        product_name += f\" - {tier}\"    print(f\"\
\\033[1;35m{product_name}\\033[0m\")    print(\"─\" * 60)    if not item.get(\"subscribed\", False):        print(\"  未订阅\")        return    if \"seat_id\" in item:        print(f\"  席位: {item['seat_id']}\")    print()    periods = item.get(\"periods\", [])    if not periods:        print(\"  暂无用量数据\")        return    period_labels = {        \"session\": \"会话周期\",        \"weekly\": \"每周额度\",        \"monthly\": \"每月额度\",        \"5h\": \"5小时额度\"    }    for period in periods:        label = period_labels.get(period[\"label\"], period[\"label\"])        percent = float(period.get(\"percent\", 0))        color = get_percent_color(percent)        reset = \"\\033[0m\"        print(f\"  \\033[1m{label}\\033[0m\")        print(f\"    进度: {color}{get_progress_bar(percent)} {percent:.1f}%{reset}\")        if \"used\" in period and \"total\" in period:            used = period[\"used\"]            total = period[\"total\"]            remaining = total - used            print(f\"    用量: {used:,} / {total:,} AFP (剩余: {remaining:,})\")        print(f\"    重置: {format_timestamp(period.get('reset_at', -1))}\")        print()def print_viewer(viewer):    \"\"\"打印查看者信息\"\"\"    print(\"\\033[1;36m\" + \"=\" * 60 + \"\\033[0m\")    print(\"\\033[1;36mARK 套餐用量查看\\033[0m\")    print(\"\\033[1;36m\" + \"=\" * 60 + \"\\033[0m\")    print()    print(\"\\033[1m当前身份:\\033[0m\")    auth_method = viewer.get(\"auth_method\", \"unknown\")    auth_display = {        \"sso\": \"SSO 登录\",        \"aksk\": \"AK/SK 登录\",        \"apikey\": \"API Key 登录\",        \"none\": \"未登录\"    }.get(auth_method, auth_method)    print(f\"  认证方式: {auth_display}\")    if viewer.get(\"profile\"):        print(f\"  当前 Profile: {viewer['profile']}\")    if viewer.get(\"region\"):        print(f\"  区域: {viewer['region']}\")    if viewer.get(\"user_name\"):        print(f\"  用户: {viewer['user_name']}\")    if viewer.get(\"account_id\"):        print(f\"  账号: {viewer['account_id']}\")def main():    \"\"\"主函数\"\"\"    data = get_usage_plan()    viewer = data.get(\"viewer\", {})    items = data.get(\"items\", [])    print_viewer(viewer)    if not items:        print(\"\
  未找到任何套餐数据\")        return    # 先打印 coding plan,再打印 agent plan    coding_items = [i for i in items if \"coding-plan\" in i[\"product\"]]    agent_items = [i for i in items if \"agent-plan\" in i[\"product\"]]    for item in coding_items:        print_coding_plan(item)    for item in agent_items:        print_agent_plan(item)    print(\"─\" * 60)    print()if __name__ == \"__main__\":    main()

全文完。


如何在命令行查火山CodingPlan用量" 网络安全文章

如何在命令行查火山CodingPlan用量"

本文介绍如何使用火山引擎ArkCLI工具查询CodingPlan用量,包括安装ark-cli、SSO登录、连接AIAgent技能的方法,并提供Python脚本对原始JSON输出进行可视化处理,展示用量百分比、剩余额度及重置时间等信息。作者实测GLM-5.2单轮对话消耗9.6%额度,并分享了多账号轮换使用的经验。
都在说缺算力,90%的AI芯片却被「浪费」了?" 网络安全文章

都在说缺算力,90%的AI芯片却被「浪费」了?"

该文档揭示了AI行业存在的严重算力浪费问题,指出前沿实验室GPU利用率可能不足10%,企业峰值利用率普遍低于70%。核心问题在于数据饥饿、存储IO瓶颈等结构性因素导致GPU大量闲置空转。文章提出通过优化基础设施实现`产出最大化`,将利用率提升至60-70%即可等效增加6倍算力,并指出AI竞争重点正从算力规模转向利用效率。
覆盖12大技术栈类别的93款开源情报工具" 网络安全文章

覆盖12大技术栈类别的93款开源情报工具"

该文档系统梳理了2026年开源情报(OSINT)领域的技术栈体系,涵盖12大类别93款工具,包括调查平台、社交媒体监测、暗网数据泄露、威胁情报等方向。文章指出OSINT已发展为分层化产业,强调付费数据层(如暗网泄露、加密货币取证)的价值高于免费工具,并引用多项市场数据说明行业规模。核心结论是有效的OSINT依赖安全、规模化的数据采集能力,未来趋势将向工具整合与采集安全演进。
评论:0   参与:  0