Delen via


Een aangepaste chat-app maken in Python met behulp van de promptstroom-SDK

Belangrijk

Sommige van de functies die in dit artikel worden beschreven, zijn mogelijk alleen beschikbaar in de preview-versie. Deze preview wordt aangeboden zonder een service level agreement en we raden deze niet aan voor productieworkloads. Misschien worden bepaalde functies niet ondersteund of zijn de mogelijkheden ervan beperkt. Zie Aanvullende gebruiksvoorwaarden voor Microsoft Azure-previews voor meer informatie.

In deze quickstart wordt u begeleid bij het instellen van uw lokale ontwikkelomgeving met de promptstroom-SDK. We schrijven een prompt, voeren deze uit als onderdeel van uw app-code, traceren de LLM-aanroepen die worden uitgevoerd en voeren een basisevaluatie uit op de uitvoer van de LLM.

Vereisten

Voordat u deze quickstart kunt volgen, maakt u de resources die u nodig hebt voor uw toepassing:

Voltooi de quickstart voor de AI Studio-speeltuin om deze resources te maken als u dat nog niet hebt gedaan. U kunt deze resources ook maken door de SDK-handleiding te volgen om een hub- en projectartikel te maken.

U moet ook over de benodigde machtigingen beschikken om roltoewijzingen toe te voegen voor opslagaccounts in uw Azure-abonnement. Het verlenen van machtigingen (het toevoegen van roltoewijzing) is alleen toegestaan door de eigenaar van de specifieke Azure-resources. Mogelijk moet u uw IT-beheerder vragen om hulp om toegang te verlenen om De Azure OpenAI-service aan te roepen met behulp van uw identiteit.

Toegang verlenen om De Azure OpenAI-service aan te roepen met behulp van uw identiteit

Als u aanbevolen beveiligingsprocedures wilt gebruiken, gebruiken we Microsoft Entra ID in plaats van API-sleutels om te verifiëren met Azure OpenAI met behulp van uw gebruikersidentiteit.

U of uw beheerder moet uw gebruikersidentiteit de Rol Cognitive Services OpenAI-gebruiker verlenen op de Azure AI Services-resource die u gebruikt. Met deze rol kunt u de Azure OpenAI-service aanroepen met behulp van uw gebruikersidentiteit.

U verleent uzelf toegang tot de Azure AI Services-resource die u gebruikt:

  1. Ga in AI Studio naar uw project en selecteer Instellingen in het linkerdeelvenster.

  2. Selecteer in de sectie Verbinding maken ed resources de naam van de verbinding met het type AIServices.

    Schermopname van de pagina projectinstellingen, waarin wordt uitgelegd hoe u de verbonden AI-servicesresource selecteert om deze te openen.

    Notitie

    Als u de AIServices-verbinding niet ziet, gebruikt u in plaats daarvan de Azure OpenAI-verbinding .

  3. Selecteer op de pagina met resourcedetails de koppeling onder de kop Resource om de AI-servicesresource in Azure Portal te openen.

    Schermopname van de details van de AI Services-verbinding waarin wordt getoond hoe u de resource opent in Azure Portal.

  4. Selecteer op de linkerpagina in Azure Portal toegangsbeheer (IAM)>+ Roltoewijzing toevoegen.>

  5. Zoek de Gebruikersrol Cognitive Services OpenAI en selecteer deze. Selecteer Volgende.

    Schermopname van de pagina om de gebruikersrol Cognitive Services OpenAI te selecteren.

  6. Selecteer Gebruiker, groep of service-principal. Selecteer vervolgens Leden selecteren.

  7. Zoek in het deelvenster Leden selecteren dat wordt geopend naar de naam van de gebruiker waarvoor u de roltoewijzing wilt toevoegen. Selecteer de gebruiker en selecteer vervolgens Selecteren.

    Schermopname van de pagina met de gebruiker waaraan de nieuwe rol wordt toegewezen.

  8. Ga door met de wizard en selecteer Controleren en toewijzen om de roltoewijzing toe te voegen.

