Files
ai-agent-book/chapter6/phone-agent/validation/runs/phone-agent-webrtc-audio-20260731-v1/direct.json
T
liqiang b119135836
Build latest book artifacts / build (push) Canceled after 0s
dependency resolution / resolve (3.11) (push) Canceled after 0s
dependency resolution / resolve (3.13) (push) Canceled after 0s
deploy-pages / build (push) Canceled after 0s
deploy-pages / deploy (push) Canceled after 0s
i18n consistency check / check (push) Canceled after 0s
provider adoption tests / test (chapter2/context-compression) (push) Canceled after 0s
provider adoption tests / test (chapter2/prompt-injection) (push) Canceled after 0s
provider adoption tests / test (chapter2/system-hint) (push) Canceled after 0s
provider adoption tests / test (chapter3/log-sanitization) (push) Canceled after 0s
web-search-agent tests / test (push) Canceled after 0s
web-search-agent tests / agentbook (push) Canceled after 0s
ai-agent-book 精选快照(<2MB 代码与文档,来自 github.com/bojieli/ai-agent-book)
2026-08-20 13:12:50 +00:00

329 lines
14 KiB
JSON

{
"schema_version": 3,
"experiment": "phone-agent-webrtc",
"call_id": "rtc_794c4b8e0481466fbf23",
"created_at_utc": "2026-07-31T11:23:09.666702+00:00",
"finished_at_utc": "2026-07-31T11:23:53.431450+00:00",
"status": "completed",
"mode": "direct",
"input_contract": {
"fields_supplied_by_caller": [
"callee_name",
"goal",
"context",
"instructions"
],
"natural_language_task": ""
},
"plan": {
"mode": "direct",
"callee_name": "Jane Doe",
"goal": "Collect and confirm Jane Doe's preferred dental-checkup time and confirmation code.",
"context": "Tuesday afternoon from 2pm to 4pm is available; the user must supply the exact time and code by voice.",
"instructions": "Ask for one exact time and a confirmation code. Repeat both, require explicit confirmation, then call complete_task with only the ASR-confirmed details.",
"opening_line": "Hello Jane Doe. Please state the exact appointment time and confirmation code, then explicitly confirm both.",
"missing_information": [],
"trace": [
{
"stage": "observation",
"summary": "Caller supplied all call parameters."
},
{
"stage": "action",
"summary": "Open a WebRTC voice session with the fixed parameters."
}
],
"planner_model": null
},
"models": {
"planner": null,
"dialogue_models": [
"ark:doubao-seed-1-6-flash-250615"
],
"llm_receipts": [
{
"schema_version": 1,
"purpose": "post_asr_dialogue",
"execution": "real_external_llm",
"provider": "ark",
"requested_model": "doubao-seed-1-6-flash-250615",
"provider_model": "doubao-seed-1-6-flash-250615",
"provider_response_id": "0217854970227438de59cc126156ef9419088f6fa2f8da927049f",
"finish_reason": "stop",
"usage": {
"completion_tokens": 181,
"prompt_tokens": 392,
"total_tokens": 573,
"completion_tokens_details": {
"reasoning_tokens": 84
},
"prompt_tokens_details": {
"cached_tokens": 0
}
},
"started_at_utc": "2026-07-31T11:23:42.156339+00:00",
"finished_at_utc": "2026-07-31T11:23:44.170815+00:00",
"latency_seconds": 2.014451,
"request": {
"model": "doubao-seed-1-6-flash-250615",
"messages": [
{
"role": "system",
"content": "You are the voice Agent in a short local browser call. The user text below came only from ASR over the browser microphone RTP track. Return only JSON with assistant_message, explicit_confirmation_observed (boolean), should_complete (boolean), and completion containing result, appointment_time, confirmation_number, notes. If the user states an exact time, a confirmation code, and explicitly confirms both, set should_complete=true, normalize obvious spoken code words/digits into a concise code, and repeat both details in assistant_message. Otherwise ask only for what is missing. Never say booked, arranged, scheduled, or imply an external action occurred. For a completed turn, completion.result must be exactly 'Local confirmation recorded.' and completion.notes must be exactly 'No external organization was contacted or booking made.' Goal: Collect and confirm Jane Doe's preferred dental-checkup time and confirmation code.\nContext: Tuesday afternoon from 2pm to 4pm is available; the user must supply the exact time and code by voice.\nInstructions: Ask for one exact time and a confirmation code. Repeat both, require explicit confirmation, then call complete_task with only the ASR-confirmed details."
},
{
"role": "user",
"content": "{\"latest_user_asr_transcript\":\"Confirmation called as Maple 7. I explicitly confirm Tuesday at 3pm and confirmation code Maple 7.\",\"prior_audio_transcript\":[{\"purpose\":\"missing_field_clarification\",\"source\":\"tts.webrtc_downlink\",\"speaker\":\"agent\",\"text\":\"Hello Jane Doe. Please state the exact appointment time and confirmation code, then explicitly confirm both.\",\"utterance_id\":\"tts_01\"}]}"
}
],
"response_format": {
"type": "json_object"
},
"temperature": 0,
"max_tokens": 700
},
"request_sha256": "625905fa5da9a4cdc0bd711793201abc585ea5434e62f2a03024a128a3cd40d5",
"raw_response": {
"id": "0217854970227438de59cc126156ef9419088f6fa2f8da927049f",
"choices": [
{
"finish_reason": "stop",
"index": 0,
"message": {
"content": "{\"assistant_message\": \"Confirmed appointment time: Tuesday at 3pm, Confirmation code: Maple 7. Explicit confirmation observed: true\", \"explicit_confirmation_observed\": true, \"should_complete\": true, \"completion\": {\"result\": \"Local confirmation recorded.\", \"appointment_time\": \"Tuesday at 3pm\", \"confirmation_number\": \"Maple 7\", \"notes\": \"No external organization was contacted or booking made.\"}}",
"role": "assistant",
"reasoning_content": "Got it, let's see. The user provided the exact time as Tuesday at 3pm and the confirmation code as Maple 7, and explicitly confirmed both. So I need to construct the JSON with assistant_message repeating the details, explicit_confirmation_observed as true, should_complete as true, and completion with result \"Local confirmation recorded.\" and notes \"No external organization was contacted or booking made.\""
}
}
],
"created": 1785497024,
"model": "doubao-seed-1-6-flash-250615",
"object": "chat.completion",
"service_tier": "default",
"usage": {
"completion_tokens": 181,
"prompt_tokens": 392,
"total_tokens": 573,
"completion_tokens_details": {
"reasoning_tokens": 84
},
"prompt_tokens_details": {
"cached_tokens": 0
}
}
},
"raw_response_sha256": "d2fb0d5702e0cf7905675047a5bc9ed7330a9d1ac02f6f219f8442ad29794fe8",
"response_content": "{\"assistant_message\": \"Confirmed appointment time: Tuesday at 3pm, Confirmation code: Maple 7. Explicit confirmation observed: true\", \"explicit_confirmation_observed\": true, \"should_complete\": true, \"completion\": {\"result\": \"Local confirmation recorded.\", \"appointment_time\": \"Tuesday at 3pm\", \"confirmation_number\": \"Maple 7\", \"notes\": \"No external organization was contacted or booking made.\"}}",
"response_content_sha256": "5cec9a348fdd2a028db79b95024befc152676fd85169a254ca2007888b571897",
"external_request_completed": true,
"mock": false,
"probe_only": false,
"fallback_used": false,
"credential_fields_retained": false
}
],
"asr_receipts": [
{
"schema_version": 1,
"operation": "asr",
"execution": "real_local_inference",
"provider": "local OpenAI Whisper",
"model": "whisper-tiny",
"checkpoint_name": "tiny.pt",
"checkpoint_sha256": "65147644a518d12f04e32d6f3b26facc3f8dd46e5390956a9424a650c0ce22b9",
"runtime": {
"python": "3.11.4",
"torch": "2.4.0",
"openai_whisper": "20231106"
},
"input_source": "browser_microphone_rtp",
"input_sample_rate_hz": 16000,
"input_channels": 1,
"input_pcm_bytes": 774368,
"input_wav_bytes": 774412,
"input_wav_sha256": "bc5072b92d30d382b7439f56b1453946cbaa5f9de80c7a24eb98a1f8615c1d34",
"input_duration_seconds": 24.199,
"language": "en",
"transcript": "Confirmation called as Maple 7. I explicitly confirm Tuesday at 3pm and confirmation code Maple 7.",
"transcript_sha256": "e34b0bd2ddd7f005484a59cc83d36b5c4147762c45e1ffb7f1fd2c9f0e8e428e",
"model_load_seconds": 0.314312,
"inference_seconds": 0.446881,
"latency_seconds": 1.789071,
"retained_safe_fixture_path": "media/direct/microphone_rtp_asr_input.wav",
"external_request": false,
"mock": false,
"probe_only": false,
"fallback_used": false
}
],
"tts_receipts": [
{
"schema_version": 1,
"operation": "tts",
"execution": "real_speech_synthesis",
"provider": "macOS say",
"model": "operating-system speech synthesizer",
"voice": "Samantha",
"sample_rate_hz": 8000,
"channels": 1,
"sample_width_bytes": 2,
"sample_count": 52080,
"duration_seconds": 6.51,
"wav_bytes": 104238,
"wav_sha256": "c94a2a0b563c9ac55fe472c79b0f94adcb72bdaccd7ecc424f172c35b5af8378",
"pcm_sha256": "de63bfbfc726731f84522f16a33357e13dbb34ab6c21596055503d17d039db40",
"latency_seconds": 0.972527,
"engine": {
"name": "say",
"sha256": "2bf4b7a6950c8365f3b51c1345d82b40595f4581c9bd50700e1ea485851e022d"
},
"decoder": {
"name": "ffmpeg",
"sha256": "5a4899a648370eccc8e73af934a8724d7af9195018eed29125432c782548f00a"
},
"network_used": false,
"mock": false,
"probe_only": false,
"fallback_used": false,
"utterance_id": "tts_01",
"purpose": "missing_field_clarification",
"retained_safe_fixture_path": "media/direct/agent_01.wav",
"text_sha256": "b89b930d8884dec9a8261e6c4952e430f7146bbdcde40423fe8eecede205bec4",
"enqueued_on_webrtc_track": true,
"transmitted_samples": 52080,
"delivery_complete": true,
"delivered_pcm_sha256": "de63bfbfc726731f84522f16a33357e13dbb34ab6c21596055503d17d039db40"
},
{
"schema_version": 1,
"operation": "tts",
"execution": "real_speech_synthesis",
"provider": "macOS say",
"model": "operating-system speech synthesizer",
"voice": "Samantha",
"sample_rate_hz": 8000,
"channels": 1,
"sample_width_bytes": 2,
"sample_count": 66036,
"duration_seconds": 8.2545,
"wav_bytes": 132150,
"wav_sha256": "8dbef003ff03b50e7c29dce5aad788b74500d6b2882c39388a7712cc5c52081d",
"pcm_sha256": "a6acdc60071259f46379dc98d4eaec583dbcb0f0b3c5ed60587e8f743a22a5dc",
"latency_seconds": 0.97609,
"engine": {
"name": "say",
"sha256": "2bf4b7a6950c8365f3b51c1345d82b40595f4581c9bd50700e1ea485851e022d"
},
"decoder": {
"name": "ffmpeg",
"sha256": "5a4899a648370eccc8e73af934a8724d7af9195018eed29125432c782548f00a"
},
"network_used": false,
"mock": false,
"probe_only": false,
"fallback_used": false,
"utterance_id": "tts_02",
"purpose": "confirmed_completion",
"retained_safe_fixture_path": "media/direct/agent_02.wav",
"text_sha256": "7021250895bc4dbad83d3cc06ebe120bcc15175baa9fa6cf5d760fd3b1682254",
"enqueued_on_webrtc_track": true,
"transmitted_samples": 66036,
"delivery_complete": true,
"delivered_pcm_sha256": "a6acdc60071259f46379dc98d4eaec583dbcb0f0b3c5ed60587e8f743a22a5dc"
}
]
},
"transport": {
"kind": "webrtc",
"pstn_used": false,
"e164_required": false,
"sdp_negotiated": true,
"offer_sha256": "1bc7eaf0f30f4e506782cfcf80ff1108b6a0a7500e1ee6bbfa3c7faf853c5373",
"answer_sha256": "7e7b70627489f0bdd3aa17890a32af0c498fc25c861b5d947d448d57265116b7",
"ice_connection_state": "connected",
"ice_connected_observed": true,
"data_channel_open": true,
"local_audio_track": true,
"remote_audio_track": true,
"rtc_stats": {
"inbound_packets": 1869,
"inbound_bytes": 188849,
"outbound_packets": 1869,
"outbound_bytes": 76286
},
"server_received_audio_frames": 1865,
"server_received_audio_samples": 1790400,
"server_received_audio_pcm_bytes": 1193568,
"server_sent_tts_samples": 118116
},
"privacy": {
"safe_synthetic_acceptance": true,
"private_audio_retained": false,
"private_transcripts_retained": false,
"safe_synthetic_media_retained": true
},
"event_counts": {
"client.audio.commit": 1,
"rtc.ready": 6,
"rtc.stats": 51
},
"transcript": [
{
"speaker": "agent",
"text": "Hello Jane Doe. Please state the exact appointment time and confirmation code, then explicitly confirm both.",
"source": "tts.webrtc_downlink",
"utterance_id": "tts_01",
"purpose": "missing_field_clarification"
},
{
"speaker": "user",
"text": "Confirmation called as Maple 7. I explicitly confirm Tuesday at 3pm and confirmation code Maple 7.",
"source": "asr.microphone_rtp",
"asr_receipt_index": 0
},
{
"speaker": "agent",
"text": "Confirmed appointment time: Tuesday at 3pm, Confirmation code: Maple 7. Explicit confirmation observed: true",
"source": "tts.webrtc_downlink",
"utterance_id": "tts_02",
"purpose": "confirmed_completion"
}
],
"explicit_confirmation_observed": true,
"completion": {
"result": "Local confirmation recorded.",
"appointment_time": "Tuesday at 3pm",
"confirmation_number": "Maple 7",
"notes": "No external organization was contacted or booking made.",
"saved_at_utc": "2026-07-31T11:23:45.149157+00:00",
"tool": "complete_task"
},
"errors": [],
"acceptance": {
"checks": {
"sdp_offer_answer_negotiated": true,
"ice_connected": true,
"data_channel_open": true,
"browser_microphone_track": true,
"server_downlink_audio_track": true,
"outbound_audio_rtp": true,
"inbound_audio_rtp": true,
"server_buffered_microphone_rtp": true,
"real_asr_consumed_microphone_audio": true,
"external_react_planner_or_fixed_direct_control": true,
"real_external_post_asr_dialogue": true,
"real_tts_assets_synthesized": true,
"tts_audio_transmitted_on_downlink": true,
"media_is_canonical_transcript_source": true,
"data_channel_is_control_and_caption_only": true,
"missing_fields_were_clarified_aloud": true,
"explicit_confirmation_observed": true,
"structured_completion_saved": true,
"no_mock_probe_or_fallback": true,
"privacy_boundary_preserved": true
},
"passed": true
},
"finish_reason": "automated_safe_acceptance"
}