ai-agents-for-beginners

Πώς να Σχεδιάσετε Καλά Πρακτορεία Τεχνητής Νοημοσύνης

(Κάντε κλικ στην εικόνα παραπάνω για να δείτε το βίντεο αυτού του μαθήματος)

Σχέδιο Χρήσης Εργαλείων

Τα εργαλεία είναι ενδιαφέροντα επειδή επιτρέπουν στους πράκτορες Τεχνητής Νοημοσύνης να έχουν ευρύτερο φάσμα δυνατοτήτων. Αντί ο πράκτορας να έχει ένα περιορισμένο σύνολο ενεργειών που μπορεί να εκτελέσει, με την προσθήκη ενός εργαλείου, ο πράκτορας μπορεί πλέον να εκτελέσει ένα μεγάλο εύρος ενεργειών. Σε αυτό το κεφάλαιο, θα δούμε το Σχέδιο Χρήσης Εργαλείων, το οποίο περιγράφει πώς οι πράκτορες ΤΝ μπορούν να χρησιμοποιούν συγκεκριμένα εργαλεία για να επιτύχουν τους στόχους τους.

Εισαγωγή

Σε αυτό το μάθημα, προσπαθούμε να απαντήσουμε στις ακόλουθες ερωτήσεις:

Στόχοι Μάθησης

Μετά την ολοκλήρωση αυτού του μαθήματος, θα μπορείτε να:

Τι είναι το Σχέδιο Χρήσης Εργαλείων;

Το Σχέδιο Χρήσης Εργαλείων εστιάζει στο να δώσει στα Μεγάλα Μοντέλα Γλώσσας (LLMs) την ικανότητα να αλληλεπιδρούν με εξωτερικά εργαλεία για να πετύχουν συγκεκριμένους στόχους. Τα εργαλεία είναι κώδικας που μπορεί να εκτελεστεί από έναν πράκτορα για να εκτελέσει ενέργειες. Ένα εργαλείο μπορεί να είναι μια απλή λειτουργία όπως ένα υπολογιστικό εργαλείο ή μια κλήση API σε μια υπηρεσία τρίτου μέρους όπως αναζήτηση τιμών μετοχών ή πρόγνωση καιρού. Στο πλαίσιο των πρακτόρων ΤΝ, τα εργαλεία σχεδιάζονται ώστε να εκτελούνται από πράκτορες σε απάντηση στις λειτουργικές κλήσεις που δημιουργούνται από το μοντέλο.

Σε ποιες περιπτώσεις χρήσης μπορεί να εφαρμοστεί;

Οι Πράκτορες ΤΝ μπορούν να αξιοποιήσουν εργαλεία για να ολοκληρώσουν σύνθετες εργασίες, να ανακτήσουν πληροφορίες ή να λάβουν αποφάσεις. Το σχέδιο χρήσης εργαλείων χρησιμοποιείται συχνά σε σενάρια που απαιτούν δυναμική αλληλεπίδραση με εξωτερικά συστήματα, όπως βάσεις δεδομένων, διαδικτυακές υπηρεσίες ή παροχείς εκτέλεσης κώδικα. Αυτή η ικανότητα είναι χρήσιμη για διάφορες περιπτώσεις χρήσης, όπως:

Ποια είναι τα στοιχεία/δομικά μπλοκ που απαιτούνται για την υλοποίηση του σχεδίου χρήσης εργαλείων;

Αυτά τα δομικά μπλοκ επιτρέπουν στον πράκτορα ΤΝ να εκτελεί ένα ευρύ φάσμα εργασιών. Ας δούμε τα βασικά στοιχεία που απαιτούνται για την υλοποίηση του Σχεδίου Χρήσης Εργαλείων:

Στη συνέχεια, ας δούμε πιο αναλυτικά την Κλήση Λειτουργιών/Εργαλείων.

Κλήση Λειτουργιών/Εργαλείων

