en
Feedback
ToCode

ToCode

Open in Telegram

טיפים ×§×¦×Ø×™× ×œ×ž×Ŗ×›× ×Ŗ×™× ×ž××Ŗ ינון פרק

Show more
1 419
Subscribers
No data24 hours
+17 days
-430 days
Posts Archive
ToCode
1 419
šŸ“Œ ×‘××‘×˜×—×Ŗ מידע לא שואלים מה כבר יכול ×œ×§×Ø×•×Ŗ הרבה יותר קל ×œ×Ø××•×Ŗ ×—×•×œ×©×•×Ŗ בקוד ×ž××©×Ø להבין איך לנצל את ××•×Ŗ×Ÿ ×—×•×œ×©×•×Ŗ כדי ×œ×¢×©×•×Ŗ נזק, אבל כשאנחנו ×ž×©××™×Ø×™× ×—×•×œ×©×•×Ŗ בקוד שלנו רק בגלל שאנחנו לא ×Ø×•××™× מה כבר הנזק שהן ×™×›×•×œ×•×Ŗ ×œ×’×Ø×•× אנחנו בהך הכל × ×•×Ŗ× ×™× יותר מוטיבציה לאנשים שמבינים בזה. ההיפור הבא × ×›× ×” אצלי לאוהף בעיות ××‘×˜×—×Ŗ מידע שקשורות ל AI והוא מדגים בדיוק את הפער בין החולשה לניצול. היליין החליטו לתת לקלוד למיין את ה Issues ×©×ž×©×Ŗ×ž×©×™× ×¤×•×Ŗ×—×™× בעזרת קונפיגורציה כזאת:
allowed_non_write_users: "*"
claude_args: >-
  --allowedTools "Bash,Read,Write,Edit,Glob,Grep,WebFetch,WebSearch"
prompt: |
  **Issue:** #${{ github.event.issue.number }}
  **Title:** ${{ github.event.issue.title }}
×Ø××™×Ŗ× את הבעיה? אני בטוח שכן. לוקחים את ה title של ה Issue ושולחים אותו להוכן שיכול ×œ×”×Ø×™×„ פקודות Shell ×•×œ×’×©×Ŗ ×œ××™× ×˜×Ø× ×˜. עכשיו ×œ×”×’× ×Ŗ× ההוכן רׄ על מכונה של Github Actions בלי הרשאות ×œ×¢×©×•×Ŗ שום דבר. ופה אני שומע בראש את השאלה שבטח גם הם חשבו "מה כבר יכול ×œ×”×™×©×‘×Ø?". נו, ×ž×”×Ŗ×‘×Ø שגם ×ž×›×•× ×Ŗ גיטהאב אקשן בלי הרשאות יכולה ×œ×¢×©×•×Ŗ נזק והתוצאה ×”×™×Ŗ×” גירהה ×ž×œ×•×›×œ×›×Ŗ של cline ×©×¢×œ×Ŗ×” ל npm. ההיפור הטכני המלא ×œ×ž×Ŗ×¢× ×™×™× ×™× נמצא בלינק הזה: https://neciudan.dev/cline-ci-got-compromised-here-is-how#what-is-openclaw-and-why-should-you-care הלקח הוא ישן ומלווה אותנו עוד הרבה לפני ימי ה AI. ×‘××‘×˜×—×Ŗ מידע לא שואלים "מה כבר יכול ×œ×§×Ø×•×Ŗ". ×”×•×’×Ø×™× את ×”×—×•×œ×©×•×Ŗ לפני שמישהו אחר ימצא את התשובה.

ToCode
1 419
הי ×—×‘×Ø×™× תגידו מה ×“×¢×Ŗ×›× על קוד ופוליטיקה? ×”×™×™×Ŗ× ×ž×©×Ŗ×ž×©×™× בהפריית קוד פתוח עם באנר של פרי פלהטין? מה לגבי הלבה אוקראינה? ולמה?

ToCode
1 419
šŸ“Œ הצפנה ב Rails - הטוב, הרע ×•×”×ž×›×•×¢×Ø ×œ×Ø×™×™×œ×” יש מנגנון מובנה להצפין מידע ×©× ×©×ž×Ø בבהיה ×”× ×Ŗ×•× ×™×. המנגנון ×ž×’×“×™×Ø שני ×ž×¤×Ŗ×—×•×Ŗ הצפנה וביטים של מלח כדי לבלבל את האויב, ×›×œ×•×ž×Ø אנחנו ×ž×’×“×™×Ø×™× בקונפיגורציה:
Add this entry to the credentials of the target environment:

active_record_encryption:
  primary_key: YehXdfzxVKpoLvKseJMJIEGs2JxerkB8
  deterministic_key: uhtk2DYS80OweAPnMLtrV2FhYIXaceAy
  key_derivation_salt: g7Q66StqUQDQk9SJ81sWbYZXgiRogBwS
ואז מהקוד אפשר ×œ×”×©×Ŗ×ž×© ב ActiveRecord::Encryption כדי להצפין או לפענח עם ×”×ž×¤×Ŗ×—×•×Ŗ האלה, או ×œ×”×’×“×™×Ø שדות ×©××•×˜×•×ž×˜×™×Ŗ יוצפנו ×‘×©×ž×™×Ø×” לבהיה ×”× ×Ŗ×•× ×™× ויפוענחו בקריאה. ×‘×ž×“×Ø×™×š השימוש יש להם אינהוף מידע על ×”×—×œ×¤×Ŗ ×ž×¤×Ŗ×—×•×Ŗ, ×ž×Ŗ×™ ×œ×”×©×Ŗ×ž×© בהצפנה ×“×˜×Ø×ž× ×™×”×˜×™×Ŗ ×•×ž×Ŗ×™ לא ×“×˜×Ø×ž× ×™×”×˜×™×Ŗ ושאר היבטים של ××‘×˜×—×Ŗ מידע. קל, זמין וטוב כמו ×©×Ø×™×™×œ×” יודע. יש גם קלאה ישן ×•×ž×›×•×¢×Ø יותר להצפנה בשם MessageEncryptor. ×“×•×’×ž×Ŗ השימוש ×ž×”×Ŗ×™×¢×•×“ נראית כך:
len   = ActiveSupport::MessageEncryptor.key_len
salt  = SecureRandom.random_bytes(len)
key   = ActiveSupport::KeyGenerator.new('password').generate_key(salt, len) # => "\x89\xE0\x156\xAC..."
crypt = ActiveSupport::MessageEncryptor.new(key)                            # => #<ActiveSupport::MessageEncryptor ...>
encrypted_data = crypt.encrypt_and_sign('my secret data')                   # => "NlFBTTMwOUV5UlA1QlNEN2xkY2d6eThYWWh..."
crypt.decrypt_and_verify(encrypted_data)
זה קוד ×ž×›×•×¢×Ø כי הוא ×ž×›×Ø×™×— אותי ×œ×”×’×“×™×Ø לבד את המלח ×•×œ×’×–×•×Ø בעצמי את ×”×ž×¤×Ŗ×—×•×Ŗ ועוד מציג את הבהיה ×œ×™×¦×™×Ø×Ŗ ×”×ž×¤×Ŗ×— בצורה ×ž×¤×•×Ø×©×Ŗ בקוד. כן אפשר ×œ×›×Ŗ×•×‘ הצפנה ×ž××•×‘×˜×—×Ŗ עם MessageEncryptor אבל זה ידרוש עבודה וידע שלא מופיעים בתיעוד. וכשאנשים לא מהפיק מקצועיים או הוכני קידוד × ×Ŗ×§×œ×™× בכאלה בעיות הם נוטים ×œ×–×Ø×•×§ את החלקים הקשים ולהפוך את הקוד ×”×ž×›×•×¢×Ø לקוד רע, לדוגמה קוד ×©×§×™×‘×œ×Ŗ×™ מ ChatGPT:
secret_key = Rails.application.key_generator.generate_key("my-secret", 32)

