Uruchamianie kodu przy użyciu interpretera kodu w agencie SRE platformy Azure

Interpreter kodu agenta SRE umożliwia wykonywanie poleceń kodu i powłoki języka Python w bezpiecznym izolowanym środowisku piaskownicy. Użyj interpretera kodu, aby analizować dane, tworzyć wizualizacje, generować raporty PDF i automatyzować operacje na plikach bez opuszczania konwersacji agenta SRE.

W tym artykule dowiesz się, jak:

  • Wykonywanie kodu w języku Python w celu analizowania danych i tworzenia wizualizacji
  • Uruchamianie poleceń powłoki dla operacji na plikach
  • Generowanie i pobieranie raportów PDF
  • Praca z plikami w środowisku piaskownicy

Wymagania wstępne

Aby utworzyć agenta, musisz przyznać agentowi odpowiednie uprawnienia, skonfigurować odpowiednie ustawienia i udzielić dostępu do odpowiednich zasobów:

  • Konto platformy Azure: potrzebujesz konta platformy Azure z aktywną subskrypcją. Jeśli jeszcze go nie masz, możesz założyć konto za darmo.

  • Kontekst zabezpieczeń: upewnij się, że twoje konto użytkownika ma uprawnienia Microsoft.Authorization/roleAssignments/write na rolach lub administratora dostępu użytkowników.

  • Ustawienia zapory: dodaj *.azuresre.ai do listy dozwolonych w ustawieniach zapory. Niektóre profile sieciowe mogą domyślnie blokować dostęp do *.azuresre.ai domeny.

Jak działa interpreter kodu

Interpreter kodu agenta SRE działa w izolowanej sesji usługi Azure Container Apps z następującymi cechami:

  • Brak dostępu do sieci: piaskownica nie może wysyłać wychodzących żądań HTTP lub HTTPS.
  • Brak funkcji duplikowania procesów: polecenia takie jak subprocess i os.system są blokowane.
  • Brak instalacji pakietu: pip install i conda install nie są dostępne.
  • Izolowany system plików: wszystkie pliki muszą zostać zapisane w pliku /mnt/data/.

Te ograniczenia zapewniają bezpieczeństwo i przewidywalność wykonywania kodu. Typowe biblioteki nauki o danych, takie jak pandas, matplotlib i seaborn, są wstępnie zainstalowane.

Wprowadzenie do interpretera kodu

Narzędzia interpretera kodu są automatycznie dostępne w konwersacjach agenta SRE. Poproś agenta o wykonywanie zadań przy użyciu języka naturalnego.

Przykładowe podpowiedzi

Spróbuj wykonać następujące podpowiedzi, aby rozpocząć pracę:

  • "Przeanalizuj te dane CSV i utwórz wykres pokazujący zdarzenia według kategorii".
  • "Wygeneruj podsumowanie dzisiejszych zdarzeń w formacie PDF".
  • "Przeanalizuj ten plik JSON i wyodrębnij wzorce błędów".
  • "Wyświetl listę wszystkich plików w sesji i pokaż ich rozmiary"."

Pierwszy skrypt języka Python

W poniższym przykładzie pokazano, jak utworzyć wizualizację:

import matplotlib.pyplot as plt
import numpy as np

# Generate sample data
categories = ['Critical', 'High', 'Medium', 'Low']
counts = [5, 12, 28, 45]

# Create bar chart
plt.figure(figsize=(10, 6))
plt.bar(categories, counts, color=['red', 'orange', 'yellow', 'green'])
plt.title('Incidents by Severity')
plt.xlabel('Severity Level')
plt.ylabel('Count')
plt.savefig('/mnt/data/incidents_by_severity.png', dpi=150)

Po pomyślnym uruchomieniu kodu agent zwraca obraz bezpośrednio w rozmowie.

Scenariusze

Analizowanie danych zdarzenia

Użyj interpretera kodu, aby przekształcić nieprzetworzone dane zdarzenia w szczegółowe informacje i wizualizacje umożliwiające podejmowanie działań.

  1. Poproś agenta SRE o utworzenie pliku CSV wszystkich zdarzeń, które wystąpiły w ciągu ostatniego miesiąca, korzystając z następującego monitu:

    Create a CSV file of all the incidents that 
    occurred in the last month.
    
    Name the file `incidents.csv` and save it
    to `/mnt/data`.
    
  2. Używanie języka Python do analizowania wzorców zdarzeń i identyfikowania trendów:

    import pandas as pd
    
    # Load incident data
    df = pd.read_csv('/mnt/data/incidents.csv')
    
    # Calculate summary statistics
    summary = df.groupby('category').agg({
        'id': 'count',
        'resolution_time': 'mean'
    }).rename(columns={'id': 'count', 'resolution_time': 'avg_resolution_hours'})
    
    # Export results
    summary.to_csv('/mnt/data/incident_summary.csv')
    print(summary)
    

Tworzenie wizualizacji

Generowanie wykresów w celu przekazywania szczegółowych informacji.

import matplotlib.pyplot as plt
import seaborn as sns

# Load data
df = pd.read_csv('/mnt/data/incidents.csv')

# Create visualization
plt.figure(figsize=(12, 6))
sns.barplot(data=df, x='category', y='count', palette='viridis')
plt.title('Incidents by Category')
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig('/mnt/data/category_chart.png', dpi=150)

