ai-agent-book 精选快照(<2MB 代码与文档,来自 github.com/bojieli/ai-agent-book)
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

This commit is contained in:
2026-08-20 13:12:50 +00:00
commit b119135836
10275 changed files with 3284984 additions and 0 deletions
@@ -0,0 +1,544 @@
{
"schema_version": 2,
"experiment": "10-3",
"generated_at": "2026-07-31T19:29:06+0800",
"transport": "webrtc",
"synthetic_values_used": true,
"decision_provider": "Volcengine ARK",
"decision_model": "doubao-seed-1-6-250615",
"page_url": "http://127.0.0.1:50624/register",
"fields_discovered": 6,
"required_fields": [
"firstName",
"lastName",
"email",
"userNumber",
"gender",
"address"
],
"result": {
"filled": [
"firstName",
"lastName",
"email",
"userNumber",
"gender",
"address"
],
"submitted": true,
"errors": []
},
"timing_evidence": {
"question_times": {
"firstName": 26.873284,
"lastName": 36.099655,
"email": 47.377071,
"userNumber": 92.855214,
"gender": 112.645667,
"address": 136.483352
},
"collection_times": {
"firstName": 36.09918,
"lastName": 47.376214,
"email": 92.854189,
"userNumber": 112.64446,
"gender": 136.4828,
"address": 150.994505
},
"fill_times": {
"firstName": 36.140925,
"lastName": 47.400183,
"email": 92.884465,
"userNumber": 112.666944,
"gender": 136.509506,
"address": 151.016117
},
"overlap_checks": [
{
"field_being_filled": "firstName",
"next_question": "lastName",
"next_question_before_fill_completed": true,
"next_question_at": 36.099655,
"fill_completed_at": 36.140925
},
{
"field_being_filled": "lastName",
"next_question": "email",
"next_question_before_fill_completed": true,
"next_question_at": 47.377071,
"fill_completed_at": 47.400183
},
{
"field_being_filled": "email",
"next_question": "userNumber",
"next_question_before_fill_completed": true,
"next_question_at": 92.855214,
"fill_completed_at": 92.884465
},
{
"field_being_filled": "userNumber",
"next_question": "gender",
"next_question_before_fill_completed": true,
"next_question_at": 112.645667,
"fill_completed_at": 112.666944
},
{
"field_being_filled": "gender",
"next_question": "address",
"next_question_before_fill_completed": true,
"next_question_at": 136.483352,
"fill_completed_at": 136.509506
}
],
"expected_overlap_count": 5,
"independent_tasks": [
"phone-agent-react-loop",
"computer-agent-react-loop"
]
},
"webrtc_receipt": {
"transport": "webrtc",
"signaling_scope": "in-page localhost offer/answer; no external relay",
"offers": 1,
"answers": 1,
"ice_candidates": 6,
"media_recordings": 7,
"agent_connection_state": "connected",
"participant_connection_state": "connected",
"audio_rtp": [
{
"side": "agent",
"type": "inbound-rtp",
"packets": 603,
"bytes": 46939
},
{
"side": "agent",
"type": "outbound-rtp",
"packets": 2520,
"bytes": 186654
},
{
"side": "participant",
"type": "inbound-rtp",
"packets": 2520,
"bytes": 186654
},
{
"side": "participant",
"type": "outbound-rtp",
"packets": 603,
"bytes": 46939
}
],
"tts_prompt_count": 9,
"asr_count": 7,
"speech_provider": "local system TTS + local OpenAI Whisper",
"synthetic_participant": true,
"raw_audio_retained": false,
"transcripts_retained": false,
"status": "completed"
},
"provider_receipts": {
"decision": {
"provider": "Volcengine ARK",
"model": "doubao-seed-1-6-250615",
"response_id": "0217854971908780d00bd2433ad042948032361e92cd5cefed308",
"usage": {
"prompt_tokens": 934,
"completion_tokens": 515,
"total_tokens": 1449
}
},
"field_extractions": [
{
"operation": "field_value_extraction",
"provider": "Volcengine ARK",
"model": "doubao-seed-1-6-250615",
"response_id": "021785497223817a04a47ac73179d3e64c063d7b69771fc7c8bfa",
"usage": {
"prompt_tokens": 190,
"completion_tokens": 76,
"total_tokens": 266
},
"transcript_or_value_retained": false
},
{
"operation": "field_value_extraction",
"provider": "Volcengine ARK",
"model": "doubao-seed-1-6-250615",
"response_id": "021785497232231ea4a69cd411baf032d46b5f346221adc35d161",
"usage": {
"prompt_tokens": 191,
"completion_tokens": 152,
"total_tokens": 343
},
"transcript_or_value_retained": false
},
{
"operation": "field_value_extraction",
"provider": "Volcengine ARK",
"model": "doubao-seed-1-6-250615",
"response_id": "0217854972517657904abb9448890f9b94c80482cf61b2921cfdb",
"usage": {
"prompt_tokens": 201,
"completion_tokens": 126,
"total_tokens": 327
},
"transcript_or_value_retained": false
},
{
"operation": "field_value_extraction",
"provider": "Volcengine ARK",
"model": "doubao-seed-1-6-250615",
"response_id": "0217854972781593b2c90331db17702ff1ef9ef62383e604a6a8d",
"usage": {
"prompt_tokens": 198,
"completion_tokens": 168,
"total_tokens": 366
},
"transcript_or_value_retained": false
},
{
"operation": "field_value_extraction",
"provider": "Volcengine ARK",
"model": "doubao-seed-1-6-250615",
"response_id": "02178549729600444d62fd40b4606d08afe49bd4ea80f05614313",
"usage": {
"prompt_tokens": 207,
"completion_tokens": 220,
"total_tokens": 427
},
"transcript_or_value_retained": false
},
{
"operation": "field_value_extraction",
"provider": "Volcengine ARK",
"model": "doubao-seed-1-6-250615",
"response_id": "0217854973220839707f6c6d04f57819fc098a4ef7e1cdd8482fb",
"usage": {
"prompt_tokens": 203,
"completion_tokens": 156,
"total_tokens": 359
},
"transcript_or_value_retained": false
},
{
"operation": "field_value_extraction",
"provider": "Volcengine ARK",
"model": "doubao-seed-1-6-250615",
"response_id": "02178549733582814c42a60562dfb6c540ee32d577db5463fa61f",
"usage": {
"prompt_tokens": 196,
"completion_tokens": 178,
"total_tokens": 374
},
"transcript_or_value_retained": false
}
],
"speech": [
{
"operation": "tts",
"provider": "macOS say",
"model": "operating-system speech synthesizer",
"request_id": null,
"response_bytes": 398942,
"latency_seconds": 2.529,
"network_used": false
},
{
"operation": "tts",
"provider": "macOS say",
"model": "operating-system speech synthesizer",
"request_id": null,
"response_bytes": 67626,
"latency_seconds": 1.423,
"network_used": false
},
{
"operation": "synthetic_participant_tts",
"provider": "macOS say",
"model": "operating-system speech synthesizer",
"request_id": null,
"response_bytes": 25068,
"latency_seconds": 1.289,
"network_used": false
},
{
"operation": "asr",
"provider": "local OpenAI Whisper",
"model": "whisper-tiny",
"model_sha256": "65147644a518d12f04e32d6f3b26facc3f8dd46e5390956a9424a650c0ce22b9",
"runtime": {
"torch": "2.7.0",
"openai_whisper": "20231106"
},
"request_bytes": 13235,
"latency_seconds": 1.705,
"network_used": false,
"raw_audio_retained": false,
"transcript_retained": false
},
{
"operation": "tts",
"provider": "macOS say",
"model": "operating-system speech synthesizer",
"request_id": null,
"response_bytes": 35488,
"latency_seconds": 1.339,
"network_used": false
},
{
"operation": "synthetic_participant_tts",
"provider": "macOS say",
"model": "operating-system speech synthesizer",
"request_id": null,
"response_bytes": 21662,
"latency_seconds": 1.275,
"network_used": false
},
{
"operation": "asr",
"provider": "local OpenAI Whisper",
"model": "whisper-tiny",
"model_sha256": "65147644a518d12f04e32d6f3b26facc3f8dd46e5390956a9424a650c0ce22b9",
"runtime": {
"torch": "2.7.0",
"openai_whisper": "20231106"
},
"request_bytes": 11287,
"latency_seconds": 1.727,
"network_used": false,
"raw_audio_retained": false,
"transcript_retained": false
},
{
"operation": "tts",
"provider": "macOS say",
"model": "operating-system speech synthesizer",
"request_id": null,
"response_bytes": 330654,
"latency_seconds": 2.382,
"network_used": false
},
{
"operation": "synthetic_participant_tts",
"provider": "macOS say",
"model": "operating-system speech synthesizer",
"request_id": null,
"response_bytes": 66502,
"latency_seconds": 1.444,
"network_used": false
},
{
"operation": "asr",
"provider": "local OpenAI Whisper",
"model": "whisper-tiny",
"model_sha256": "65147644a518d12f04e32d6f3b26facc3f8dd46e5390956a9424a650c0ce22b9",
"runtime": {
"torch": "2.7.0",
"openai_whisper": "20231106"
},
"request_bytes": 27189,
"latency_seconds": 1.736,
"network_used": false,
"raw_audio_retained": false,
"transcript_retained": false
},
{
"operation": "tts",
"provider": "macOS say",
"model": "operating-system speech synthesizer",
"request_id": null,
"response_bytes": 666252,
"latency_seconds": 3.27,
"network_used": false
},
{
"operation": "synthetic_participant_tts",
"provider": "macOS say",
"model": "operating-system speech synthesizer",
"request_id": null,
"response_bytes": 73564,
"latency_seconds": 1.533,
"network_used": false
},
{
"operation": "asr",
"provider": "local OpenAI Whisper",
"model": "whisper-tiny",
"model_sha256": "65147644a518d12f04e32d6f3b26facc3f8dd46e5390956a9424a650c0ce22b9",
"runtime": {
"torch": "2.7.0",
"openai_whisper": "20231106"
},
"request_bytes": 28819,
"latency_seconds": 1.816,
"network_used": false,
"raw_audio_retained": false,
"transcript_retained": false
},
{
"operation": "tts",
"provider": "macOS say",
"model": "operating-system speech synthesizer",
"request_id": null,
"response_bytes": 86570,
"latency_seconds": 1.567,
"network_used": false
},
{
"operation": "synthetic_participant_tts",
"provider": "macOS say",
"model": "operating-system speech synthesizer",
"request_id": null,
"response_bytes": 252282,
"latency_seconds": 2.144,
"network_used": false
},
{
"operation": "asr",
"provider": "local OpenAI Whisper",
"model": "whisper-tiny",
"model_sha256": "65147644a518d12f04e32d6f3b26facc3f8dd46e5390956a9424a650c0ce22b9",
"runtime": {
"torch": "2.7.0",
"openai_whisper": "20231106"
},
"request_bytes": 90189,
"latency_seconds": 1.844,
"network_used": false,
"raw_audio_retained": false,
"transcript_retained": false
},
{
"operation": "tts",
"provider": "macOS say",
"model": "operating-system speech synthesizer",
"request_id": null,
"response_bytes": 568444,
"latency_seconds": 3.272,
"network_used": false
},
{
"operation": "synthetic_participant_tts",
"provider": "macOS say",
"model": "operating-system speech synthesizer",
"request_id": null,
"response_bytes": 31108,
"latency_seconds": 1.335,
"network_used": false
},
{
"operation": "asr",
"provider": "local OpenAI Whisper",
"model": "whisper-tiny",
"model_sha256": "65147644a518d12f04e32d6f3b26facc3f8dd46e5390956a9424a650c0ce22b9",
"runtime": {
"torch": "2.7.0",
"openai_whisper": "20231106"
},
"request_bytes": 15183,
"latency_seconds": 1.76,
"network_used": false,
"raw_audio_retained": false,
"transcript_retained": false
},
{
"operation": "tts",
"provider": "macOS say",
"model": "operating-system speech synthesizer",
"request_id": null,
"response_bytes": 102124,
"latency_seconds": 1.544,
"network_used": false
},
{
"operation": "synthetic_participant_tts",
"provider": "macOS say",
"model": "operating-system speech synthesizer",
"request_id": null,
"response_bytes": 89304,
"latency_seconds": 1.512,
"network_used": false
},
{
"operation": "asr",
"provider": "local OpenAI Whisper",
"model": "whisper-tiny",
"model_sha256": "65147644a518d12f04e32d6f3b26facc3f8dd46e5390956a9424a650c0ce22b9",
"runtime": {
"torch": "2.7.0",
"openai_whisper": "20231106"
},
"request_bytes": 34981,
"latency_seconds": 1.776,
"network_used": false,
"raw_audio_retained": false,
"transcript_retained": false
},
{
"operation": "tts",
"provider": "macOS say",
"model": "operating-system speech synthesizer",
"request_id": null,
"response_bytes": 116628,
"latency_seconds": 1.588,
"network_used": false
}
]
},
"gates": {
"real_playwright_page_and_fill": {
"status": "pass"
},
"autonomous_real_llm_tool_call": {
"status": "pass"
},
"ask_one_fill_one_concurrency": {
"status": "pass"
},
"validation_feedback_and_reask": {
"status": "pass"
},
"privacy_redaction_and_ephemeral_audio": {
"status": "pass",
"reason": null
},
"browser_resource_cleanup": {
"status": "pass"
},
"real_form_submission": {
"status": "pass",
"reason": null
},
"real_webrtc_session": {
"status": "pass",
"reason": null
},
"bidirectional_webrtc_audio_and_real_asr_tts": {
"status": "pass",
"reason": null
}
},
"overall_status": "pass",
"safe_local_submission_receipt": {
"endpoint_scope": "localhost-only",
"submission_count": 1,
"submissions": [
{
"field_names": [
"address",
"email",
"firstName",
"gender",
"lastName",
"userNumber"
],
"field_count": 6,
"all_values_redacted": true
}
],
"raw_values_retained": false
}
}
@@ -0,0 +1,152 @@
{
"page_url": "http://127.0.0.1:50624/register",
"page_title": "Safe local registration",
"known_fields": [],
"discovered_fields": [
{
"name": "firstName",
"label": "First name",
"input_type": "text",
"required": true,
"selector": "#firstName",
"format_hint": "",
"pattern": "",
"options": []
},
{
"name": "lastName",
"label": "Last name",
"input_type": "text",
"required": true,
"selector": "#lastName",
"format_hint": "",
"pattern": "",
"options": []
},
{
"name": "email",
"label": "Email address",
"input_type": "email",
"required": true,
"selector": "#email",
"format_hint": "name@example.com",
"pattern": "",
"options": []
},
{
"name": "userNumber",
"label": "Phone number",
"input_type": "tel",
"required": true,
"selector": "#userNumber",
"format_hint": "10 digits",
"pattern": "[0-9]{10}",
"options": []
},
{
"name": "gender",
"label": "Gender",
"input_type": "select",
"required": true,
"selector": "#gender",
"format_hint": "",
"pattern": "",
"options": [
"Choose one",
"Female",
"Male",
"Non-binary"
]
},
{
"name": "address",
"label": "Mailing address",
"input_type": "textarea",
"required": true,
"selector": "#address",
"format_hint": "",
"pattern": "",
"options": []
}
],
"tool_called": "initiate_phone_call_agent",
"purpose": "Complete registration by collecting required user information",
"required_info": [
{
"name": "firstName",
"label": "First name",
"input_type": "text",
"required": true,
"selector": "#firstName",
"format_hint": "",
"pattern": "",
"options": []
},
{
"name": "lastName",
"label": "Last name",
"input_type": "text",
"required": true,
"selector": "#lastName",
"format_hint": "",
"pattern": "",
"options": []
},
{
"name": "email",
"label": "Email address",
"input_type": "email",
"required": true,
"selector": "#email",
"format_hint": "name@example.com",
"pattern": "",
"options": []
},
{
"name": "userNumber",
"label": "Phone number",
"input_type": "tel",
"required": true,
"selector": "#userNumber",
"format_hint": "10 digits",
"pattern": "[0-9]{10}",
"options": []
},
{
"name": "gender",
"label": "Gender",
"input_type": "select",
"required": true,
"selector": "#gender",
"format_hint": "",
"pattern": "",
"options": [
"Choose one",
"Female",
"Male",
"Non-binary"
]
},
{
"name": "address",
"label": "Mailing address",
"input_type": "textarea",
"required": true,
"selector": "#address",
"format_hint": "",
"pattern": "",
"options": []
}
],
"rationale_summary": "模型通过工具调用决定启动 Phone Agent",
"model": "doubao-seed-1-6-250615",
"monotonic_seconds": 14.374983,
"provider": "Volcengine ARK",
"provider_response_id": "0217854971908780d00bd2433ad042948032361e92cd5cefed308",
"provider_usage": {
"prompt_tokens": 934,
"completion_tokens": 515,
"total_tokens": 1449
},
"wall_time": "2026-07-31T11:26:44.053087+00:00"
}
@@ -0,0 +1,17 @@
{
"schema_version": 1,
"experiment": "10-3",
"page_url": "http://127.0.0.1:50624/register",
"form_html": "<!doctype html>\n<html lang=\"en\"><meta charset=\"utf-8\"><title>Safe local registration</title>\n<h1>Conference registration</h1>\n<form method=\"post\" action=\"/register\">\n <label for=\"firstName\">First name</label>\n <input id=\"firstName\" name=\"firstName\" required>\n <label for=\"lastName\">Last name</label>\n <input id=\"lastName\" name=\"lastName\" required>\n <label for=\"email\">Email address</label>\n <input id=\"email\" name=\"email\" type=\"email\" required placeholder=\"name@example.com\">\n <label for=\"userNumber\">Phone number</label>\n <input id=\"userNumber\" name=\"userNumber\" type=\"tel\" required pattern=\"[0-9]{10}\" title=\"10 digits\">\n <label for=\"gender\">Gender</label>\n <select id=\"gender\" name=\"gender\" required>\n <option value=\"\">Choose one</option><option>Female</option><option>Male</option><option>Non-binary</option>\n </select>\n <label for=\"address\">Mailing address</label>\n <textarea id=\"address\" name=\"address\" required></textarea>\n <button type=\"submit\">Register</button>\n</form></html>",
"form_html_sha256": "cb8f0ca7d7260ab8f32e306e7d5abbfc06387d9a19976a1cfffdcece391d0d3b",
"field_answer_counts": {
"firstName": 1,
"lastName": 1,
"email": 2,
"userNumber": 1,
"gender": 1,
"address": 1
},
"participant": "safe synthesized voice over WebRTC RTP",
"participant_values_retained": false
}
@@ -0,0 +1,19 @@
{
"endpoint_scope": "localhost-only",
"submission_count": 1,
"submissions": [
{
"field_names": [
"address",
"email",
"firstName",
"gender",
"lastName",
"userNumber"
],
"field_count": 6,
"all_values_redacted": true
}
],
"raw_values_retained": false
}
@@ -0,0 +1,50 @@
{
"schema_version": 2,
"experiment": "10-3",
"run_kind": "full_safe_webrtc_acceptance",
"generated_at": "2026-07-31T19:29:06+0800",
"git_head_at_run": "f66e2fbdbe267f75bf28470ddc59fc1b7beb5c4c",
"command": "python run_acceptance.py --run-dir <validation-run-directory>",
"providers": {
"decision_and_extraction": "Volcengine ARK",
"speech": "local system TTS + local OpenAI Whisper"
},
"privacy": {
"phone_number_required": false,
"pstn_provider_required": false,
"participant": "safe synthesized voice",
"raw_audio_retained": false,
"transcripts_or_values_retained": false,
"form_values_retained": false
},
"source_sha256": {
"browser.py": "66768575e96e76c745c9d470bbad24c98e47a8a321e9e908cc6ba67df795fd97",
"bus.py": "d5ae473831426b4cd5c9f746f8f9c24f7e1f08f3d61173430d5bb582f92af1de",
"decision.py": "64e68c5a7c77d9404fcb451fbd8325f29d0b4ab58fedcfb0c4700653ee53c913",
"demo.py": "d491b0a8f5de02fa7da44f382005a108d9f252b864b57fc189ff0b6608ddd826",
"models.py": "1f28ed0b6edfbcde68146ba68f183cc0a3a9ce6aa64a3220026453628eb97f1d",
"orchestration.py": "0e2e3eadcd5158e9ac4faea7bb5179f53f56ca84ed7956d31f023b397619e58e",
"run_acceptance.py": "867b4b9b5f7ca6201517fbe4b2165d2946e322fe1cd8bbe0a2bd6a08cf22be0b",
"validate_acceptance.py": "4a89fc84407fd4813459872f973411fcc2beb871ba1fe7553e22d5e8ce2dc85f",
"voice.py": "5fb46942a38fa4a8aa338e8360dfb459a3b0b629ee07579f127cea6dd962d490",
"webrtc_channel.py": "47835d12ba988f017647bf4e527696ef69ab867f7bd730f30904b5ed9369040f"
},
"input_sha256": {
"experiment_input.json": "49df4da2dcf86a24c31a8cb447e1c94b98bde908cdb95ce902a319ddc768b51d"
},
"artifact_sha256": {
"acceptance_report.json": "78adfb166ecf10736dcf69afdaacca52356f266d2b95e83a1a7c364106222b38",
"decision.json": "69ac3b412a0e5921f50b1b31c6e7678f71a77a7ed8275b0f773602fe8ab99baa",
"message_timeline.json": "3ad8d949458e1be0f8c632624c1fc7582621c624a45a2d72f4c2d1cc88852ca8",
"form_submission_receipt.json": "d073943e7ebbe29f3945ac3597f5237a8e6258f842f872b0a926abe547d63f66",
"raw_decision_request.json": "893317a2f60dc41a0966af41355d4ccad1276f0c289aba7b5df1889582a76f23",
"raw_decision_response.json": "19d8efd662750b29129fe13dd69c6b64accd1ddf06d8a2ecdab50edb3d775e94",
"validation_report.json": "c9a02501d00f790f88c7d43ad699cdcc7a6aac72dd6dd5d1d695d4a092925724"
},
"acceptance": {
"overall_status": "pass",
"gate_count": 9,
"passed_gate_count": 9
},
"retained_evidence_validation": "pass"
}
@@ -0,0 +1,303 @@
[
{
"sender": "phone_agent",
"recipient": "computer_agent",
"type": "call_started",
"payload": {
"purpose": "Complete registration by collecting required user information",
"fields": [
"firstName",
"lastName",
"email",
"userNumber",
"gender",
"address"
]
},
"sequence": 1,
"monotonic_seconds": 15.983982,
"wall_time": "2026-07-31T19:26:45+0800"
},
{
"sender": "phone_agent",
"recipient": "computer_agent",
"type": "question_asked",
"payload": {
"field": "firstName",
"attempt": 1
},
"sequence": 2,
"monotonic_seconds": 26.873284,
"wall_time": "2026-07-31T19:26:56+0800"
},
{
"sender": "phone_agent",
"recipient": "computer_agent",
"type": "info_collected",
"payload": {
"field": "firstName",
"value": "<redacted>",
"attempt": 1
},
"sequence": 3,
"monotonic_seconds": 36.09918,
"wall_time": "2026-07-31T19:27:05+0800"
},
{
"sender": "phone_agent",
"recipient": "computer_agent",
"type": "question_asked",
"payload": {
"field": "lastName",
"attempt": 1
},
"sequence": 4,
"monotonic_seconds": 36.099655,
"wall_time": "2026-07-31T19:27:05+0800"
},
{
"sender": "computer_agent",
"recipient": "phone_agent",
"type": "field_filled",
"payload": {
"field": "firstName"
},
"sequence": 5,
"monotonic_seconds": 36.140925,
"wall_time": "2026-07-31T19:27:05+0800"
},
{
"sender": "phone_agent",
"recipient": "computer_agent",
"type": "info_collected",
"payload": {
"field": "lastName",
"value": "<redacted>",
"attempt": 1
},
"sequence": 6,
"monotonic_seconds": 47.376214,
"wall_time": "2026-07-31T19:27:17+0800"
},
{
"sender": "phone_agent",
"recipient": "computer_agent",
"type": "question_asked",
"payload": {
"field": "email",
"attempt": 1
},
"sequence": 7,
"monotonic_seconds": 47.377071,
"wall_time": "2026-07-31T19:27:17+0800"
},
{
"sender": "computer_agent",
"recipient": "phone_agent",
"type": "field_filled",
"payload": {
"field": "lastName"
},
"sequence": 8,
"monotonic_seconds": 47.400183,
"wall_time": "2026-07-31T19:27:17+0800"
},
{
"sender": "phone_agent",
"recipient": "computer_agent",
"type": "format_invalid",
"payload": {
"field": "email",
"attempt": 1,
"reason": "该项为必填项,不能留空"
},
"sequence": 9,
"monotonic_seconds": 65.561405,
"wall_time": "2026-07-31T19:27:35+0800"
},
{
"sender": "phone_agent",
"recipient": "computer_agent",
"type": "question_asked",
"payload": {
"field": "email",
"attempt": 2
},
"sequence": 10,
"monotonic_seconds": 65.562376,
"wall_time": "2026-07-31T19:27:35+0800"
},
{
"sender": "phone_agent",
"recipient": "computer_agent",
"type": "info_collected",
"payload": {
"field": "email",
"value": "<redacted>",
"attempt": 2
},
"sequence": 11,
"monotonic_seconds": 92.854189,
"wall_time": "2026-07-31T19:28:02+0800"
},
{
"sender": "phone_agent",
"recipient": "computer_agent",
"type": "question_asked",
"payload": {
"field": "userNumber",
"attempt": 1
},
"sequence": 12,
"monotonic_seconds": 92.855214,
"wall_time": "2026-07-31T19:28:02+0800"
},
{
"sender": "computer_agent",
"recipient": "phone_agent",
"type": "field_filled",
"payload": {
"field": "email"
},
"sequence": 13,
"monotonic_seconds": 92.884465,
"wall_time": "2026-07-31T19:28:02+0800"
},
{
"sender": "phone_agent",
"recipient": "computer_agent",
"type": "info_collected",
"payload": {
"field": "userNumber",
"value": "<redacted>",
"attempt": 1
},
"sequence": 14,
"monotonic_seconds": 112.64446,
"wall_time": "2026-07-31T19:28:22+0800"
},
{
"sender": "phone_agent",
"recipient": "computer_agent",
"type": "question_asked",
"payload": {
"field": "gender",
"attempt": 1
},
"sequence": 15,
"monotonic_seconds": 112.645667,
"wall_time": "2026-07-31T19:28:22+0800"
},
{
"sender": "computer_agent",
"recipient": "phone_agent",
"type": "field_filled",
"payload": {
"field": "userNumber"
},
"sequence": 16,
"monotonic_seconds": 112.666944,
"wall_time": "2026-07-31T19:28:22+0800"
},
{
"sender": "phone_agent",
"recipient": "computer_agent",
"type": "info_collected",
"payload": {
"field": "gender",
"value": "<redacted>",
"attempt": 1
},
"sequence": 17,
"monotonic_seconds": 136.4828,
"wall_time": "2026-07-31T19:28:46+0800"
},
{
"sender": "phone_agent",
"recipient": "computer_agent",
"type": "question_asked",
"payload": {
"field": "address",
"attempt": 1
},
"sequence": 18,
"monotonic_seconds": 136.483352,
"wall_time": "2026-07-31T19:28:46+0800"
},
{
"sender": "computer_agent",
"recipient": "phone_agent",
"type": "field_filled",
"payload": {
"field": "gender"
},
"sequence": 19,
"monotonic_seconds": 136.509506,
"wall_time": "2026-07-31T19:28:46+0800"
},
{
"sender": "phone_agent",
"recipient": "computer_agent",
"type": "info_collected",
"payload": {
"field": "address",
"value": "<redacted>",
"attempt": 1
},
"sequence": 20,
"monotonic_seconds": 150.994505,
"wall_time": "2026-07-31T19:29:00+0800"
},
{
"sender": "phone_agent",
"recipient": "computer_agent",
"type": "task_completed",
"payload": {},
"sequence": 21,
"monotonic_seconds": 150.995086,
"wall_time": "2026-07-31T19:29:00+0800"
},
{
"sender": "computer_agent",
"recipient": "phone_agent",
"type": "field_filled",
"payload": {
"field": "address"
},
"sequence": 22,
"monotonic_seconds": 151.016117,
"wall_time": "2026-07-31T19:29:00+0800"
},
{
"sender": "computer_agent",
"recipient": "phone_agent",
"type": "form_ready",
"payload": {
"errors": 0,
"submitted": true
},
"sequence": 23,
"monotonic_seconds": 152.049317,
"wall_time": "2026-07-31T19:29:01+0800"
},
{
"sender": "computer_agent",
"recipient": "manager",
"type": "registration_finished",
"payload": {
"filled": [
"firstName",
"lastName",
"email",
"userNumber",
"gender",
"address"
],
"submitted": true,
"errors": []
},
"sequence": 24,
"monotonic_seconds": 152.050405,
"wall_time": "2026-07-31T19:29:01+0800"
}
]
@@ -0,0 +1,65 @@
{
"schema_version": 1,
"experiment": "10-3",
"provider": "Volcengine ARK",
"endpoint": "https://ark.cn-beijing.volces.com/api/v3",
"credential_fields_retained": [],
"request": {
"model": "doubao-seed-1-6-250615",
"messages": [
{
"role": "system",
"content": "You are a Computer Use Agent completing a registration request. Inspect the real page observation and the information already in context. When you need to collect a large amount of structured information and it can be done step by step through conversation, consider calling the Phone Agent tool. Do not call it for one or two simple missing values. Never invent user data. Give only a short decision summary; do not reveal private chain-of-thought."
},
{
"role": "user",
"content": "{\"request\": \"帮我在这个网站上完成注册\", \"page_url\": \"http://127.0.0.1:50624/register\", \"page_title\": \"Safe local registration\", \"form_fields\": [{\"name\": \"firstName\", \"label\": \"First name\", \"type\": \"text\", \"required\": true, \"format_hint\": \"\", \"options\": []}, {\"name\": \"lastName\", \"label\": \"Last name\", \"type\": \"text\", \"required\": true, \"format_hint\": \"\", \"options\": []}, {\"name\": \"email\", \"label\": \"Email address\", \"type\": \"email\", \"required\": true, \"format_hint\": \"name@example.com\", \"options\": []}, {\"name\": \"userNumber\", \"label\": \"Phone number\", \"type\": \"tel\", \"required\": true, \"format_hint\": \"10 digits\", \"options\": []}, {\"name\": \"gender\", \"label\": \"Gender\", \"type\": \"select\", \"required\": true, \"format_hint\": \"\", \"options\": [\"Choose one\", \"Female\", \"Male\", \"Non-binary\"]}, {\"name\": \"address\", \"label\": \"Mailing address\", \"type\": \"textarea\", \"required\": true, \"format_hint\": \"\", \"options\": []}], \"known_context_fields\": []}"
}
],
"tools": [
{
"type": "function",
"function": {
"name": "initiate_phone_call_agent",
"description": "Start a live Phone Agent when a user must provide many missing pieces of structured information conversationally. The Phone Agent asks, confirms, validates, and streams each collected field back to the browser Agent.",
"parameters": {
"type": "object",
"properties": {
"purpose": {
"type": "string"
},
"required_info": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"label": {
"type": "string"
},
"format_hint": {
"type": "string"
}
},
"required": [
"name",
"label"
],
"additionalProperties": false
}
}
},
"required": [
"purpose",
"required_info"
],
"additionalProperties": false
}
}
}
],
"tool_choice": "auto"
}
}
@@ -0,0 +1,57 @@
{
"schema_version": 1,
"experiment": "10-3",
"provider": "Volcengine ARK",
"latency_seconds": 13.610751,
"response": {
"id": "0217854971908780d00bd2433ad042948032361e92cd5cefed308",
"choices": [
{
"finish_reason": "tool_calls",
"index": 0,
"logprobs": null,
"message": {
"content": "",
"refusal": null,
"role": "assistant",
"annotations": null,
"audio": null,
"function_call": null,
"tool_calls": [
{
"id": "call_huhht07ujt63g3g48jzg0nkz",
"function": {
"arguments": "{\"purpose\":\"Complete registration by collecting required user information\",\"required_info\":[{\"name\":\"firstName\",\"label\":\"First name\"},{\"name\":\"lastName\",\"label\":\"Last name\"},{\"name\":\"email\",\"label\":\"Email address\",\"format_hint\":\"name@example.com\"},{\"name\":\"userNumber\",\"label\":\"Phone number\",\"format_hint\":\"10 digits\"},{\"name\":\"gender\",\"label\":\"Gender\"},{\"name\":\"address\",\"label\":\"Mailing address\"}]}",
"name": "initiate_phone_call_agent"
},
"type": "function"
}
],
"reasoning_content": "我现在需要处理用户的注册请求。用户希望在网站上完成注册,提供的页面信息显示有多个必填字段:firstName、lastName、email、userNumber、gender和address。所有这些字段都是必填的,而且用户的已知上下文字段是空的,说明目前没有收集到任何信息。\n\n根据系统提示,当需要收集大量结构化信息且可以通过对话逐步完成时,应该考虑调用Phone Agent工具。这里有六个必填字段,属于大量信息,所以符合调用Phone Agent的条件。不需要为一两个简单的缺失值调用,但这里显然超过了这个数量。\n\n接下来,我需要构造调用Phone Agent的参数。purpose应该是注册所需的信息收集,required_info需要列出所有必填字段,每个字段包括name、label,可能还有format_hint。检查每个字段:\n\n- firstNamename是firstNamelabel是First nameformat_hint为空。\n- lastName:类似,label是Last name。\n- emaillabel是Email addressformat_hint是name@example.com。\n- userNumberlabel是Phone numberformat_hint是10 digits。\n- genderlabel是Genderformat_hint为空,选项有几个,但Phone Agent可能需要确认选项。\n- addresslabel是Mailing addressformat_hint为空。\n\n确保每个required_info项都包含name和labelformat_hint可选。然后按照工具要求的格式构造JSON数组,使用正确的名称和参数。不需要并行调用,因为只需要启动一个Phone Agent来处理所有字段的收集。\n\n最后,检查是否符合格式要求,使用<|FunctionCallBegin|>和<|FunctionCallEnd|>包裹,确保JSON结构正确,没有语法错误。确认所有必填字段都被包含,没有遗漏。这样就能正确调用Phone Agent来帮助用户逐步完成注册信息的收集。"
}
}
],
"created": 1785497204,
"model": "doubao-seed-1-6-250615",
"object": "chat.completion",
"moderation": null,
"service_tier": "default",
"system_fingerprint": null,
"usage": {
"completion_tokens": 515,
"prompt_tokens": 934,
"total_tokens": 1449,
"completion_tokens_details": {
"accepted_prediction_tokens": null,
"audio_tokens": null,
"reasoning_tokens": 394,
"rejected_prediction_tokens": null
},
"prompt_tokens_details": {
"audio_tokens": null,
"cache_write_tokens": null,
"cached_tokens": 0
}
}
}
}
@@ -0,0 +1,15 @@
{
"schema_version": 1,
"experiment": "10-3",
"status": "pass",
"checks": {
"source_hashes": "pass",
"artifact_hashes": "pass",
"input_hashes": "pass",
"raw_ark_request_tool_choice_auto": "pass",
"raw_ark_response_metadata": "pass",
"raw_arguments_normalize_to_decision": "pass",
"participant_privacy": "pass",
"acceptance_gates": "pass"
}
}