encryptor = ActiveSupport::MessageEncryptor.new(secret_key)

# Encrypt + sign
encrypted = encryptor.encrypt_and_sign("Hello world")

# Decrypt + verify
decrypted = encryptor.decrypt_and_verify(encrypted)

puts encrypted
puts decrypted
לאן נעלמו הביטים ×”××§×Ø××™×™× של המלח? צ'אט כנראה לא חשב שזה מהפיק חשוב. ×¤×Ø×•×ž×¤×˜ נוהף אגב החזיר לי את הקוד הזה:
secret_key_base = Rails.application.secret_key_base

# Derive a key
key_len = ActiveSupport::MessageEncryptor.key_len
salt = "my-encryption-salt"
key = ActiveSupport::KeyGenerator.new(secret_key_base).generate_key(salt, key_len)

encryptor = ActiveSupport::MessageEncryptor.new(key)
הפעם הבהיה ×œ×ž×¤×Ŗ×— הוא secret_key_base שכבר נמצא בשימוש כדי להצפין את הקוקיז וכך קיבלנו ×ž×™×—×–×•×Ø של בהיה ×œ×ž×¤×Ŗ×— הצפנה לשימושים שונים. רק אם אני מבקש ×‘×ž×¤×•×Ø×© את ×©×™×˜×Ŗ ההצפנה החדשה עם ActiveRecord::Encryption אני ×‘××ž×Ŗ מקבל אותה. לקחים? בהחלט. כשקוד תשתית דורש ×ž×™×•×ž× ×•×Ŗ ועדינות כדי ×œ×”×©×Ŗ×ž×© בו נכון יהיו בני אדם והוכני קידוד שישברו אותו.

ToCode
1 419
šŸ“Œ אם קוד נכתב ביער ואף אחד לא ×ž×©×Ŗ×ž×© בו ×‘×¤×Ø×•×™×§×˜ בשם chatwoot (×Ø×™×™×œ×”) ×ž×¦××Ŗ×™ את הקוד הבא:
class Api::V1::Accounts::WorkingHoursController < Api::V1::Accounts::BaseController
  before_action :check_authorization
  before_action :fetch_webhook, only: [:update]

  def update
    @working_hour.update!(working_hour_params)
  end

  private

  def working_hour_params
    params.require(:working_hour).permit(:inbox_id, :open_hour, :open_minutes, :close_hour, :close_minutes, :closed_all_day)
  end

  def fetch_working_hour
    @working_hour = Current.account.working_hours.find(params[:id])
  end
end
הקוד לא עובד מכמה היבות: 1. הפונקציה fetch_webhook לא ×§×™×™×ž×Ŗ. אי אפשר להפעיל אותה לפני update. 2. הפונקציה check_authorization ×ž×—×¤×©×Ŗ קובׄ בשם working_hours_policy.rb שגם לא קיים. אין אף בדיקה על הקוד ולא מפעילים אותו משום מקום אבל הוא כן ×ž×—×•×‘×Ø ל API Endpoint לכן אדם (או הוכן קידוד) ×©×ž×”×Ŗ×›×œ רק עליו עלול לקבל את ×”×Ø×•×©× שהפונקציה והקובׄ קיימים. ואם אותו אדם (או יותר הביר הוכן קידוד) יגיע ×œ×›×Ŗ×•×‘ עכשיו פיצ'ר חדש הוא עלול ×œ×”×©×Ŗ×ž×© ×‘××•×Ŗ× ×Ø×›×™×‘×™× מדומיינים. וכן זאת בעיה של הוכני קידוד הרבה יותר ×ž××©×Ø של בני אדם, וזו הופכת ×œ×”×™×•×Ŗ בעיה של בני אדם ×›×©××•×Ŗ× בני אדם מפעילים הוכני קידוד בלי ×œ×”×›×™×Ø את הקוד ובלי ×œ×¢×‘×•×Ø ×ž×Ø××© על תוכנית העבודה. עכשיו אפשר לטעון שבני אדם הם הבעיה של הוכני קידוד ואם רק × ×™×Ŗ×Ÿ להוכני קידוד לעבוד בשקט העולם יהיה מקום טוב יותר. ××ž×Ø×• דבר דומה על ×ž×›×•× ×™×•×Ŗ ××•×˜×•× ×•×ž×™×•×Ŗ ובכל ×ž×§×Ø×” זה לא הולך ×œ×§×Ø×•×Ŗ ולא יקדם אותנו. יותר חכם לשים לב שהיום הקוד הוא ×”×¤×Ø×•×ž×¤×˜. קוד יכול ×œ×”×™×•×Ŗ שבור גם אם אף אחד לא מפעיל אותו ויכול ×‘×§×œ×•×Ŗ לקלקל את התוצאות של הוכן הקידוד. בעולם שבו הקוד הוא ×”×¤×Ø×•×ž×¤×˜, קוד נקי הוא יעד חשוב ×ž×Ŗ×ž×™×“.

ToCode
1 419
šŸ“Œ טיפ ×¤×™×™×Ŗ×•×Ÿ: לא ×¦×Ø×™×š ×œ×›×Ŗ×•×‘ את כל הקוד ב init כשאנחנו ×›×•×Ŗ×‘×™× מודול ×‘×¤×™×™×Ŗ×•×Ÿ מאוד נוח ×©×ž×©×Ŗ×ž×©×™× יכולים לייבא את המודול ולהפעיל פקודות ישירות על שם החבילה, ×›×œ×•×ž×Ø נניח שיש לי מודול בשם mymodule אז ×ž×©×Ŗ×ž×©×™× מאוד אוהבים ×œ×›×Ŗ×•×‘:
import mymodule

print(mymodule.add(10, 20))
×“×Ø×š אחת ×œ×›×Ŗ×•×‘ את mymodule כדי שזה יעבוד היא פשוט ×œ×›×Ŗ×•×‘ קובׄ בשם mymodule.py ובתוכו ×œ×”×’×“×™×Ø את הפונקציה add. אבל אם ××Ŗ× ×Ø×•×¦×™× ×œ×›×Ŗ×•×‘ ×¤×Ø×•×™×§×˜ ×•×œ×©×Ŗ×£ עם ×—×‘×Ø×™× היכוי טוב שתרצו לשים את המודול שלכם ×‘×Ŗ×•×š ×Ŗ×™×§×™×™×” ×ž×”×•×“×Ø×Ŗ ששמה יהיה כשם ×”×¤×Ø×•×™×§×˜. ופה ×”×¢×”×§ ×ž×Ŗ×—×™×œ ×œ×”×”×Ŗ×‘×š, כי אם אני יוצר ×Ŗ×™×§×™×™×” בשם mymodule ובתוכה קובׄ בשם utils.py עם הפונקציה שלי אז יש לי מבנה תיקיות:
mymodule/
    __init__.py
    utils.py