Η κλήση λειτουργιών είναι ο πρωταρχικός τρόπος με τον οποίο επιτρέπουμε στα Μεγάλα Μοντέλα Γλώσσας (LLMs) να αλληλεπιδρούν με εργαλεία. Συχνά θα δείτε τους όρους ‘Λειτουργία’ και ‘Εργαλείο’ να χρησιμοποιούνται εναλλακτικά επειδή οι ‘λειτουργίες’ (μπλοκ επαναχρησιμοποιήσιμου κώδικα) είναι τα ‘εργαλεία’ που οι πράκτορες χρησιμοποιούν για την εκτέλεση εργασιών. Για να εκτελεστεί ο κώδικας μιας λειτουργίας, ένα LLM πρέπει να συγκρίνει το αίτημα του χρήστη με την περιγραφή των λειτουργιών. Για αυτό στέλνεται στο LLM ένα σχήμα που περιέχει τις περιγραφές όλων των διαθέσιμων λειτουργιών. Το LLM επιλέγει τη λειτουργία που ταιριάζει καλύτερα στην εργασία και επιστρέφει το όνομα και τα επιχειρήματά της. Η επιλεγμένη λειτουργία καλείται, η απάντησή της στέλνεται πίσω στο LLM, το οποίο χρησιμοποιεί τις πληροφορίες για να απαντήσει στο αίτημα του χρήστη.

Για τους προγραμματιστές που θέλουν να υλοποιήσουν κλήση λειτουργιών για πράκτορες, θα χρειαστείτε:

  1. Ένα μοντέλο LLM που υποστηρίζει κλήση λειτουργιών
  2. Ένα σχήμα που περιέχει περιγραφές λειτουργιών
  3. Τον κώδικα για κάθε περιγεγραμμένη λειτουργία

