Sdílet prostřednictvím


Vytvoření vlastní chatovací aplikace v Pythonu pomocí sady SDK toku výzvy

Důležité

Některé funkce popsané v tomto článku můžou být dostupné jenom ve verzi Preview. Tato verze Preview je poskytována bez smlouvy o úrovni služeb a nedoporučujeme ji pro produkční úlohy. Některé funkce se nemusí podporovat nebo mohou mít omezené možnosti. Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.

V tomto rychlém startu vás provedeme nastavením místního vývojového prostředí pomocí sady SDK toku výzvy. Napíšeme výzvu, spustíme ji jako součást kódu vaší aplikace, trasujeme volání LLM a spustíme základní vyhodnocení výstupů LLM.

Požadavky

Než budete moct postupovat podle tohoto rychlého startu, vytvořte prostředky, které potřebujete pro vaši aplikaci:

  • Centrum AI Studio pro připojení k externím prostředkům.
  • Projekt pro uspořádání artefaktů projektu a sdílení trasování a vyhodnocování spuštění.
  • Nasazený chatovací model Azure OpenAI (gpt-35-turbo nebo gpt-4)

Pokud jste to ještě neudělali, dokončete rychlý start pro AI Studio a vytvořte tyto prostředky. Tyto prostředky můžete vytvořit také pomocí průvodce sadou SDK a vytvořením článku centra a projektu .

Musíte mít také potřebná oprávnění k přidání přiřazení rolí pro účty úložiště ve vašem předplatném Azure. Udělení oprávnění (přidání přiřazení role) je povoleno pouze vlastníkem konkrétních prostředků Azure. Možná budete muset požádat správce IT o pomoc s udělením přístupu k volání služby Azure OpenAI pomocí vaší identity.

Udělení přístupu k volání služby Azure OpenAI pomocí vaší identity

K používání osvědčených postupů zabezpečení místo klíčů rozhraní API používáme k ověřování pomocí Azure OpenAI pomocí vaší identity uživatele ID Microsoft Entra.

Vy nebo váš správce musíte identitě uživatele udělit roli uživatele OpenAI služeb Cognitive Services v prostředku azure AI Services, který používáte. Tato role vám umožňuje volat službu Azure OpenAI pomocí vaší identity uživatele.

Pokud si chcete udělit přístup k prostředku Azure AI Services, který používáte:

  1. V AI Studiu přejděte do projektu a v levém podokně vyberte Nastavení.

  2. V části Připojení ed resources vyberte název připojení s typem AIServices.

    Snímek obrazovky se stránkou nastavení projektu a zvýrazněným výběrem připojeného prostředku služeb AI ho otevřete.

    Poznámka:

    Pokud připojení AIServices nevidíte, použijte místo toho připojení Azure OpenAI.

  3. Na stránce s podrobnostmi o prostředku vyberte odkaz pod nadpisem Prostředek a otevřete prostředek služeb AI na webu Azure Portal.

    Snímek obrazovky s podrobnostmi o připojení ke službě AI, který ukazuje, jak otevřít prostředek na webu Azure Portal

  4. Na levé stránce na webu Azure Portal vyberte Řízení přístupu (IAM)>+ Přidat>přiřazení role.

  5. Vyhledejte roli uživatele OpenAI služeb Cognitive Services a vyberte ji. Pak vyberte Další.

    Snímek obrazovky se stránkou pro výběr role uživatele OpenAI služeb Cognitive Services

  6. Vyberte Uživatele, skupinu nebo instanční objekt. Pak vyberte Vybrat členy.

  7. V podokně Vybrat členy , které se otevře, vyhledejte jméno uživatele, pro kterého chcete přidat přiřazení role. Vyberte uživatele a pak vyberte Vybrat.

    Snímek obrazovky se stránkou s přiřazenou novou rolí uživatelem

  8. Pokračujte v průvodci a výběrem možnosti Zkontrolovat a přiřadit přidejte přiřazení role.