ועכשיו ×ž×©×Ŗ×ž×©×™× של המודול ×¦×Ø×™×›×™× לטעון את הקובׄ הפנימי ×ž×Ŗ×•×š החבילה ×•×œ×›×Ŗ×•×‘:
import mymodule.utils

print(mymodule.utils.add(10, 20))
העצלנים יותר ×™×©×Ŗ×ž×©×• ב alias ויכתבו ביבוא:
import mymodule.utils as mymodule

print(mymodule.add(10, 20))
אבל זה לא נראה נכון ועדיין מעצבן את ×”×ž×©×Ŗ×ž×©×™×. ×›×•×Ŗ×‘×™× מודולים ×™×¦×™×Ø×Ŗ×™×™× יודעים לשים את הקוד בקובׄ ה __init__.py של החבילה, וכך לא ×¦×Ø×™×›×™× אפילו להמציא שם לקובׄ ×”×ž×§×•×Ø ×”××ž×™×Ŗ×™ והכל ×ž×”×Ŗ×“×Ø עם היבוא, ×›×œ×•×ž×Ø יהיה לנו בצד של החבילה:
mymodule/
  __init__.py
×•×‘×Ŗ×•×š הקובׄ __init__.py תופיע הגדרת הפונקציה add, ואז ×ž×©×Ŗ×ž×©×™× של החבילה יוכלו שוב ×œ×›×Ŗ×•×‘:
import mymodule

print(mymodule.add(10, 20))
אבל ×›×•×Ŗ×‘×™× ×—×‘×™×œ×•×Ŗ יותר ×™×¦×™×Ø×Ŗ×™×™× דווקא מעדיפים ×œ×”×©×Ŗ×ž×© בשם קובׄ ×ž×”×•×“×Ø עבור הקודם שלהם. במצב כזה נכתוב קובׄ utils.py עם הגדרת הפונקציה add, וקובׄ __init__.py שיכיל רק את פקודת היבוא והיצוא מחדש:
from .utils import add
ושוב הכל עובד אבל עכשיו גם ×ž×”×•×“×Ø - ×ž×©×Ŗ×ž×©×™× יכולים לייבא את המודול mymodule ×•×œ×§×Ø×•× לפונקציה add ישירות ×“×Ø×š היבוא, אפילו שהפונקציה ×ž×•×’×“×Ø×Ŗ בקובׄ פנימי mymodule/utils.py ×‘×Ŗ×•×š החבילה.

ToCode
1 419
šŸ“Œ כן הקוד שלי אנתוני מאננינג כתב פוהט ××Ø×•×š ומשכנע נגד שימוש ב AI לקידוד. ממליׄ ×œ×§×Ø×•× אותו כאן: https://antman-does-software.com/i-will-never-use-ai-to-code-or-write אנתוני משווה בין קידוד ×œ×›×Ŗ×™×‘×Ŗ הפר. כמו שלא ×”×™×™×Ŗ × ×•×Ŗ×Ÿ ל AI ×œ×›×Ŗ×•×‘ את ×”×Ø×•×ž×Ÿ הבא שלך ומבקש ממנו "רק שפר קצת את ×”×“×ž×•×Ŗ הזאת", כי בכתיבה כל מילה חשובה, כך גם בקידוד אם תתן ל AI ×œ×›×Ŗ×•×‘ בשבילך את הקוד זה כבר לא יהיה הקוד שלך. כל מילה חשובה. זה טיעון מעניין אבל ×œ×“×¢×Ŗ×™ שגוי, לא משקף את החיים ×”××ž×™×Ŗ×™×™× של ×ž×¤×Ŗ×—×™× גם לפני AI ולא עוזר לנו ×œ×›×Ŗ×•×‘ קוד טוב יותר. בחיים ×”××ž×™×Ŗ×™×™×, גם לפני AI רוב הקוד שכתבנו לא היה 100% יצירה שלנו. עבודה על ×ž×¢×Ø×›×•×Ŗ ×§×™×™×ž×•×Ŗ, עבודה בצוות, שימוש בהפריות שלא ×Ŗ×ž×™×“ אנחנו בחרנו ואילוצי לו"ז הביאו לכך ×©×ž×¢×Ø×›×•×Ŗ תוכנה של העולם ×”××ž×™×Ŗ×™ הן לא בדיוק יצירות ××•×ž× ×•×Ŗ. יש בהן יופי אני לא מכחיש, אבל ×Ŗ×ž×™×“ יש מה לשפר. לא קורה ×©×ž×¤×Ŗ×— חדש מגיע ×œ×¤×Ø×•×™×§×˜ ×•××•×ž×Ø "וואו איזה קוד מדהים יש פה". קוד הוא לא יצירת ×ž×•×¤×Ŗ של ×ž×¤×Ŗ×— בודד אלא תוצאה של אילוצים. ×ž×¤×Ŗ×—×™× טובים יודעים איך לדחוף את ×ž×¢×Ø×›×Ŗ האילוצים הזאת לכיוון קצת יותר בריא ולהשפיע על ×”×ž×¢×Ø×›×Ŗ עצמה כדי שהקוד יגדל בצורה ×˜×‘×¢×™×Ŗ בצורה טובה יותר. כשאנחנו מיישמים את ××•×Ŗ× עקרונות על פיתוח ×‘××ž×¦×¢×•×Ŗ AI אנחנו מגלים ×©×ž×¤×Ŗ×—×™× טובים לא הולכים לאיבוד אלא להיפך, מוצאים יותר ×“×Ø×›×™× להביע את עצמם: 1. ×ž×¤×Ŗ×—×™× טובים ×ž×’×“×™×Ø×™× תבניות בקוד ××•×Ŗ×Ÿ ה AI ישכפל. 2. ×ž×¤×Ŗ×—×™× טובים ×ž×’×“×™×Ø×™× ×©×™×˜×•×Ŗ עבודה - איך עושים Deployment, מה בודקים, איך בודקים. הוכני קידוד ×™×©×Ŗ×ž×©×• ×‘×©×™×˜×•×Ŗ עבודה אלה ×‘××ž×¦×¢×•×Ŗ MCP ויחהכו עבודה של בני אדם. 3. ×ž×¤×Ŗ×—×™× טובים ×ž×’×“×™×Ø×™× ××‘×”×˜×Ø×§×¦×™×•×Ŗ ורכיבי קוד בהיהיים, בהם הוכני הקידוד ×™×©×Ŗ×ž×©×• כדי ×œ×‘× ×•×Ŗ את ×”×“×‘×Ø×™× הבאים. העובדה שאני יכול לבקש מהוכן קידוד ×œ×‘× ×•×Ŗ לי פיצ'ר חדש ×‘×ž×¢×Ø×›×Ŗ, בכל ×¤×Ø×•×™×§×˜ לא ×˜×Ø×™×•×•×™××œ×™, היא לא תוצאה של החוכמה של הוכן הקידוד אלא של מבנה טוב של ×”×ž×¢×Ø×›×Ŗ. ×•×œ×Ø××™×” בהרבה ×¤×Ø×•×™×§×˜×™× הוכני הקידוד לא מצליחים ×œ×™×™×¦×Ø תוצאות ×˜×•×‘×•×Ŗ ×•×ž×¤×Ŗ×—×™× מבזבזים שעות ×‘×Ø×™×‘×™× עם ההוכנים. כן הקוד שלי, ×”×ž×¢×Ø×›×Ŗ שלי, המבנה שלי. אני ×ž×›×™×Ø כל שורה בו ×•×ž×›×Ŗ×™×‘ את הכיוון, אפילו שאת רובו לא ×”×§×œ×“×Ŗ×™ בעצמי.

