مراقبة استخدامك وتكاليفك في 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