(Κάντε κλικ στην εικόνα παραπάνω για να δείτε το βίντεο αυτού του μαθήματος)
Τα εργαλεία είναι ενδιαφέροντα επειδή επιτρέπουν στους πράκτορες Τεχνητής Νοημοσύνης να έχουν ευρύτερο φάσμα δυνατοτήτων. Αντί ο πράκτορας να έχει ένα περιορισμένο σύνολο ενεργειών που μπορεί να εκτελέσει, με την προσθήκη ενός εργαλείου, ο πράκτορας μπορεί πλέον να εκτελέσει ένα μεγάλο εύρος ενεργειών. Σε αυτό το κεφάλαιο, θα δούμε το Σχέδιο Χρήσης Εργαλείων, το οποίο περιγράφει πώς οι πράκτορες ΤΝ μπορούν να χρησιμοποιούν συγκεκριμένα εργαλεία για να επιτύχουν τους στόχους τους.
Σε αυτό το μάθημα, προσπαθούμε να απαντήσουμε στις ακόλουθες ερωτήσεις:
Μετά την ολοκλήρωση αυτού του μαθήματος, θα μπορείτε να:
Το Σχέδιο Χρήσης Εργαλείων εστιάζει στο να δώσει στα Μεγάλα Μοντέλα Γλώσσας (LLMs) την ικανότητα να αλληλεπιδρούν με εξωτερικά εργαλεία για να πετύχουν συγκεκριμένους στόχους. Τα εργαλεία είναι κώδικας που μπορεί να εκτελεστεί από έναν πράκτορα για να εκτελέσει ενέργειες. Ένα εργαλείο μπορεί να είναι μια απλή λειτουργία όπως ένα υπολογιστικό εργαλείο ή μια κλήση API σε μια υπηρεσία τρίτου μέρους όπως αναζήτηση τιμών μετοχών ή πρόγνωση καιρού. Στο πλαίσιο των πρακτόρων ΤΝ, τα εργαλεία σχεδιάζονται ώστε να εκτελούνται από πράκτορες σε απάντηση στις λειτουργικές κλήσεις που δημιουργούνται από το μοντέλο.
Οι Πράκτορες ΤΝ μπορούν να αξιοποιήσουν εργαλεία για να ολοκληρώσουν σύνθετες εργασίες, να ανακτήσουν πληροφορίες ή να λάβουν αποφάσεις. Το σχέδιο χρήσης εργαλείων χρησιμοποιείται συχνά σε σενάρια που απαιτούν δυναμική αλληλεπίδραση με εξωτερικά συστήματα, όπως βάσεις δεδομένων, διαδικτυακές υπηρεσίες ή παροχείς εκτέλεσης κώδικα. Αυτή η ικανότητα είναι χρήσιμη για διάφορες περιπτώσεις χρήσης, όπως:
Αυτά τα δομικά μπλοκ επιτρέπουν στον πράκτορα ΤΝ να εκτελεί ένα ευρύ φάσμα εργασιών. Ας δούμε τα βασικά στοιχεία που απαιτούνται για την υλοποίηση του Σχεδίου Χρήσης Εργαλείων:
Περιγραφές Λειτουργιών/Εργαλείων: Λεπτομερείς ορισμοί διαθέσιμων εργαλείων, συμπεριλαμβανομένου του ονόματος λειτουργίας, σκοπού, απαιτούμενων παραμέτρων και αναμενόμενων εξόδων. Αυτές οι περιγραφές επιτρέπουν στο LLM να κατανοήσει ποια εργαλεία είναι διαθέσιμα και πώς να κατασκευάσει έγκυρα αιτήματα.
Λογική Εκτέλεσης Λειτουργιών: Καθορίζει πώς και πότε καλούνται τα εργαλεία βάσει της πρόθεσης του χρήστη και του πλαισίου της συνομιλίας. Αυτό μπορεί να περιλαμβάνει μονάδες σχεδιασμού, μηχανισμούς δρομολόγησης ή ροές υπό προϋποθέσεις που καθορίζουν τη δυναμική χρήση εργαλείων.
Σύστημα Διαχείρισης Μηνυμάτων: Στοιχεία που διαχειρίζονται τη ροή της συνομιλίας μεταξύ εισόδων χρήστη, απαντήσεων LLM, κλήσεων εργαλείων και εξόδων εργαλείων.
Πλαίσιο Ενσωμάτωσης Εργαλείων: Υποδομή που συνδέει τον πράκτορα με διάφορα εργαλεία, είτε πρόκειται για απλές λειτουργίες είτε για σύνθετες εξωτερικές υπηρεσίες.
Διαχείριση Σφαλμάτων & Επικύρωση: Μηχανισμοί για τη διαχείριση αποτυχιών στην εκτέλεση εργαλείων, την επικύρωση παραμέτρων και τη διαχείριση απροσδόκητων απαντήσεων.
Διαχείριση Κατάστασης: Παρακολουθεί το πλαίσιο της συνομιλίας, προηγούμενες αλληλεπιδράσεις με εργαλεία και επίμονα δεδομένα για να διασφαλίσει τη συνέπεια σε πολυβηματικές αλληλεπιδράσεις.
Στη συνέχεια, ας δούμε πιο αναλυτικά την Κλήση Λειτουργιών/Εργαλείων.
Η κλήση λειτουργιών είναι ο πρωταρχικός τρόπος με τον οποίο επιτρέπουμε στα Μεγάλα Μοντέλα Γλώσσας (LLMs) να αλληλεπιδρούν με εργαλεία. Συχνά θα δείτε τους όρους ‘Λειτουργία’ και ‘Εργαλείο’ να χρησιμοποιούνται εναλλακτικά επειδή οι ‘λειτουργίες’ (μπλοκ επαναχρησιμοποιήσιμου κώδικα) είναι τα ‘εργαλεία’ που οι πράκτορες χρησιμοποιούν για την εκτέλεση εργασιών. Για να εκτελεστεί ο κώδικας μιας λειτουργίας, ένα LLM πρέπει να συγκρίνει το αίτημα του χρήστη με την περιγραφή των λειτουργιών. Για αυτό στέλνεται στο LLM ένα σχήμα που περιέχει τις περιγραφές όλων των διαθέσιμων λειτουργιών. Το LLM επιλέγει τη λειτουργία που ταιριάζει καλύτερα στην εργασία και επιστρέφει το όνομα και τα επιχειρήματά της. Η επιλεγμένη λειτουργία καλείται, η απάντησή της στέλνεται πίσω στο LLM, το οποίο χρησιμοποιεί τις πληροφορίες για να απαντήσει στο αίτημα του χρήστη.
Για τους προγραμματιστές που θέλουν να υλοποιήσουν κλήση λειτουργιών για πράκτορες, θα χρειαστείτε:
Ας χρησιμοποιήσουμε το παράδειγμα λήψης της τρέχουσας ώρας σε μια πόλη για να το αναδείξουμε:
Αρχικοποίηση ενός 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"
)
Δημιουργία ενός Σχήματος Λειτουργίας:
Στη συνέχεια, θα ορίσουμε ένα σχήμα 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')])
Ο κώδικας λειτουργίας που απαιτείται για την εκτέλεση της εργασίας:
Τώρα που το 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:
Το Microsoft Agent Framework είναι ένα open-source πλαίσιο AI για τη δημιουργία πρακτόρων ΤΝ. Απλοποιεί τη διαδικασία χρήσης κλήσης λειτουργιών επιτρέποντάς σας να ορίζετε εργαλεία ως λειτουργίες Python με το διακοσμητή @tool. Το πλαίσιο διαχειρίζεται την αμφίδρομη επικοινωνία μεταξύ του μοντέλου και του κώδικά σας. Παρέχει επίσης πρόσβαση σε προ-κατασκευασμένα εργαλεία όπως Αναζήτηση Αρχείων και Διερμηνέα Κώδικα μέσω του AzureAIProjectAgentProvider.
Το παρακάτω διάγραμμα απεικονίζει τη διαδικασία κλήσης λειτουργίας με το Microsoft Agent Framework:

