בבלוג הזה, נחקור כמה הבדלים מרכזיים בין מודלים להשלמת צ'אט (כמו אלה המסופקים דרך נקודת הקצה להשלמת צ'אט) לבין ה-API המתקדם יותר של עוזרי OpenAI. נפרק כיצד שתי הגישות הללו מטפלות בהודעות, היסטוריית שיחות, מסמכים גדולים, משימות קוד, מגבלות חלון הקשר ועוד. נבחן גם כיצד ה-API של העוזרים מספק כלים נוספים – כמו מפרשים לקוד, שליפת מסמכים, וקריאות פונקציות – שמתגברים על רבות מהמגבלות של השלמת צ'אט.
הבנת מודלים להשלמת צ'אט
- אתה שולח רשימה של הודעות למודל.
- המודל מייצר תגובה.
- אתה מקבל את התגובה 출력.
דוגמת זרימת השלמת צ'אט
אתה שואל: “מהי בירת יפן?”
- המודל מגיב: “בירת יפן היא טוקיו.”
לאחר מכן, אתה שואל: “ספר לי משהו על העיר.”
- המודל אומר שאין לו הקשר והוא לא יודע על איזו עיר אתה מדבר כי הוא לא עוקב באופן טבעי אחרי היסטוריית ההודעות באותה מדינת שיחה.
המגבלות של מודלים להשלמת צ'אט
1. אין היסטוריה מתמשכת של הודעות
אחד מהחסרונות הוא החוסר של היסטוריית הודעות. בהשלמות צ'אט, המודל לא זוכר אוטומטית הודעות קודמות. לדוגמה, אם בקשת בתחילה, "מהו בירת יפן?" ואז פשוט אומר, "ספר לי משהו על העיר," המודל לעתים קרובות לא יכול להתייחס לשם העיר אלא אם תספקו אותו שוב.
2. אין טיפול ישיר במסמכים
גם מודלי השלימות בצ'אט לא תומכים ישירות בטיפול במסמכים גדולים. אם יש לך PDF בעל 500 דפים ורוצה לשאול משהו כמו, "כמה שולי רווח עשתה החברה שלי ברבעון הראשון של 2023?" תצטרך תהליך בשם הפקת-הדוקומנטים-בהגברת-ההפקה (RAG). זה כולל:
- המרת המסמך לטקסט
- חלוקתו לחתיכות קטנות
- המרת החתיכות האלה להטמעות
- אחסון במסד נתונים של וקטורים
- השגת החתיכות הרלוונטיות בזמן השאילתא, ואז העברתם כהקשר למודל
3. אתגרים עם משימות קידוד
בעיה נוספת היא טיפול במשימות חישוביות. אם תבקשו מהשלמות בצ'אט לעשות משהו כמו להפוך מחרוזת, המודל עשוי ליצור תשובה שגויה או לא שלמה. לדוגמה:
# Example question to a Chat Completion model
reverse("Subscribetotalib")
# Hypothetical incorrect output
# "bilattoebircsubs"
הוא עשוי גם לספק מידע שגוי או מיושן על תאריך הנוכחי, מאחר שחסרות לו יכולות חישוב בזמן אמת.
4. חלון הקשר מוגבל
דגמי השלמת צ'אט יש גבול קבוע של אסימון מקסימלי. אם תעבור על הגבול הזה, לא תוכל להעביר את כל המידע הנחוץ לתוך בקשה יחידה. המגבלה הזו עשויה להפריע לזרימת השיחות בגדל ולמשימות העמוסות בהקשרים.
5. עיבוד סינכרוני
לבסוף, דגמי השלמת צ'אט הם סינכרוניים. לאחר שאתה שואל שאלה, עליך להמתין לתשובה יחידה. לא ניתן לשלוח בקשות מרובות במקביל ואז לשלב את התוצאות בלי תיאום זהיר.
מביאים את ממשק ה־API לעוזר
ה־OpenAI Assistants API פותר את האתגרים הנ"ל על ידי מאפשר לך לבנות עוזרי AI עם יכולות נוספות. זה מספק:

- הוראות. דומה להודעת מערכת, אלה מגדירות מה שהעוזר שלך אמור לעשות.
- ת'רדים. כל הודעות קודמות מאוחסנות בת'רדים, כך שהעוזר יכול לשמור על ההקשר לאורך מושגים מרובים.
- כלים. אלה כוללים תכונות כמו מפענח קוד, אחזור למסמכים וקריאת פונקציות.
- דגמים. כרגע הוא תומך ב־GPT‑4 (1106 תצוגה מקדימה) ויתמך בדגמים מותאמים אישית בעתיד.
כלים ב־API של העוזרים
- מפענח קוד. כאשר משימת חישוב מבוקשת — כמו הפיכת מחרוזת או מציאת תאריך היום — העוזר יכול להשתמש בכלי מפענח קוד כדי להריץ קוד Python. העוזר מחזיר לך אז את התוצאה הנכונה, במקום לסמוך רק על ניחושי טוקנים.
- אחזור. באמצעות האחזור, תוכל להעלות עד 20 קבצים (כל קובץ בגודל של עד 52 מגה-בייט ועד 2 מיליון טוקנים לקובץ). כאשר אתה שואל שאלה, העוזר יכול להתייחס ישירות לקבצים אלה, מה שהופך את טיפול במסמכים גדולים לפשוט יותר.
- קריאת פונקציה. תוכל להגדיר פונקציה שמשאירה בקשה בבסיס הנתונים הפנימי שלך (למשימות כמו בדיקת תמותת מכירות). העוזר יבקש לקרוא לפונקציה עם הארגומנטים הנדרשים, ולאחר מכן תחזיר להעוזר את התוצאות. בכך, המודל יכול לנצל נתונים עדכניים שהוא לא היה משתמש בהם באופן רגיל.
- טיפול בחלונות הקשר הגדולים יותר. התהליכים ב- API של העוזרים בוחרים דינמית אילו הודעות לכלול כחלק מהקשר, עוזרים לו להתמודד עם כמות גדולה יותר של שיחה. כך אין עוד צורך להיות מקושר באופן מחמיר לחלון קשר קטן.
דוגמה ליישום
להלן קטע קוד 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)
פלט:

בדוגמה זו, ניתן לראות כיצד התהליך שומר על הקשר. כאשר אנו מבקשים מהעוזר להיפוך את המחרוזת, הוא משתמש בכלי אינטרפרטציה של קוד. לאחר מכן, אנו מבקשים גרסה באותיות גדולות של הקלט הקודם ומקבלים את האורך. העוזר זוכר את שאלתנו הקודמת עקב ההודעות בתהליך המאוחסן.
ממשק ה-OpenAI Assistants מספק סט מוצק של תכונות שמרחיקות מהדמיון של מודלי השלמות בשיחה הרגילים. הוא משמור על היסטוריית ההודעות, תומך באחזור מסמכים גדולים, מפעיל קוד Python לחישובים, ניהול של קשרים גדולים, ומאפשר קריאת פונקציות לאינטגרציות מתקדמות. אם אתה זקוק לחישובים בזמן אמת, שאלות ותשובות מבוססות מסמכים, או לאינטראקציות דינמיות יותר ביישומי AI שלך, ממשק ה-Assistants מציע פתרונות שמטפלים במגבלות היסודיות של השלמות בשיחה הרגילה.
באמצעות ההוראות, התהליכים, הכלים (כגון אינטרפרטר של קוד ואחזור), וקריאת פונקציות, ניתן ליצור עוזרי AI מתקדמים שמטפלים בכל דבר באופן חלק – מהיפוך מחרוזות עד שאילתות במסדי נתונים פנימיים. הגישה החדשה זו יכולה לשנות את הדרך שבה אנו בונים ומשתמשים במערכות מופעלות על ידי AI בסצנריויות בעולם האמיתי.
תודה על קריאת ההודעה!
בואו נתחבר ב-LinkedIn!
Source:
https://dzone.com/articles/chat-completion-models-vs-openai-assitance-api