Instalace Azure CLI a přihlášení

Teď nainstalujeme Azure CLI a přihlásíme se z místního vývojového prostředí, abyste mohli pomocí přihlašovacích údajů uživatele volat službu Azure OpenAI.

Ve většině případů můžete Azure CLI nainstalovat z terminálu pomocí následujícího příkazu:

winget install -e --id Microsoft.AzureCLI

Pokud tyto příkazy nefungují pro konkrétní operační systém nebo nastavení, můžete postupovat podle pokynů , jak nainstalovat Azure CLI .

Po instalaci Azure CLI se přihlaste pomocí az login příkazu a přihlaste se pomocí prohlížeče:

az login

Teď vytvoříme naši aplikaci a zavoláme službu Azure OpenAI z kódu.

Vytvoření nového prostředí Pythonu

Nejprve potřebujeme vytvořit nové prostředí Pythonu, které můžeme použít k instalaci balíčků sady SDK pro výzvy toku. Neinstalujte balíčky do globální instalace Pythonu. Při instalaci balíčků Pythonu byste měli vždy používat virtuální prostředí nebo prostředí Conda, jinak můžete přerušit globální instalaci Pythonu.

V případě potřeby nainstalujte Python.

Doporučujeme používat Python 3.10 nebo novější, ale vyžaduje se aspoň Python 3.8. Pokud nemáte nainstalovanou vhodnou verzi Pythonu, můžete postupovat podle pokynů v kurzu VS Code Python pro nejjednodušší způsob instalace Pythonu do operačního systému.

Vytvoříte virtuální prostředí.

Pokud už máte nainstalovaný Python 3.10 nebo novější, můžete vytvořit virtuální prostředí pomocí následujících příkazů:

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

Aktivace prostředí Python znamená, že při spuštění python nebo pip z příkazového řádku budete používat interpret Pythonu obsažený ve .venv složce vaší aplikace.

Poznámka:

Pomocí příkazu můžete deactivate ukončit virtuální prostředí Pythonu a později ho v případě potřeby znovu aktivovat.

Instalace sady SDK toku výzvy

V této části použijeme tok výzvy k sestavení aplikace. Tok výzvy je sada vývojových nástrojů navržených tak, aby zjednodušila kompletní vývojový cyklus aplikací AI založených na LLM– od ideace, vytváření prototypů, testování, hodnocení až po produkční nasazení a monitorování.

Pomocí nástroje pip nainstalujte sadu SDK toku výzvy do virtuálního prostředí, které jste vytvořili.

pip install promptflow
pip install azure-identity

Sada SDK toku výzvy využívá závislost na několika balíčcích, které můžete samostatně nainstalovat, pokud je nechcete mít:

  • promptflow-core: obsahuje modul runtime toku výzvy jádra, který se používá ke spouštění kódu LLM.
  • promptflow-tracing: Zjednodušená knihovna používaná pro generování trasování OpenTelemetry ve standardech
  • promptflow-devkit: obsahuje nástroje pro testovací testovací prostředí toku výzvy a prohlížeče trasování pro místní vývojová prostředí.
  • openai: Klientské knihovny pro používání služby Azure OpenAI
  • python-dotenv: slouží k nastavení proměnných prostředí jejich čtením ze .env souborů.

Konfigurace proměnných prostředí

