> For the complete documentation index, see [llms.txt](https://docs.airops.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.airops.com/docs/de/aktionen/workflow-concepts/workflow-steps/logic-steps/code.md).

# Code ausführen

Benutzerdefinierte Logik mit Javascript oder Python hinzufügen

## Wie funktioniert der Code-Step?

Der Code-Step in AirOps Studio unterstützt derzeit **JavaScript** und **Python**, was Ihnen die Flexibilität bietet, die für erweiterte Anfragen erforderlich ist.

{% hint style="warning" %}
Der Code in einem Code-Step ist in eine Funktion eingebettet, und Sie müssen eine **return** -Anweisung verwenden, um Ergebnisse aus dem Schritt auszugeben.
{% endhint %}

<figure><img src="https://1960680173-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FX2n5yPRPynbnWuO4SH0M%2Fuploads%2Fgit-blob-0b2306c3503d270e90185c5eab3ee24a14c54da1%2Fcode_step_1.png?alt=media" alt=""><figcaption><p>Beispiel-Code-Step</p></figcaption></figure>

## JavaScript

### Wie man eine Eingabe referenziert

Im Gegensatz zu Liquid schließen JavaScript-Variablen **aus** `{{` oder `}}` . Zum Beispiel:

* `{{linkedin_url}}` wäre `linkedin_url`

### Wie man eine Ausgabe referenziert

Die JavaScript-Syntax ähnelt Liquid, schließt jedoch Klammern aus:

* `{{step_1.output}}` wäre `step_1.output`
* `{{step_1.output.name}}` wäre `step_1.output.name`

### Verwenden Sie eine Return-Anweisung

Sie müssen eine `return` -Anweisung in einem Code-Step einfügen, um die Ausgabe des Schritts zu bestimmen

### JavaScript-Beispiel

Lassen Sie uns ein Beispiel durchgehen, das sowohl eine Texteingabe als auch eine LLM-Ausgabe referenziert. Wir verwenden einen einfachen Workflow, der eine String-Eingabe anfordert und eine Übereinstimmung von Wörtern zurückgibt, die sich damit reimen.

Unser Code-Step wird einfach dafür verantwortlich sein, die Eingabeaufforderung mit der LLM-Ausgabe zu kombinieren, sodass wir nur ein einzelnes Ergebnis haben, das die Frage und die Antwort enthält:

{% @arcade/embed url="<https://app.arcade.software/share/ucsCBgcBlpyFyrPMzrZi>" flowId="ucsCBgcBlpyFyrPMzrZi" %}

## Python

### Wie man eine Eingabe referenziert

Ähnlich wie bei JavaScript erfordert Python nur die direkte Referenz auf den Variablennamen. Dasselbe Beispiel von oben gilt also:

* `{{linkedin_url}}` wäre `linkedin_url`

### Wie man eine Ausgabe referenziert

Die Python-Syntax muss Klammern um den Variablennamen enthalten:

* `{{step_1.output}}` wäre `step_1["output"]`
* `{{step_1.output.key}}` wäre `step_1["output"]["key"]`

### Verwenden Sie eine Return-Anweisung

Sie müssen eine `return` -Anweisung in einem Code-Step, um die Ausgabe des Schritts zu bestimmen.

### Unterstützte Python-Pakete

Stand: 13.02.2024:

```
pandas==1.3.4
requests
beautifulsoup4
lxml
pyjwt
urllib3==1.26.6
scipy
numpy
pycryptodome
bing-image-urls
markdown
PyPDF2
```

### Zusätzliche Python-Pakete hinzufügen

Wir sind zwar immer auf der Suche danach, unsere nativ unterstützten Pakete zu erweitern, aber unser Code-Step bietet einen Workaround für die Arbeit mit zusätzlichen Paketen.

Wenn Sie Ihren Code-Step schreiben, fügen Sie den folgenden Code an Ihren Block an:

```python
import os
import sys
import subprocess

# pip install benutzerdefiniertes Paket nach /tmp/ und zum Pfad hinzufügen
subprocess.call('pip install flask -t /tmp/ --no-cache-dir'.split(), stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
sys.path.insert(1, '/tmp/')
import flask

return 'import ok'
```

{% hint style="info" %}
Hinweis: Alle externen Bibliotheken, die mit dieser Methode aufgerufen werden, werden bei jedem Ausführen des Code-Steps installiert, was die Ausführungszeit möglicherweise um spürbare Sekunden verlängert.
{% endhint %}

### Python-Beispiel

Lassen Sie uns dasselbe Beispiel von oben in Python durchgehen:

{% @arcade/embed url="<https://app.arcade.software/share/gM15e94F8pxxwY3ExGy3>" flowId="gM15e94F8pxxwY3ExGy3" %}

## KI-Helfer

Sowohl Python als auch JavaScript unterstützen die Verwendung unseres KI-Helfers, um Code zu generieren. Das kann nützlich sein, wenn Sie Schwierigkeiten haben, die genaue Syntax in einer der beiden Sprachen zu finden, um Ihr Ziel zu erreichen.

Ähnlich wie bei der Eingabeaufforderung für ein LLM empfehlen wir, Ihre Beschreibung so klar und gründlich wie möglich zu formulieren.

{% @arcade/embed %}

Sobald unsere KI-Helfer den Code generiert haben, können Sie den generierten Text behalten oder ablehnen. Wenn Sie später Code hinzufügen oder entfernen möchten, können Sie dieselbe Schaltfläche „Mit KI generieren“ verwenden, um Ihre Eingabeaufforderung und Ihren Code zu ändern.

## Wie man fortfährt, wenn der Code-Step fehlschlägt

Standardmäßig beendet der Code-Step den Workflow, wenn er fehlschlägt. Um den Workflow jedoch fortzusetzen, wenn der Schritt fehlschlägt, klicken Sie einfach auf `Weiter` am unteren Rand des Schritts.

<figure><img src="https://1960680173-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FX2n5yPRPynbnWuO4SH0M%2Fuploads%2Fgit-blob-909683bdffa53e503c67fcbd3d10be9b91f137e8%2Fimage.png?alt=media" alt=""><figcaption><p>Klicken Sie auf Fortfahren, um den Workflow fortzusetzen</p></figcaption></figure>

Der Schritt gibt die folgenden Schlüssel zurück:

* `Ausgabe` : dies wird `null`
* `Fehler` :
  * `Meldung`: die vom Schritt zurückgegebene Meldung
  * `Code` : der den Fehler darstellende Fehlercode

<figure><img src="https://1960680173-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FX2n5yPRPynbnWuO4SH0M%2Fuploads%2Fgit-blob-efafda7fe1d5464d514822509633ec2c8de54f23%2Fimage.png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

## Wie man es erneut versucht, wenn der Code-Step fehlschlägt

Um einen Schritt erneut zu versuchen, wenn er fehlschlägt,

1. Wählen Sie `Weiter` anstatt `Workflow beenden` wenn der Schritt fehlschlägt
2. Fügen Sie eine Bedingung hinzu, bei der die Bedingung prüft, ob der `Fehler` aus dem Schritt vorhanden ist, z. B. `step_1.error`
3. Fügen Sie den Schritt hinzu, den Sie erneut versuchen möchten, falls ein Fehler aufgetreten ist

<figure><img src="https://1960680173-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FX2n5yPRPynbnWuO4SH0M%2Fuploads%2Fgit-blob-f551698d248295d68e604a0eaf0092b8d6134100%2Fimage.png?alt=media" alt="" width="563"><figcaption><p>Prüfen, ob ein Fehler aufgetreten ist</p></figcaption></figure>

## Einschränkungen

Es gibt zwei wichtige Einschränkungen, die Sie in Bezug auf unseren Code-Step beachten sollten:

1. Sie haben eine maximale Laufzeit von 15 Minuten
2. Die maximale Payload-Größe beträgt 6 MB


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.airops.com/docs/de/aktionen/workflow-concepts/workflow-steps/logic-steps/code.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
