BiDiStreamingAnalyzeContent
API adalah API utama untuk pengalaman audio dan multimodal generasi berikutnya di Conversational Agents dan Agent Assist. API ini memfasilitasi streaming data audio dan menampilkan transkripsi atau saran agen manusia kepada Anda.
Tidak seperti API sebelumnya, konfigurasi audio yang disederhanakan telah mengoptimalkan dukungan untuk percakapan antar-manusia dan batas waktu yang diperpanjang hingga 15 menit. Selain terjemahan langsung, API ini juga mendukung semua fitur Agent Assist yang didukung oleh StreamingAnalyzeContent
.
Dasar-dasar streaming
Diagram berikut menggambarkan cara kerja streaming.
Mulai streaming dengan mengirimkan konfigurasi audio ke server. Kemudian, Anda mengirim file audio, dan server akan mengirimkan transkrip atau saran untuk agen manusia. Kirim lebih banyak data audio untuk mendapatkan lebih banyak transkrip dan saran. Pertukaran ini berlanjut hingga Anda mengakhirinya dengan menutup setengah aliran.
Panduan streaming
Untuk menggunakan BiDiStreamingAnalyzeContent
API saat runtime percakapan, ikuti pedoman berikut.
- Panggil metode
BiDiStreamingAnalyzeContent
dan tetapkan kolom berikut:BiDiStreamingAnalyzeContentRequest.participant
- (Opsional)
BiDiStreamingAnalyzeContentRequest.voice_session_config.input_audio_sample_rate_hertz
(Jika ditentukan, opsi ini akan menggantikan konfigurasi dariConversationProfile.stt_config.sample_rate_hertz
.) - (Opsional)
BiDiStreamingAnalyzeContentRequest.voice_session_config.input_audio_encoding
(Jika ditentukan, opsi ini akan menggantikan konfigurasi dariConversationProfile.stt_config.audio_encoding
.)
- Siapkan streaming dan tetapkan konfigurasi audio dengan permintaan
BiDiStreamingAnalyzeContent
pertama Anda. - Dalam permintaan berikutnya, kirim byte audio ke aliran melalui
BiDiStreamingAnalyzeContentRequest.audio
. - Setelah mengirim permintaan kedua dengan payload audio, Anda akan menerima beberapa
BidiStreamingAnalyzeContentResponses
dari streaming.- Hasil transkripsi sementara dan akhir tersedia dengan perintah berikut:
BiDiStreamingAnalyzeContentResponse.recognition_result
. - Anda dapat mengakses saran agen manusia dan pesan percakapan yang diproses dengan perintah berikut:
BiDiStreamingAnalyzeContentResponse.analyze_content_response
.
- Hasil transkripsi sementara dan akhir tersedia dengan perintah berikut:
- Anda dapat menutup sebagian aliran kapan saja. Setelah Anda menutup sebagian aliran, server akan mengirimkan kembali respons yang berisi hasil pengenalan yang tersisa, beserta potensi saran Bantuan Agen.
- Mulai atau mulai ulang streaming baru dalam kasus berikut:
- Streaming rusak. Misalnya, streaming berhenti saat seharusnya tidak berhenti.
- Percakapan Anda hampir mencapai batas maksimum permintaan 15 menit.
- Untuk kualitas terbaik, saat Anda memulai streaming, kirim data audio yang dihasilkan setelah
speech_end_offset
terakhir dariBiDiStreamingAnalyzeContentResponse.recognition_result
denganis_final=true
keBidiStreamingAnalyzeContent
.
Menggunakan API melalui library klien Python
Library klien membantu Anda mengakses Google API dari bahasa kode tertentu. Anda dapat menggunakan library klien Python untuk Agent Assist dengan BidiStreamingAnalyzeContent
sebagai berikut.
from google.cloud import dialogflow_v2beta1
from google.api_core.client_options import ClientOptions
from google.cloud import storage
import time
import google.auth
import participant_management
import conversation_management
PROJECT_ID="your-project-id"
CONVERSATION_PROFILE_ID="your-conversation-profile-id"
BUCKET_NAME="your-audio-bucket-name"
SAMPLE_RATE =48000
# Calculate the bytes with Sample_rate_hertz * bit Depth / 8 -> bytes
# 48000(sample/second) * 16(bits/sample) / 8 = 96000 byte per second,
# 96000 / 10 = 9600 we send 0.1 second to the stream API
POINT_ONE_SECOND_IN_BYTES = 9600
FOLDER_PTAH_FOR_CUSTOMER_AUDIO="your-customer-audios-files-path"
FOLDER_PTAH_FOR_AGENT_AUDIO="your-agent-audios-file-path"
client_options = ClientOptions(api_endpoint="dialogflow.googleapis.com")
credentials, _ = google.auth.default(scopes=["https://www.googleapis.com/auth/cloud-platform",
"https://www.googleapis.com/auth/dialogflow"])
storage_client = storage.Client(credentials = credentials, project=PROJECT_ID)
participant_client = dialogflow_v2beta1.ParticipantsClient(client_options=client_options,
credentials=credentials)
def download_blob(bucket_name, folder_path, audio_array : list):
"""Uploads a file to the bucket."""
bucket = storage_client.bucket(bucket_name, user_project=PROJECT_ID)
blobs = bucket.list_blobs(prefix=folder_path)
for blob in blobs:
if not blob.name.endswith('/'):
audio_array.append(blob.download_as_string())
def request_iterator(participant : dialogflow_v2beta1.Participant, audios):
"""Iterate the request for bidi streaming analyze content
"""
yield dialogflow_v2beta1.BidiStreamingAnalyzeContentRequest(
config={
"participant": participant.name,
"voice_session_config": {
"input_audio_encoding": dialogflow_v2beta1.AudioEncoding.AUDIO_ENCODING_LINEAR_16,
"input_audio_sample_rate_hertz": SAMPLE_RATE,
},
}
)
print(f"participant {participant}")
for i in range(0, len(audios)):
audios_array = audio_request_iterator(audios[i])
for chunk in audios_array:
if not chunk:
break
yield dialogflow_v2beta1.BidiStreamingAnalyzeContentRequest(
input={
"audio":chunk
},
)
time.sleep(0.1)
yield dialogflow_v2beta1.BidiStreamingAnalyzeContentRequest(
config={
"participant": participant.name,
}
)
time.sleep(0.1)
def participant_bidi_streaming_analyze_content(participant, audios):
"""call bidi streaming analyze content API
"""
bidi_responses = participant_client.bidi_streaming_analyze_content(
requests=request_iterator(participant, audios)
)
for response in bidi_responses:
bidi_streaming_analyze_content_response_handler(response)
def bidi_streaming_analyze_content_response_handler(response: dialogflow_v2beta1.BidiStreamingAnalyzeContentResponse):
"""Call Bidi Streaming Analyze Content
"""
if response.recognition_result:
print(f"Recognition result: { response.recognition_result.transcript}", )
def audio_request_iterator(audio):
"""Iterate the request for bidi streaming analyze content
"""
total_audio_length = len(audio)
print(f"total audio length {total_audio_length}")
array = []
for i in range(0, total_audio_length, POINT_ONE_SECOND_IN_BYTES):
chunk = audio[i : i + POINT_ONE_SECOND_IN_BYTES]
array.append(chunk)
if not chunk:
break
return array
def python_client_handler():
"""Downloads audios from the google cloud storage bucket and stream to
the Bidi streaming AnalyzeContent site.
"""
print("Start streaming")
conversation = conversation_management.create_conversation(
project_id=PROJECT_ID, conversation_profile_id=CONVERSATION_PROFILE_ID_STAGING
)
conversation_id = conversation.name.split("conversations/")[1].rstrip()
human_agent = human_agent = participant_management.create_participant(
project_id=PROJECT_ID, conversation_id=conversation_id, role="HUMAN_AGENT"
)
end_user = end_user = participant_management.create_participant(
project_id=PROJECT_ID, conversation_id=conversation_id, role="END_USER"
)
end_user_requests = []
agent_request= []
download_blob(BUCKET_NAME, FOLDER_PTAH_FOR_CUSTOMER_AUDIO, end_user_requests)
download_blob(BUCKET_NAME, FOLDER_PTAH_FOR_AGENT_AUDIO, agent_request)
participant_bidi_streaming_analyze_content( human_agent, agent_request)
participant_bidi_streaming_analyze_content( end_user, end_user_requests)
conversation_management.complete_conversation(PROJECT_ID, conversation_id)
Mengaktifkan integrasi SipRec untuk telepon
Anda dapat mengaktifkan integrasi SipRec telephony untuk menggunakan BidiStreamingAnalyzeContent
dalam pemrosesan audio. Konfigurasi pemrosesan audio Anda dengan konsol Agent Assist atau permintaan API langsung.
Konsol
Ikuti langkah-langkah berikut untuk mengonfigurasi pemrosesan audio Anda agar menggunakan BidiStreamingAnalyzeContent
.
Buka konsol Agent Assist dan pilih project Anda.
Klik Profil Percakapan > nama profil.
Buka Setelan telepon.
Klik untuk mengaktifkan Gunakan Bidirectional Streaming API> Simpan.
API
Anda dapat memanggil API secara langsung untuk membuat atau memperbarui profil percakapan dengan mengonfigurasi tanda di ConversationProfile.use_bidi_streaming
.
Contoh konfigurasi:
{
"name": "projects/PROJECT_ID/locations/global/conversationProfiles/CONVERSATION_PROFILE_ID",f
"displayName": "CONVERSATION_PROFILE_NAME",
"automatedAgentConfig": {
},
"humanAgentAssistantConfig": {
"notificationConfig": {
"topic": "projects/PROJECT_ID/topics/FEATURE_SUGGESTION_TOPIC_ID",
"messageFormat": "JSON"
},
},
"useBidiStreaming": true,
"languageCode": "en-US"
}
Kuota
Jumlah permintaan BidiStreamingAnalyzeContent
serentak dibatasi oleh kuota baru ConcurrentBidiStreamingSessionsPerProjectPerRegion
. Lihat Google Cloud panduan kuota untuk mengetahui informasi tentang penggunaan kuota dan cara meminta penambahan batas kuota.
Untuk kuota, penggunaan permintaan BidiStreamingAnalyzeContent
ke endpoint Dialogflow global berada di region us-central1
.