Ke volání služby Azure OpenAI z kódu se vyžaduje koncový bod služby AI a název nasazení. V tomto rychlém .env startu uložíte tyto hodnoty do souboru, což je soubor, který obsahuje proměnné prostředí, které může vaše aplikace číst. Tyto hodnoty najdete v chatovacím hřišti AI Studio.

  1. Vytvořte .env soubor a vložte následující kód:

    AZURE_OPENAI_ENDPOINT=endpoint_value
    AZURE_OPENAI_DEPLOYMENT_NAME=deployment_name
    AZURE_OPENAI_API_VERSION=2024-02-15-preview
    
  2. V projektu AI Studio přejděte na chatovací hřiště. Nejprve ověřte, že chat pracuje s vaším modelem, odesláním zprávy do LLM.

  3. V chatovacím hřišti vyhledejte název nasazení Azure OpenAI. V rozevíracím seznamu vyberte nasazení a najeďte myší na název nasazení, abyste ho zobrazili. V tomto příkladu je název nasazení gpt-35-turbo-16k.

    Snímek obrazovky s otevřeným chatovacím hřištěm AI Studio, zvýrazněným názvem nasazení a tlačítkem pro zobrazení kódu

  4. .env V souboru nahraďte deployment_name názvem nasazení z předchozího kroku. V tomto příkladu používáme název gpt-35-turbo-16knasazení .

  5. <> Vyberte tlačítko Zobrazit kód a zkopírujte hodnotu koncového bodu.

    Snímek obrazovky s místní možností zobrazit kód se zvýrazněním tlačítka pro zkopírování hodnoty koncového bodu

  6. .env V souboru nahraďte endpoint_value hodnotou koncového bodu zkopírovanou z dialogového okna v předchozím kroku.

Upozorňující

Ověřování na základě klíčů se podporuje, ale Microsoft ho nedoporučuje. Pokud chcete použít klíče, můžete ho přidat do .envsouboru, ale ujistěte se, že je v .env.gitignore souboru, abyste se omylem nezaškrtli do úložiště Git.

Vytvoření základní výzvy k chatu a aplikace

Nejprve vytvořte soubor šablony výzvy, pro tuto možnost použijeme výzvu, což je formát šablony výzvy podporovaný tokem výzvy .

chat.prompty Vytvořte soubor a zkopírujte do něj následující kód:

---
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}}

Teď vytvoříme soubor Pythonu, který používá tuto šablonu výzvy. Vytvořte chat.py soubor a vložte do něj následující kód:

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)

Teď z konzoly spusťte kód Pythonu:

python chat.py

Teď by se měl zobrazit výstup spuštění výzvy:

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.

Trasování spuštění kódu chatu

Teď se podíváme na to, jak trasování toku výzvy může poskytnout přehled o různých voláních LLM, která probíhají v našich skriptech Pythonu.

Na začátku chat.py souboru přidejte následující kód, který povolí trasování toku výzvy:

from promptflow.tracing import start_trace
start_trace()

Znovu spusťte:chat.py

python chat.py

Tentokrát se ve výstupu zobrazí odkaz pro zobrazení trasování toku výzvy ke spuštění:

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

Pokud vyberete tento odkaz, zobrazí se trasování zobrazující kroky provádění programu, to, co bylo předáno LLM a výstupu odpovědi.

Snímek obrazovky s trasováním zobrazující kroky provádění programu

Trasování toku výzvy také umožňuje trasování konkrétních volání funkcí a trasování protokolů do AI Studia. Další informace najdete v tématu Jak používat trasování v sadě SDK toku výzvy.

Vyhodnocení výzvy

Teď si ukážeme, jak můžeme použít vyhodnocovače toků k vygenerování metrik, které můžou vyhodnotit kvalitu konverzace ve škále od 0 do 5. Výzvu spustíme znovu, ale tentokrát výsledky uložíme do pole, které obsahuje celou konverzaci, a pak ho ChatEvaluator předáme skóre.

Nejprve nainstalujte promptflow-evals package:

pip install promptflow-evals

Teď zkopírujte následující kód do evaluate.py souboru:

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)

evaluate.py Spusťte skript:

python evaluate.py

Měl by se zobrazit výstup, který vypadá takto:

{'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]}}}

Zdá se, že jsme v této konverzaci získali skóre 5 pro soudržnost a plynulost odpovědí LLM!

Další informace o tom, jak používat vyhodnocovače toků výzvy, včetně toho, jak nastavit vlastní vyhodnocovače a výsledky vyhodnocení protokolů do AI Studia, si nezapomeňte vyzkoušet aplikaci pomocí sady SDK toku výzvy.