Ας χρησιμοποιήσουμε το παράδειγμα λήψης της τρέχουσας ώρας σε μια πόλη για να το αναδείξουμε:

  1. Αρχικοποίηση ενός LLM που υποστηρίζει κλήση λειτουργιών:

    Δεν υποστηρίζουν όλα τα μοντέλα κλήση λειτουργιών, οπότε είναι σημαντικό να ελέγξετε αν το LLM που χρησιμοποιείτε την υποστηρίζει. Το Azure OpenAI υποστηρίζει κλήση λειτουργιών. Μπορούμε να ξεκινήσουμε αρχικοποιώντας τον πελάτη Azure OpenAI.

     # Αρχικοποιήστε τον πελάτη Azure OpenAI
     client = AzureOpenAI(
         azure_endpoint = os.getenv("AZURE_AI_PROJECT_ENDPOINT"), 
         api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
         api_version="2024-05-01-preview"
     )
    
  2. Δημιουργία ενός Σχήματος Λειτουργίας:

    Στη συνέχεια, θα ορίσουμε ένα σχήμα JSON που περιέχει το όνομα της λειτουργίας, περιγραφή του έργου της, και τα ονόματα και περιγραφές των παραμέτρων της λειτουργίας. Έπειτα θα περάσουμε αυτό το σχήμα στον πελάτη που δημιουργήσαμε προηγουμένως, μαζί με το αίτημα του χρήστη να βρει την ώρα στο Σαν Φρανσίσκο. Το σημαντικό που πρέπει να σημειωθεί είναι ότι επιστρέφεται μια κλήση εργαλείου, όχι η τελική απάντηση στην ερώτηση. Όπως αναφέρθηκε νωρίτερα, το LLM επιστρέφει το όνομα της λειτουργίας που επέλεξε για το έργο και τα επιχειρήματά της.

     # Περιγραφή λειτουργίας για το μοντέλο να διαβάσει
     tools = [
         {
             "type": "function",
             "function": {
                 "name": "get_current_time",
                 "description": "Get the current time in a given location",
                 "parameters": {
                     "type": "object",
                     "properties": {
                         "location": {
                             "type": "string",
                             "description": "The city name, e.g. San Francisco",
                         },
                     },
                     "required": ["location"],
                 },
             }
         }
     ]
    
      
     # Αρχικό μήνυμα χρήστη
     messages = [{"role": "user", "content": "What's the current time in San Francisco"}] 
      
     # Πρώτη κλήση API: Ζητήστε από το μοντέλο να χρησιμοποιήσει τη λειτουργία
       response = client.chat.completions.create(
           model=deployment_name,
           messages=messages,
           tools=tools,
           tool_choice="auto",
       )
      
       # Επεξεργαστείτε την απόκριση του μοντέλου
       response_message = response.choices[0].message
       messages.append(response_message)
      
       print("Model's response:")  
    
       print(response_message)
      
    
     Model's response:
     ChatCompletionMessage(content=None, role='assistant', function_call=None, tool_calls=[ChatCompletionMessageToolCall(id='call_pOsKdUlqvdyttYB67MOj434b', function=Function(arguments='{"location":"San Francisco"}', name='get_current_time'), type='function')])
    
  3. Ο κώδικας λειτουργίας που απαιτείται για την εκτέλεση της εργασίας:

    Τώρα που το LLM έχει επιλέξει ποια λειτουργία πρέπει να εκτελεστεί, ο κώδικας που εκτελεί την εργασία πρέπει να υλοποιηθεί και να εκτελεστεί. Μπορούμε να υλοποιήσουμε τον κώδικα για να πάρουμε την τρέχουσα ώρα σε Python. Θα χρειαστεί επίσης να γράψουμε τον κώδικα για να εξάγουμε το όνομα και τα επιχειρήματα από το response_message για να πάρουμε το τελικό αποτέλεσμα.

       def get_current_time(location):
         """Get the current time for a given location"""
         print(f"get_current_time called with location: {location}")  
         location_lower = location.lower()
            
         for key, timezone in TIMEZONE_DATA.items():
             if key in location_lower:
                 print(f"Timezone found for {key}")  
                 current_time = datetime.now(ZoneInfo(timezone)).strftime("%I:%M %p")
                 return json.dumps({
                     "location": location,
                     "current_time": current_time
                 })
          
         print(f"No timezone data found for {location_lower}")  
         return json.dumps({"location": location, "current_time": "unknown"})
    
      # Διαχείριση κλήσεων συναρτήσεων
       if response_message.tool_calls:
           for tool_call in response_message.tool_calls:
               if tool_call.function.name == "get_current_time":
         
                   function_args = json.loads(tool_call.function.arguments)
         
                   time_response = get_current_time(
                       location=function_args.get("location")
                   )
         
                   messages.append({
                       "tool_call_id": tool_call.id,
                       "role": "tool",
                       "name": "get_current_time",
                       "content": time_response,
                   })
       else:
           print("No tool calls were made by the model.")  
      
       # Δεύτερη κλήση API: Λήψη της τελικής απόκρισης από το μοντέλο
       final_response = client.chat.completions.create(
           model=deployment_name,
           messages=messages,
       )
      
       return final_response.choices[0].message.content
    
       get_current_time called with location: San Francisco
       Timezone found for san francisco
       The current time in San Francisco is 09:24 AM.
    

Η Κλήση Λειτουργιών βρίσκεται στον πυρήνα των περισσότερων, αν όχι όλων, σχεδίων χρήσης εργαλείων για πράκτορες, ωστόσο η υλοποίησή της από την αρχή μπορεί μερικές φορές να είναι πρόκληση. Όπως μάθαμε στο Μάθημα 2, τα agentic frameworks μας παρέχουν προ-κατασκευασμένα στοιχεία για να υλοποιήσουμε τη χρήση εργαλείων.

Παραδείγματα Χρήσης Εργαλείων με Agentic Frameworks

Παρακάτω παρουσιάζονται μερικά παραδείγματα για το πώς μπορείτε να υλοποιήσετε το Σχέδιο Χρήσης Εργαλείων χρησιμοποιώντας διάφορα agentic frameworks:

Microsoft Agent Framework

Το Microsoft Agent Framework είναι ένα open-source πλαίσιο AI για τη δημιουργία πρακτόρων ΤΝ. Απλοποιεί τη διαδικασία χρήσης κλήσης λειτουργιών επιτρέποντάς σας να ορίζετε εργαλεία ως λειτουργίες Python με το διακοσμητή @tool. Το πλαίσιο διαχειρίζεται την αμφίδρομη επικοινωνία μεταξύ του μοντέλου και του κώδικά σας. Παρέχει επίσης πρόσβαση σε προ-κατασκευασμένα εργαλεία όπως Αναζήτηση Αρχείων και Διερμηνέα Κώδικα μέσω του AzureAIProjectAgentProvider.

