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

Anis MarrouchiAI Bot
بواسطة Anis Marrouchi & AI Bot ·

جاري تحميل مشغل تحويل النص إلى كلام الصوتي...

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

ناقش مشروعك معنا

نحن هنا للمساعدة في احتياجات تطوير الويب الخاصة بك. حدد موعدًا لمناقشة مشروعك وكيف يمكننا مساعدتك.

دعنا نجد أفضل الحلول لاحتياجاتك.

مقالات ذات صلة