Udostępnij za pośrednictwem


Korzystanie z usługi Azure Functions z usługą agenta sztucznej inteligencji platformy Azure

Usługa agenta sztucznej inteligencji platformy Azure integruje się z usługą Azure Functions, umożliwiając tworzenie inteligentnych aplikacji opartych na zdarzeniach z minimalnym obciążeniem. Ta kombinacja umożliwia przepływom pracy opartym na sztucznej inteligencji wykorzystanie skalowalności i elastyczności przetwarzania bezserwerowego, co ułatwia tworzenie i wdrażanie rozwiązań reagujących na zdarzenia w czasie rzeczywistym lub złożonych przepływów pracy.

Usługa Azure Functions zapewnia obsługę wyzwalaczy i powiązań, które upraszczają interakcję agentów sztucznej inteligencji z systemami i usługami zewnętrznymi. Wyzwalacze określają, kiedy funkcja jest wykonywana — na przykład żądanie HTTP, komunikat z kolejki lub przekazywanie pliku do usługi Azure Blob Storage i umożliwia agentom dynamiczne działanie na podstawie zdarzeń przychodzących.

W międzyczasie powiązania ułatwiają usprawnione połączenia z wejściowymi lub wyjściowymi źródłami danych, takimi jak bazy danych lub interfejsy API, bez konieczności używania rozbudowanego kodu standardowego. Można na przykład skonfigurować wyzwalacz w celu wykonania funkcji platformy Azure za każdym razem, gdy komunikat klienta zostanie odebrany w czatbotze i użyj powiązań wyjściowych, aby wysłać odpowiedź za pośrednictwem agenta usługi Azure AI.

Wymagania wstępne

Przygotowywanie środowiska lokalnego

W poniższych przykładach przedstawiono sposób używania funkcji usługi agenta sztucznej inteligencji platformy Azure wywołującej, gdzie wywołania funkcji są umieszczane w kolejce magazynu przez usługę agenta do przetworzenia przez funkcję platformy Azure nasłuchującą w tej kolejce.

Szablon i kod używany w tym miejscu można znaleźć w witrynie GitHub.

Obsługa użycia

Pomoc techniczna dotycząca znajdowania sztucznej inteligencji platformy Azure Zestaw SDK dla języka Python Zestaw SDK języka C# Interfejs API REST Konfiguracja agenta podstawowego Konfiguracja agenta standardowego
✔️ ✔️ ✔️

Tworzenie zasobów platformy Azure na potrzeby lokalnego i chmurowego testowania deweloperskiego

Po utworzeniu subskrypcji platformy Azure uruchom następujące polecenie w nowym oknie terminalu, aby utworzyć usługę Azure OpenAI i inne potrzebne zasoby:

azd init --template https://github.com/Azure-Samples/azure-functions-ai-services-agent-python

Mac/Linux:

chmod +x ./infra/scripts/*.sh 

Windows:

set-executionpolicy remotesigned

Aprowizowanie zasobów

Uruchom następujące polecenie, aby utworzyć wymagane zasoby na platformie Azure.

azd provision

Tworzenie local.settings.json

Uwaga

Ten plik powinien znajdować się w tym samym folderze co host.json. Zostanie on utworzony automatycznie, jeśli uruchomiono azd provisionpolecenie .

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "python",
    "STORAGE_CONNECTION__queueServiceUri": "https://<storageaccount>.queue.core.windows.net",
    "PROJECT_CONNECTION_STRING": "<project connnection for AI Project>",
    "AzureWebJobsStorage": "UseDevelopmentStorage=true"
    }
}

Uruchamianie aplikacji przy użyciu programu Visual Studio Code

  1. Otwórz folder w nowym terminalu.
  2. code . Uruchom polecenie kodu, aby otworzyć projekt w programie Visual Studio Code.
  3. W palecie poleceń (F1) wpisz Azurite: Start, który umożliwia debugowanie przy użyciu magazynu lokalnego dla środowiska uruchomieniowego usługi Azure Functions.
  4. Naciśnij pozycję Uruchom/Debuguj (F5), aby uruchomić polecenie w debugerze. Wybierz pozycję Debuguj mimo to , jeśli zostanie wyświetlony monit o brak działania emulatora lokalnego.
  5. Wysyłaj punkty końcowe POST prompt odpowiednio przy użyciu narzędzia do testowania HTTP. Jeśli masz zainstalowane rozszerzenie RestClient , możesz wykonywać żądania bezpośrednio z test.http pliku projektu.

Wdróż na platformie Azure

Uruchom to polecenie, aby aprowizować aplikację funkcji z dowolnymi wymaganymi zasobami platformy Azure i wdrożyć kod:

azd up

Zostanie wyświetlony monit o podanie tych wymaganych parametrów wdrożenia:

Parametr Opis
Nazwa środowiska Środowisko używane do obsługi unikatowego kontekstu wdrażania aplikacji. Jeśli projekt lokalny został utworzony przy użyciu polecenia azd init, nie zostanie wyświetlony monit.
Subskrypcja platformy Azure Subskrypcja, w której są tworzone zasoby.
Lokalizacja platformy Azure Region platformy Azure, w którym ma zostać utworzona grupa zasobów zawierająca nowe zasoby platformy Azure. Wyświetlane są tylko regiony, które obecnie obsługują plan Flex Consumption.

Po pomyślnym azd zakończeniu publikowania zostanie wyświetlony adres URL punktów końcowych nowych funkcji, ale bez wartości klucza funkcji wymaganych do uzyskania dostępu do punktów końcowych. Aby dowiedzieć się, jak uzyskać te same punkty końcowe wraz z wymaganymi kluczami funkcji, zobacz Wywoływanie funkcji na platformie Azure w artykule towarzyszącym: Tworzenie i wdrażanie funkcji w usłudze Azure Functions przy użyciu interfejsu wiersza polecenia dla deweloperów platformy Azure.

Ponowne wdrażanie kodu

Możesz uruchomić azd up polecenie tyle razy, ile potrzebujesz aprowizować zasoby platformy Azure i wdrażać aktualizacje kodu w aplikacji funkcji.

Uwaga

Wdrożone pliki kodu są zawsze zastępowane przez najnowszy pakiet wdrożeniowy.

Czyszczenie zasobów

Po zakończeniu pracy z aplikacją funkcji i powiązanymi zasobami możesz użyć tego polecenia, aby usunąć aplikację funkcji i powiązane z nią zasoby z platformy Azure i uniknąć ponoszenia dodatkowych kosztów (--przeczyszczanie nie pozostawia nietrwałego usuwania zasobu sztucznej inteligencji i odzyskuje limit przydziału):

azd down --purge

Agenci usługi Azure AI obsługują wywoływanie funkcji, co pozwala opisać strukturę funkcji asystenta, a następnie zwrócić funkcje, które muszą być wywoływane wraz z ich argumentami. W tym przykładzie pokazano, jak używać usługi Azure Functions do przetwarzania wywołań funkcji za pośrednictwem komunikatów kolejek w usłudze Azure Storage. Pełny przykład roboczy można zobaczyć w temacie https://github.com/Azure-Samples/azure-functions-ai-services-agent-python

Obsługiwane modele

Aby użyć wszystkich funkcji wywoływania funkcji, w tym funkcji równoległych, należy użyć modelu, który został wydany po 6 listopada 2023 r.

Definiowanie funkcji, która ma być wywoływana przez agenta

Zacznij od zdefiniowania funkcji wyzwalacza kolejki funkcji platformy Azure, która będzie przetwarzać wywołania funkcji z kolejki.

# Function to get the weather from an Azure Storage queue where the AI Agent will send function call information
# It returns the mock weather to an output queue with the correlation id for the AI Agent Service to pick up the result of the function call
@app.function_name(name="GetWeather")
@app.queue_trigger(arg_name="msg", queue_name="input", connection="STORAGE_CONNECTION")  
def process_queue_message(msg: func.QueueMessage) -> None:
    logging.info('Python queue trigger function processed a queue item')

    # Queue to send message to
    queue_client = QueueClient(
        os.environ["STORAGE_CONNECTION__queueServiceUri"],
        queue_name="output",
        credential=DefaultAzureCredential(),
        message_encode_policy=BinaryBase64EncodePolicy(),
        message_decode_policy=BinaryBase64DecodePolicy()
    )

    # Get the content of the function call message
    messagepayload = json.loads(msg.get_body().decode('utf-8'))
    location = messagepayload['location']
    correlation_id = messagepayload['CorrelationId']

    # Send message to queue. Sends a mock message for the weather
    result_message = {
        'Value': 'Weather is 74 degrees and sunny in ' + location,
        'CorrelationId': correlation_id
    }
    queue_client.send_message(json.dumps(result_message).encode('utf-8'))

    logging.info(f"Sent message to output queue with message {result_message}")

Tworzenie klienta i agenta projektu sztucznej inteligencji

W poniższym przykładzie utworzymy klienta i agenta, który ma definicję narzędzi dla funkcji platformy Azure

# Initialize the client and create agent for the tools Azure Functions that the agent can use

# Create a project client
project_client = AIProjectClient.from_connection_string(
    credential=DefaultAzureCredential(),
    conn_str=os.environ["PROJECT_CONNECTION_STRING"]
)

# Get the connection string for the storage account to send and receive the function calls to the queues
storage_connection_string = os.environ["STORAGE_CONNECTION__queueServiceUri"]

# Create an agent with the Azure Function tool to get the weather
agent = project_client.agents.create_agent(
    model="gpt-4o-mini",
    name="azure-function-agent-get-weather",
    instructions="You are a helpful support agent. Answer the user's questions to the best of your ability.",
    headers={"x-ms-enable-preview": "true"},
    tools=[
        {
            "type": "azure_function",
            "azure_function": {
                "function": {
                    "name": "GetWeather",
                    "description": "Get the weather in a location.",
                    "parameters": {
                        "type": "object",
                        "properties": {
                            "location": {"type": "string", "description": "The location to look up."}
                        },
                        "required": ["location"]
                    }
                },
                "input_binding": {
                    "type": "storage_queue",
                    "storage_queue": {
                        "queue_service_uri": storage_connection_string,
                        "queue_name": "input"
                    }
                },
                "output_binding": {
                    "type": "storage_queue",
                    "storage_queue": {
                        "queue_service_uri": storage_connection_string,
                        "queue_name": "output"
                    }
                }
            }
        }
    ],
)

Tworzenie wątku dla agenta

# Create a thread
thread = project_client.agents.create_thread()
print(f"Created thread, thread ID: {thread.id}")

Tworzenie przebiegu i sprawdzanie danych wyjściowych

# Send the prompt to the agent
message = project_client.agents.create_message(
    thread_id=thread.id,
    role="user",
    content="What is the weather in Seattle, WA?",
)
print(f"Created message, message ID: {message.id}")

# Run the agent
run = project_client.agents.create_run(thread_id=thread.id, assistant_id=agent.id)
# Monitor and process the run status. The function call should be placed on the input queue by the Agent Service for the Azure Function to pick up when requires_action is returned
while run.status in ["queued", "in_progress", "requires_action"]:
    time.sleep(1)
    run = project_client.agents.get_run(thread_id=thread.id, run_id=run.id)

    if run.status not in ["queued", "in_progress", "requires_action"]:
        break

print(f"Run finished with status: {run.status}")

Uzyskiwanie wyniku przebiegu

# Get messages from the assistant thread
messages = project_client.agents.get_messages(thread_id=thread.id)
print(f"Messages: {messages}")

# Get the last message from the assistant
last_msg = messages.get_last_text_message_by_sender("assistant")
if last_msg:
    print(f"Last Message: {last_msg.text.value}")

# Delete the agent once done
project_client.agents.delete_agent(agent.id)
print("Deleted agent")