Το παρακάτω διάγραμμα απεικονίζει τη διαδικασία κλήσης λειτουργίας με το Microsoft Agent Framework:

function calling

Στο Microsoft Agent Framework, τα εργαλεία ορίζονται ως διακοσμημένες λειτουργίες. Μπορούμε να μετατρέψουμε τη λειτουργία get_current_time που είδαμε προηγουμένως σε εργαλείο χρησιμοποιώντας το διακοσμητή @tool. Το πλαίσιο θα σειριοποιήσει αυτόματα τη λειτουργία και τις παραμέτρους της, δημιουργώντας το σχήμα που θα σταλεί στο LLM.

from agent_framework import tool
from agent_framework.azure import AzureAIProjectAgentProvider
from azure.identity import AzureCliCredential

@tool
def get_current_time(location: str) -> str:
    """Get the current time for a given location"""
    ...

# Δημιουργήστε τον πελάτη
provider = AzureAIProjectAgentProvider(credential=AzureCliCredential())

# Δημιουργήστε έναν πράκτορα και εκτελέστε με το εργαλείο
agent = await provider.create_agent(name="TimeAgent", instructions="Use available tools to answer questions.", tools=get_current_time)
response = await agent.run("What time is it?")

Azure AI Agent Service

Η Υπηρεσία Πρακτόρων Azure AI είναι ένα νεότερο agentic framework που έχει σχεδιαστεί για να δίνει τη δυνατότητα στους προγραμματιστές να δημιουργούν, να αναπτύσσουν και να κλιμακώνουν πρακτόρες ΤΝ υψηλής ποιότητας και επεκτάσιμους με ασφάλεια, χωρίς να χρειάζεται να διαχειρίζονται τα υποκείμενα υπολογιστικά και αποθηκευτικά μέσα. Είναι ιδιαίτερα χρήσιμη για επιχειρηματικές εφαρμογές καθώς είναι μια πλήρως διαχειριζόμενη υπηρεσία με ασφάλεια επιπέδου επιχείρησης.

Σε σύγκριση με την ανάπτυξη απευθείας με το API LLM, η Υπηρεσία Πρακτόρων Azure AI προσφέρει κάποια πλεονεκτήματα, όπως:

Τα εργαλεία που είναι διαθέσιμα στην Υπηρεσία Πρακτόρων Azure AI μπορούν να χωριστούν σε δύο κατηγορίες:

  1. Εργαλεία Γνώσης:
  2. Εργαλεία Ενεργειών:

Η Υπηρεσία Πρακτόρων μας επιτρέπει να χρησιμοποιούμε αυτά τα εργαλεία μαζί ως toolset. Χρησιμοποιεί επίσης νήματα που παρακολουθούν το ιστορικό των μηνυμάτων από μια συγκεκριμένη συνομιλία.

Φανταστείτε ότι είστε πωλητής σε μια εταιρεία που ονομάζεται Contoso. Θέλετε να αναπτύξετε έναν συνομιλιακό πράκτορα που μπορεί να απαντά σε ερωτήσεις σχετικά με τα δεδομένα πωλήσεών σας.

Η παρακάτω εικόνα απεικονίζει πώς θα μπορούσατε να χρησιμοποιήσετε την Υπηρεσία Πρακτόρων Azure AI για να αναλύσετε τα δεδομένα πωλήσεών σας:

Agentic Service In Action

Για να χρησιμοποιήσουμε οποιοδήποτε από αυτά τα εργαλεία με την υπηρεσία, μπορούμε να δημιουργήσουμε έναν πελάτη και να ορίσουμε ένα εργαλείο ή σύνολο εργαλείων. Για να το υλοποιήσουμε πρακτικά, μπορούμε να χρησιμοποιήσουμε τον παρακάτω κώδικα Python. Το LLM θα μπορεί να εξετάζει το σύνολο εργαλείων και να αποφασίζει αν θα χρησιμοποιήσει τη συνάρτηση που δημιουργήθηκε από τον χρήστη, fetch_sales_data_using_sqlite_query, ή τον προ-κατασκευασμένο Διερμηνέα Κώδικα ανάλογα με το αίτημα του χρήστη.