ToCode
1 419
šŸ“Œ × .ב. ×¢×œ×•×™×•×Ŗ של AI לפני ×‘×¢×Ø×š שנה בניתי ×¤×Ø×•×™×§×˜ שיוצר ×Ŗ×Ø×’×•×œ אוצר מילים בשפה ×ž×”×Ø×˜×™× ×§×¦×Ø×™× ביוטיוב. חיברתי אותו לחשבון גוגל שלי כי ג'מיני פרו של אותו זמן היה הדבר היחיד שהצליח ×œ×Ŗ×ž×œ×œ בצורה טובה ×”×Ø×˜×™× מיוטיוב ×•×‘××¤×Ø×™×œ 2025 ×§×™×‘×œ×Ŗ×™ מגוגל חשבון של 350 ש"ח על שימוש באותו ג'מיני פרו רק ×œ×¤×Ø×•×™×§×˜ פנאי הקטן הזה. בחודשים שאחרי כבר נזהרתי יותר בשימוש בג'מיני פרו ובמאי ×©×™×œ×ž×Ŗ×™ להם רק 3 ש"ח, יוני 25 ש"ח, יולי 76 ש"ח ואוגוהט 50. חלק מזה קשור לאופטימיזציה ×‘×ž×¢×Ø×›×Ŗ שהיתה צריכה פחות AI כדי ×œ×™×¦×•×Ø את ×”×©×™×¢×•×Ø×™×, חלק קשור לזה שהעברתי חלקים מהקוד לעבוד עם מודלים יותר זולים וחלק לזה שפשוט היה לי פחות זמן לעבוד על ×”×¤×œ×˜×¤×•×Ø×ž×”. הך הכל לפני אופטימיזציה ×©×™×œ×ž×Ŗ×™ ×‘×¢×Ø×š 20 ש"ח לעבודה על וידאו אחד ואחרי אופטימיזציה זה ירד ל 2-3 ש"ח לוידאו. מאז גוגל השיקו את ג'מיני פלאש לייט 3.1 ואולמה השיקו את תוכנית Ollama Cloud. שילוב שני אלה הוריד את ×”×¢×œ×•×Ŗ של יצירת וידאו ×œ×¤×—×•×Ŗ ×ž××’×•×Ø×”, ללא שינוי בקוד. שני ×”×Ŗ×”×œ×™×›×™× הגדולים שכבר החלו וילוו אותנו בשנים הקרובות הם שיפור בצריכת המשאבים של המודלים (מודלים יותר קטנים עם תוצאות ×˜×•×‘×•×Ŗ יותר) ותחרות בין יותר הפקיות מודלים. שילוב שני ×”×“×‘×Ø×™× ××•×ž×Ø ×©×¢×œ×•×Ŗ העבודה עם LLM ירדה פלאים ועוד ×Ŗ×ž×©×™×š ×œ×Ø×“×Ŗ. הפקי ה AI ×Ø×•××™× את זה ומנהים ×œ×¤×¦×•×Ŗ ×‘××ž×¦×¢×•×Ŗ הוהפת שירותי ערך מוהף ל API כמו "שימוש במחשב", "חיפוש ברשת" ואחהון קבצים. קשה ×œ×“×¢×Ŗ כמה טוב זה יצליח להם. ×‘×™× ×Ŗ×™×™× מה שבטוח הוא ×©×”×¢×œ×•×Ŗ של Inference יורדת ×•×ž×”×Ø. ×™×™×Ŗ×›×Ÿ ולא רחוק היום שגם על יישומי AI × ×Ŗ×—×™×œ לשלם במודל של מנוי במקום על בהיה טוקנים.

ToCode
1 419
šŸ“Œ גם ה GPL כנראה לא ישרוד אני מבין איך ×ž×Ø×’×™×© ×ž××Ø×§ ×¤×™×œ×’×Ø×™×. ×ž××Ø×§ כתב את Dive Into Python וגם כתב מודול ×¤×™×™×Ŗ×•×Ÿ בשם chardet שמגלה מה הקידוד של ×ž×—×Ø×•×–×Ŗ. ×ž××Ø×§ רצה ×œ×”×©××™×Ø ×ž×Ŗ× ×” לקהילה ובנה את ×”×¤×Ø×•×™×§×˜ ×‘×Ø×©×™×•×Ÿ LGPL כדי לוודא שאם ××—×Ø×™× לוקחים את הקוד ובונים על בהיהו הפריה אחרת גם ההפריה שלהם צריכה ×œ×”×™×•×Ŗ חופשית. ואני גם מבין איך ×ž×Ø×’×™×© דן ×‘×œ× ×©×Ø×“. עוד ב 2014 הוא ראה ש chardet הוא בהך הכל מימוש מחדש ×‘×¤×™×™×Ŗ×•×Ÿ של קוד ישן של מוזילה ולכן ממילא היה ×¦×Ø×™×š ×œ×”×™×•×Ŗ ×Ø×©×•× ב MPL. ×‘×œ× ×©×Ø×“ הוא ×”×ž×Ŗ×—×–×§ של ×”×¤×Ø×•×™×§×˜ מ 2014, ×›×œ×•×ž×Ø ב 12 השנים האחרונות. ×‘×œ× ×©×Ø×“ הוא זה שקיבל פניות ×ž×ž×©×Ŗ×ž×©×™× ×©×Ø×•×¦×™× ×œ×”×©×Ŗ×ž×© ב chardet ולא יכולים בגלל ×”×Ø×™×©×™×•×Ÿ כי אצלם בחברה אהור ×œ×”×©×Ŗ×ž×© ב LGPL, או כי הם ×ž×©×Ŗ×ž×©×™× ב pyinstaller, וזה ×ž×™×™×¦×Ø קובׄ exe ולכן כל המודולים חייבים ×œ×”×™×•×Ŗ חופשיים. ב 2021 היה זה ×‘×œ× ×©×Ø×“ שניהה לקדם את שינוי ×”×Ø×™×©×™×•×Ÿ שוב וראה איך הפריית requests ×”×¤×•×¤×•×œ×Ø×™×Ŗ נפרדת ב chardet בדיוק בגלל נושא זה. אז מה הפלא שעם כל ×”×“×™×‘×•×Ø×™× על קלוד קוד גם ×‘×œ× ×©×Ø×“ לא עמד בפיתוי? הוא בא לקלוד עם ×¤×Ø×•×ž×¤×˜ ×©××•×ž×Ø "תבנה לי הפריה חדשה שעושה בדיוק מה ש chardet עושה אבל בלי ×œ×§×—×Ŗ כלום מהקוד ×”×ž×§×•×Ø×™". קלוד יצר מימוש פי 43 ×ž×”×™×Ø יותר ואמין באותה מידה בלי שום קוד ×ž×©×•×Ŗ×£. כך נולדה גרהה 7 של chardet ואיתה ריב ×ž×Ŗ×•×§×©×Ø עם היוצר ×”×ž×§×•×Ø×™: https://github.com/chardet/chardet/issues/327 אנחנו לא יודעים מה יהיה העתיד של עולם הקוד הפתוח. הניחוש שלי הוא שכל ×©×™×˜×Ŗ הרשיונות המגבילים ×”×•×œ×›×Ŗ להיעלם עקב חוהר ×™×›×•×œ×Ŗ אכיפה.

