في هذه المدونة، سنقوم باستكشاف بعض الاختلافات الرئيسية بين نماذج اكمال الدردشة (مثل تلك المقدمة عبر واجهة نقاط اكمال الدردشة) وواجهة برمجة مساعدي OpenAI المتقدمة أكثر. سنقوم بتحليل كيفية تعامل هذه النهجين مع الرسائل، تاريخ المحادثة، المستندات الكبيرة، المهام البرمجية، حدود نافذة السياق، وغيرها. سنلقي أيضًا نظرة على كيفية توفير واجهة برمجة المساعدين أدوات إضافية – مثل مترجمات الشيفرة، استرجاع المستندات، واستدعاء الوظائف – التي تتغلب على العديد من قيود اكمال الدردشة.
فهم نماذج اكمال الدردشة
- أنت ترسل قائمة من الرسائل إلى النموذج.
- يولد النموذج ردًا.
- تتلقى الرد كإخراج.
مثال على سير اكمال الدردشة
تسأل: “ما هي عاصمة اليابان؟”
- يجيب النموذج: “عاصمة اليابان هي طوكيو.”
ثم تسأل: “قل لي شيئًا عن المدينة.”
- يقول النموذج إنه ليس لديه سياق ولا يعرف أي مدينة تقصد لأنه لا يحتفظ بشكل ثانوي بتاريخ الرسائل في نفس حالة المحادثة.
قيود نماذج اكمال الدردشة
1. لا توجد تاريخ رسائل دائم
واحدة من العيوب هي عدم توفر تاريخ الرسائل. في إكمالات الدردشة، لا يتذكر النموذج تلقائيًا الرسائل السابقة. على سبيل المثال، إذا سألت أولاً، “ما هي عاصمة اليابان؟” ثم قلت ببساطة، “قل لي شيئًا عن المدينة”، فإن النموذج غالبًا لا يستطيع الرجوع إلى اسم المدينة ما لم تقدمه يدويًا.
٢. عدم التعامل المباشر مع المستندات
تعتبر نماذج إكمال الدردشة أيضًا لا تدعم مباشرة التعامل مع المستندات الكبيرة. إذا كان لديك PDF من 500 صفحة وتريد استعلامًا مثل، “كم كانت نسبة الربح التي حققتها شركتي في الربع الأول من عام 2023؟”، فستحتاج إلى عملية تسمى الجيل المعزز بالاسترجاع (RAG). وتتضمن هذه العملية:
- تحويل المستند إلى نص
- تقسيمه إلى قطع أصغر
- تحويل تلك القطع إلى تضمينات
- تخزينها في قاعدة بيانات ناقلة
- استرداد القطع ذات الصلة في وقت الاستعلام، ثم تمريرها كسياق إلى النموذج
٣. التحديات مع المهام البرمجية
مشكلة أخرى تتعلق بمعالجة المهام الحسابية. إذا طلبت من إكمالات الدردشة فعل شيء مثل عكس سلسلة، فقد يولد النموذج إجابة خاطئة أو غير كاملة. على سبيل المثال:
# Example question to a Chat Completion model
reverse("Subscribetotalib")
# Hypothetical incorrect output
# "bilattoebircsubs"
قد تعطي أيضًا معلومات غير صحيحة أو قديمة حول التاريخ الحالي، نظرًا لعدم توفر قدرات الحساب الزمني الحقيقي.
٤. نافذة السياق المحدودة
تتضمن نماذج إكمال الدردشة حدًا ثابتًا للرموز القصوى. إذا تجاوزت هذا الحد، فلن تتمكن من تمرير جميع المعلومات الضرورية في طلب واحد. يمكن أن تعطل هذه القيود سير المحادثات بمقياس كبير أو المهام ذات السياق الثقيل.
5. المعالجة المتزامنة
أخيرًا، تكون نماذج إكمال الدردشة متزامنة. بمجرد طرح سؤال، يجب عليك الانتظار للحصول على استجابة واحدة. لا يمكنك تقديم طلبات متعددة بشكل متوازٍ ثم دمج النتائج دون تنظيم دقيق.
تقديم واجهة برمجة التطبيقات للمساعدين
تتعامل واجهة برمجة تطبيقات مساعدي OpenAI مع التحديات المذكورة أعلاه من خلال السماح لك ببناء مساعدين ذكاء اصطناعي بقدرات إضافية. توفر:

