{"id":18076,"date":"2026-08-25T02:23:09","date_gmt":"2026-08-25T02:23:09","guid":{"rendered":"https:\/\/techtrendfeed.com\/?p=18076"},"modified":"2026-08-25T02:23:10","modified_gmt":"2026-08-25T02:23:10","slug":"easy-methods-to-consider-reside-voice-brokers-in-adk","status":"publish","type":"post","link":"https:\/\/techtrendfeed.com\/?p=18076","title":{"rendered":"Easy methods to Consider Reside &#038; Voice Brokers in ADK"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<div>\n<p><img decoding=\"async\" class=\"banner-image\" src=\"https:\/\/storage.googleapis.com\/gweb-developer-goog-blog-assets\/images\/Evaluating_Live_Agent_in_ADK_.original.png\" alt=\"Evaluating Live Agent in ADK\"\/>  <\/p>\n<div class=\"inner-block-content rich-content\">\n<p data-block-key=\"n8ky5\">Getting a dwell agent into manufacturing is about greater than  demo. It has to take the suitable actions throughout a spoken dialog, flip after flip, the place timing and restoration matter as a lot as content material. Habits that sounded good yesterday can quietly change on the subsequent immediate tweak or mannequin iteration. Instruments cease firing. Context slips between turns. Interjections go ignored. Transport with confidence takes repeatable proof that the agent holds up throughout the conversations actual customers will even have.<\/p>\n<p data-block-key=\"brot2\">That\u2019s why we\u2019re bringing native <a rel=\"nofollow\" target=\"_blank\" href=\"http:\/\/adk.dev\/live\">dwell analysis to ADK<\/a>. Now you can drive a dwell, voice-based agent with a simulated consumer that speaks its turns as audio, rating the spoken replies, and do all of it inside the identical eval loop you already run for textual content brokers. This submit takes a dwell agent from &#8220;it really works in a demo&#8221; to &#8220;it is measured and trusted&#8221; with out leaving ADK.<\/p>\n<h2 data-block-key=\"oh23v\" id=\"evaluate-your-first-live-agent\"><b>Consider your first dwell agent<\/b><\/h2>\n<p data-block-key=\"9dd01\">To see this in motion, we\u2019ll construct an entire dwell analysis loop: creating the agent, authoring an eval case, operating the eval, and inspecting the recorded outcomes.<\/p>\n<h3 data-block-key=\"nna1u\" id=\"step-1:-the-agent-under-test\"><b>Step 1: The agent beneath check<\/b><\/h3>\n<p data-block-key=\"4jlk4\">Our instance makes use of a graph-based workflow: three single-purpose dwell brokers sequenced collectively, with every stage operating on <code>gemini-live-2.5-flash-native-audio<\/code>.<\/p>\n<\/div>\n<div class=\"inner-block-content code-block line-numbers\">\n<pre><code class=\"language-python\">from google.adk.brokers.llm_agent import Agent&#13;\nfrom google.adk.instruments.tool_context import ToolContext&#13;\nfrom google.adk.workflow import START, Workflow&#13;\nfrom pydantic import BaseModel, Subject&#13;\n&#13;\n&#13;\nLIVE_MODEL = \"gemini-live-2.5-flash-native-audio\"&#13;\n&#13;\n&#13;\n&#13;\n&#13;\ndef validate_date_of_birth(dob: str, tool_context: ToolContext) -&gt; dict:&#13;\n  \"\"\"Validate a confirmed date of start towards data (mocked).\"\"\"&#13;\n  match = dob == \"1985-07-12\"&#13;\n  tool_context.state[\"dob_verified\"] = match&#13;\n  return {\"match\": match}&#13;\n&#13;\n&#13;\n&#13;\n&#13;\ngreeter_agent = Agent(&#13;\n    mannequin=LIVE_MODEL,&#13;\n    title=\"greeter_agent\",&#13;\n    mode=\"job\",&#13;\n    instruction=\"You're Sam, a pleasant care-team assistant. Greet the caller \"&#13;\n    \"and ensure you are talking with John Doe earlier than sharing the rest. \"&#13;\n    \"Ask one query per flip, then full your job with the confirmed title.\",&#13;\n)&#13;\n&#13;\n&#13;\ndob_verifier_agent = Agent(&#13;\n    mannequin=LIVE_MODEL,&#13;\n    title=\"dob_verifier_agent\",&#13;\n    mode=\"job\",&#13;\n    instruments=[validate_date_of_birth],&#13;\n    instruction=\"Ask for the caller's date of start, learn it again to substantiate, \"&#13;\n    \"then name validate_date_of_birth in YYYY-MM-DD format. Full your job \"&#13;\n    \"with 'verified' or 'unverified'.\",&#13;\n)&#13;\n&#13;\n&#13;\ngoals_agent = Agent(&#13;\n    mannequin=LIVE_MODEL,&#13;\n    title=\"goals_agent\",&#13;\n    mode=\"job\",&#13;\n    instruction=\"Identification is verified. Proactively share the upcoming \"&#13;\n    \"appointment on Tuesday, June sixteenth at 3 PM with Dr. Instance, reply any \"&#13;\n    'questions, then wrap up warmly and finish with \"Goodbye.\"',&#13;\n)&#13;\n&#13;\n&#13;\nroot_agent = Workflow(&#13;\n    title=\"live_workflow\",&#13;\n    edges=[&#13;\n        (START, greeter_agent),&#13;\n        (greeter_agent, dob_verifier_agent),&#13;\n        (dob_verifier_agent, goals_agent),&#13;\n    ],&#13;\n)<\/code><\/pre>\n<p>\n        Python\n    <\/p>\n<\/div>\n<div class=\"inner-block-content rich-content\">\n<p data-block-key=\"n8ky5\">Every stage is an strange dwell agent, with the workflow merely orchestrating them and carrying output from one stage to the subsequent. This stream walks by way of three steps with a software name within the center, so it generates a wealthy multi-turn trajectory price grading. As management strikes between brokers, the consumer by no means notices a handoff. The audio stream stays open throughout your complete interplay, and ADK carries the gathered session state and dialog historical past ahead so every agent picks up in context fairly than beginning chilly.<\/p>\n<h3 data-block-key=\"hn7rq\" id=\"step-2:-author-the-eval-set\"><b>Step 2: Creator the eval set<\/b><\/h3>\n<p data-block-key=\"7ovfc\">An eval set is a JSON file containing your check instances. Take a look at instances are decoupled from how they run, so you&#8217;ll be able to combine two distinct types: dialog eventualities and glued conversations.<\/p>\n<p data-block-key=\"egac5\">The primary is a <b>dialog state of affairs<\/b>: you describe a objective and a persona, and the consumer simulator improvises the turns.<\/p>\n<\/div>\n<div class=\"inner-block-content code-block line-numbers\">\n<pre><code class=\"language-json\">{&#13;\n  \"eval_id\": \"example_scenario_case\",&#13;\n  \"conversation_scenario\": {&#13;\n    \"starting_prompt\": \"Hiya?\",&#13;\n    \"conversation_plan\": \"You're John Doe. Affirm your title when greeted. When requested to your date of start, give July twelfth, 1985, and ensure it when learn again. Take heed to the appointment particulars, ask what you must convey to the go to, then say you haven't any different questions and let the decision wrap up.\",&#13;\n    \"user_persona\": \"NOVICE\"&#13;\n  },&#13;\n  \"session_input\": {&#13;\n    \"app_name\": \"live_workflow\",&#13;\n    \"user_id\": \"test_user_id\",&#13;\n    \"state\": {}&#13;\n  }&#13;\n}<\/code><\/pre>\n<p>\n        JSON\n    <\/p>\n<\/div>\n<div class=\"inner-block-content rich-content\">\n<p data-block-key=\"n8ky5\">The <code>user_persona<\/code> shapes how the simulated consumer communicates. ADK ships with just a few built-in personas, and <code>NOVICE<\/code> tells the simulator to share solely high-level objectives and look ahead to the agent to ask for specifics, testing how effectively the agent drives the dialog. Personas are prompt-driven fairly than hardcoded, so you&#8217;ll be able to prolong the set with your individual personas. The simulator ends a state of affairs by itself as soon as the <code>conversation_plan<\/code> is happy, so that you script the objective and let it resolve when the decision is completed. As a safeguard towards run-off conversations, <code>max_allowed_invocations<\/code> caps the full variety of turns, giving each dynamic case a predictable higher sure.<\/p>\n<p data-block-key=\"ehbde\">You too can writer a <b>mounted dialog<\/b> and script the consumer&#8217;s turns verbatim. A static case is simply as legitimate an enter to a dwell run as a simulated consumer.<\/p>\n<\/div>\n<div class=\"inner-block-content code-block line-numbers\">\n<pre><code class=\"language-json\">{&#13;\n  \"eval_id\": \"example_fixed_case\",&#13;\n  \"dialog\": [&#13;\n    {&#13;\n      \"user_content\": {&#13;\n        \"role\": \"user\",&#13;\n        \"parts\": [{ \"text\": \"Hi, yes, this is John Doe.\" }]&#13;\n      }&#13;\n    },&#13;\n    {&#13;\n      \"user_content\": {&#13;\n        \"position\": \"consumer\",&#13;\n        \"components\": [{ \"text\": \"My date of birth is July 12th, 1985.\" }]&#13;\n      }&#13;\n    }&#13;\n  ]&#13;\n}<\/code><\/pre>\n<p>\n        JSON\n    <\/p>\n<\/div>\n<div class=\"inner-block-content rich-content\">\n<h3 data-block-key=\"9j94z\" id=\"step-3:-turn-on-live-and-audio\"><b>Step 3: Activate dwell and audio<\/b><\/h3>\n<p data-block-key=\"5spkg\">In your <code>test_config.json<\/code>, add a <code>live_model_config<\/code> and level ADK on the <code>llm_audio<\/code> consumer simulator. Every consumer flip from the instances above is synthesized to speech with the <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.cloud.google.com\/text-to-speech\/docs\/gemini-tts\">Gemini TTS<\/a> voice you decide and streamed to the dwell agent.<\/p>\n<\/div>\n<div class=\"inner-block-content code-block line-numbers\">\n<pre><code class=\"language-json\">{&#13;\n  \"standards\": {&#13;\n    \"rubric_based_multi_turn_trajectory_quality_v1\": {&#13;\n      \"threshold\": 0.7,&#13;\n      \"judge_model_options\": { \"judge_model\": \"gemini-3.7-flash\" },&#13;\n      \"rubrics\": [&#13;\n        {&#13;\n          \"rubric_id\": \"verifies_identity_first\",&#13;\n          \"rubric_content\": {&#13;\n            \"text_property\": \"Across the call, the agent confirms the caller's name and validates their date of birth before disclosing any appointment details.\"&#13;\n          }&#13;\n        }&#13;\n        \/\/ ... further end-to-end rubrics&#13;\n      ]&#13;\n    }&#13;\n  },&#13;\n  \"live_model_config\": {&#13;\n    \"timeout_seconds\": 300&#13;\n  },&#13;\n  \"user_simulator_config\": {&#13;\n    \"sort\": \"llm_audio\",&#13;\n    \"mannequin\": \"gemini-3.7-flash\",&#13;\n    \"max_allowed_invocations\": 10,&#13;\n    \"audio_model\": \"gemini-3.1-flash-tts-preview\",&#13;\n    \"audio_model_configuration\": {&#13;\n      \"response_modalities\": [\"AUDIO\"],&#13;\n      \"speech_config\": {&#13;\n        \"voice_config\": {&#13;\n          \"prebuilt_voice_config\": { \"voice_name\": \"Kore\" }&#13;\n        },&#13;\n        \"language_code\": \"en-US\"&#13;\n      }&#13;\n    }&#13;\n  }&#13;\n}<\/code><\/pre>\n<p>\n        JSON\n    <\/p>\n<\/div>\n<div class=\"inner-block-content rich-content\">\n<p data-block-key=\"n8ky5\">A number of issues price calling out:<\/p>\n<ul>\n<li data-block-key=\"71hd4\"><b><code>live_model_config<\/code><\/b> permits dwell mode. Omitting this runs the very same check instances in normal textual content mode.<\/li>\n<li data-block-key=\"32una\"><b><code>mannequin<\/code><\/b> <b>vs.<\/b><b><code> audio_model<\/code><\/b><b>:<\/b> <code>mannequin<\/code> powers the simulated consumer\u2019s turn-taking logic, whereas <code>audio_model<\/code> synthesizes these turns into speech. Alter <code>voice_name<\/code> and <code>language_code<\/code> to check agent efficiency towards totally different voices and accents.<\/li>\n<li data-block-key=\"3rl5q\"><b><code>standards<\/code><\/b> configures metrics and move\/fail thresholds. Rubric-based LLM judges (like trajectory high quality) consider the dialog finish to finish\u2014supreme for multi-agent graphs. You too can connect per-turn metrics to attain particular person responses or software executions.<\/li>\n<\/ul>\n<p data-block-key=\"49vad\">A spoken reply might be appropriate in a whole bunch of various phrasings. Pure-language rubrics choose intent the best way a human reviewer would, captured as soon as and utilized robotically throughout each dialog in your suite.<\/p>\n<h3 data-block-key=\"befa5\" id=\"step-4:-run-it\"><b>Step 4: Run it<\/b><\/h3>\n<p data-block-key=\"bur00\">Along with your agent, eval set, and configuration prepared, run the analysis from the CLI:<\/p>\n<\/div>\n<div class=\"inner-block-content code-block line-numbers\">\n<pre><code class=\"language-shell\">uv run adk eval &#13;\n  contributing\/samples\/dwell\/live_workflow &#13;\n  contributing\/samples\/dwell\/live_workflow\/live_workflow.evalset.json &#13;\n  --config_file_path contributing\/samples\/dwell\/live_workflow\/test_config.json<\/code><\/pre>\n<p>\n        Shell\n    <\/p>\n<\/div>\n<div class=\"inner-block-content rich-content\">\n<p data-block-key=\"n8ky5\"><i>Observe: Be sure you have the eval extras put in (<\/i><code>uv pip set up -e \".[eval]\"<\/code><i>) and API credentials configured for each the Reside API and Gemini TTS.<\/i><\/p>\n<p data-block-key=\"5o37s\">This identical pipeline might be known as programmatically by way of <code>AgentEvaluator<\/code>, making it simple to drop dwell voice evaluations into your CI\/CD pipeline to catch regressions earlier than transport.<\/p>\n<h3 data-block-key=\"ux53s\" id=\"step-5:-inspect-the-results-in-adk-web\"><b>Step 5: Examine the ends in ADK Internet<\/b><\/h3>\n<p data-block-key=\"fjcu\">For interactive debugging, ADK Internet now natively helps dwell evaluations. The run setup dialog features a <b>Commonplace | Reside<\/b> mode toggle. Choosing <b>Reside<\/b> reveals enter modality choices (Audio or Textual content) alongside voice and language settings for the simulated consumer.<\/p>\n<\/div>\n<div class=\"inner-block-content\">\n<div class=\"image-wrapper\">\n<p>                <img decoding=\"async\" class=\"regular-image\" src=\"https:\/\/storage.googleapis.com\/gweb-developer-goog-blog-assets\/images\/evaluating_live_agents_img_1.original.png\" alt=\"evaluating_live_agents_img_1\"\/><\/p><\/div><\/div>\n<div class=\"inner-block-content rich-content\">\n<p data-block-key=\"n8ky5\">As soon as the run completes, ADK rebuilds the dwell audio stream right into a clear transcript. Every flip renders in a devoted message bubble full with transcript textual content and an inline <b>playable audio clip<\/b>, so you&#8217;ll be able to consider how your agent sounded, not simply what it stated.<\/p>\n<\/div>\n<div class=\"inner-block-content\">\n<div class=\"image-wrapper\">\n<p>                <img decoding=\"async\" class=\"regular-image\" src=\"https:\/\/storage.googleapis.com\/gweb-developer-goog-blog-assets\/images\/evaluating_live_agents_img_2.original.png\" alt=\"evaluating_live_agents_img_2\"\/><\/p><\/div><\/div>\n<div class=\"inner-block-content rich-content\">\n<h2 data-block-key=\"3z7gk\" id=\"get-started\"><b>Get began<\/b><\/h2>\n<p data-block-key=\"eh6h5\">Prepared to check your dwell agent? Clone the <code>live_workflow<\/code> <a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/github.com\/google\/adk-python\/tree\/main\/contributing\/samples\/live\/live_workflow\">pattern<\/a>, run <code>adk eval<\/code>, and look at your ends in ADK Internet.<\/p>\n<p data-block-key=\"prlt\">Take a look at the<a rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/adk.dev\/live\/\"> ADK documentation<\/a> for deeper guides on consumer simulation, artificial audio profiles, and customized analysis metrics. Your voice agent would not should ship on vibes\u2014now it may well ship measured.<\/p>\n<\/div><\/div>\n\n","protected":false},"excerpt":{"rendered":"<p>Getting a dwell agent into manufacturing is about greater than demo. It has to take the suitable actions throughout a spoken dialog, flip after flip, the place timing and restoration matter as a lot as content material. Habits that sounded good yesterday can quietly change on the subsequent immediate tweak or mannequin iteration. Instruments cease [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":18078,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[56],"tags":[5425,617,6858,1732,2571],"class_list":["post-18076","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software","tag-adk","tag-agents","tag-evaluate","tag-live","tag-voice"],"_links":{"self":[{"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/posts\/18076","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=18076"}],"version-history":[{"count":1,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/posts\/18076\/revisions"}],"predecessor-version":[{"id":18077,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/posts\/18076\/revisions\/18077"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/media\/18078"}],"wp:attachment":[{"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=18076"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=18076"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=18076"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}<!-- This website is optimized by Airlift. Learn more: https://airlift.net. Template:. Learn more: https://airlift.net. Template: 69d9690a190636c2e0989534. Config Timestamp: 2026-04-10 21:18:02 UTC, Cached Timestamp: 2026-08-25 06:32:20 UTC -->