narzędzie Python

Warning

Przepływ monitów w usłudze Microsoft Foundry i Azure Machine Learning zostanie wycofany 20 kwietnia 2027 r. Przepływ monitów nie jest już zalecany w przypadku nowego programowania. Przeprowadź migrację istniejących aplikacji i wdrożeń przepływu monitów do platformy agentów Microsoft przed 20 kwietnia 2027 r.

Obrazy kontenerów przepływu monitu nie otrzymują już aktualizacji, w tym aktualizacji zabezpieczeń i pakietów. Dotyczy to obrazów środowiska uruchomieniowego Monituj o przepływ, w tym promptflow-runtime, promptflow-runtime-stablei promptflow-python.

Po 20 kwietnia 2027 r. przepływ monitu, w tym środowisko tworzenia w sieci Web w usłudze Microsoft Foundry i Azure Machine Learning, rozszerzenia programu VS Code i powiązane obrazy kontenera przepływu monitów, nie będą już obsługiwane ani dostępne.

Jeśli aplikacja zależy od wdrożeń przepływu monitu lub obrazów środowiska uruchomieniowego, zaplanuj przeniesienie tych obciążeń do obsługiwanych alternatyw, takich jak Microsoft Agent Framework przed datą wycofania. Aby uzyskać wskazówki dotyczące migracji, zobacz Przewodnik po migracji przepływu monitów i przykłady kodu migracji.

Narzędzie Python umożliwia tworzenie niestandardowych fragmentów kodu jako samodzielnych węzłów wykonywalnych w przepływie monitów. Możesz łatwo tworzyć narzędzia Python, edytować kod i weryfikować wyniki.

Dane wejściowe

Nazwa/nazwisko Typ Opis Wymagane
Code ciąg fragment kodu Python Yes
Dane wejściowe - Lista parametrów funkcji narzędzia i ich przypisań -

Types

Typ Przykład języka Python Opis
int param: int Typ liczby całkowitej
bool param: bool Typ boolowski
ciąg parametr: str Typ ciągu
podwójny param: float Podwójny typ
list param: list lub param: List[T] Typ listy
obiekt param: dict lub param: Dict[K, V] Typ obiektu
Połączenie param: CustomConnection Typ połączenia jest obsługiwany specjalnie

Parametry z adnotacją Connection typu są traktowane jako dane wejściowe połączenia, co oznacza:

  • Rozszerzenie przepływu monitu wyświetla selektor do wybrania połączenia.
  • Podczas wykonywania przepływ monitu próbuje znaleźć połączenie o tej samej nazwie z przekazanej wartości parametru.

Uwaga / Notatka

Adnotacja Union[...] typu jest obsługiwana tylko dla typu połączenia, na przykład param: Union[CustomConnection, OpenAIConnection].

Dane wyjściowe

Dane wyjściowe są zwracaną wartością funkcji narzędzia Python.

Pisanie za pomocą narzędzia Python

Podczas pisania w narzędziu Python skorzystaj z poniższych wskazówek.

Wytyczne

  • Python kod narzędzia powinien składać się z kompletnego kodu Python, w tym wszelkich niezbędnych importów modułów.

  • Python kod narzędzia musi zawierać funkcję ozdobioną @tool (funkcja narzędzia), która służy jako punkt wejścia do wykonania. @tool Zastosuj dekorator tylko raz w fragmencie kodu.

    Poniższy przykład definiuje narzędzie Python my_python_tool, które jest ozdobione @tool.

  • Python parametry funkcji narzędzia muszą być przypisane w sekcji Inputs.

    Poniższy przykład definiuje dane wejściowe message i przypisuje je world.

  • Funkcja narzędzia Python musi mieć wartość zwracaną.

    Poniższy przykład zwraca połączony ciąg.

Code

Poniższy fragment kodu przedstawia podstawową strukturę funkcji narzędzia. Przepływ monitu odczytuje funkcję i wyodrębnia dane wejściowe z parametrów funkcji i adnotacji typu.

from promptflow import tool
from promptflow.connections import CustomConnection

# The inputs section will change based on the arguments of the tool function, after you save the code
# Adding type to arguments and return value will help the system show the types properly
# Please update the function name/signature per need
@tool
def my_python_tool(message: str, my_conn: CustomConnection) -> str:
    my_conn_dict = dict(my_conn)
    # Do some function call with my_conn_dict...
    return 'hello ' + message

Dane wejściowe