ToCode
1 419
ב PDD אני פשוט כותב "תבנה לי משחק איקה עיגול עם בדיקות ×‘×¤×™×™×Ŗ×•×Ÿ" ×•×ž×Ŗ×§×Ÿ בלולאה את ×”×¤×Ø×•×ž×¤×˜ עד שיוצא משחק שאני רוצה. ×¦×Ø×™×š בדיקה הפציפית? אוהיף אותה ×œ×¤×Ø×•×ž×¤×˜. ×¦×Ø×™×š מחלקה הפציפית? נגדיר אותה ×‘×¤×Ø×•×ž×¤×˜. ההבדלים ×”×ž×Ø×›×–×™×™× בין הגישות: 1. ב TDD אני לוקח שליטה על הקוד. אני יודע מה אני כותב ומה ×¦×Ø×™×š ×œ×”×™×›×Ŗ×‘. אני קובע את המבנה של הקוד ויודע בדיוק איך יראה הקוד שה AI יבנה. כמעט לא הולך לי זמן על ×œ×—×›×•×Ŗ להוכן הקידוד או ×œ×§×Ø×•× את הקוד שלו. 2. ב PDD אני ×ž×•×•×Ŗ×Ø על השליטה ובוחר ×ž×Ŗ×¤×Ø×™×˜, בהגנון "תראה לי מה אפשר". פה הרבה יותר זמן הולך על ×œ×”×”×Ŗ×›×œ על הוכן הקידוד עובד ×•×œ×§×Ø×•× את הקוד שלו. לפעמים אפשר ללמוד מהקוד שהוא יצר ×•×œ×’×œ×•×Ŗ ×“×‘×Ø×™× חדשים. לפעמים לא. בהיבט של בדיקות בגישת PDD יהיו לי הרבה יותר בדיקות אבל איכות ×—×‘×™×œ×Ŗ הבדיקות ×”×›×œ×œ×™×Ŗ ×Ŗ×”×™×” פחות טובה. בדוגמה של האיקה עיגול כשנתתי ל AI ×œ×‘× ×•×Ŗ את הקוד הוא ×‘××ž×Ŗ כתב לבד את הבדיקות ללוגיקה אבל לא מימש בדיקות ×œ×›×Ŗ×™×‘×” למהך. אז עשיתי ניהוי, × ×Ŗ×Ŗ×™ להוכן הקידוד את ×”×¤×Ø×•×ž×¤×˜ הבא:
create a text based tic tac toe game in python with pytest. use uv
Use multiple modules for game logic and display
Implement pytest tests for both logic and display
מאוד רציתי שהוא יכתוב בדיקות תצוגה ×¤×©×•×˜×•×Ŗ כמו שאני כתבתי בדוגמה שהדבקתי, אבל זה לא מה שקרה. מודול התצוגה שהוכן הקידוד יצר כולל פונקציה ×©×ž×¦×™×™×Ø×Ŗ את הלוח ×œ×ž×¢×Ø×š של שורות ופונקציה אחרת שמדפיהה את ×”×ž×¢×Ø×š. הבדיקה היא עדיין בדיקת data שבודקת רק את ×ž×¢×Ø×š השורות ×›×œ×•×ž×Ø:
def test_render_board_with_markers(self):
    board = Board()
    board.place_marker("A1", "X")
    board.place_marker("B2", "O")
    rendered = Display.render_board(board)
    assert "X" in rendered
    assert "O" in rendered
נראה ש glm עבד מאוד קשה רק בשביל לא ×œ×”×©×Ŗ×ž×© ב capsys של pytest והפך את קוד המשחק ×œ×™×•×Ŗ×Ø ×ž×”×•×Ø×‘×œ. אז בחזרה לשאלה שבכותרת, האם TDD עדיין ×Ø×œ×•×•× ×˜×™? לפעמים. בעזרת TDD אני יכול ×œ×”×¢×‘×™×Ø את ×”×ž×”×Ø להוכן הקידוד בצורה הרבה יותר ×ž×“×•×™×§×Ŗ ×ž××©×Ø בעזרת ×¤×Ø×•×ž×¤×˜ ואני חוהך את הוויכוחים עם ההוכן, במיוחד כשאני יודע איזה קוד אני מצפה ×œ×Ø××•×Ŗ.

ToCode
1 419
šŸ“Œ האם Test Driven Development עדיין ×Ø×œ×•×•× ×˜×™? פיתוח מונחה בדיקות או TDD הוא ×”×Ø×¢×™×•×Ÿ שכדאי לי ×œ×›×Ŗ×•×‘ קודם את הבדיקות ואז ×œ×Ø××•×Ŗ את הקוד, ואז אני ×ž×Ø×•×•×™×— גם בדיקות של הקוד וגם קוד טוב יותר שיותר קל לבדוק אותו. × ×™×”×™×Ŗ×™ את זה היום עם AI וזה עבד יופי, ×›×œ×•×ž×Ø כתבתי כמה בדיקות ×©×ž×©×Ŗ×ž×©×•×Ŗ בפונקציות ×•×ž×—×œ×§×•×Ŗ ×©×”×ž×¦××Ŗ×™, × ×Ŗ×Ŗ×™ ל AI ×œ×›×Ŗ×•×‘ את הקוד, לפעמים זה הצליח לו, לפעמים הוא ×”×Ŗ×œ×•× ×Ÿ שהבדיקות שלי לא הגיוניות. כשהוא הצליח הכל היה טוב ×”×›× ×”×Ŗ×™ את הקוד לגיט ×•×”×Ŗ×§×“×ž×Ŗ×™. כשהוא ×”×Ŗ×œ×•× ×Ÿ × ×™×§×™×Ŗ×™ את מה שהוא כתב, ×Ŗ×™×§× ×Ŗ×™ את הבדיקות ×•×©×œ×—×Ŗ×™ אותו ×œ×™×™×¦×Ø שוב. בהוף ×§×™×‘×œ×Ŗ×™ קוד עובד שעשה בדיוק את מה שרציתי ובמבנה ×ž×—×œ×§×•×Ŗ שאני בחרתי. לפני ×©× ×Ŗ×™×™× ×”×™×™×Ŗ×™ ×—×•×Ŗ× על זה. חלום. היום אני לא כל כך בטוח. ×”××œ×˜×Ø× ×˜×™×‘×” של TDD בה גם אני ×ž×©×Ŗ×ž×© וגם אני רואה בתעשייה היא PDD, ×›×œ×•×ž×Ø Prompt Driven Development. ×›×•×Ŗ×‘×™× ×¤×Ø×•×ž×¤×˜, × ×•×Ŗ× ×™× ל AI ×œ×™×™×¦×Ø קוד ובדיקות, ×§×•×Ø××™× את הבדיקות והקוד, אם אוהבים ×©×•×ž×Ø×™× ואם לא אוהבים מנקים ×•×ž×Ŗ×§× ×™× את ×”×¤×Ø×•×ž×¤×˜. לדוגמה עבור משחק איקה עיגול ב TDD אני ×ž×Ŗ×—×™×œ עם קובׄ בדיקות כזה:
import pytest
import GameUI


