# Hook „Benutzer-Prompt transformiert“

Der userPromptTransformed Hook wird ausgeführt, nachdem die Laufzeit einem übermittelten Prompt generierten Kontext hinzugefügt hat, aber bevor der resultierende Inhalt im Sitzungsverlauf gespeichert oder an das Modell gesendet wird.

<!-- markdownlint-disable GHD046 GHD005 -->
<!-- Suppressed: GHD046 (outdated release terminology), GHD005 (hardcoded data variable) -->

Verwenden Sie es, wenn Sie den exakten modellseitigen Prompt prüfen oder ersetzen müssen. Die `prompt`-Eingabe enthält den Benutzer-Prompt, nachdem etwaige `userPromptSubmitted`-Hooks ausgeführt wurden, während `transformedPrompt` auch zur Laufzeit generierten Kontext wie `<current_datetime>` enthält.

## Eingabe und Ausgabe

| Eingabefeld | Typ | Description |
| --- | --- | --- |
| `sessionId` | string | Laufzeitsitzungs-ID |
| `timestamp` | Datum/Uhrzeit | Zeitpunkt des Aufrufs des Hooks |
| `cwd` / `workingDirectory` | string | Aktuelles Arbeitsverzeichnis |
| `prompt` | string | Prompt nach `userPromptSubmitted`-Hooks |
| `transformedPrompt` | string | Modellgerichtete Eingabeaufforderung nach Laufzeittransformationen |

Gibt keinen Wert zurück, um die transformierte Eingabeaufforderung unverändert zu lassen. Geben Sie `modifiedTransformedPrompt` zurück, um den Inhalt zu ersetzen, der im Sitzungsverlauf gespeichert und an das Modell gesendet wird.

## Beispiele

<div class="ghd-codetabs">
<div class="ghd-codetab" data-lang="typescript" data-label="TypeScript"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">TypeScript</div>

<!-- docs-validate: skip -->

```typescript
const session = await client.createSession({
  hooks: {
    onUserPromptTransformed: async (input) => ({
      modifiedTransformedPrompt: redact(input.transformedPrompt),
    }),
  },
});
```

</div>

<div class="ghd-codetab" data-lang="python" data-label="Python"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Python</div>

<!-- docs-validate: skip -->

```python
session = await client.create_session(
    hooks={
        "on_user_prompt_transformed": lambda input_data, invocation: {
            "modifiedTransformedPrompt": redact(input_data["transformedPrompt"])
        }
    }
)
```

</div>

<div class="ghd-codetab" data-lang="go" data-label="Go"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Go</div>

<!-- docs-validate: skip -->

```golang
session, err := client.CreateSession(ctx, &copilot.SessionConfig{
    Hooks: &copilot.SessionHooks{
        OnUserPromptTransformed: func(input copilot.UserPromptTransformedHookInput, invocation copilot.HookInvocation) (*copilot.UserPromptTransformedHookOutput, error) {
            return &copilot.UserPromptTransformedHookOutput{
                ModifiedTransformedPrompt: copilot.String(redact(input.TransformedPrompt)),
            }, nil
        },
    },
})
```

</div>

<div class="ghd-codetab" data-lang="dotnet" data-label=".NET"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">.NET</div>

<!-- docs-validate: skip -->

```csharp
var session = await client.CreateSessionAsync(new SessionConfig
{
    Hooks = new SessionHooks
    {
        OnUserPromptTransformed = (input, invocation) =>
            Task.FromResult<UserPromptTransformedHookOutput?>(new()
            {
                ModifiedTransformedPrompt = Redact(input.TransformedPrompt),
            }),
    },
});
```

</div>

<div class="ghd-codetab" data-lang="java" data-label="Java"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Java</div>

<!-- docs-validate: skip -->

```java
var hooks = new SessionHooks().setOnUserPromptTransformed((input, invocation) ->
    CompletableFuture.completedFuture(
        new UserPromptTransformedHookOutput(redact(input.transformedPrompt()))));

var session = client.createSession(new SessionConfig().setHooks(hooks)).get();
```

</div>

<div class="ghd-codetab" data-lang="rust" data-label="Rust"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Rust</div>

```rust
#[async_trait]
impl SessionHooks for MyHooks {
    async fn on_user_prompt_transformed(
        &self,
        input: UserPromptTransformedInput,
        _ctx: HookContext,
    ) -> Option<UserPromptTransformedOutput> {
        Some(UserPromptTransformedOutput {
            modified_transformed_prompt: Some(redact(&input.transformed_prompt)),
        })
    }
}

let session = client
    .create_session(SessionConfig::default().with_hooks(Arc::new(MyHooks)))
    .await?;
```

</div>

</div>

Die Ersetzung wird als Inhalt der Benutzernachricht gespeichert, sodass wiederaufgenommene Sitzungen den geänderten Inhalt unverändert erneut abspielen.