Nazwa/nazwisko Typ Przykładowa wartość w przepływie YAML Wartość przekazana do funkcji
komunikat ciąg world world
my_conn CustomConnection my_conn CustomConnection Obiektu

Przepływ monitu próbuje znaleźć połączenie o nazwie my_conn podczas wykonywania.

Dane wyjściowe

"hello world"

Wywoływanie modelu rozumowania z narzędzia Python

Jeśli musisz wywołać modele rozumowania, których węzeł LLM nie obsługuje, możesz wywołać modele bezpośrednio za pomocą narzędzia Python. W poniższym przykładzie pokazano, jak wywołać model rozumowania z narzędzia Python.

from promptflow import tool
from promptflow.connections import AzureOpenAIConnection
from openai import AzureOpenAI
 
@tool
def my_python_tool(
    OpenAIConnection: AzureOpenAIConnection,
    scope_reply: str
):
    model_name = "o3-mini"
    deployment = "o3-mini"
    print(OpenAIConnection['api_base'])
    endpoint = OpenAIConnection['api_base'] #"https://<your endpoint>.openai.azure.com/"
    model_name = "o3-mini" #your model name
    deployment = "o3-mini" #your deployment name
 
    subscription_key = OpenAIConnection['api_key']
    api_version = "2024-12-01-preview" #Supply an API version that supports reasoning models.
 
    client = AzureOpenAI(
        api_version=api_version,
        azure_endpoint=endpoint,
        api_key=subscription_key,
    )
 
    response = client.chat.completions.create(
        messages=[
            {
                "role": "system",
                "content": "You are a helpful assistant.",
            },
            {
                "role": "user",
                "content": "I am going to Paris, what should I see?",
            }
        ],
        max_completion_tokens=100000,
        model=deployment
    )
    return response.choices[0].message.content

Połączenie niestandardowe w narzędziu Python

Jeśli tworzysz narzędzie Python, które wymaga wywoływania usług zewnętrznych z uwierzytelnianiem, użyj niestandardowego połączenia w przepływie monitów. Można go użyć do bezpiecznego przechowywania klucza dostępu, a następnie pobierania go w kodzie Python.

Tworzenie połączenia niestandardowego

Utwórz połączenie niestandardowe, które przechowuje wszystkie klucze interfejsu API modelu języka lub inne wymagane poświadczenia.

  1. Przejdź do przepływu monitu w obszarze roboczym, a następnie wybierz kartę Połączenia .

  2. Wybierz pozycję Utwórz>niestandardowy.

    Zrzut ekranu przedstawiający przepływy na karcie Połączenia z wyróżnionym przyciskiem Niestandardowy w menu rozwijanym.

  3. W okienku po prawej stronie możesz zdefiniować nazwę połączenia. Aby przechowywać poświadczenia i klucze, możesz dodać wiele par klucz-wartość, wybierając pozycję Dodaj pary klucz-wartość.

    Zrzut ekranu przedstawiający dodawanie niestandardowego punktu połączenia i przycisk Dodaj pary klucz-wartość.

Uwaga / Notatka

Aby ustawić jedną parę klucz-wartość jako wpis tajny, zaznacz pole wyboru jest wpisem tajnym . Ta opcja szyfruje i przechowuje wartość klucza. Upewnij się, że co najmniej jedna para klucz-wartość jest ustawiona jako wpis tajny. W przeciwnym razie połączenie nie zostanie pomyślnie utworzone.

Używanie połączenia niestandardowego w Python

Aby użyć połączenia niestandardowego w kodzie Python:

  1. W sekcji kodu w węźle Python zaimportuj niestandardową bibliotekę połączeń from promptflow.connections import CustomConnection. Zdefiniuj parametr wejściowy typu CustomConnection w funkcji narzędzia.

    Zrzut ekranu przedstawiający węzeł łańcucha wyszukiwania dokumentu z wyróżnionym połączeniem niestandardowym.

  2. Przeanalizuj dane wejściowe w sekcji danych wejściowych, a następnie wybierz docelowe połączenie niestandardowe na liście rozwijanej Wartość .

    Zrzut ekranu przedstawiający węzeł łańcucha z wyróżnionym połączeniem.

Przykład:

from promptflow import tool
from promptflow.connections import CustomConnection

@tool
def my_python_tool(message: str, myconn: CustomConnection) -> str:
    # Get authentication key-values from the custom connection
    connection_key1_value = myconn.key1
    connection_key2_value = myconn.key2