Dela via


Python tool

Med Python-verktyget kan du skapa anpassade kodfragment som fristående körbara noder i promptflödet. Du kan enkelt skapa Python-verktyg, redigera kod och verifiera resultat.

Inputs

Name Type Description Required
Code string Python-kodfragment Yes
Inputs - Lista över verktygsfunktionsparametrar och deras tilldelningar -

Types

Type Python example Description
int param: int Integer type
bool param: bool Boolean type
string param: str String type
double param: float Double type
list param: list eller param: List[T] List type
object param: dict eller param: Dict[K, V] Object type
Connection param: CustomConnection Anslutningstypen hanteras särskilt

Parametrar med typanteckningen Connection behandlas som anslutningsindata, vilket innebär:

  • Tillägg för promptflöde visar en väljare för att välja anslutningen.
  • Under körningen försöker promptflödet hitta anslutningen med samma namn från parametervärdet som skickades in.

Note

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

Outputs

Utdata är returvärdet för Python-verktygsfunktionen.

Skriva med Python-verktyget

Använd följande riktlinjer när du skriver med Python-verktyget.

Guidelines

  • Python-verktygskoden bör bestå av fullständig Python-kod, inklusive eventuella nödvändiga modulimporter.

  • Python-verktygskoden måste innehålla en funktion som är dekorerad med @tool (verktygsfunktionen), som fungerar som startpunkt för körning. Använd dekoratören @tool bara en gång i kodfragmentet.

    Följande exempel definierar Python-verktyget my_python_tool, som är dekorerat med @tool.

  • Funktionsparametrar för Python-verktyget måste tilldelas i avsnittet Inputs .

    Följande exempel definierar indata message och tilldelar den world.

  • En Python-verktygsfunktion måste ha ett returvärde.

    Följande exempel returnerar en sammanfogad sträng.

Code

Följande kodfragment visar den grundläggande strukturen för en verktygsfunktion. Prompt flow läser funktionen och extraherar indata från funktionsparametrar och skriver anteckningar.

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 Type Exempelvärde i flödes-YAML Värde som skickas till funktionen
message string world world
my_conn CustomConnection my_conn CustomConnection objekt

Prompt flow försöker hitta anslutningen med namnet my_conn under körningen.

Outputs

"hello world"

Anropa en resonemangsmodell från Python-verktyget

Om du behöver anropa resonemangsmodeller som LLM-noden inte stöder kan du använda Python-verktyget för att anropa modellerna direkt. I följande exempel visas hur du anropar en resonemangsmodell från Python-verktyget.

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

Anpassad anslutning i Python-verktyget

Om du utvecklar ett Python-verktyg som kräver att externa tjänster anropas med autentisering använder du den anpassade anslutningen i promptflödet. Du kan använda den för att lagra åtkomstnyckeln på ett säkert sätt och sedan hämta den i Python-koden.

Skapa en anpassad anslutning

Skapa en anpassad anslutning som lagrar alla dina API-nycklar för stora språkmodeller eller andra nödvändiga autentiseringsuppgifter.

  1. Go to prompt flow in your workspace, and then select the Connections tab.

  2. Select Create>Custom.

    Skärmbild som visar flöden på fliken Anslutningar som markerar knappen Anpassad i den nedrullningsbara menyn.

  3. I den högra rutan kan du definiera ditt anslutningsnamn. Du kan lägga till flera nyckel/värde-par för att lagra dina autentiseringsuppgifter och nycklar genom att välja Lägg till nyckel/värde-par.

    Skärmbild som visar hur du lägger till en anpassad anslutningspunkt och knappen Lägg till nyckel/värde-par.

Note

To set one key-value pair as secret, select the is secret checkbox. Det här alternativet krypterar och lagrar ditt nyckelvärde. Kontrollera att minst ett nyckel/värde-par har angetts som hemlighet. Annars skapas inte anslutningen.

Använda en anpassad anslutning i Python

Så här använder du en anpassad anslutning i Python-koden:

  1. I kodavsnittet i python-noden importerar du det anpassade anslutningsbiblioteket from promptflow.connections import CustomConnection. Definiera en indataparameter av typen CustomConnection i verktygsfunktionen.

    Skärmbild som visar noden för dokumentsökningskedjan som markerar den anpassade anslutningen.

  2. Parse the input to the input section, and then select your target custom connection in the Value dropdown.

    Skärmbild som visar kedjenoden som markerar anslutningen.

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