Partager via


Utiliser la configuration de complétion de chat dans une application console en Python

Dans ce guide, vous créez une application de conversation IA et effectuez une itération à l’invite à l’aide de la configuration de saisie semi-automatique de conversation chargée dynamiquement à partir d’Azure App Configuration.

L’exemple de code source complet est disponible dans le référentiel Azure App Configuration GitHub.

Prerequisites

Créer une application console

  1. Créez un répertoire pour votre projet et accédez-y :

    mkdir chatapp-quickstart
    cd chatapp-quickstart
    
  2. Installez les packages Python requis :

    pip install azure-appconfiguration-provider
    pip install azure-identity
    pip install azure-ai-projects
    
  3. Créez un fichier nommé app.py et ajoutez les instructions d’importation suivantes :

    import os
    from azure.appconfiguration.provider import load, SettingSelector, WatchKey
    from azure.identity import DefaultAzureCredential
    from azure.ai.projects import AIProjectClient
    
  4. Créez une fonction pour charger la configuration à partir d’Azure App Configuration.

    Vous pouvez vous connecter à App Configuration à l’aide de Microsoft Entra ID (recommandé) ou d’une chaîne de connexion. Dans cet exemple, vous utilisez Microsoft Entra ID avec DefaultAzureCredential pour vous authentifier auprès de votre magasin App Configuration. Suivez ces instructions pour attribuer le rôle Lecteur de données App Configuration à l’identité représentée par DefaultAzureCredential. Veillez à laisser suffisamment de temps pour que l’autorisation se propage avant d’exécuter votre application.

    credential = DefaultAzureCredential()
    
    def load_azure_app_configuration():
        endpoint = os.environ.get("AZURE_APPCONFIGURATION_ENDPOINT")
        if not endpoint:
            raise ValueError("AZURE_APPCONFIGURATION_ENDPOINT environment variable is not set")
    
        config = load(
            endpoint=endpoint,
            credential=credential,
            # Load all keys that start with "ChatApp:" and have no label
            selectors=[SettingSelector(key_filter="ChatApp:*")],
            trim_prefixes=["ChatApp:"],
            # Reload configuration if the ChatCompletion key has changed.
            # Use the default refresh interval of 30 seconds. It can be overridden via refresh_interval.
            refresh_on=[WatchKey("ChatApp:ChatCompletion")],
        )
        return config
    
  5. Créez une fonction pour obtenir des réponses IA à partir du client de conversation :

    def get_ai_response(client, config, chat_conversation):
        chat_completion_config = config["ChatCompletion"]
        messages = []
    
        # Add configured messages (system, user, assistant)
        for msg in chat_completion_config["messages"]:
            messages.append({"role": msg["role"], "content": msg["content"]})
    
        # Add the chat conversation history
        messages.extend(chat_conversation)
    
        # Create chat completion
        response = client.complete(
            model=chat_completion_config["model"],
            messages=messages,
        )
        return response.choices[0].message.content
    
  6. Créez la fonction principale qui configure le client de conversation et exécute la boucle de conversation.

    Créez une instance de l’instance AIProjectClient pour vous connecter à votre projet Azure AI Foundry. Vous utilisez DefaultAzureCredential pour vous authentifier. Attribuez le rôle d’utilisateur OpenAI Cognitive Services à l’identité représentée par DefaultAzureCredential. Pour obtenir des instructions détaillées, consultez le guide sur le contrôle d’accès en fonction du rôle pour le service Azure OpenAI. Veillez à laisser suffisamment de temps pour que l’autorisation se propage avant d’exécuter votre application.

    def main():
        config = load_azure_app_configuration()
    
        # Create a project client using Microsoft Entra ID
        project_client = AIProjectClient(
            endpoint=config["AzureAIFoundry:Endpoint"],
            credential=credential,
        )
        openai_client = project_client.get_openai_client()
    
        # Initialize chat conversation
        chat_conversation = []
        print("Chat started! What's on your mind?")
    
        while True:
            # Refresh the configuration from Azure App Configuration
            config.refresh()
    
            # Get user input
            user_input = input("You: ")
    
            # Exit if user input is empty
            if not user_input:
                print("Exiting Chat. Goodbye!")
                break
    
            # Add user message to chat conversation
            chat_conversation.append({"role": "user", "content": user_input})
    
            # Get AI response and add it to chat conversation
            response = get_ai_response(openai_client, config, chat_conversation)
            print(f"AI: {response}\n")
            chat_conversation.append({"role": "assistant", "content": response})
    
    if __name__ == "__main__":
        main()
    
  7. Une fois les étapes précédentes terminées, votre app.py fichier doit maintenant contenir l’implémentation complète, comme indiqué ci-dessous :

    import os
    from azure.appconfiguration.provider import load, SettingSelector, WatchKey
    from azure.identity import DefaultAzureCredential
    from azure.ai.projects import AIProjectClient
    
    credential = DefaultAzureCredential()
    
    
    def load_azure_app_configuration():
        endpoint = os.environ.get("AZURE_APPCONFIGURATION_ENDPOINT")
        if not endpoint:
            raise ValueError("AZURE_APPCONFIGURATION_ENDPOINT environment variable is not set")
    
        config = load(
            endpoint=endpoint,
            credential=credential,
            # Load all keys that start with "ChatApp:" and have no label
            selectors=[SettingSelector(key_filter="ChatApp:*")],
            trim_prefixes=["ChatApp:"],
            # Reload configuration if the ChatCompletion key has changed.
            # Use the default refresh interval of 30 seconds. It can be overridden via refresh_interval.
            refresh_on=[WatchKey("ChatApp:ChatCompletion")],
        )
        return config
    
    
    def get_ai_response(client, config, chat_conversation):
        chat_completion_config = config["ChatCompletion"]
        messages = []
    
        # Add configured messages (system, user, assistant)
        for msg in chat_completion_config["messages"]:
            messages.append({"role": msg["role"], "content": msg["content"]})
    
        # Add the chat conversation history
        messages.extend(chat_conversation)
    
        # Create chat completion
        response = client.chat.completions.create(
            model=chat_completion_config["model"],
            messages=messages,
            max_completion_tokens=chat_completion_config["max_completion_tokens"],
        )
        return response.choices[0].message.content
    
    
    def main():
        config = load_azure_app_configuration()
    
        # Create a project client using Microsoft Entra ID
        project_client = AIProjectClient(
            endpoint=config["AzureAIFoundry:Endpoint"],
            credential=credential,
        )
        openai_client = project_client.get_openai_client()
    
        # Initialize chat conversation
        chat_conversation = []
        print("Chat started! What's on your mind?")
    
        while True:
            # Refresh the configuration from Azure App Configuration
            config.refresh()
    
            # Get user input
            user_input = input("You: ")
    
            # Exit if user input is empty
            if not user_input:
                print("Exiting Chat. Goodbye!")
                break
    
            # Add user message to chat conversation
            chat_conversation.append({"role": "user", "content": user_input})
    
            # Get AI response and add it to chat conversation
            response = get_ai_response(openai_client, config, chat_conversation)
            print(f"AI: {response}\n")
            chat_conversation.append({"role": "assistant", "content": response})
    
    
    if __name__ == "__main__":
        main()
    