De Azure CLI installeren en aanmelden

Nu installeren we de Azure CLI en melden we u aan bij uw lokale ontwikkelomgeving, zodat u uw gebruikersreferenties kunt gebruiken om de Azure OpenAI-service aan te roepen.

In de meeste gevallen kunt u de Azure CLI installeren vanuit uw terminal met behulp van de volgende opdracht:

winget install -e --id Microsoft.AzureCLI

U kunt de instructies volgen voor het installeren van de Azure CLI als deze opdrachten niet werken voor uw specifieke besturingssysteem of installatie.

Nadat u de Azure CLI hebt geïnstalleerd, meldt u zich aan met de az login opdracht en meldt u zich aan met behulp van de browser:

az login

Nu maken we onze app en roepen we de Azure OpenAI-service aan vanuit code.

Een nieuwe Python-omgeving maken

Eerst moeten we een nieuwe Python-omgeving maken die we kunnen gebruiken om de promptstroom-SDK-pakketten te installeren. INSTALLEER GEEN pakketten in uw globale Python-installatie. U moet altijd een virtuele of conda-omgeving gebruiken bij het installeren van Python-pakketten, anders kunt u uw globale installatie van Python verbreken.

Installeer Python indien nodig

U wordt aangeraden Python 3.10 of hoger te gebruiken, maar python 3.8 is vereist. Als u geen geschikte versie van Python hebt geïnstalleerd, kunt u de instructies in de VS Code Python-zelfstudie volgen voor de eenvoudigste manier om Python op uw besturingssysteem te installeren.

Een virtuele omgeving maken

Als Python 3.10 of hoger al is geïnstalleerd, kunt u een virtuele omgeving maken met behulp van de volgende opdrachten:

py -3 -m venv .venv
.venv\scripts\activate

Als u de Python-omgeving activeert, betekent dit dat u tijdens het uitvoeren python of pip vanaf de opdrachtregel de Python-interpreter gebruikt die zich in de .venv map van uw toepassing bevindt.

Notitie

U kunt de deactivate opdracht gebruiken om de virtuele Python-omgeving af te sluiten en deze later opnieuw te activeren wanneer dat nodig is.

De promptstroom-SDK installeren

In deze sectie gebruiken we de promptstroom om onze toepassing te bouwen. Promptstroom is een reeks ontwikkelhulpprogramma's die zijn ontworpen om de end-to-end ontwikkelingscyclus van OP LLM gebaseerde AI-toepassingen te stroomlijnen, van ideeën, prototypen, testen, evaluatie tot productie-implementatie en bewaking.

Gebruik pip om de promptstroom-SDK te installeren in de virtuele omgeving die u hebt gemaakt.

pip install promptflow
pip install azure-identity

De promptstroom-SDK heeft een afhankelijkheid van meerdere pakketten, die u afzonderlijk kunt installeren als u niet alle pakketten wilt installeren:

  • promptflow-core: bevat de kernpromptstroomruntime die wordt gebruikt voor het uitvoeren van LLM-code
  • promptflow-tracing: lichtgewicht bibliotheek die wordt gebruikt voor het verzenden van OpenTelemetry-traceringen in standaarden
  • promptflow-devkit: bevat de prompt flow test bed en trace viewer tools voor lokale ontwikkelomgevingen
  • openai: clientbibliotheken voor het gebruik van de Azure OpenAI-service
  • python-dotenv: wordt gebruikt om omgevingsvariabelen in te stellen door ze uit .env bestanden te lezen

Uw omgevingsvariabelen configureren

