الترحيل إلى مكتبة OpenAI Python API 1.x
أصدرت OpenAI للتو إصدارا جديدا من مكتبة OpenAI Python API. يعد هذا الدليل مكملا لدليل الترحيل الخاص ب OpenAI وسيساعدك على زيادة سرعة التغييرات الخاصة ب Azure OpenAI.
التحديثات
- هذا إصدار جديد من مكتبة OpenAI Python API.
- بدءا من 6 نوفمبر 2023
pip install openai
pip install openai --upgrade
وسيتم تثبيتversion 1.x
مكتبة OpenAI Python. - الترقية من
version 0.28.1
إلىversion 1.x
هي تغيير فاصل، ستحتاج إلى اختبار وتحديث التعليمات البرمجية الخاصة بك. - إعادة المحاولة التلقائية مع التراجع إذا كان هناك خطأ
- الأنواع المناسبة (ل mypy/pyright/editors)
- يمكنك الآن إنشاء مثيل لعميل، بدلا من استخدام افتراضي عمومي.
- التبديل إلى إنشاء مثيل عميل صريح
- تغييرات الاسم
مشكلات معروفة
DALL-E3
مدعوم بالكامل مع أحدث إصدار 1.x.DALL-E2
يمكن استخدامها مع 1.x عن طريق إجراء التعديلات التالية على التعليمات البرمجية الخاصة بك.embeddings_utils.py
الذي تم استخدامه لتوفير وظائف مثل تشابه جيب التمام للبحث في النص الدلالي لم يعد جزءا من مكتبة OpenAI Python API.- يجب عليك أيضا التحقق من مشكلات GitHub النشطة لمكتبة OpenAI Python.
اختبار قبل الترحيل
هام
الترحيل التلقائي للتعليمات البرمجية باستخدام openai migrate
غير مدعوم مع Azure OpenAI.
نظرا لأن هذا إصدار جديد من المكتبة مع تغييرات فاصلة، يجب اختبار التعليمات البرمجية الخاصة بك على نطاق واسع مقابل الإصدار الجديد قبل ترحيل أي تطبيقات إنتاج للاعتماد على الإصدار 1.x. يجب عليك أيضا مراجعة التعليمات البرمجية والعمليات الداخلية للتأكد من اتباع أفضل الممارسات وتثبيت تعليمة الإنتاج البرمجية الخاصة بك على الإصدارات التي قمت باختبارها بالكامل فقط.
لتسهيل عملية الترحيل، نقوم بتحديث أمثلة التعليمات البرمجية الموجودة في مستنداتنا ل Python إلى تجربة مبوبة:
pip install openai --upgrade
يوفر هذا سياقا لما تغير ويسمح لك باختبار المكتبة الجديدة بالتوازي مع الاستمرار في توفير الدعم للإصدار 0.28.1
. إذا قمت بالترقية إلى 1.x
وأدركت أنك بحاجة إلى العودة مؤقتا إلى الإصدار السابق، يمكنك دائما pip uninstall openai
ثم إعادة تثبيت المستهدف 0.28.1
باستخدام pip install openai==0.28.1
.
إكمال الدردشة
تحتاج إلى تعيين model
المتغير إلى اسم النشر الذي اخترته عند نشر نماذج GPT-3.5-Turbo أو GPT-4. يؤدي إدخال اسم النموذج إلى حدوث خطأ ما لم تختص باسم نشر مطابق لاسم النموذج الأساسي.
import os
from openai import AzureOpenAI
client = AzureOpenAI(
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"),
api_key=os.getenv("AZURE_OPENAI_API_KEY"),
api_version="2024-02-01"
)
response = client.chat.completions.create(
model="gpt-35-turbo", # model = "deployment_name".
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},
{"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."},
{"role": "user", "content": "Do other Azure AI services support this too?"}
]
)
print(response.choices[0].message.content)
يمكن العثور على أمثلة إضافية في مقالة إكمال الدردشة المتعمقة.
عمليات الإكمال
import os
from openai import AzureOpenAI
client = AzureOpenAI(
api_key=os.getenv("AZURE_OPENAI_API_KEY"),
api_version="2024-02-01",
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT")
)
deployment_name='REPLACE_WITH_YOUR_DEPLOYMENT_NAME' #This will correspond to the custom name you chose for your deployment when you deployed a model.
# Send a completion call to generate an answer
print('Sending a test completion job')
start_phrase = 'Write a tagline for an ice cream shop. '
response = client.completions.create(model=deployment_name, prompt=start_phrase, max_tokens=10)
print(response.choices[0].text)
عمليات التضمين
import os
from openai import AzureOpenAI
client = AzureOpenAI(
api_key = os.getenv("AZURE_OPENAI_API_KEY"),
api_version = "2024-02-01",
azure_endpoint =os.getenv("AZURE_OPENAI_ENDPOINT")
)
response = client.embeddings.create(
input = "Your text string goes here",
model= "text-embedding-ada-002" # model = "deployment_name".
)
print(response.model_dump_json(indent=2))
يمكن العثور على أمثلة إضافية بما في ذلك كيفية التعامل مع البحث في النص الدلالي دون embeddings_utils.py
في البرنامج التعليمي للتضمينات لدينا.
غير متزامنة
لا يدعم OpenAI استدعاء أساليب غير متزامنة في العميل على مستوى الوحدة النمطية، بدلا من ذلك يجب إنشاء مثيل لعميل غير متزامن.
import os
import asyncio
from openai import AsyncAzureOpenAI
async def main():
client = AsyncAzureOpenAI(
api_key = os.getenv("AZURE_OPENAI_API_KEY"),
api_version = "2024-02-01",
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT")
)
response = await client.chat.completions.create(model="gpt-35-turbo", messages=[{"role": "user", "content": "Hello world"}])
print(response.model_dump_json(indent=2))
asyncio.run(main())
المصادقة
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
from openai import AzureOpenAI
token_provider = get_bearer_token_provider(DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default")
api_version = "2024-02-01"
endpoint = "https://my-resource.openai.azure.com"
client = AzureOpenAI(
api_version=api_version,
azure_endpoint=endpoint,
azure_ad_token_provider=token_provider,
)
completion = client.chat.completions.create(
model="deployment-name", # gpt-35-instant
messages=[
{
"role": "user",
"content": "How do I output all files in a directory using Python?",
},
],
)
print(completion.model_dump_json(indent=2))
استخدام بياناتك
للحصول على خطوات التكوين الكاملة المطلوبة لجعل أمثلة التعليمات البرمجية هذه تعمل، راجع استخدام التشغيل السريع للبيانات.
import os
import openai
import dotenv
dotenv.load_dotenv()
endpoint = os.environ.get("AZURE_OPENAI_ENDPOINT")
api_key = os.environ.get("AZURE_OPENAI_API_KEY")
deployment = os.environ.get("AZURE_OPEN_AI_DEPLOYMENT_ID")
client = openai.AzureOpenAI(
base_url=f"{endpoint}/openai/deployments/{deployment}/extensions",
api_key=api_key,
api_version="2023-08-01-preview",
)
completion = client.chat.completions.create(
model=deployment,
messages=[
{
"role": "user",
"content": "How is Azure machine learning different than Azure OpenAI?",
},
],
extra_body={
"dataSources": [
{
"type": "AzureCognitiveSearch",
"parameters": {
"endpoint": os.environ["AZURE_AI_SEARCH_ENDPOINT"],
"key": os.environ["AZURE_AI_SEARCH_API_KEY"],
"indexName": os.environ["AZURE_AI_SEARCH_INDEX"]
}
}
]
}
)
print(completion.model_dump_json(indent=2))
إصلاح DALL-E
import time
import json
import httpx
import openai
class CustomHTTPTransport(httpx.HTTPTransport):
def handle_request(
self,
request: httpx.Request,
) -> httpx.Response:
if "images/generations" in request.url.path and request.url.params[
"api-version"
] in [
"2023-06-01-preview",
"2023-07-01-preview",
"2023-08-01-preview",
"2023-09-01-preview",
"2023-10-01-preview",
]:
request.url = request.url.copy_with(path="/openai/images/generations:submit")
response = super().handle_request(request)
operation_location_url = response.headers["operation-location"]
request.url = httpx.URL(operation_location_url)
request.method = "GET"
response = super().handle_request(request)
response.read()
timeout_secs: int = 120
start_time = time.time()
while response.json()["status"] not in ["succeeded", "failed"]:
if time.time() - start_time > timeout_secs:
timeout = {"error": {"code": "Timeout", "message": "Operation polling timed out."}}
return httpx.Response(
status_code=400,
headers=response.headers,
content=json.dumps(timeout).encode("utf-8"),
request=request,
)
time.sleep(int(response.headers.get("retry-after")) or 10)
response = super().handle_request(request)
response.read()
if response.json()["status"] == "failed":
error_data = response.json()
return httpx.Response(
status_code=400,
headers=response.headers,
content=json.dumps(error_data).encode("utf-8"),
request=request,
)
result = response.json()["result"]
return httpx.Response(
status_code=200,
headers=response.headers,
content=json.dumps(result).encode("utf-8"),
request=request,
)
return super().handle_request(request)
client = openai.AzureOpenAI(
azure_endpoint="<azure_endpoint>",
api_key="<api_key>",
api_version="<api_version>",
http_client=httpx.Client(
transport=CustomHTTPTransport(),
),
)
image = client.images.generate(prompt="a cute baby seal")
print(image.data[0].url)
تغييرات الاسم
إشعار
تمت إزالة جميع أساليب * ؛ يجب استخدام العميل غير المتزامن بدلا من ذلك.
OpenAI Python 0.28.1 | OpenAI Python 1.x |
---|---|
openai.api_base |
openai.base_url |
openai.proxy |
openai.proxies |
openai.InvalidRequestError |
openai.BadRequestError |
openai.Audio.transcribe() |
client.audio.transcriptions.create() |
openai.Audio.translate() |
client.audio.translations.create() |
openai.ChatCompletion.create() |
client.chat.completions.create() |
openai.Completion.create() |
client.completions.create() |
openai.Edit.create() |
client.edits.create() |
openai.Embedding.create() |
client.embeddings.create() |
openai.File.create() |
client.files.create() |
openai.File.list() |
client.files.list() |
openai.File.retrieve() |
client.files.retrieve() |
openai.File.download() |
client.files.retrieve_content() |
openai.FineTune.cancel() |
client.fine_tunes.cancel() |
openai.FineTune.list() |
client.fine_tunes.list() |
openai.FineTune.list_events() |
client.fine_tunes.list_events() |
openai.FineTune.stream_events() |
client.fine_tunes.list_events(stream=True) |
openai.FineTune.retrieve() |
client.fine_tunes.retrieve() |
openai.FineTune.delete() |
client.fine_tunes.delete() |
openai.FineTune.create() |
client.fine_tunes.create() |
openai.FineTuningJob.create() |
client.fine_tuning.jobs.create() |
openai.FineTuningJob.cancel() |
client.fine_tuning.jobs.cancel() |
openai.FineTuningJob.delete() |
client.fine_tuning.jobs.create() |
openai.FineTuningJob.retrieve() |
client.fine_tuning.jobs.retrieve() |
openai.FineTuningJob.list() |
client.fine_tuning.jobs.list() |
openai.FineTuningJob.list_events() |
client.fine_tuning.jobs.list_events() |
openai.Image.create() |
client.images.generate() |
openai.Image.create_variation() |
client.images.create_variation() |
openai.Image.create_edit() |
client.images.edit() |
openai.Model.list() |
client.models.list() |
openai.Model.delete() |
client.models.delete() |
openai.Model.retrieve() |
client.models.retrieve() |
openai.Moderation.create() |
client.moderations.create() |
openai.api_resources |
openai.resources |
تم الإزالة
openai.api_key_path
openai.app_info
openai.debug
openai.log
openai.OpenAIError
openai.Audio.transcribe_raw()
openai.Audio.translate_raw()
openai.ErrorObject
openai.Customer
openai.api_version
openai.verify_ssl_certs
openai.api_type
openai.enable_telemetry
openai.ca_bundle_path
openai.requestssession
(يستخدمhttpx
OpenAI الآن )openai.aiosession
(يستخدمhttpx
OpenAI الآن )openai.Deployment
(كان يستخدم سابقا ل Azure OpenAI)openai.Engine
openai.File.find_matching_files()