Στο 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 είναι ένα νεότερο agentic framework που έχει σχεδιαστεί για να δίνει τη δυνατότητα στους προγραμματιστές να δημιουργούν, να αναπτύσσουν και να κλιμακώνουν πρακτόρες ΤΝ υψηλής ποιότητας και επεκτάσιμους με ασφάλεια, χωρίς να χρειάζεται να διαχειρίζονται τα υποκείμενα υπολογιστικά και αποθηκευτικά μέσα. Είναι ιδιαίτερα χρήσιμη για επιχειρηματικές εφαρμογές καθώς είναι μια πλήρως διαχειριζόμενη υπηρεσία με ασφάλεια επιπέδου επιχείρησης.
Σε σύγκριση με την ανάπτυξη απευθείας με το API LLM, η Υπηρεσία Πρακτόρων Azure AI προσφέρει κάποια πλεονεκτήματα, όπως:
Τα εργαλεία που είναι διαθέσιμα στην Υπηρεσία Πρακτόρων Azure AI μπορούν να χωριστούν σε δύο κατηγορίες:
Η Υπηρεσία Πρακτόρων μας επιτρέπει να χρησιμοποιούμε αυτά τα εργαλεία μαζί ως toolset. Χρησιμοποιεί επίσης νήματα που παρακολουθούν το ιστορικό των μηνυμάτων από μια συγκεκριμένη συνομιλία.
Φανταστείτε ότι είστε πωλητής σε μια εταιρεία που ονομάζεται Contoso. Θέλετε να αναπτύξετε έναν συνομιλιακό πράκτορα που μπορεί να απαντά σε ερωτήσεις σχετικά με τα δεδομένα πωλήσεών σας.
Η παρακάτω εικόνα απεικονίζει πώς θα μπορούσατε να χρησιμοποιήσετε την Υπηρεσία Πρακτόρων Azure AI για να αναλύσετε τα δεδομένα πωλήσεών σας:

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