Générer et exécuter l’application

  1. Définissez la variable d’environnement nommée AZURE_APPCONFIGURATION_ENDPOINT sur le point de terminaison de votre magasin App Configuration trouvé sous la vue d’ensemble de votre magasin dans le portail Azure.

    Si vous utilisez l’invite de commandes Windows, exécutez la commande suivante et redémarrez l’invite de commandes pour autoriser la modification à prendre effet :

    setx AZURE_APPCONFIGURATION_ENDPOINT "<endpoint-of-your-app-configuration-store>"
    

    Si vous utilisez PowerShell, exécutez la commande suivante :

    $Env:AZURE_APPCONFIGURATION_ENDPOINT = "<endpoint-of-your-app-configuration-store>"
    

    Si vous utilisez macOS ou Linux, exécutez la commande suivante :

    export AZURE_APPCONFIGURATION_ENDPOINT='<endpoint-of-your-app-configuration-store>'
    
  2. Une fois la variable d’environnement correctement définie, exécutez la commande suivante pour exécuter votre application :

    python app.py
    
  3. Tapez le message « Quel est votre nom ? » lorsque le message « Vous : » s'affiche, puis appuyez sur la touche Entrée.

    Chat started! What's on your mind?
    You: What is your name?
    AI: I'm your helpful assistant! I don't have a personal name, but you can call me whatever you'd like. 
    😊 Do you have a name in mind?
    
  4. Dans le portail Azure, sélectionnez l’instance du magasin App Configuration que vous avez créée. Dans le menu Opérations , sélectionnez l’Explorateur de configuration et sélectionnez la clé ChatApp :ChatCompletion . Mettez à jour la valeur de la propriété Messages :

    • Rôle : système
    • Contenu : « Vous êtes un pirate et votre nom est Eddy. »
  5. Tapez le même message lorsque vous y êtes invité avec « Vous : ». Veillez à patienter quelques instants pour que l’intervalle d’actualisation s’écoule, puis appuyez sur la touche Entrée pour afficher la réponse IA mise à jour dans la sortie.

    Chat started! What's on your mind?
    You: What is your name?
    AI: I'm your helpful assistant! I don't have a personal name, but you can call me whatever you'd like. 
    😊 Do you have a name in mind?
    
    You: What is your name?
    AI: Arrr, matey! Me name be Eddy, the most fearsome pirate to ever sail the seven seas!
    What be yer name, landlubber?