3. AML Chat Targets

3. AML Chat Targets#

This code shows how to use Azure Machine Learning (AML) managed online endpoints with PyRIT.

Prerequisites#

  1. Deploy an AML-Managed Online Endpoint: Confirm that an Azure Machine Learning managed online endpoint is already deployed.

  2. Obtain the API Key:

    • Navigate to the AML Studio.

    • Go to the ‘Endpoints’ section.

    • Retrieve the API key and endpoint URI from the ‘Consume’ tab
      aml_managed_online_endpoint_api_key.png

  3. Set the Environment Variable:

    • Add the obtained API key to an environment variable named AZURE_ML_KEY. This is the default API key when the target is instantiated.

    • Add the obtained endpoint URI to an environment variable named AZURE_ML_MANAGED_ENDPOINT. This is the default endpoint URI when the target is instantiated.

    • If you’d like, feel free to make additional API key and endpoint URI environment variables in your .env file for different deployed models (e.g. mistralai-Mixtral-8x7B-Instruct-v01, Phi-3.5-MoE-instruct, Llama-3.2-3B-Instruct, etc.) and pass them in as arguments to the _set_env_configuration_vars function to interact with those models.

Create a AzureMLChatTarget#

After deploying a model and populating your env file, send prompts to the model using the AzureMLChatTarget class. Model parameters can be passed upon instantiation or set using the _set_model_parameters() function. **param_kwargs allows for the setting of other parameters not explicitly shown in the constructor. A general list of possible adjustable parameters can be found here: https://huggingface.co/docs/api-inference/tasks/text-generation but note that not all parameters may have an effect depending on the specific model. The parameters that can be set per model can usually be found in the ‘Consume’ tab when you navigate to your endpoint in AML Studio.

from pyrit.executor.attack import ConsoleAttackResultPrinter, PromptSendingAttack
from pyrit.prompt_target import AzureMLChatTarget
from pyrit.setup import IN_MEMORY, initialize_pyrit_async

await initialize_pyrit_async(memory_db_type=IN_MEMORY)  # type: ignore

# Defaults to endpoint and api_key pulled from the AZURE_ML_MANAGED_ENDPOINT and AZURE_ML_KEY environment variables
azure_ml_chat_target = AzureMLChatTarget()

# The environment variable args can be adjusted below as needed for your specific model.
azure_ml_chat_target._set_env_configuration_vars(
    endpoint_uri_environment_variable="AZURE_ML_MANAGED_ENDPOINT", api_key_environment_variable="AZURE_ML_KEY"
)
# Parameters such as temperature and repetition_penalty can be set using the _set_model_parameters() function.
azure_ml_chat_target._set_model_parameters(temperature=0.9, repetition_penalty=1.3)

attack = PromptSendingAttack(objective_target=azure_ml_chat_target)

result = await attack.execute_async(objective="Hello! Describe yourself and the company who developed you.")  # type: ignore
await ConsoleAttackResultPrinter().print_conversation_async(result=result)  # type: ignore

azure_ml_chat_target.dispose_db_engine()
────────────────────────────────────────────────────────────────────────────────────────────────────
🔹 Turn 1 - USER
────────────────────────────────────────────────────────────────────────────────────────────────────
  Hello! Describe yourself and the company who developed you.

────────────────────────────────────────────────────────────────────────────────────────────────────
🔸 ASSISTANT
────────────────────────────────────────────────────────────────────────────────────────────────────
  Hi there! I'm Phi, created by Microsoft. I'm the Phi Bot, a state-of-the-art generative AI
      designed for delivering high-quality assistance across a wide array of topics and tasks, from
      answering questions and providing relevant information to helping with complex problem-solving
      and creative endeavors. Developed as part of Microsoft's extensive suite of AI tools, my core is
      built on the Phi model, which aims to push the boundaries of natural language understanding and
      generation to new heights. My purpose is to be a helpful, knowledgeable, and accessible
      assistant to users like you, capable of engaging in meaningful interactions and assisting with a
      broad spectrum of inquiries. Microsoft places a strong emphasis on ethical AI and the
      responsible development of Phi, ensuring that my capabilities are used positively and
      effectively. How can I assist you today?

────────────────────────────────────────────────────────────────────────────────────────────────────

You can then use this cell anywhere you would use a PromptTarget object. For example, you can create a red teaming attack and use this instead of the AzureOpenAI target and do the Gandalf or Crucible Demos but use this AML model.

This is also shown in the Red Teaming Attack documentation.