AI图鉴

AI图鉴首页 › AI 资讯 › 一步步向导:使用 ADK 构建永不沉寂的声音 Agent

一步步向导:使用 ADK 构建永不沉寂的声音 Agent

来源:Google Developers · 发布时间:11-03 · 由 AI图鉴每小时自动聚合

开源 Agent开发 Kit(ADK)和gemini-3.8-live使开发者能够通过在Python中实施非屏蔽工具来构建响应性语音agents.

OCT. 19, 2026 (英语).

Agent Development Kit(ADK) Gemini Live API工具包中的流媒体工具指南,非屏蔽功能调用,以及响应调度。

在文本聊天中,一个13秒的数据库查询或RAG管道显示是一个加载旋转器。 在现场语音对话中,13秒的屏蔽工具执行产生13秒的死气,导致用户假设呼叫被放弃并挂断。

你不能总是做后端查询子秒,所以修补必须是建筑:保持agent对话,同时在背景中慢化工具运行。 开源 ADK和gemini-3.8-live没有强迫您连接自定义客户端-WebSocket事件环路来管理同步工具状态,而是允许您在Python本土执行非屏蔽语音工具。 在我们的基准测试销售-报告工作流程中,在gemini-3.8-live上,从阻塞工具切换到流线工具将时间从14.4秒缩短到agent的第一个单词1.2秒。

本指南涵盖如何使用流线工具,非屏蔽函数工具定义,以及响应 scheduling来构建响应性,自然的声音agents.

观看1分钟的ADK Live AI Concierge演示视频

ADK Live AI Concierge 演示视频解释计划响应如何运作

在ADK中实施非屏蔽工具调用可提供几个即时用户体验的好处:

- Zero Dead Air:agent不是冻结中间对话,而是可以立即确认请求("现在查看这些数字。....."),并保持对话的活力。

- Audible Progress Updates:对于多阶段工作流程(例如连接,查询,和调和),agent可以描述临时里程碑,因此等待听起来像积极的进展。

- 多任务和平行对话:用户可以在背景中执行一个长期运行的查询时,询问后续或不相关的问题,并及时得到答案而不会耽误会话。

- Granular 交付控制:您确定最终结果何时以及如何进入对话:等待自然的暂停发言,立即中断关键提示,或默默更新对话上下文。

在标准agent开发中,一个工具被定义为一个async def函数,可以完成它的工作并返回一个单一值:

从输入中导入

aync def 查询 sales 数据库(区域:str) - > dict[str, Any]:

""运行一个区域的季度销售报告查询。

参数:

区域:报告销售区域,例如“EMEA”或“APAC”。

回返情况:

完成后包含报告指标的命令。

"""

报告 = 等待 run excensive query(区域) #,例如工作13秒

返回 {“状态”: “成功”、“ 报告”:报告} {\fn方正粗倩简体\fs12\an8\1cHFFFF00\b0}最后的一次回归

纯文本

复制

当直接传递到ADK中的Agent时,此函数会创建一个阻塞工具调用。 在Gemini Live API双向语音会话(run live)期间,执行循环等待工具返回后再生成进一步的模型转折。

如果查询 sales 数据库需要13秒,agent会产生13秒的完全沉默。 诸如"告诉您正在研究的用户"等提示指令无法解决这一点,因为模型的转弯被阻塞等待函数响应有效载荷。

为了保持对话的流畅性,您可以根据期望的用户体验,在两种主要的非阻断模式之间做出选择。

当一个操作包含有意义的阶段(如连接到数据库,汇总记录,以及格式化结果)时,一个流线工具让agent在其发生时描述进度。

在ADK中,将标准工具变成流化工具需要只改变返回到收益。 通过将函数定义为 AsyncGenerator,ADK 自动将工具声明标记为 NON BLOCKING,并将即时状态确认返回到模型中。

导入 Ayncio

从输入输入 AsyncGenerator

从 google.adk.agents 导入 Agent

async def 查询 sales 数据库( 区域:str) - > AsyncGenerator[str, no]:

""运行季度销售报告。 调用此 ONCE;它自动推动更新。

参数:

区域:报告销售区域,例如“EMEA”或“APAC”。

仪表:

在查询运行时更新进度,然后是最后摘要。

"""

阶段 = [

("连接到销售仓库。..", 1.5)

("扫描订单记录。..",3.5)

("按产品线分列收入。..",3.5).

("校对报告。..", 1.5)

]

对于信件,分阶段延迟:

输出 f: {消息}'

等待 Ayncio.sleep(延迟)

产量f"DONE:{地区}Q2收入达到481M,年增长12.4%.

agent = Agent(

名称="销售分析"

型号="gemini-3.8-live"

工具=[query sales database]

指令=( )

"你是一个有用的销售助理。 当用户询问销售数据时,"

"呼叫查询 sales 数据库一次。 立即确认这一请求,"

"Briefly解释每一个进展更新,并提出最后的数字"

"当完成。 保持答案的对话和简洁".

),

)

- 立即确认:当模型触发查询 sales 数据库时,ADK立即向模型发送同步状态事件。 agent立刻说话("现在为您查看EMEA的数字。.....").

- 部分更新:每个输出向上游发送部分函数响应。 模型在每次更新到达时都会解释("连接到仓库。..","聚合产品线数据。....."),虽然叙述可以跟踪工具几秒钟。

– 无缝多轨:如果用户在查询运行时询问一个无关的问题,agent可以在不取消或中断背景任务的情况下回答。

