当前位置: 首页 > news >正文

AI编程系列01:裸 API 账单场景下,如何自建 LLM 用量可视化看板

AI编程系列01:裸 API 账单场景下,如何自建 LLM 用量可视化看板

在AI应用开发中,直接调用OpenAI、Claude等大语言模型(LLM)的裸API(即未通过第三方平台封装)是一种常见场景。这类API通常按Token计费,但官方控制台可能仅提供基础的账单数据,缺乏细粒度的用量可视化(如按模型、时间段、用户维度的消耗趋势)。本文将深入剖析裸API账单数据的采集、存储与可视化原理,并提供可运行的代码示例,帮助你自建一套轻量级的LLM用量看板。### 原理剖析:从API调用到可视化看板裸API场景下的账单数据流通常如下:1.调用触发:每次LLM请求(如GPT-4的聊天补全)由客户端发起,请求中包含模型、输入Token数等信息。2.响应返回:API响应中通常会返回usage字段,包括prompt_tokens(输入Token数)、completion_tokens(输出Token数)和total_tokens。3.数据采集:需要在客户端或代理层拦截这些数据,并持久化到数据库(如SQLite、PostgreSQL)。关键字段包括时间戳、模型名、Token消耗、请求ID等。4.聚合计算:按时间(如小时、天)、模型等维度聚合Token消耗,并转换为费用(根据API定价公式)。5.可视化展示:使用图表库(如ECharts、Plotly)渲染趋势图、饼图等。核心挑战在于:官方API通常不提供细粒度的用量日志,你必须自建埋点。下面通过两个可运行的代码示例,分别演示数据采集和可视化看板的构建。### 数据采集:构建Token使用记录器首先,我们需要在调用LLM API时,自动记录每次请求的用量数据。以下是一个Python示例,使用openai库模拟调用,并将数据写入SQLite数据库。pythonimport sqlite3import timefrom datetime import datetimefrom openai import OpenAI # 需要安装: pip install openai# 初始化SQLite数据库def init_db(): conn = sqlite3.connect('llm_usage.db') cursor = conn.cursor() cursor.execute(''' CREATE TABLE IF NOT EXISTS usage_log ( id INTEGER PRIMARY KEY AUTOINCREMENT, timestamp REAL, model TEXT, prompt_tokens INTEGER, completion_tokens INTEGER, total_tokens INTEGER, cost REAL ) ''') conn.commit() conn.close()# 记录单次API调用def log_usage(model, prompt_tokens, completion_tokens): total_tokens = prompt_tokens + completion_tokens # 示例定价:GPT-4每1K输入Token $0.03,输出Token $0.06 cost = (prompt_tokens / 1000) * 0.03 + (completion_tokens / 1000) * 0.06 conn = sqlite3.connect('llm_usage.db') cursor = conn.cursor() cursor.execute(''' INSERT INTO usage_log (timestamp, model, prompt_tokens, completion_tokens, total_tokens, cost) VALUES (?, ?, ?, ?, ?, ?) ''', (time.time(), model, prompt_tokens, completion_tokens, total_tokens, cost)) conn.commit() conn.close() return total_tokens# 模拟调用并记录def simulate_api_call(): client = OpenAI(api_key="your-api-key") # 替换为你的API Key try: response = client.chat.completions.create( model="gpt-4", messages=[{"role": "user", "content": "写一首关于AI的诗"}] ) # 获取API返回的Token用量 usage = response.usage log_usage( model=response.model, prompt_tokens=usage.prompt_tokens, completion_tokens=usage.completion_tokens ) print(f"记录成功: {datetime.now()}, 总Token数: {usage.total_tokens}") except Exception as e: print(f"调用失败: {e}")if __name__ == "__main__": init_db() # 模拟多次调用以生成数据 for _ in range(5): simulate_api_call() time.sleep(1) # 避免频率限制代码解释:-init_db()创建usage_log表,包含时间戳、模型名、各类型Token数和费用。-log_usage()根据定价公式计算费用(此处为示例,实际需根据API文档调整)。-simulate_api_call()调用OpenAI API并自动记录数据。此方法可扩展到任何LLM服务(如Claude、Gemini),只需调整定价公式和API调用方式。### 可视化看板:使用Python构建实时图表接下来,我们用FlaskPlotly创建一个轻量级Web看板,展示Token消耗趋势和费用分布。以下代码运行后将开启本地服务器,访问http://127.0.0.1:5000即可查看。pythonfrom flask import Flask, render_template_stringimport sqlite3import plotly.express as pximport pandas as pdfrom datetime import datetimeapp = Flask(__name__)# 从数据库读取聚合数据def load_data(): conn = sqlite3.connect('llm_usage.db') df = pd.read_sql_query(''' SELECT strftime('%Y-%m-%d %H', datetime(timestamp, 'unixepoch')) as hour, model, SUM(total_tokens) as total_tokens, SUM(cost) as total_cost FROM usage_log GROUP BY hour, model ORDER BY hour ''', conn) conn.close() return df# 生成HTML图表def generate_charts(df): # 时间序列趋势图 - 按模型分类 fig1 = px.line(df, x='hour', y='total_tokens', color='model', title='按小时的Token消耗趋势', labels={'hour': '时间', 'total_tokens': '总Token数'}) chart1 = fig1.to_html(full_html=False) # 费用饼图 - 模型占比 cost_by_model = df.groupby('model')['total_cost'].sum().reset_index() fig2 = px.pie(cost_by_model, values='total_cost', names='model', title='各模型费用占比') chart2 = fig2.to_html(full_html=False) return chart1, chart2# 主页面模板HTML_TEMPLATE = '''<!DOCTYPE html><html><head> <title>LLM用量看板</title> <script src="https://cdn.plot.ly/plotly-latest.min.js"></script></head><body> <h1>LLM API用量可视化看板</h1> <p>更新时间: {{ now }}</p> <div>{{ chart1|safe }}</div> <div>{{ chart2|safe }}</div></body></html>'''@app.route('/')def dashboard(): df = load_data() chart1, chart2 = generate_charts(df) return render_template_string(HTML_TEMPLATE, chart1=chart1, chart2=chart2, now=datetime.now())if __name__ == '__main__': app.run(debug=True)代码解释:-load_data()使用SQL按小时和模型聚合Token消耗与费用。-generate_charts()利用Plotly生成折线图和饼图,并转换为HTML嵌入。- 通过Flask返回动态渲染的页面,每次刷新从数据库读取最新数据。运行后,你将看到如图表所示的看板,可直观监控API使用情况。若数据量较大,可优化为异步加载或使用数据库索引。### 进阶优化-实时流式处理:若API调用频繁,可使用Redis缓存写入,再批量入库以避免数据库压力。-多维度分析:增加用户ID、请求类型等字段,支持按用户维度分摊成本。-告警机制:当Token消耗超过阈值时,通过邮件或Webhook发送通知。-成本优化:结合模型选择策略(如降级到GPT-3.5),自动调整API调用。### 总结自建LLM用量可视化看板的核心在于:在API调用层埋点采集细粒度数据,存储到结构化数据库,再通过聚合查询和图表库呈现。本文提供的两个代码示例分别覆盖了数据采集和可视化两大环节,可直接运行并扩展。通过这种自建方案,你不仅能摆脱对官方控制台的依赖,还能实现按需定制(如用户级计费、实时告警),这对于管理多个项目或团队的成本尤为关键。后续系列将探讨如何结合流处理框架(如Kafka)实现高吞吐量场景下的用量监控,敬请期待。

