דיוקים בפרומפט
פרומפט 1-
כתוב לי פונקציית פייתון רקורסיבית שמחשבת מספר כלשהו בסדרת פיבונאצ׳י היא מקבלת אינדקס ומחזירה את המספר
השתמש ב Memoization כדי לא לבצע חישובים מיותרים
פתרון של קלוד:
def fibonacci(n, memo=None):
if memo is None:
memo = {}
if n < 0:
raise ValueError("האינדקס חייב להיות מספר אי-שלילי")
if n in memo:
return memo[n]
if n < 2:
return n
memo[n] = fibonacci(n - 1, memo) + fibonacci(n - 2, memo)
return memo[n]
print(fibonacci(10)) # 55
print(fibonacci(50)) # 12586269025
פרומפט 2-
כתוב לי פונקציית פייתון רקורסיבית שמחשבת מספר כלשהו בסדרת פיבונאצ׳י היא מקבלת אינדקס ומחזירה את המספר
השתמש ב Memoization כדי לא לבצע חישובים מיותרים
אל תבנה מאפס השתמש במה שכבר יש בפייתון
from functools import cache
@cache
def fib(n: int) -> int:
"""מחזירה את המספר ה-n בסדרת פיבונאצ'י (fib(0)=0, fib(1)=1)."""
if n < 0:
raise ValueError("האינדקס חייב להיות אי-שלילי")
if n < 2:
return n
return fib(n - 1) + fib(n - 2)
print(fib(10)) # 55
print(fib(100)) # 354224848179261915075
פרומפט 3-
כתוב לי פונקציית פייתון רקורסיבית שמחשבת מספר כלשהו בסדרת פיבונאצ׳י היא מקבלת אינדקס ומחזירה את המספר
השתמש ב Memoization כדי לא לבצע חישובים מיותרים (מה שקיים בפייתון לא צריך לבנות לבד)
שים לב לזכרון תשמור רק כמה שצריך
קוד פייתון של קלוד:
from functools import lru_cache
@lru_cache(maxsize=3)
def fib(n: int) -> int:
"""מחזירה את המספר במקום ה-n בסדרת פיבונאצ'י (fib(0)=0, fib(1)=1)."""
if n < 0:
raise ValueError("האינדקס חייב להיות אי-שלילי")
if n < 2:
return n
return fib(n - 1) + fib(n - 2)
print(fib(30)) # 832040
שלושת הפרומפטים היו מאוד דומים ובכל זאת הפתרונות מאוד שונים. הבחירה של קלוד היתה תוצאה ישירה של דקויות בפרומפט. יותר מזה הקריאה שלי בפרומפט השלישי לשמור רק מה שצריך בעצמה לא היתה מדויקת. קלוד יצר מימוש ששומר רק את מה שצריך כדי לחסוך בחישובים כשמחפשים ערך אחד בסדרה אבל אם התוכנית היתה מפעילה את fib לחיפוש כמה ערכים הקוד שוב לא היה תואם לפרומפט.
האם המסקנה היא להוסיף לקובץ AGENTS.md באופן קבוע הוראות כמו "שמור רק מה שצריך" ו"השתמש במנגנונים מובנים בשפה"? אני לא בטוח. הבעיה כאן היא שאין עקרון כללי שטוב לכל המקרים. גם אופוס 5.5, כמו כל מודל שפה לפניו, הוא לא כלי לקבלת החלטות. הדרך לעבוד עם הכלים האלה היא לא לוותר על ההבנה. ככל שיש לנו הבנה טובה של מה אנחנו רוצים לקבל אפשר לחסוך המון זמן בבנייה עצמה.