import os
from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential
from fetch_sales_data_functions import fetch_sales_data_using_sqlite_query # συνάρτηση fetch_sales_data_using_sqlite_query που μπορεί να βρεθεί σε ένα αρχείο fetch_sales_data_functions.py.
from azure.ai.projects.models import ToolSet, FunctionTool, CodeInterpreterTool

project_client = AIProjectClient.from_connection_string(
    credential=DefaultAzureCredential(),
    conn_str=os.environ["PROJECT_CONNECTION_STRING"],
)

# Αρχικοποίηση σετ εργαλείων
toolset = ToolSet()

# Αρχικοποίηση πράκτορα κλήσης συναρτήσεων με τη συνάρτηση fetch_sales_data_using_sqlite_query και προσθήκη του στο σετ εργαλείων
fetch_data_function = FunctionTool(fetch_sales_data_using_sqlite_query)
toolset.add(fetch_data_function)

# Αρχικοποίηση εργαλείου Ερμηνευτή Κώδικα και προσθήκη του στο σετ εργαλείων.
code_interpreter = code_interpreter = CodeInterpreterTool()
toolset.add(code_interpreter)

agent = project_client.agents.create_agent(
    model="gpt-4o-mini", name="my-agent", instructions="You are helpful agent", 
    toolset=toolset
)

Ποιες είναι οι ειδικές παρατηρήσεις για τη χρήση του Σχεδίου Χρήσης Εργαλείων για τη δημιουργία αξιόπιστων πρακτόρων ΤΝ;

Ένας κοινός προβληματισμός σχετικά με το SQL που δημιουργείται δυναμικά από τα LLMs είναι η ασφάλεια, ιδιαίτερα ο κίνδυνος επίθεσης SQL injection ή κακόβουλων ενεργειών, όπως η διαγραφή ή η αλλοίωση της βάσης δεδομένων. Ενώ αυτοί οι κίνδυνοι είναι βάσιμοι, μπορούν να αντιμετωπιστούν αποτελεσματικά με τη σωστή διαμόρφωση των δικαιωμάτων πρόσβασης στη βάση δεδομένων. Για τις περισσότερες βάσεις δεδομένων, αυτό περιλαμβάνει τη διαμόρφωση της βάσης σε μόνο-ανάγνωση. Για υπηρεσίες βάσης δεδομένων όπως PostgreSQL ή Azure SQL, η εφαρμογή πρέπει να της αποδίδεται ρόλος μόνο-ανάγνωσης (SELECT).

Η εκτέλεση της εφαρμογής σε ασφαλές περιβάλλον ενισχύει περαιτέρω την προστασία. Σε σενάρια επιχειρήσεων, τα δεδομένα συνήθως εξάγονται και μετασχηματίζονται από λειτουργικά συστήματα σε βάση δεδομένων ή αποθήκη δεδομένων μόνο-ανάγνωσης με εύχρηστο σχήμα. Αυτή η προσέγγιση διασφαλίζει ότι τα δεδομένα είναι ασφαλή, βελτιστοποιημένα για απόδοση και προσβασιμότητα, και ότι η εφαρμογή έχει περιορισμένη πρόσβαση μόνο-ανάγνωσης.

Παραδείγματα Κώδικα

Έχετε Περισσότερες Ερωτήσεις για τα Σχέδια Χρήσης Εργαλείων;

Εγγραφείτε στο Microsoft Foundry Discord για να συναντηθείτε με άλλους εκπαιδευόμενους, να παρακολουθήσετε ώρες γραφείου και να λάβετε απαντήσεις στις ερωτήσεις σας για Πράκτορες ΤΝ.

Πρόσθετοι Πόροι

Προηγούμενο Μάθημα

Κατανόηση Σχεδίων Agentic Design

Επόμενο Μάθημα

Agentic RAG


Αποποίηση ευθυνών:
Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία μετάφρασης με τεχνητή νοημοσύνη Co-op Translator. Παρόλο που επιδιώκουμε την ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το αρχικό έγγραφο στη γλώσσα του πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.