كيفية مراقبة استخدام وتكاليف OpenAI باستخدام Usage API و Cost API

مراقبة استخدامك وتكاليفك في OpenAI أمر بالغ الأهمية لتحسين مشاريع الذكاء الاصطناعي الخاصة بك. توفر واجهة برمجة تطبيقات Usage API و Cost API من OpenAI رؤى تفصيلية حول أنماط استخدامك ونفقاتك. سيرشدك هذا الدليل خلال عملية استرجاع وتحليل وتصور هذه البيانات.
الخطوة 1: تثبيت المكتبات المطلوبة
قبل البدء، تأكد من تثبيت المكتبات اللازمة. يمكنك تثبيتها باستخدام pip:
!pip install requests pandas numpy matplotlib --quietالخطوة 2: استيراد المكتبات
بعد ذلك، استورد المكتبات المطلوبة في نص Python أو دفتر Jupyter الخاص بك:
import requests
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import time
import jsonالخطوة 3: إعداد بيانات اعتماد API والمعاملات
أعد مفتاح Admin الخاص بـ OpenAI وعرّف نقطة نهاية API والمعاملات:
OPENAI_ADMIN_KEY = '<PLACEHOLDER>' # استبدل بمفتاح ADMIN API الفعلي الخاص بك
headers = {
"Authorization": f"Bearer {OPENAI_ADMIN_KEY}",
"Content-Type": "application/json"
}
url = "https://api.openai.com/v1/organization/usage/completions"
days_ago = 30
start_time = int(time.time()) - (days_ago * 24 * 60 * 60)
params = {
"start_time": start_time,
"bucket_width": "1d",
"limit": 7
}الخطوة 4: استرجاع بيانات الاستخدام
استخدم حلقة للتعامل مع الترقيم واسترجاع جميع بيانات الاستخدام:
all_data = []
page_cursor = None
while True:
if page_cursor:
params["page"] = page_cursor
response = requests.get(url, headers=headers, params=params)
if response.status_code == 200:
data_json = response.json()
all_data.extend(data_json.get("data", []))
page_cursor = data_json.get("next_page")
if not page_cursor:
break
else:
print(f"خطأ: {response.status_code}")
break
if all_data:
print("تم استرجاع البيانات بنجاح!")
else:
print("مشكلة: لا توجد بيانات متاحة للاسترجاع.")الخطوة 5: تحليل وتصور بيانات الاستخدام
حلل استجابة JSON وأنشئ DataFrame باستخدام pandas لتسهيل المعالجة والتحليل:
records = []
for bucket in all_data:
start_time = bucket.get("start_time")
end_time = bucket.get("end_time")
for result in bucket.get("results", []):
records.append({
"start_time": start_time,
"end_time": end_time,
"input_tokens": result.get("input_tokens", 0),
"output_tokens": result.get("output_tokens", 0),
"num_model_requests": result.get("num_model_requests", 0)
})
df = pd.DataFrame(records)
df['start_datetime'] = pd.to_datetime(df['start_time'], unit='s')
df['end_datetime'] = pd.to_datetime(df['end_time'], unit='s')
df.head()الخطوة 6: تصور استخدام الرموز عبر الوقت
أنشئ مخططاً شريطياً لتصور استخدام رموز الإدخال والإخراج عبر الوقت:
if not df.empty:
plt.figure(figsize=(12, 6))
width = 0.35
indices = range(len(df))
plt.bar(indices, df['input_tokens'], width=width, label='رموز الإدخال', alpha=0.7)
plt.bar([i + width for i in indices], df['output_tokens'], width=width, label='رموز الإخراج', alpha=0.7)
plt.xlabel('الفترة الزمنية')
plt.ylabel('عدد الرموز')
plt.title('استخدام رموز الإدخال مقابل الإخراج يومياً لآخر 30 يوماً')
plt.xticks([i + width/2 for i in indices], [dt.strftime('%Y-%m-%d') for dt in df['start_datetime']], rotation=45)
plt.legend()
plt.tight_layout()
plt.show()
else:
print("لا توجد بيانات متاحة للرسم.")الخطوة 7: استرجاع وتصور بيانات التكلفة
استخدم Costs API لاسترجاع وتصور بيانات التكلفة:
costs_url = "https://api.openai.com/v1/organization/costs"
all_costs_data = []
page_cursor = None
while True:
costs_params = {
"start_time": start_time,
"bucket_width": "1d",
"limit": 30
}
if page_cursor:
costs_params["page"] = page_cursor
costs_response = requests.get(costs_url, headers=headers, params=costs_params)
if costs_response.status_code == 200:
costs_json = costs_response.json()
all_costs_data.extend(costs_json.get("data", []))
page_cursor = costs_json.get("next_page")
if not page_cursor:
break
else:
print(f"خطأ: {costs_response.status_code}")
break
if all_costs_data:
print("تم استرجاع بيانات التكاليف بنجاح!")
else:
print("لم يتم العثور على بيانات تكاليف.")الخطوة 8: تحليل وتصور بيانات التكلفة
cost_records = []
for bucket in all_costs_data:
start_time = bucket.get("start_time")
end_time = bucket.get("end_time")
for result in bucket.get("results", []):
cost_records.append({
"start_time": start_time,
"end_time": end_time,
"amount_value": result.get("amount", {}).get("value", 0),
"currency": result.get("amount", {}).get("currency", "usd"),
"line_item": result.get("line_item")
})
cost_df = pd.DataFrame(cost_records)
cost_df['start_datetime'] = pd.to_datetime(cost_df['start_time'], unit='s')
cost_df['end_datetime'] = pd.to_datetime(cost_df['end_time'], unit='s')الخطوة 9: تصور التكاليف حسب البند
أنشئ مخططاً شريطياً لتصور إجمالي التكاليف المجمعة حسب البند:
if not cost_df.empty:
cost_df['date'] = cost_df['start_datetime'].dt.date
cost_per_day = cost_df.groupby('date')['amount_value'].sum().reset_index()
plt.figure(figsize=(12, 6))
plt.bar(cost_per_day['date'], cost_per_day['amount_value'], width=0.6, color='skyblue', alpha=0.8)
plt.xlabel('التاريخ')
plt.ylabel('إجمالي التكلفة (دولار أمريكي)')
plt.title('إجمالي التكلفة اليومية (آخر 30 يوماً)')
plt.xticks(rotation=45, ha='right')
plt.tight_layout()
plt.show()
else:
print("لا توجد بيانات تكلفة متاحة للرسم.")الخلاصة
باتباع هذه الخطوات، يمكنك مراقبة استخدامك وتكاليفك في OpenAI بفعالية. يمكن أن تساعدك هذه البيانات في تحسين مشاريع الذكاء الاصطناعي الخاصة بك وإدارة نفقاتك بكفاءة أكبر.
المرجع
المصدر: OpenAI API Documentation المؤلف: Mitch Welzen
ناقش مشروعك معنا
نحن هنا للمساعدة في احتياجات تطوير الويب الخاصة بك. حدد موعدًا لمناقشة مشروعك وكيف يمكننا مساعدتك.
دعنا نجد أفضل الحلول لاحتياجاتك.
مقالات ذات صلة
تعزيز كفاءة خدمة العملاء: الاستفادة من استدعاءات الأدوات الإلزامية في ChatCompletion
اكتشف كيف يمكن لاستدعاءات الأدوات الإلزامية في ChatCompletion تعزيز كفاءة خدمة العملاء من خلال توفير ردود متسقة وسير عمل مبسط.

استكشاف واجهة برمجة تطبيقات Responses الجديدة: دليل شامل
تعمق في واجهة برمجة تطبيقات Responses الجديدة، المصممة لتبسيط التفاعلات المعقدة ومتعددة الوسائط مع المحادثات ذات الحالة والأدوات المستضافة.

إجراء المكالمات الصادرة باستخدام Twilio Voice و OpenAI
تعلم كيفية إجراء المكالمات الصادرة باستخدام Twilio Voice وواجهة برمجة تطبيقات OpenAI Realtime مع Node.js.