def test_first_player_plays(game_logic):
    game_logic.play(0, 0)
    assert not game_logic.game_over()
    assert game_logic.winner() is None

def test_second_player_plays_in_taken_square(game_logic):
    game_logic.play(0, 0)

    with pytest.raises(Exception):
        game_logic.play(0, 0)

def test_player1_wins_first_row(game_logic):
    game_logic.play(0, 0)
    game_logic.play(1, 0)

    game_logic.play(0, 1)
    game_logic.play(1, 1)

    game_logic.play(0, 2)
    assert game_logic.game_over()
    assert game_logic.winner() == game_logic.players[0]

def test_player2_wins_diagonal(game_logic):
    game_logic.play(0, 1)
    game_logic.play(0, 0)

    game_logic.play(1, 0)
    game_logic.play(1, 1)

    game_logic.play(1, 2)
    game_logic.play(2, 2)
    assert game_logic.game_over()
    assert game_logic.winner() == game_logic.players[1]

def test_cant_play_after_win(game_logic):
    game_logic.play(0, 1)
    game_logic.play(0, 0)

    game_logic.play(1, 0)
    game_logic.play(1, 1)

    game_logic.play(1, 2)
    game_logic.play(2, 2)

    with pytest.raises(Exception):
        game_logic.play(2, 0)
        

def test_show_empty_board(game_logic, capsys):
    GameUI.print_current_game(game_logic)
    printed_text = capsys.readouterr().out
    assert printed_text == """Waiting for player X
. . .
. . .
. . .
"""

def test_show_board_after_play(game_logic, capsys):
    game_logic.play(0, 0)
    game_logic.play(1, 1)
    game_logic.play(2, 0)

    GameUI.print_current_game(game_logic)
    printed_text = capsys.readouterr().out
    assert printed_text == """Waiting for player O
X . .
. O .
X . .
"""

def test_show_draw(game_logic, capsys):
    game_logic.play(0, 0) # X
    game_logic.play(1, 1) # O

    game_logic.play(2, 0) # X
    game_logic.play(1, 0) # O

    game_logic.play(1, 2) # X
    game_logic.play(2, 1) # O

    game_logic.play(0, 1) # X
    game_logic.play(0, 2) # O

    game_logic.play(2, 2) # X

    GameUI.print_current_game(game_logic)
    printed_text = capsys.readouterr().out
    assert printed_text == """Game Over. It's a draw
X X O
O O X
X O X
"""

def test_show_player_1_won(game_logic, capsys):
    game_logic.play(0, 0)
    game_logic.play(1, 0)
    game_logic.play(0, 1)
    game_logic.play(1, 1)
    game_logic.play(0, 2)

    GameUI.print_current_game(game_logic)
    printed_text = capsys.readouterr().out
    assert printed_text == """Bravo! X Won
X X X
O O .
. . .
"""

def test_read_move_from_player(game_logic, monkeypatch, capsys):
    monkeypatch.setattr("builtins.input", lambda _: "0, 0")
    next_move = GameUI.read_next_move(game_logic)
    game_logic.play(*next_move)

    capsys.readouterr() # clear the buffer
    GameUI.print_current_game(game_logic)
    printed_after = capsys.readouterr().out
    assert printed_after == """Waiting for player O
X . .
. . .
. . .
"""
ואז ×‘×¤×Ø×•×ž×¤×˜ מאוד פשוט מקבל את GameLogic שבדיוק ×ž×Ŗ××™× לממשק שהגדרתי.

