> This is a page from the ElevenLabs documentation. For a complete page index, fetch https://elevenlabs.io/docs/llms.txt. For the full documentation in a single file, fetch https://elevenlabs.io/docs/llms-full.txt.

# Edycja transkrypcji

> **Note**
>
> **Poradnik** · Zakłada, że masz już za sobą poradnik o
> [streamingu po stronie klienta](/docs/pl/eleven-api/guides/how-to/speech-to-text/realtime/client-side-streaming) lub
> [streamingu po stronie serwera](/docs/pl/eleven-api/guides/how-to/speech-to-text/realtime/server-side-streaming).

## Omówienie

> **Warning**
>
> Edycja transkrypcji to funkcja eksperymentalna, która zwiększa podstawowy koszt transkrypcji o 30%.
> Opłata jest naliczana za co najmniej 10 sekund audio na każdą zatwierdzoną transkrypcję. Szczegółowe informacje o cenach znajdziesz na [stronie cen API](https://elevenlabs.io/pricing?price.section=speech_to_text\&price.sections=speech_to_text,speech_to_text#pricing-table).

Transkrypcja w czasie rzeczywistym może stosować instrukcję edycji w języku naturalnym do każdej zatwierdzonej transkrypcji, na przykład aby zapisywać wypowiedziane daty w stałym formacie albo rozwijać skróty i akronimy. Instrukcję przekazujesz raz przy otwieraniu połączenia, a po każdej zatwierdzonej transkrypcji pojawia się osobne zdarzenie `edited_transcript` z edytowanym tekstem.

Częściowe transkrypcje nigdy nie są edytowane. Zdarzenie `committed_transcript` również się nie zmienia, więc obecne integracje nadal działają po włączeniu tej funkcji.

> **Warning**
>
> Edycji transkrypcji nie można łączyć z `entity_detection`. Połączenia ustawiające oba parametry
> są odrzucane z błędem `invalid_request`.

## Włączanie edycji transkrypcji

Przekaż instrukcję w opcji `transcriptEdit` podczas łączenia (parametr zapytania `transcript_edit` w WebSocket API). Instrukcja może mieć do 2000 znaków. Wskazówki dotyczące pisania instrukcji znajdziesz w [poradniku edycji transkrypcji wsadowych](/docs/pl/eleven-api/guides/how-to/speech-to-text/batch/transcript-editing#writing-instructions).

We wszystkich SDK edytowane transkrypcje przychodzą przez zdarzenie `RealtimeEvents.EDITED_TRANSCRIPT`.

### Po stronie klienta

Użyj `@elevenlabs/client` w przeglądarce z tokenem jednorazowym wydanym przez twój serwer, jak opisano w [poradniku streamingu po stronie klienta](/docs/pl/eleven-api/guides/how-to/speech-to-text/realtime/client-side-streaming).

```typescript
import { Scribe, RealtimeEvents } from "@elevenlabs/client";

// Fetch a single-use token from your server first
const response = await fetch("/scribe-token", yourAuthHeaders);
const { token } = await response.json();

const connection = Scribe.connect({
  token,
  modelId: "scribe_v2_realtime",
  transcriptEdit: "Write all dates in ISO 8601 format (YYYY-MM-DD)",
  microphone: {
    echoCancellation: true,
    noiseSuppression: true,
  },
});

connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT, (data) => {
  console.log("Committed:", data.text);
});

connection.on(RealtimeEvents.EDITED_TRANSCRIPT, (data) => {
  console.log("Edited:", data.edited_text);
});
```

### Po stronie serwera

Użyj oficjalnego SDK na serwerze, jak opisano w [poradniku streamingu po stronie serwera](/docs/pl/eleven-api/guides/how-to/speech-to-text/realtime/server-side-streaming#configure-the-sdk). Od tego poradnika różnią się tylko opcja i obsługa zdarzenia; wysyłanie audio oraz zamykanie połączenia działają tak samo.

```python
import asyncio
import os
from dotenv import load_dotenv
from elevenlabs import AudioFormat, ElevenLabs, RealtimeAudioOptions, RealtimeEvents

load_dotenv()

async def main():
    elevenlabs = ElevenLabs(api_key=os.getenv("ELEVENLABS_API_KEY"))

    connection = await elevenlabs.speech_to_text.realtime.connect(RealtimeAudioOptions(
        model_id="scribe_v2_realtime",
        audio_format=AudioFormat.PCM_16000,
        sample_rate=16000,
        transcript_edit="Write all dates in ISO 8601 format (YYYY-MM-DD)",
    ))

    def on_committed_transcript(data):
        print(f"Committed: {data.get('text', '')}")

    def on_edited_transcript(data):
        print(f"Edited: {data.get('edited_text', '')}")

    connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT, on_committed_transcript)
    connection.on(RealtimeEvents.EDITED_TRANSCRIPT, on_edited_transcript)

    # Send audio chunks as shown in the server-side streaming guide, then close.
    await connection.close()

if __name__ == "__main__":
    asyncio.run(main())
```

```typescript
import { ElevenLabsClient, RealtimeEvents, AudioFormat } from "@elevenlabs/elevenlabs-js";
import "dotenv/config";

const elevenlabs = new ElevenLabsClient();

const connection = await elevenlabs.speechToText.realtime.connect({
  modelId: "scribe_v2_realtime",
  audioFormat: AudioFormat.PCM_16000,
  sampleRate: 16000,
  transcriptEdit: "Write all dates in ISO 8601 format (YYYY-MM-DD)",
});

connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT, (data) => {
  console.log("Committed:", data.text);
});

connection.on(RealtimeEvents.EDITED_TRANSCRIPT, (data) => {
  console.log("Edited:", data.edited_text);
});

// Send audio chunks as shown in the server-side streaming guide, then close.
```

## Odbieranie edytowanych transkrypcji

Po włączeniu funkcji po każdej zatwierdzonej transkrypcji pojawia się zdarzenie `edited_transcript` zawierające zatwierdzony tekst i jego edytowaną wersję:

```json
{
  "message_type": "edited_transcript",
  "text": "our next meeting is on the twelfth of July twenty twenty-six",
  "edited_text": "our next meeting is on 2026-07-12"
}
```

Warto pamiętać o tym, że:

* Edycje są stosowane do każdego zatwierdzonego segmentu osobno. Zdarzenie `edited_transcript` jest wysyłane krótko po odpowiadającym mu zdarzeniu `committed_transcript`, ponieważ edycja działa asynchronicznie. Może nadejść po kolejnej częściowej transkrypcji, a edycje kolejnych segmentów mogą nadejść w innej kolejności. Użyj pola `text`, aby dopasować edycję do zatwierdzonej transkrypcji.
* Jeśli segment nie został zmieniony, `edited_text` jest identyczne z `text`.
* Jeśli nie można utworzyć edycji segmentu, nie jest dla niego wysyłane zdarzenie `edited_transcript`. Nie wpływa to na zdarzenie `committed_transcript`.
* Znaczniki czasu na poziomie słów w `committed_transcript_with_timestamps` opisują oryginalny zatwierdzony tekst, a nie tekst po edycji.

## Następne kroki

#### [Edycja transkrypcji wsadowych](/docs/pl/eleven-api/guides/how-to/speech-to-text/batch/transcript-editing)

Wskazówki dotyczące pisania instrukcji i format odpowiedzi wsadowej.

#### [Dokumentacja zdarzeń](/docs/pl/eleven-api/guides/how-to/speech-to-text/realtime/event-reference)

Pełna lista zdarzeń i typów błędów z API STT w czasie rzeczywistym.