סוכן תוכנה

במדעי המחשב, סוכן תוכנה הוא תוכנה הפועלת עבור תוכנה או משתמש אחרים כמייצגת שלהם. כאשר מספר סוכנים פועלים במערכת אחת המערכת מכונה מערכת מרובת סוכנים.
חלק מסוכני התוכנה נחשבים לאוטונומיים, מאחר שהם מכילים את כל הנדרש לפעולתם ומסוגלים לקבל החלטות עצמאיות ולפעול על פי החלטות אלה, מתוך צורך לספק מטרות פנימיות וביחס לסביבה כפי שהם חשים אותה. הטענה כי סוכן תוכנה (או כל תוכנה אחרת) היא אוטונומית היא שנויה במחלוקת, במיוחד לאור העובדות הבאות: סוכני התוכנה מפוקחים בדרך כלל על ידי המשתמש בתוכנה אותה הם משרתים, המשתמש פעמים רבות אחראי ליצירה או להפסקת הפעולה שלהם ולפיכך המשתמש מעורב באספקטים רבים של פעולת הסוכנים ה"אוטונומיים". 
יחד עם זאת, סוכני תוכנה המסוגלים להגיב לסביבתם (אדאפטיביים) נחשבים פעמים רבות לסוכנים חכמים.
במערכות מרובות סוכנים, שיתוף הפעולה בין הסוכנים מחייב שיתוף של סמנטיקה ומידע אודות הסוכנים, המופץ על ידי מערכות המחשבים.

ההבדל בין עצמים ובין סוכנים

קיים ויכוח בספרות על הדומה והשונה בין המושגים אובייקט וסוכן תוכנה. אובייקט תוכנה מוגדר באמצעות התכונות שלו (Attributes) והמתודות, שהן הפונקציות המאפשרות גישה אליהן (Methods). סוכן תוכנה מוגדר פעמים רבות באמצעות תכונות ומטרות התנהגות ופונקציות המשרתות השגת תכונות ומטרות אלה.

הבדל משמעותי נוסף בין עצם לסוכן הוא אופן השימוש בהם. כאשר משתמש מבקש מעצם לשנות תכונה שלו, הוא אינו יכול לפנות ישירות אל התכונה, שכן על פי תכונה הכימוס (Encapsulation) היא אינה מוחצנת למשתמש, אלא פנימית לעצם. במקום זאת, המשתמש פונה ומפעיל מתודה של העצם, המשמשת לשינוי התכונה באופן הנדרש. למשל, אם עצם כלשהו מחזיק תכונה שנקראת X והמשתמש מעוניין להגדיל את ערכו של X ב-1 הוא יפנה למתודה שמוסיפה ערכים ל-X והמתודה תשנה את הערך. לעצם אין יכולת לשלוט על ההתנהגות של המתודות המוחצנות שלו והוא מחויב לבצע כל פעולה שמשתמש ביקש ממנו.
סוכן תוכנה, לעומת העצם, מקבל פניה באופן דומה מהמשתמש, אלא שלסוכן התוכנה יכולת לשלוט בהפעלת הפונקציות שלו. בדוגמה שניתנה קודם לכן, אם נפנה לסוכן תוכנה ונבקש ממנו להגדיל את ערכה של תכונה כלשהי X אצלו ב-1 הסוכן יחשוב האם שינוי זה "משרת את מטרותיו", ורק לאחר מכן יבצע את הפעולה. לפיכך, ניתן לומר שגם המתודות של הסוכן "כמוסות" והקשר שלו לעולם החיצון מתמצה ביכולת שלו לקבל מסרים מהסביבה. ניתוח המסרים הוא פונקציה פנימית של הסוכן.

תכונות

למשתמש החיצוני, סוכן תוכנה הוא תוכנית שמשרתת את האנשים ופועלת בשמם. סוכן התוכנה נדרש לפעול בסביבה משתנה, ולכן סוכן תוכנה חייב להכיל את התכונות הבאות: תגובתיות, אוטונומיות ותכליתיות (כלומר הנעה לעבר מטרה פנימית שלו) ולעיתים מכיל גם שילוב עם התכונות הנוספות: תקשורתיות, ניידות ולמידה. 
סוכני התוכנה הם התוצר של המפגש בין עולם בינה מלאכותית ועולם הרשת. לפיכך, הם משלבים יכולת תקשורת, כלומר הפעלת תכונות שלהם על ידי משתמש חיצוני, עם יכולות של בינה מלאכותית, כמו השגת מטרות, הסקת מסקנות מאירועים חיצוניים ופעולה על פי מסקנות אלה. לפיכך התכונות העיקריות של סוכנים הן: אוטונומיות, תכליתיות, תגובתיות, תקשורת, למידה ויכולת לשמור על רציפות זמנית של ההתנהגות שלהם (לא לשנות דעה מהר מדי).