http://www.jsqmd.com/news/1257841/

相关文章:

  • 2026石家庄漏水检测维修本地口碑榜TOP5权威推荐-专业仪器精准测漏-正规防水补漏公司推荐:卫生间/厨房/屋顶/阳台/外墙渗漏水检测师傅上门 - 安佳防水
  • 3分钟掌握PDF扫描模拟:LookScanned.io完全指南
  • 计算机毕业设计之交安公司汽车销售系统的设计与实现
  • 2026 年现阶段,徐州评价高的一氧化碳 CAS号:630-08-0供应厂家哪家靠谱,家里用燃气别大意,这种无色无味气体竟悄悄偷走人的命? - 品质体验官
  • 2026年合肥管家王注册公司相关情况梳理参考 - 起跑123
  • 三亚口碑好的回收茅台酒平台 本地正规名酒礼品专业变现服务 - 品牌优推
  • GetQzonehistory:3步完成QQ空间历史数据完整导出指南
  • Mermaid在线编辑器:3个步骤让技术图表制作变得如此简单
  • 企鹅岛的基建问题有多严重,说明了什么
  • Unity MCP:AI助手自然语言控制Unity编辑器的开源方案
  • 2026 年现阶段,贵州专业的库存线路板回收加工厂选型指南,别扔!这条“废品”能让你瞬间回血-强徽电子回收 - 行业严选官
  • 采购农用双防膜批发厂家 山东本地靠谱生产厂商实用指南 - 品牌优推
  • 2026年南通高清透光汽车膜品牌选购实用参考指南 - 品牌优推
  • 烟台本地防水补漏精选TOP5推荐:正规漏水检测维修公司上门师傅推荐:厕所/棚顶/屋面/飘窗/阳台/地下室/厨房渗漏水精准测漏维修(2026最新) - 即刻修防水
  • 2026年山西有实力的工业铝型材厂家实用选择参考指引 - 品牌优推
  • 提升大语言模型思维链自洽性的技术方案与实践
  • 2026年钻攻中心源头厂家推荐 精密加工行业采购实用指南 - 品牌优推
  • 技术解密:罗技PUBG压枪宏如何通过Lua脚本实现智能后坐力控制
  • Fnet 云网安 260724
  • 2026年西南地区多彩水包砂涂料生产厂家选购参考指南 - 品牌优推
  • MiGPT终极指南:如何将普通小爱音箱变成你的AI语音管家
  • 【译】Visual Studio 五月更新 —— 计划、评审、优化
  • 5分钟快速上手:使用Firefox脚本轻松下载Sketchfab 3D模型完整指南
  • 2026年治安岗亭生产厂家实用采购指南 - 品牌优推
  • 2026年路桥基建配套采购 遮板直销厂商选哪家 - 品牌优推
  • 制造业智能决策三系统协同架构解析:规则引擎+APS+低代码的集成实践
  • 2026年Java后端面试冲刺:高频考点与实战场景全解析
  • 2026年岩棉夹芯板生产厂家哪家靠谱 京津冀选购实用指南 - 品牌优推
  • 2026年河北专业的通用型玻璃钢储罐厂商选购实用指南 - 品牌优推
  • 上海黄金回收门店甄选攻略!多片区覆盖助力高价变现 - 日常比对手册