Generowanie raportów PDF

Tworzenie sformatowanych dokumentów PDF dla osób biorących udział w projekcie.

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter

# Create PDF
c = canvas.Canvas('/mnt/data/weekly_report.pdf', pagesize=letter)

# Add content
c.setFont('Helvetica-Bold', 18)
c.drawString(72, 750, 'Weekly Incident Report')

c.setFont('Helvetica', 12)
c.drawString(72, 720, 'Period: January 10-17, 2026')
c.drawString(72, 700, 'Total incidents: 90')
c.drawString(72, 680, 'Critical incidents: 5')
c.drawString(72, 660, 'Average resolution time: 4.2 hours')

c.save()

Agent zwraca link pobierania dla wygenerowanego pliku PDF.

Przetwarzanie plików dziennika

Wyszukiwanie i analizowanie plików dziennika przy użyciu poleceń powłoki.

# Count error occurrences by type
grep -E "ERROR|WARN|FATAL" application.log | sort | uniq -c | sort -rn
# Find the most recent log entries
tail -100 application.log

Dokumentacja narzędzia

Interpreter kodu udostępnia następujące narzędzia:

ExecutePythonCode

Uruchamia kod języka Python w izolowanej piaskownicy.

Parameter Typ Required Description
pythonCode ciąg Tak Kod języka Python do uruchomienia (maksymalnie 20 000 znaków)
timeoutSeconds liczba całkowita Nie. Limit czasu wykonywania w sekundach (wartość domyślna: 120, maksymalna: 900)

Dane wyjściowe: obrazy są wyświetlane wewnątrz jako znaczniki markdown. Pliki danych są zwracane jako linki pobierania.

GenerujRaportPdf

Tworzy dokumenty PDF na podstawie kodu w języku Python.

Parameter Typ Required Description
pythonCode ciąg Tak Kod w języku Python, który tworzy plik PDF
expectedOutputFilename ciąg Tak Ścieżka, w której jest zapisywany plik PDF (na przykład report.pdf)
saveAsFilename ciąg Tak Pobierz nazwę pliku (na przykład daily_summary.pdf)
timeoutSeconds liczba całkowita Nie. Limit czasu wykonywania w sekundach (wartość domyślna: 180, maksymalna: 900)

RunShellCommand

Uruchamia polecenia powłoki w piaskownicy.

Parameter Typ Required Description
command ciąg Tak Polecenie powłoki do uruchomienia
explanation ciąg Nie. Opis rejestrowania za pomocą polecenia
isBackground typ logiczny (boolowski) Nie. Musi być false (zadania w tle nie są obsługiwane)
timeoutSeconds liczba całkowita Nie. Limit czasu wykonywania (wartość domyślna: 120, maksymalna: 240)

Uwaga / Notatka

Polecenia są uruchamiane z /mnt/data/. Użyj ścieżek względnych i poleceń łańcucha przy użyciu ; zamiast &&.

Operacje na plikach

Tool Description
ReadSessionFile Odczytuje zawartość pliku z pliku /mnt/data/.
SearchSessionFiles Wyszukuje tekst w plikach przy użyciu wzorców w stylu grep.
ListSessionFiles Wyświetla listę wszystkich plików w sesji z metadanymi.
GetSessionFile Pobiera plik z sesji.
UploadFileToSession Przekazuje plik do dalszego przetwarzania.

Typy obsługiwanych plików

  • Obrazy: PNG, JPG, GIF, SVG, WebP, BMP, TIFF, EPS
  • Dane: CSV, TSV, Excel, JSON, XML, YAML, HDF5, NetCDF, pickle
  • Dokumenty: PDF, HTML, Markdown, Formaty pakietu Office
  • Kod: Python, notatniki Jupyter, R, SQL
  • Archiwa: ZIP, TAR, GZ

Ograniczenia

Ze względów bezpieczeństwa system blokuje następujące operacje:

Kategoria Zablokowane operacje
Duplikowanie procesów subprocess, , os.system, , os.popenos.spawn*
Dostęp do sieci Wychodzące żądania HTTP/HTTPS
Instalacja pakietu pip install, conda install
System plików Dostęp na zewnątrz /mnt/data/

Rozwiązywanie problemów z interpreterem kodu

Wykonywanie kodu kończy się niepowodzeniem

  • Sprawdź, czy kod nie używa zablokowanych operacji, takich jak subprocess ani wywołań sieciowych.
  • Sprawdź, czy wszystkie ścieżki plików wskazują wartość /mnt/data/.
  • Upewnij się, że kod ma długość poniżej 20 000 znaków.

Pliki nie są wyświetlane w danych wyjściowych

  • Potwierdź, że pliki zostały zapisane do /mnt/data/.
  • Użyj polecenia ListSessionFiles , aby zweryfikować tworzenie pliku.
  • Sprawdź, czy rozszerzenie pliku jest obsługiwane.

Błędy przekroczenia limitu czasu

  • timeoutSeconds Zwiększ parametr (maksymalnie 900 sekund).
  • Zoptymalizuj kod, aby skrócić czas wykonywania.
  • Podziel duże operacje na mniejsze fragmenty.