- 单一闪光工具呼叫:由于流线工具将更新推向多个转弯,模型有时可能会试图再次调用工具,如果反复被催动。 在您的文档中保留清晰的“ 调用此 ONCE” 指令,并考虑在您用于安全生产的工具执行中执行一个内链键或同位素键。

- 用户取消 " stop streaming ":ADK为长期流线工具提供内置逃生舱。 通过在 agent 的工具列表中包含一个名为 stop streaming(函数 name: str) 的函数,ADK 截取呼叫并取消生成器的内在 Ayncio. 任务,抚养Ayncio。 功能内已取消错误,这样您就可以清理关闭数据库连接或文件控件。

- 用户 Barge- in 不取消工具:当用户在 agent 上交谈时,Live API 停止了模型的输出,ADK 发出一个中断的事件 = 让你的客户停止播放音频运行的流或背景工具不会被取消,其结果仍然被交付。 要阻止一个工具,模型必须叫停止流体。

持续的进展评注并非总是适当的。 如果用户要求报告,并立即向另一个话题吐槽,持续中断状态更新的agent会感到侵入性。

当等待没有故事可以叙述时,在背景中悄悄地执行任务。

一个无需不断进展的立即口头承认的有效方式是,一个同步生成器,完成后只产生一次:

aync def 查询 sales 数据库(区域:str) - > AsyncGenerator[dit, no]:

""运行季度销售报告。 这叫做ONCE;结果一准备好就到了。"

报表 = 等待 run expensive query(区域)# 背景执行(~13s)

产量报告# 完成时的单一产量

由于这是一个Async生成器,ADK发布一个即时响应。 agent迅速确认请求("我现在为您把报告拉在一起"),在计算时保持缄默,并在准备好或用户完成演讲时给出数字。

如果您更愿意保留标准皮层( async def... - > dict),将函数包裹在一个函数工具中,并配置响应排程:

从 google.adk.tools 导入函数工具

从 google.genai 导入类型

销售工具=函数工具(query sales database)

销售工具。 Reswer scheduling = 类型。 FunctionreseScheduling.WHEN IDLE

(注:在ADK 2.10+中,也可以设置‘sales tool.beavior = 类型。 Behavior.NON BLOCKING"在背景中运行一个工具而不修改调度模式。 )

了解Trade-Off:在使用回转式皮层反应时,模型在完成整个功能之前不会收到有效载荷。 因此,除非用户继续发言,否则模型通常不会表示初步口头承认。 当用户立即继续处理其他问题时,这个模式是理想的,您想要在下一次自然暂停时将结果编织到对话框中。

当模型 reacts 到一个工具响应时,响应 scheduling 属性控制。 当 IDLE从不将削减变成进动的转弯:如果模型还在说话,或者用户还在说话,结果会等到那个转弯结束,模型会在下一个自然暂停时响应。 ADK支持三种调度行为:

在基准测试会话中,使用gemini-3.8-live:

- 在When IDLE下,收到一份销售报告礼貌地等待,而模型完成了一个单独的20秒的问题,然后无缝地发送数字。

- 在INTRUPT下,即将到来的结果切断了目前中刑的言论;模型随后完成了答复,并附上了数字。

- 在SILENT下,结果被添加到对话历史中,可供以后的回合使用,而无需催促宣布。

执行形状(流对单返回)和交付时间(Resignation scheduling)是独立的,可以组成。 设定响应排程在流媒体工具印章上每一个部分更新。

此外,在ADK 2.8和较新的版本中,流线工具可以通过生成类型来动态指定每次更新的时间安排。 函数响应:

承认并保持中间进展安静:

产量类型。 函数响应( R)

反应 QQ"阶段":"汇总"]

排程=类型。 FunctionResponse Scheduling.SILENT (英语).

)

{\fn方正粗倩简体\fs12\an8\1cHFFFF00\b0}在演讲完毕后提供最后的结果

产量类型。 函数响应( R)

回复 QQ“ 报告 ”: final data}

排程=类型。 功能响应排程。 WHEN IDLE

)

拇指规则:如果等待有一个故事,流它。 如果等待只是一个等待,在背景中运行,让结果在闲置时着陆。

非屏蔽工具不会减少后端执行时间:13秒查询仍需要13秒。 变化是您agent的谈话。

一个需要10秒才能加载的网络应用程序被认为是慢的;一个会说话的声音agent会默默10秒就被认为是破碎的。 通过将ADK的流动工具和灵活的响应调度与gemini-3.8-live的实时能力配对,可以建立声音助手,这些助手保持注意力,自然,并贯穿整个复杂的操作。

自己试一下:交互演示通过gemini-3.8-live上的每个工具模式和响应排程模式运行相同的13秒查询,这样就可以听到差异。

- 框架:google-adk 2.1.0

- 型号:gemini-3.8-在Gemini企业上有效

- API环境:流线工具和直播调度需要双向直播(运行 live).

本文由 AI图鉴自动抓取并翻译,版权归原作者所有;如需查看原文请点下方链接。

相关 AI 工具

相关免费羊毛

同源资讯

阅读原文(developers.googleblog.com)

标题、摘要与正文均来自该信源的公开页面,版权归原作者所有;本站自动聚合与翻译,仅作出处跳转。

← 返回 AI 资讯列表AI工具图鉴首页

返回 AI图鉴首页 · 提交工具 · 商务合作 · 关于本站 · 607 款 AI 工具分类导航 · 每日 AI 热门项目与动态