היסטוריה

ניתן למצוא את התפישה של סוכן תוכנה כבר במודל של "שחקן" (Actor) שפיתח Hewitt,1977 - עצם שמכיל את כל הדרוש לו, אינטראקטיבי ובעל יכולת לבצע את פעולתו באופן רציף ומתוזמן עם הסביבה, בעל מצבים (states) פנימיים ויכולת תקשורת. 
באופן אקדמי יותר ניתן לומר שסוכני תוכנה הם פיתוח של המושג מערכות מרובות סוכנים, שהן כשלעצמן תולדה של התחומים הבאים: בינה מלאכותית מבוזרת, פתרון בעיות באופן מבוזר ובינה מלאכותית מקבילית. כתוצאה מכך, ירשו סוכני התוכנה את כל הטוב והרע שבאבותיהם המולידים.
ההתפתחות של סוכני התוכנה לא חלה באופן מסודר, מלמטה למעלה, תוך הוספת תכונות באופן הדרגתי, אלא מלמעלה למטה, כרעיונות שהפכו למימושים, שרובם לא מוצלחים. ישנם סוגים רבים של סוכני תוכנה, כפי שניתן לראות בשימושים המפורטים בהמשך.

סוכני רכש (Shopping Bots)

סוכנים אלה מסייעים לגולשים ברשת האינטרנט למצוא מוצרים ושירותים שהם מחפשים אחריהם. לדוגמה, כאשר אדם גולש ברשת ומחפש מוצר ב-ebay, בחלק התחתון של הדף ישנה הפנייה לרשימה של מוצרים דומים, שלקוחות אחרים חיפשו באופן דומה לגולש הספציפי. ההנחה בבסיס יכולת זו היא שאנשים שמחפשים מוצרים דומים מחזיקים בטעם דומה ולכן סביר שיתעניינו בדברים שלקוחות אחרים חיפשו או רכשו.

סוכני משתמש

סוכנים אלה נועדו לבצע פעולות באופן אוטומטי עבור המשתמש. לדוגמה, ישנם סוכנים המסווגים דוא"ל לפי סדר העדיפויות של המשתמש, מאגדים דיווחי חדשות על פי קטגוריות או ממלאים טפסים ברשת עבור המשתמש מתוך מידע פנימי שאגור בהם.
דוגמה מורכבת יותר של סוכנים אלה היא סוכנים שמסוגלים לנהל משא ומתן מול משתמש או סוכן תוכנה שמייצג אותו במכרזים מסוגים שונים ברשת. סוכנים אלה יכולים להיות מבוססים על משא ומתן חד-ממדי (למשל: רק המחיר מעניין במשא ומתן כזה) או על משא ומתן רב-ממדי הכולל שקלול של החשיבות של נושאים שונים. דוגמה לאחרון היא סוכנים המסוגלים לנהל משא ומתן על חופשה שהמשתמש מבקש לרכוש, תוך שקלול של מחיר הטיסה, מספר טיסות ההמשך הנדרש, איכות בית המלון ומשך החופשה ולהביא למשתמש את החופשה הטובה ביותר מבחינתו להחלטה אם הוא מעוניין לרכוש אותה במחיר שהסוכן השיג עבורו.

ניטור ומעקב

סוכנים אלה משמשים למעקב אחרי ציוד, בדרך כלל מערכות מחשב. למשל, סוכן המוודא שמלאי המוצרים של חברה מסוימת כפי שמדווח במערכת ניהול המלאי שלה אינו יורד מגבול מסוים, או שהמחיר של המוצר משתנים בשוק החופשי. הסוכן מדווח חזרה לחברה ומאפשר למשתמש בחברה להחליט החלטות האם לשווק את המוצר לשוק, לייצר מוצרים נוספים ועוד.

סוכני כריית מידע (Data Mining)

סוכנים אלה משתמשים בשיטות של טכנולוגיית המידע (Information Technology) לחיפוש אחרי תבניות ומגמות בכמויות גדולות של מידע ממקורות שונים. המשתמש יכול להגדיר לסוכני התוכנה מהן קטגוריות המידע שהוא מבקש מהסוכנים לנתח. דוגמה לסוג כזה של סוכנים הוא סוכן המחפש מגמה בשוק ומחזיר תשובה למשתמש / חברה באופן שמאפשר קבלת החלטות בחברה. לדוגמה, סוכן כזה יכול לזהות התפתחות של תנאי מיתון במשק ובהתאם החברה תחליט לגבי מדיניות העסקת כוח האדם שלה, תנאי שכר ועוד.