Uw EINDPUNT en implementatienaam van uw AI-services zijn vereist om de Azure OpenAI-service aan te roepen vanuit uw code. In deze quickstart slaat u deze waarden op in een .env bestand. Dit is een bestand dat omgevingsvariabelen bevat die door uw toepassing kunnen worden gelezen. U vindt deze waarden in de AI Studio-chatspeeltuin.

  1. Maak een .env bestand en plak de volgende code:

    AZURE_OPENAI_ENDPOINT=endpoint_value
    AZURE_OPENAI_DEPLOYMENT_NAME=deployment_name
    AZURE_OPENAI_API_VERSION=2024-02-15-preview
    
  2. Navigeer naar de chatspeeltuin binnen uw AI Studio-project. Valideer eerst of chatten met uw model werkt door een bericht naar de LLM te verzenden.

  3. Zoek de naam van de Azure OpenAI-implementatie in de chatspeelplaats. Selecteer de implementatie in de vervolgkeuzelijst en plaats de muisaanwijzer op de naam van de implementatie om deze te bekijken. In dit voorbeeld is de implementatienaam gpt-35-turbo-16k.

    Schermopname van de geopende AI Studio-chatspeeltuin, met de naam van de implementatie en de knop Code weergeven gemarkeerd.

  4. Vervang in het .env bestand door deployment_name de naam van de implementatie uit de vorige stap. In dit voorbeeld gebruiken we de implementatienaam gpt-35-turbo-16k.

  5. Selecteer de <> knop Code weergeven en kopieer de eindpuntwaarde.

    Schermopname van de pop-up van de weergavecode met de knop om de eindpuntwaarde te kopiëren.

  6. Vervang in het .env bestand door endpoint_value de eindpuntwaarde die is gekopieerd uit het dialoogvenster in de vorige stap.

Waarschuwing

Verificatie op basis van sleutels wordt ondersteund, maar wordt niet aanbevolen door Microsoft. Als u sleutels wilt gebruiken, kunt u uw sleutel toevoegen aan de .envsleutel, maar zorg ervoor dat uw .env bestand zich in uw .gitignore bestand bevindt, zodat u niet per ongeluk in uw Git-opslagplaats bent ingecheckt.

Een eenvoudige chatprompt en -app maken

Maak eerst een promptsjabloonbestand. Hiervoor gebruiken we Prompty . Dit is de promptsjabloonindeling die wordt ondersteund door de promptstroom.

Maak een chat.prompty bestand en kopieer de volgende code erin:

---
name: Chat Prompt
description: A basic prompt that uses the chat API to answer questions
model:
    api: chat
    configuration:
        type: azure_openai
    parameters:
        max_tokens: 256
        temperature: 0.2
inputs:
    chat_input:
        type: string
    chat_history:
        type: list
        is_chat_history: true
        default: []
outputs:   
  response:
    type: string
sample:
    chat_input: What is the meaning of life?
---
system:
You are an AI assistant who helps people find information.

{% for item in history %}
{{item.role}}:
{{item.content}}
{% endfor %}

user:
{{chat_input}}

We gaan nu een Python-bestand maken dat gebruikmaakt van deze promptsjabloon. Maak een chat.py bestand en plak de volgende code erin:

import os
from dotenv import load_dotenv
load_dotenv()

from promptflow.core import Prompty, AzureOpenAIModelConfiguration

model_config = AzureOpenAIModelConfiguration(
    azure_deployment=os.getenv("AZURE_OPENAI_DEPLOYMENT_NAME"),
    api_version=os.getenv("AZURE_OPENAI_API_VERSION"),
    azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT")
)