- تعليمات. تشبه رسالة النظام، تحدد ما يفترض أن يقوم به مساعدك.
- مواضيع. يتم تخزين جميع الرسائل السابقة في مواضيع، حتى يمكن للمساعد الاحتفاظ بالسياق عبر عدة جولات.
- أدوات. تشمل ميزات مثل مترجم الشفرة، واسترجاع للمستندات، واستدعاء الوظائف.
- نماذج. تدعم حاليًا GPT-4 (معاينة 1106) وستدعم نماذج مخصصة معدلة بشكل جيد في المستقبل.
الأدوات في واجهة برمجة تطبيقات المساعدين
- مترجم الشفرة. عندما يُطلب مهمة حسابية – مثل عكس سلسلة النصوص أو العثور على تاريخ اليوم – يمكن للمساعد استخدام أداة مترجم الشفرة لتشغيل شفرة Python. يقوم المساعد بعودة النتيجة الصحيحة، بدلاً من الاعتماد فقط على توقعات الرموز.
- الاسترجاع. باستخدام الاسترجاع، يمكنك تحميل ما يصل إلى 20 ملفًا (كل ملف يصل إلى 52 ميغابايت وحتى 2 مليون رمز لكل ملف). عندما تقوم بالاستعلام، يمكن للمساعد الإشارة إلى تلك الملفات مباشرة، مما يجعل معالجة المستندات الكبيرة أكثر بساطة.
- استدعاء الوظيفة. يمكنك تعريف وظيفة تستعلم قاعدة البيانات الداخلية الخاصة بك (لمهام مثل التحقق من أرقام المبيعات). سيطلب المساعد استدعاء تلك الوظيفة بالمعطيات المطلوبة، وبعد ذلك تقوم بإعادة النتائج إلى المساعد. بهذه الطريقة، يمكن للنموذج استخدام البيانات الحديثة التي من النادر أن يكون لديها.
- معالجة نوافذ السياق الأكبر. تختار الخيوط في واجهة برمجة تطبيقات المساعدين بشكل ديناميكي أي رسائل تشمل كسياق، مما يساعدها في معالجة كميات أكبر من المحادثة. وهذا يعني أنك لم تعد مرتبطًا تمامًا بنافذة سياقية صغيرة.
مثال على التنفيذ
أدناه مقتطف Python عينة يوضح كيفية إنشاء مساعد، وتعيين التعليمات، وتمكين الأدوات، ثم تشغيل الاستعلامات باستخدام الخيوط. توضح هذه الشفرة تدفق العمل الغير متزامن واستخدام ميزات مثل تفسير الشفرة.
إنشاء المساعد
# Step 1: Create the Assistant
from openai import OpenAI
client = OpenAI()
my_assistant = client.beta.assistants.create(
instructions="You are a personal math tutor. When asked a question, write and run Python code to answer the question.",
name="Math Tutor",
tools=[{"type": "code_interpreter"}],
model="gpt-4-1106-preview",
)
print(my_assistant)
إنشاء خيط
# Step 2: Create a Thread
thread = client.beta.threads.create()
print(f"Thread ID: {thread.id}")
'''
Response
{
"id": "thread_abc123",
"object": "thread",
"created_at": 1699012949,
"metadata": {},
"tool_resources": {}
}
'''
print(json.dumps(run.model_dump(), indent =4))
طرح سؤال
# Step 3: Ask a Question
question_1 = "Reverse the string 'openaichatgpt'."
message_1 = client.beta.threads.messages.create(
thread_id=thread.id,
role="user",
content=question_1
)
تشغيل الاستعلام بشكل غير متزامن
# Run the Query Asynchronously
run_1 = client.beta.threads.runs.create(
thread_id=thread.id,
assistant_id=assistant.id
)
# Check the run status
current_run = client.beta.threads.runs.retrieve(run_id=run_1.id)
print(f"Initial Run Status: {current_run.status}")
# Once completed, retrieve the messages
messages = client.beta.threads.messages.list(thread_id=thread.id)
print(json.dumps(messages.model_dumps(), indent=4))
الناتج:

طرح سؤال آخر في نفس الموضوع
# Ask Another Question in the Same Thread
question_2 = "Make the previous input uppercase and tell me the length of the string."
message_2 = client.beta.threads.messages.create(
thread_id=thread.id,
role="user",
content=question_2
)
# Run the second query
run_2 = client.beta.threads.runs.create(
thread_id=thread.id,
assistant_id=assistant.id
)
# Check the new run status
current_run_2 = client.beta.threads.runs.retrieve(run_id=run_2.id)
print(f"Second Run Status: {current_run_2.status}")
# Retrieve the new messages
messages_2 = client.beta.threads.messages.list(thread_id=thread.id)
for msg in messages_2:
print(msg.content)
Output:

في هذا المثال، يمكنك رؤية كيف يظل الموضوع ثابتًا. عندما نطلب من المساعد عكس السلسلة، يستخدم أداة مترجم الشفرة. بعد ذلك، نطلب النسخة بحروف كبيرة من الإدخال السابق ونحصل على الطول. يتذكر المساعد سؤالنا السابق بسبب رسائل الموضوع المخزنة.
توفر واجهة برمجة تطبيقات مساعدي OpenAI مجموعة قوية من الميزات التي تتجاوز نماذج الإكمال النمطية للدردشة. تتتبع تاريخ الرسائل، تدعم استرجاع الوثائق الكبيرة، تنفذ شفرة Python للحسابات، تدير سياقات أكبر، وتمكن استدعاء الوظائف للتكاملات المتقدمة. إذا كنت بحاجة إلى حسابات في الوقت الحقيقي، أو أسئلة وأجوبة مستندية، أو تفاعلات أكثر ديناميكية في تطبيقات الذكاء الاصطناعي الخاصة بك، تقدم واجهة برمجة تطبيقات المساعدين حلاً يعالج القيود الأساسية لإكمال الدردشة القياسية.
باستخدام هذه التعليمات والمواضيع والأدوات (مثل مترجم الشفرة والاسترجاع)، واستدعاء الوظائف، يمكنك إنشاء مساعدين ذكاء اصطناعي متطورين يتعاملون بسهولة مع كل شيء بدءًا من عكس السلاسل إلى الاستعلام عن قواعد البيانات الداخلية. يمكن أن يحدث هذا النهج الجديد تحولًا في كيفية بناء واستخدام أنظمة الذكاء الاصطناعي في سيناريوهات العالم الحقيقي.
شكرًا لقراءتك!
لنتواصل على لينكدإن!
Source:
https://dzone.com/articles/chat-completion-models-vs-openai-assitance-api