Csevegés befejezésének konfigurációjának használata Python-konzolalkalmazásban

Ebben az útmutatóban egy AI-csevegőalkalmazást hoz létre, és az Azure App Configurationból dinamikusan betöltött csevegés-befejezési konfigurációval iterálja a parancssort.

A teljes mintaforráskód elérhető a Azure App Configuration GitHub adattárban.

Előfeltételek

Konzolalkalmazás létrehozása

  1. Hozzon létre egy új könyvtárat a projekthez, és lépjen be abba:

    mkdir chatapp-quickstart
    cd chatapp-quickstart
    
  2. Telepítse a szükséges Python-csomagokat:

    pip install azure-appconfiguration-provider
    pip install azure-identity
    pip install azure-ai-inference
    
  3. Hozzon létre egy elnevezett app.py fájlt, és adja hozzá a következő importálási utasításokat:

    import os
    from azure.appconfiguration.provider import load, SettingSelector, WatchKey
    from azure.identity import DefaultAzureCredential
    from azure.ai.inference import ChatCompletionsClient
    
  4. Hozzon létre egy függvényt, amely betölti a konfigurációt az Azure App Configurationból.

    Az alkalmazáskonfigurációhoz Microsoft Entra-azonosító (ajánlott) vagy kapcsolati sztring használatával csatlakozhat. Ebben a példában a Microsoft Entra-azonosítót DefaultAzureCredential használja az alkalmazáskonfigurációs áruházban való hitelesítéshez. Az alábbi utasításokat követve rendelje hozzá az alkalmazáskonfigurációs adatolvasó szerepkört az általuk DefaultAzureCredentialképviselt identitáshoz. Győződjön meg arról, hogy elegendő időt hagy az engedély propagálására az alkalmazás futtatása előtt.

    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. Hozzon létre egy függvényt a csevegőügyfél AI-válaszainak lekéréséhez:

    def get_ai_response(client, config, chat_conversation):
        chat_completion_config = config["ChatCompletion"]
        messages = []
    
        # Add configured messages (system, user, assistant)
        if not chat_completion_config.get("messages"):
            chat_completion_config["messages"] = []
    
        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. Hozza létre a csevegési ügyfelet konfiguráló és a csevegési ciklust futtató fő függvényt.

    Hozza létre a ChatCompletionsClient egy példányát az Azure AI Foundryhoz való csatlakozáshoz. A DefaultAzureCredential használatával hitelesítheti az identitást, és hozzárendelheti a Cognitive Services OpenAI User szerepkört a DefaultAzureCredential által képviselt identitáshoz. Részletes lépésekért tekintse meg az Azure OpenAI szolgáltatás útmutatójának szerepköralapú hozzáférés-vezérlését . Győződjön meg arról, hogy elegendő időt hagy az engedély propagálására az alkalmazás futtatása előtt.

    def main():
        config = load_azure_app_configuration()
    
        # Create a chat completions client using Microsoft Entra ID
        client = ChatCompletionsClient(
            endpoint=config["AzureAIFoundry:Endpoint"],
            credential=credential,
            credential_scopes=["https://cognitiveservices.azure.com/.default"],
        )
    
        # 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(client, config, chat_conversation)
            print(f"AI: {response}\n")
            chat_conversation.append({"role": "assistant", "content": response})
    
    if __name__ == "__main__":
        main()
    
  7. Az előző lépések elvégzése után a app.py fájlnak tartalmaznia kell a teljes implementációt az alábbiak szerint:

    import os
    from azure.appconfiguration.provider import load, SettingSelector, WatchKey
    from azure.identity import DefaultAzureCredential
    from azure.ai.inference import ChatCompletionsClient
    
    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)
        if not chat_completion_config.get("messages"):
            chat_completion_config["messages"] = []
    
        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
    
    
    def main():
        config = load_azure_app_configuration()
    
        # Create a chat completions client using Microsoft Entra ID
        client = ChatCompletionsClient(
            endpoint=config["AzureAIFoundry:Endpoint"],
            credential=credential,
            credential_scopes=["https://cognitiveservices.azure.com/.default"],
        )
    
        # 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(client, config, chat_conversation)
            print(f"AI: {response}\n")
            chat_conversation.append({"role": "assistant", "content": response})
    
        if __name__ == "__main__":
            main()
    

Az alkalmazás létrehozása és futtatása

  1. Állítsa a AZURE_APPCONFIGURATION_ENDPOINT nevű környezeti változót az Alkalmazáskonfigurációs tár végpontjára, amely az Azure Portalon található áruház áttekintésében található.

    Ha a Windows parancssorát használja, futtassa a következő parancsot, és indítsa újra a parancssort a módosítás érvénybe lépésének engedélyezéséhez:

    setx AZURE_APPCONFIGURATION_ENDPOINT "<AppConfigurationEndpoint>"
    

    Ha a PowerShellt használja, futtassa a következő parancsot:

    $Env:AZURE_APPCONFIGURATION_ENDPOINT = "<AppConfigurationEndpoint>"
    

    MacOS vagy Linux használata esetén futtassa a következő parancsot:

    export AZURE_APPCONFIGURATION_ENDPOINT='<AppConfigurationEndpoint>'
    
  2. A környezeti változó megfelelő beállítása után futtassa a következő parancsot az alkalmazás futtatásához:

    python app.py
    
  3. Írja be a "Mi a neve?" üzenetet, amikor az "Ön:" üzenet jelenik meg, majd nyomja le az Enter billentyűt.

    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. Az Azure Portalon válassza ki a létrehozott App Configuration Store-példányt. Az Operatív menüben válassza a Konfigurációkezelőt , és válassza a ChatApp:ChatCompletion kulcsot. Frissítse az Üzenetek tulajdonság értékét:

    • Szerepkör: rendszer
    • Tartalom: "Kalóz vagy, és a neved Eddy."
  5. Írja be ugyanazt az üzenetet, amikor az "Ön:" üzenet jelenik meg. Ügyeljen arra, hogy várjon néhány percet, amíg a frissítési időköz eltelik, majd nyomja le az Enter billentyűt a frissített AI-válasz megjelenítéséhez a kimenetben.

    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?