ToCode
1 419
מודלים ×¤×Ŗ×•×—×™× שמהוגלים ×œ×›×Ŗ×•×‘ קוד הם ענקיים ×•×œ×Ø×•×‘ לא תרצו ×œ×”×Ø×™×„ ××•×Ŗ× על המחשב אלא בענן של Ollama (או בשרת ענן אחר). המודלים ×”×Ø×œ×•×•× ×˜×™×™× היום ×œ×¤×™×Ŗ×•×— קוד הם: 1. glm-5 2. minimax-2.5 3. kimi-k2.5 4. qwen3-coder-next אולמה מגיע עם ××™× ×˜×’×Ø×¦×™×” ×ž×•×‘× ×™×Ŗ להוכני קידוד ואפשר ×œ×§×Ø×•× עליה כאן: https://docs.ollama.com/integrations בשביל ×œ×”×Ø×™×„ את קלוד קוד עם מודל של אולמה נפעיל:
ollama launch claude --model minimax-2.5:cloud
או כל מודל אחר שתרצו. אני ×©×ž×Ŗ×™ לב שמינימקה עובד ממש טוב עם קלוד קוד. הוכן קידוד ×ž×Ŗ×—×Ø×” של קלוד קוד נקרא OpenCode וגם אותו אפשר ×œ×”×Ø×™×„ עם אולמה, פה ×©×ž×Ŗ×™ לב ש glm-5 עובד טוב יותר:
ollama launch opencode --model glm-5:cloud
× .ב. אני לא יודע למה קלוד קוד עובד יותר טוב עם מינימקה ואופןקוד עובד יותר טוב עם glm. אני כן יודע ×©×”×ž×¤×Ŗ×—×™× של קלוד קוד עובדים מול קלוד וחושד שמינימקה יותר דומה לקלוד בתשובות שלו ×•×”×ž×¤×Ŗ×—×™× של אופןקוד עובדים עם glm ולכן כנראה ×”×¤×Ø×•×ž×¤×˜×™× והכלים שהם בונים נבדקו ועברו אופטימיזציה למודל זה. אם ××Ŗ× מעדיפים לעבוד ×‘×Ŗ×•×š VS Code יש ×ž×”×¤×Ø ××™× ×˜×’×Ø×¦×™×•×Ŗ ל Ollama ×©×Ŗ×•×›×œ×• ×œ×”×Ŗ×§×™×Ÿ כמו cline, kilocode ו Roo Code כולן יודעות ×œ×”×Ŗ×—×‘×Ø ל Ollama. ל VS Code עצמו יש ××™× ×˜×’×Ø×¦×™×” עם Ollama אבל ×‘×™× ×Ŗ×™×™× היא עובדת במצב ask בלבד ולא במצב הוכן אז פחות ×Ø×œ×•×•× ×˜×™×Ŗ. āœ כלים, אקוהיהטם והעתיד כמו ×©×“×‘×Ø×™× × ×Ø××™× עכשיו האקוהיהטם מאוד ××™× ×˜×Ø××•×¤×Ø×‘×™×œ×™ ×›×œ×•×ž×Ø יש הפרדה בין המודל להוכן. לכן כלי כמו Ollama × ×•×Ŗ×Ÿ לנו אפשרות ×œ×—×‘×Ø מודל שלנו לכל הוכן שנבחר - בין אם זה אוטומציה (n8n), שיחה (onyx) או הכי ×¤×•×¤×•×œ×Ø×™ הוכן קידוד. ×œ××—×Ø×•× ×” ×× ×˜×Ø×•×¤×™×§ יצאה ×‘×ž×Ŗ×§×¤×” ×ž×©×¤×˜×™×Ŗ על החברות ההיניות בטענה שהן ×ž××ž× ×•×Ŗ את המודלים שלהן ×ž×Ŗ×•×š המודלים הקיימים של ×× ×˜×Ø×•×¤×™×§ וכך חוהכות לעצמן ×¢×œ×•×™×•×Ŗ ×‘××ž×¦×¢×•×Ŗ ×ž×Ŗ×§×¤×” שנקראת דיהטילציה. אני לא מבין מהפיק בשביל ×œ×”×Ø×—×™×‘ על זה אבל יכול לשער שאם אפשר "×œ×”×¢×Ŗ×™×§" מודלים יהיו מי שישמחו ×œ×¢×©×•×Ŗ את זה ולהפיׄ כך מודלים ×¤×Ŗ×•×—×™×. אפילו בלי ×“×™×”×˜×™×œ×¦×™×•×Ŗ יש היום המון מודלים ×¤×Ŗ×•×—×™× ×‘×ž××’×Ø×™× של Ollama ושל Hugging Face כך שנראה שהם לא הולכים להיעלם. אין הפק שהעולם של כלי פיתוח וכלים מבוההי AI עובר רעידת אדמה ×ž×©×ž×¢×•×Ŗ×™×Ŗ בתקופה זו וקשה ×œ×“×¢×Ŗ איך ×“×‘×Ø×™× יראו אפילו בעוד חודש. אבל ×”××™× ×˜×Ø××•×¤×Ø×‘×™×œ×™×•×Ŗ ×¤×•×¢×œ×Ŗ מאוד ×œ×˜×•×‘×Ŗ× ×•. אין שום בעיה ×œ×”×Ŗ×§×™×Ÿ Ollama ×•×œ× ×”×•×Ŗ ×œ×“×‘×Ø עם הוכן שיחה פתוח שרׄ אצלכם על המחשב או עם הוכן קידוד בענן של אולמה כדי ×œ×”×©×•×•×Ŗ תוצאות.

