Prompt Flow als Funktion ausführen#

Experimentelles Feature

Dies ist eine experimentelle Funktion und kann sich jederzeit ändern. Erfahren Sie mehr.

Übersicht#

Promptflow ermöglicht es Ihnen, ein Flow zu laden und es als Funktion in Ihrem Code zu verwenden. Dieses Feature ist nützlich, wenn Sie einen Dienst auf Basis eines Flows aufbauen. Ein einfaches Beispiel für einen Dienst, der die Flow-Funktion nutzt, finden Sie hier.

Flow-Funktion laden und aufrufen#

Um das Feature "Flow als Funktion" zu nutzen, müssen Sie zunächst einen Flow mit der Funktion load_flow laden. Anschließend können Sie das Flow-Objekt wie eine Funktion verwenden, indem Sie ihm Schlüssel-Wert-Argumente übergeben.

f = load_flow("../../examples/flows/standard/web-classification/")
f(url="sample_url")

Flow mit Kontext konfigurieren#

Sie können einige Flow-Konfigurationen vor der Ausführung der Flow-Funktion überschreiben, indem Sie flow.context setzen.

Flow als Funktion mit In-Memory-Verbindungsüberschreibung laden#

Durch die Übergabe eines Verbindungsobjekts an den Flow-Kontext muss der Flow die Verbindung zur Laufzeit nicht abrufen, was Zeit sparen kann, wenn die Flow-Funktion mehrmals aufgerufen werden muss.

from promptflow.entities import AzureOpenAIConnection

connection_obj = AzureOpenAIConnection(
    name=conn_name,
    api_key=api_key,
    api_base=api_base,
    api_type="azure",
    api_version=api_version,
)
# no need to create the connection object.  
f.context = FlowContext(
    connections={"classify_with_llm": {"connection": connection_obj}}
)

Lokaler Flow als Funktion mit Überschreibung von Flow-Inputs#

Durch die Übergabe von Überschreibungen wird der ursprüngliche Flow-DAG zur Laufzeit aktualisiert.

f.context = FlowContext(
    # node "fetch_text_content_from_url" will take inputs from the following command instead of from flow input
    overrides={"nodes.fetch_text_content_from_url.inputs.url": sample_url},
)

Hinweis: Die overrides führen nur einen YAML-Inhaltseratz in der ursprünglichen flow.dag.yaml durch. Wenn die flow.dag.yaml nach den overrides ungültig wird, wird bei der Ausführung ein Validierungsfehler ausgelöst.

Flow als Funktion mit Streaming-Ausgabe laden#

Nach dem Setzen von streaming im Flow-Kontext gibt die Flow-Funktion einen Iterator zurück, um die Ausgabe zu streamen.

f = load_flow(source="../../examples/flows/chat/chat-basic/")
f.context.streaming = True
result = f(
    chat_history=[
        {
            "inputs": {"chat_input": "Hi"},
            "outputs": {"chat_output": "Hello! How can I assist you today?"},
        }
    ],
    question="How are you?",
)


answer = ""
# the result will be a generator, iterate it to get the result
for r in result["answer"]:
    answer += r

Unser Beispiel dient als Referenz für die Verwendung.

Flow mit mehreren Überschreibungen#

Hinweis: Die Flow-Kontextkonfigurationen können sich in einigen Fällen gegenseitig beeinflussen. Zum Beispiel, wenn connection & overrides verwendet werden, um denselben Knoten zu überschreiben. Das Verhalten ist in solchen Szenarien undefiniert. Bitte vermeiden Sie eine solche Verwendung.

# overriding `classify_with_llm`'s connection and inputs in the same time will lead to undefined behavior.
f.context = FlowContext(
    connections={"classify_with_llm": {"connection": connection_obj}},
    overrides={"nodes.classify_with_llm.inputs.url": sample_url}
)

Nächste Schritte#

Erfahren Sie mehr über