prompty = Prompty.load("chat.prompty", model={'configuration': model_config})
result = prompty(
    chat_history=[
        {"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},
        {"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."}
    ],
    chat_input="Do other Azure AI services support this too?")

print(result)

Voer nu vanuit uw console de Python-code uit:

python chat.py

U ziet nu de uitvoer van het uitvoeren van de prompt:

Yes, other Azure AI services also support various capabilities and features. Some of the Azure AI services include Azure Cognitive Services, Azure Machine Learning, Azure Bot Service, and Azure Databricks. Each of these services offers different AI capabilities and can be used for various use cases. If you have a specific service or capability in mind, feel free to ask for more details.

De uitvoering van uw chatcode traceren

Nu gaan we kijken hoe promptstroomtracering inzicht kan geven in de verschillende LLM-aanroepen die plaatsvinden in onze Python-scripts.

Voeg aan het begin van het chat.py bestand de volgende code toe om promptstroomtracering in te schakelen:

from promptflow.tracing import start_trace
start_trace()

Voer uw chat.py bewerking opnieuw uit:

python chat.py

Deze keer ziet u een koppeling in de uitvoer om een promptstroomtracering van de uitvoering weer te geven:

Starting prompt flow service...
Start prompt flow service on port 23333, version: 1.10.1.
You can stop the prompt flow service with the following command:'pf service stop'.
Alternatively, if no requests are made within 1 hours, it will automatically stop.
You can view the trace detail from the following URL:
http://localhost:23333/v1.0/ui/traces/?#collection=aistudio-python-quickstart&uiTraceId=0x59e8b9a3a23e4e8893ec2e53d6e1e521

Als u die koppeling selecteert, ziet u vervolgens de tracering met de stappen van de uitvoering van het programma, wat is doorgegeven aan de LLM en de antwoorduitvoer.

Schermopname van de tracering met de stappen van de uitvoering van het programma.

Met promptstroomtracering kunt u ook specifieke functie-aanroepen en logboektraceringen traceren naar AI Studio, voor meer informatie raadpleegt u Tracering gebruiken in de promptstroom-SDK.

Uw prompt evalueren

Laten we nu zien hoe we promptstroom evaluators kunnen gebruiken om metrische gegevens te genereren waarmee de kwaliteit van het gesprek op een schaal van 0 tot 5 kan worden beoordeeld. We voeren de prompt opnieuw uit, maar deze keer slaan we de resultaten op in een matrix met het volledige gesprek en geven we die vervolgens door aan een ChatEvaluator score.

Installeer eerst het promptflow-evals packagevolgende:

pip install promptflow-evals

Kopieer nu de volgende code naar een evaluate.py bestand:

import os
from dotenv import load_dotenv
load_dotenv()

from promptflow.core import Prompty, AzureOpenAIModelConfiguration
from promptflow.evals.evaluators import ChatEvaluator

model_config = AzureOpenAIModelConfiguration(
    azure_deployment=os.getenv("AZURE_OPENAI_DEPLOYMENT_NAME"),
    api_version=os.getenv("AZURE_OPENAI_API_VERSION"),
    azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT")
)

chat_history=[
    {"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},
    {"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."}
]
chat_input="Do other Azure AI services support this too?"

prompty = Prompty.load("chat.prompty", model={'configuration': model_config})
response = prompty(chat_history=chat_history, chat_input=chat_input)

conversation = chat_history
conversation += [
    {"role": "user", "content": chat_input},
    {"role": "assistant", "content": response}
]

chat_eval = ChatEvaluator(model_config=model_config)
score = chat_eval(conversation=conversation)

print(score)

Voer het evaluate.py script uit:

python evaluate.py

Als het goed is, ziet u een uitvoer die er als volgt uitziet:

{'gpt_coherence': 5.0, 'gpt_fluency': 5.0, 'evaluation_per_turn': {'gpt_coherence': {'score': [5.0, 5.0]}, 'gpt_fluency': {'score': [5.0, 5.0]}}}

Het lijkt erop dat we 5 hebben gescoord voor coherentie en vloeiendheid van de LLM-antwoorden op dit gesprek!

Voor meer informatie over het gebruik van promptstroom-evaluators, waaronder het maken van uw eigen aangepaste evaluators en logboekevaluatieresultaten voor AI Studio, moet u uw app controleren met behulp van de promptstroom-SDK.