ToCode
1 419
šŸ“Œ היכום וובינר מודלים ×¤×Ŗ×•×—×™× במפגש ×ž×“×‘×Ø×™× AI ×”××—×Ø×•×Ÿ דיברנו על מודלים חינמיים ומודלים ×¤×Ŗ×•×—×™×. השבוע אין מפגש (בלי קשר למלחמה, זה דילוג ×©×Ŗ×•×›× ×Ÿ ×ž×Ø××© ויצא לנו טוב). שבוע הבא ×ž×Ŗ×•×›× ×Ÿ מפגש חשוב על גישת ×©×œ×•×©×Ŗ השכבות ואיך לקבל קוד טוב מהוכן קידוד אני אעדכן כאן ובמייל לקראת חמישי הבא אם ×™×Ŗ×§×™×™× לפי המצב. עכשיו בואו נזכר מה היה לנו בשבוע שעבר. āœ מהם מודלים ×¤×Ŗ×•×—×™× שלוש החברות ×”×’×“×•×œ×•×Ŗ שבונות כלי AI הן גוגל, ×× ×˜×Ø×•×¤×™×§ ו OpenAI ולכל אחת מודל מוביל משלה. חברות אלה ואחרות בונות גם אקוהיהטם שלם הביב המודלים - הוכני קידוד, APIs, ×¤×Ø×•×˜×•×§×•×œ×™× ועולם שלם של כלים. מודל הוא החלק שמקבל טקהט ×•×ž×—×–×™×Ø את המשך הטקהט. אפשר להגיד שזה "המוח" של כל כלי בינה ×ž×œ××›×•×Ŗ×™×Ŗ. הכלי עצמו עוטף את המודל ומלביש לו ×¤×•× ×§×¦×™×•× ××œ×™×•×Ŗ או חיבור לעולם, לדוגמה קלוד קוד הוא הוכן קידוד שעוטף מודל ×•×ž×—×‘×Ø אותו לקוד. גם ממשק הווב לשיחה עם AI הוא הוכן, הוא עוטף את המודל ×‘×™×›×•×œ×•×Ŗ ×©×ž××¤×©×Ø×•×Ŗ חיפוש ברשת או הרצת קוד. המודל, או המוח של הכלי, מביא איתו הוג מהוים של ×”×˜×™×•×Ŗ, תשובות, גישה וחשיבה. מודל GPT-5.2 לא יחזיר את ××•×Ŗ×Ÿ תשובות כמו Gemini Flash. יש כאלה שחושבים ששלוש חברות זה מהפיק ואפילו יותר מדי אבל ×œ×“×¢×Ŗ×™ תחרות פה היא חיובית ומוהיפה עניין למשחק. אבל זה לא כל כך פשוט. כשאני שולח שאלה למודל שרׄ בענן אני הומך על הפק המודל ×©×™×©×ž×•×Ø על השאלה שלי והתשובה של המודל באופן מאובטח. אם השאלה ×›×•×œ×œ×Ŗ מידע ×¤×Ø×˜×™ או קוד של ×”×ž×¢×Ø×›×Ŗ אני הומך על הפק המודל שלא ×™×©×Ŗ×ž×© בקוד הזה ×œ×“×‘×Ø×™× שלא הרשיתי. היכוי טוב שאנחנו לא מוכנים להמוך כך על כל אחד שטוען שיש לו מודל חדש. מודלים ×¤×Ŗ×•×—×™× מציעים לנו ×“×Ø×š לעבוד עם מודלים חדשים ×•×œ×‘× ×•×Ŗ מחדש אמון. מודל פתוח הוא מודל שכל אחד יכול ×œ×”×Ø×™×„ ולכן אני יכול ×œ×”×Ø×™×„ אותו על המחשב שלי או על מחשב בהפק ענן עליו אני הומך. קיימים מודלים ×¤×Ŗ×•×—×™× שיהפרו לכם איך הם פיתחו את המודל ×•× ×•×Ŗ× ×™× לכם את כל הכלים ×œ×‘× ×•×Ŗ את המודל לבד אצלכם, ויש מודלים ×¤×Ŗ×•×—×™× קצת פחות ×™×“×™×“×•×Ŗ×™×™× ×©× ×•×Ŗ× ×™× לכם רק את ×ž×˜×Ø×™×¦×Ŗ המשקלים של המודל, ×›×œ×•×ž×Ø נוכל ×œ×”×Ø×™×„ את המודל על המחשב שלנו אבל לא נוכל ×œ×‘× ×•×Ŗ ×ž×˜×Ø×™×¦×” כזאת מאפה ולא נדע מאיזה מידע המודל נוצר. מודלים ×¤×Ŗ×•×—×™× מוהיפים ×œ×Ŗ×—×Ø×•×Ŗ - חלקם מוכנים ×œ×¢× ×•×Ŗ על ×©××œ×•×Ŗ בנושאים ×©×©×œ×•×©×Ŗ המודלים ×”×Ø×’×™×œ×™× לא עונים, חלקם יציגו תשובות חדשות ויצירתיות ×œ×©××œ×•×Ŗ וכולם יהיו הרבה יותר זולים ×ž×©×œ×•×©×Ŗ המודלים הגדולים כי ××Ŗ× יכולים ×œ×”×Ø×™×„ ××•×Ŗ× על ×—×•×ž×Ø×” שלכם. בנוהף למודלים ×”×¤×Ŗ×•×—×™× יש גם מודלים חינמיים. אלה מודלים שחברות ×ž×¦×™×¢×•×Ŗ ×œ×¦×•×Ø×š בדיקה וקידום ×ž×›×™×Ø×•×Ŗ, ×œ×Ø×•×‘ הם יוצעו ×Ŗ×—×Ŗ שם בדוי ×•×“×Ø×š אתר OpenRouter במקום ×“×Ø×š אתר החברה עצמה. המודל החינמי ×ž××¤×©×Ø לכם גישה בלי ×Ŗ×©×œ×•× ×•×‘×Ŗ×ž×•×Ø×” הם ×ž×©×Ŗ×ž×©×™× בשיחות כדי לשפר את המודל או לאהוף מידע על ×©××œ×•×Ŗ ×©× ×©×œ×—×•×Ŗ. שימו לב שמודל חינמי אינו מודל פתוח, לפעמים התשובות שלו יהיו ×˜×•×‘×•×Ŗ יותר ×•×Ŗ×ž×™×“ יהיה פה איזשהו וויתור על ×¤×Ø×˜×™×•×Ŗ בעבודה ××™×Ŗ×. āœ איך עובדים עם מודלים ×¤×Ŗ×•×—×™× הכלי האהוב עליי לעבודה עם מודלים ×¤×Ŗ×•×—×™× נקרא Ollama (יש עוד. אולמה הוא פשוט האהוב עליי). אפשר ×œ×”×•×Ø×™×“ אותו ×ž×”××Ŗ×Ø שלהם כאן: https://ollama.com/ אולמה מציע שני מהלולים לעבודה עם המודלים ×”×¤×Ŗ×•×—×™×: 1. × ×™×Ŗ×Ÿ ×œ×”×•×Ø×™×“ ×•×œ×”×Ø×™×„ ×‘××ž×¦×¢×•×Ŗ×• מודלים על המחשב שלכם. 2. × ×™×Ŗ×Ÿ ×œ×”×©×Ŗ×ž×© בו כדי ×œ×”×Ŗ×—×‘×Ø למודלים ×¤×Ŗ×•×—×™× ×©×Ø×¦×™× על שרת הענן שלהם. ×‘×ž×—×™×Ø המלי של 20$ לחודש ×Ŗ×§×‘×œ×• גישה כמעט ללא הגבלה לענן של Ollama ×•×Ŗ×•×›×œ×• לעבוד עם כל המודלים ×”×¤×Ŗ×•×—×™× שם. בשביל ×œ×”×Ø×™×„ מודלים אצלכם על המחשב לא ×¦×Ø×™×š לשלם שקל אבל דרושה ×—×•×ž×Ø×” חזקה. איכות המודל נקבעת לפי הוג המודל ולפי ×ž×”×¤×Ø ×”×¤×Ø×ž×˜×Ø×™× ×‘×ž×˜×Ø×™×¦×Ŗ המשקלים. אם × ×”×Ŗ×›×œ לדוגמה על deepseek אז נראה באתר של אולמה שיש לו ×ž×”×¤×Ø גרהאות, הראשיות הן 1, 2 ו-3. בכל גרהה יש כמה אפשרויות למודל ×•×œ×¤×Ø×ž×˜×Ø×™× לדוגמה deepseek-coder שזו גרהה של המודל מלפני ×©× ×Ŗ×™×™× ×”×ž×™×•×¢×“×Ŗ לקידוד × ×™×Ŗ× ×Ŗ ×œ×”×•×Ø×“×” בגרהת 1.3 ×ž×™×œ×™××Ø×“ ×¤×Ø×ž×˜×Ø×™×, 6.7 ×ž×™×œ×™××Ø×“ ×¤×Ø×ž×˜×Ø×™× או 33 ×ž×™×œ×™××Ø×“ ×¤×Ø×ž×˜×Ø×™×. ×ž×”×¤×Ø ×”×¤×Ø×ž×˜×Ø×™× משפיע על הגודל והגרהה הגדולה ביותר 33 ×ž×™×œ×™××Ø×“ ×¤×Ø×ž×˜×Ø×™× תופהת 19 ג׳יגה. מודל gpt-oss שהוא מודל פתוח ×ž×‘×™×Ŗ OpenAI מגיע בגרהת 20 ×ž×™×œ×™××Ø×“ ×¤×Ø×ž×˜×Ø×™× ו 120 ×ž×™×œ×™××Ø×“ וגרהת ה 120 ×ž×™×œ×™××Ø×“ היא בגודל 65 ג'יגה. בשביל לשאול ×©××œ×•×Ŗ בשיחה תהפיק לנו גרהה קטנה של 6-7 ×ž×™×œ×™××Ø×“ ×¤×Ø×ž×˜×Ø×™×. בשביל הוכן קידוד אפילו ה 120 ×ž×™×œ×™××Ø×“ עלול ×œ×”×™×•×Ŗ בהיהי מדי. אולמה מהפק אפליקציה גרפית דרכה אפשר ×œ×“×‘×Ø עם מודלים, לשאול ×©××œ×•×Ŗ ×•×œ×Ø××•×Ŗ את התשובות שלהם באפליקציה. שווה ×œ×”×©×Ŗ×ž×© בה ×›×©×ž×Ŗ×™×™×¢×¦×™× עם מודלים מקומיים וכך לקבל ×¤×Ø×˜×™×•×Ŗ ×ž×™×Ø×‘×™×Ŗ בשיחה עם ה AI. āœ איך ×œ×›×Ŗ×•×‘ קוד עם מודל פתוח

ToCode - Statistics & analytics of Telegram channel @tocodeil