Udostępnij przez


Python tool

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

Inputs

Name Typ Description Required
Code ciąg Fragment kodu w języku Python Yes
Inputs - Lista parametrów funkcji narzędzia i ich przypisań -

Types

Typ Python example Description
int param: int Integer type
bool param: bool Boolean type
ciąg param: str String type
double param: float Double type
list param: list lub param: List[T] List type
obiekt param: dict lub param: Dict[K, V] Object type
Connection 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.

Note

The Union[...] type annotation is supported only for the connection type, for example, param: Union[CustomConnection, OpenAIConnection].

Outputs

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

Pisanie za pomocą narzędzia języka Python

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

Guidelines

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

  • Kod narzędzia języka Python 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.

    W poniższym przykładzie zdefiniowano narzędzie my_python_tooljęzyka Python, które zostało ozdobione elementem @tool.

  • Parametry funkcji narzędzia języka Python muszą być przypisane w Inputs sekcji .

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

  • Funkcja narzędzia języka 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

Inputs

Name Typ Przykładowa wartość w przepływie YAML Wartość przekazana do funkcji
komunikat ciąg world world
my_conn CustomConnection my_conn CustomConnection sprzeciwiać się

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

Outputs

"hello world"

Wywoływanie modelu rozumowania z poziomu narzędzia języka 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 języka Python. W poniższym przykładzie pokazano, jak wywołać model rozumowania z poziomu narzędzia języka 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 języka Python

Jeśli tworzysz narzędzie języka Python, które wymaga wywoływania usług zewnętrznych z uwierzytelnianiem, użyj niestandardowego połączenia w przepływie monitu. Można go użyć do bezpiecznego przechowywania klucza dostępu, a następnie pobierania go w kodzie języka 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. Go to prompt flow in your workspace, and then select the Connections tab.

  2. Select Create>Custom.

    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ść.

Note

To set one key-value pair as secret, select the is secret checkbox. 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 języku Python

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

  1. W sekcji kodu w węźle języka Python zaimportuj niestandardową bibliotekę from promptflow.connections import CustomConnectionpołączeń . 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. Parse the input to the input section, and then select your target custom connection in the Value dropdown.

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

For example:

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