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

הגדרה
-----

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

-- כל הכתוב בהמשך מתבסס על פרק 2 של הספר "An Introduction to multiagent systems" ל- Michael Wooldridge, ההגדרה של סוכן היא: **סוכן הוא מערכת מחשבים שממוקמת בסביבה כלשהי, ושיש לה את היכולת לפעול באופן אוטונומי בסביבה זו במטרה להשיג יעדי תכן** (Wooldridge & Jennings, 1995).

יכולות של סוכני תוכנה חכמים:

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

סוכני תוכנה לעומת עצמים:

* סוכנים אוטונומיים יותר מעצמים.
* לסוכנים יש התנהגות גמישה, הנובעת מיכולתם להגיב לסביבה, לפעול בתכליתיות ולהיות חברתיים.
* לסוכני תוכנה יש לפחות thread of control אחד (במונחים של multi-threading).

ניתן לגשת להגדרה של יכולות העיבוד של סוכני תוכנה משני כיוונים שונים:

* עיבוד של ה- state הפנימי של הסוכן ואונטולוגיות לייצוג ידע.
* הממשקים האינטראקטיביים - סטנדרטים המאפשרים הגדרה של תקשורת בין פעולות.

סוכני התוכנה משמשים למידול של העולם האמיתי, עם כל הסיבוכיות שלו, האירועים המתרחשים במקביל והעיבוד המקבילי שבו.

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

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

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

תכונות
------

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

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

היסטוריה
--------

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

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

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

שימושים
-------

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

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

### סוכני משתמש

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

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

### ניטור ומעקב

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

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

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

### דוגמאות נוספות

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

* סוכן משתמש - לגלישה ברשת האינטרנט.
* סוכני העברת דואר - סוכנים המשמשים להגשת דואר למשתמש, לדוגמה *Microsoft Outlook*. סוכנים אלה מסייעים למשתמש מבלי שיאלץ להבין בפרוטוקולים התומכים בהעברת הדואר, כמו POP3 ואף מאפשרים לו לסווג את הדואר על פי עניין.
* סוכן SNMP.
* DAML - שפה מבוססת XML להגדרת תקשורת בין סוכנים. Defence Agent Markup Language.
* Ontology Web Language.
* daemons במערכות דמויות Unix.
* סוכני ניהול (Management agents) המשמשים לניהול רכיבי טלקום.

אספקטים חוקיים
--------------

* - אתר שמציג קווים כלליים של חוקים או הצעות חוק ונושאים טכניים נוספים בנושא של סוכני תוכנה.

ראו גם
------

* GNUBrain - מימוש של תבנית למערכות מרובות סוכנים (רישיון GPL).
* סביבת סוכני תוכנה
* נט לוגו

לקריאה נוספת
------------

* Artificial Intelligence: A Modern Approach (2nd Edition) by Stuart J. Russell & Peter Norvig, (2002) Prentice Hall, מסת"ב 0137903952
* Carl Hewitt and Jeff Inman. DAI Betwixt and Between: From "Intelligent Agents" to Open Systems Science IEEE Transactions on Systems, Man, and Cybernetics. Nov./Dec. 1991.
* Hyacinth S. Nwana, Divine T. Ndumu: An Introduction to Agent Technology, Software Agents and Soft Computing 1997: 3-26.
* Chyi-Ren Dow, Chi-Ming Lin, and Chen-Ming Lin, Network Agent Application, Mobile Computing Laboratory, Dept. of IECS, Feng Chia University, Taiwan, R. O. C. 2005.
* An Introduction to Multiagent System, Michael Wooldridge (2002), John Wiley & Sons, מסת"ב 047149691X

קישורים חיצוניים
----------------

* - תבנית בשלה ותואמת FIPA לבניית סוכני תוכנה.
* - אתר מסחרי.
* - האתר של המוסד לסוכני תוכנה חכמים פיזיים.