Skip to content

第 12 章:复杂案例,别被整机吓住

到这里,我们已经看过单 Agent、工具、记忆、Graph、多智能体和工程入口。复杂案例不是凭空冒出来的新世界,它们只是把前面学过的零件组合得更完整。

本章边界

本章教你怎么读复杂 examples:先看入口,再看配置、Agent、Graph/Node、工具和外部服务。没有 API Key、语音模型、MCP 服务或外部网络时,有些例子跑不起来很正常。

1. 生活类比:从零件盒到整机

你学修自行车,先认识车轮、链条、刹车、变速器。最后看整车时,不要被复杂外形吓到。复杂案例也是整车:入口、配置、Agent、工具、流式链路,每一块前面都见过。

读复杂案例时,按这条路线走:

text
Application -> Config -> Agent -> Graph / Node -> Tool / 外部服务

不要从最深的工具实现开始钻。先抓主干,再拆分支。

2. DeepResearch:研究型 Agent

DeepResearch 可以理解成一个“研究助理团队”:一个 Agent 负责研究,一个 Agent 负责批判和修正,外部工具负责查资料或访问 MCP 服务。

读它时别先陷进某个工具参数。先看它怎么把“研究、批判、补充”组织成一个流程。

3. Voice Agent:不只是聊天加播放器

语音 Agent 比文本聊天多了三段流式链路:

这里的难点不是“Agent 会不会回答”,而是流:音频流、文本流、工具事件、TTS 输出流要串起来。任何一段慢了、断了、格式不对,体验都会崩。

4. Sandbox 和内置节点

Sandbox 解决的是“工具能干什么、不能干什么”。如果工具可以执行代码、读文件、访问网络,就必须有边界。

内置节点解决的是“常见节点能不能复用”。例如 LLM 节点、工具节点、Agent 节点,本质上是把前面学过的能力做成可复用积木。

能力关注点
Sandbox权限、目录、网络、命令、超时、审计
内置 LLM 节点模型输入输出、流式返回、模板配置
内置工具节点工具解析、执行、错误处理
内置 Agent 节点在更大的 Graph 里复用一个 Agent

5. 复杂案例运行前置

案例运行前先确认
DeepResearch模型 API Key、MCP 服务或远程工具、网络访问策略
Voice Agent语音识别/语音合成模型、音频格式、WebSocket 或流式传输配置
Multimodal模型是否支持多模态输入、文件大小、图片/音频格式
Sandbox 工具目录白名单、命令白名单、超时、审计日志、网络策略
内置节点输入输出 key、state 合并策略、错误节点或兜底路径

排查顺序建议:

text
先确认外部能力可用 -> 再确认 Spring Bean 装配 -> 再确认 Agent / Graph 执行 -> 最后调模型效果

不要一看到回答不理想就先改 Prompt。有时候真正的问题是语音模型没加载、工具没权限、MCP 服务没连上。

6. 新手容易误解什么

误解一:复杂案例等于新框架。

不是。DeepResearch、Voice、Sandbox 仍然围绕 Agent、Graph、Tool、State 展开。

误解二:实时语音只是普通聊天加播放器。

不是。实时语音要处理 ASR、Agent、TTS 多段流式链路。

误解三:Sandbox 是炫技。

不是。它是危险工具进入生产前的安全边界。

7. 本章小结

复杂案例的读法:

text
先看系统怎么分层,再看每层怎么接,最后才看具体实现。

下一章收束整套教程,给一条后续源码阅读和问题定位路线。

8. 练习题

  1. 给 Voice Agent 画一张 ASR -> Agent -> TTS 的事件流,并标出可能失败的位置。
  2. 把 DeepResearch 拆成“研究、批判、补充、输出”四个阶段。
  3. 给 Sandbox 工具设计生产准入清单:目录、网络、命令、超时、日志、审批分别怎么限制。
课后源码索引:想验证实现时再打开
你想验证的结论源码锚点
DeepResearch 应用入口examples/deepresearch/src/main/java/com/alibaba/cloud/ai/examples/deepresearch/Application.java,类 Application,方法 main(...)mcpSyncHttpClientRequestCustomizer()applicationReadyEventListener(...)
DeepResearch 如何组合研究 Agent 和批判 Agentexamples/deepresearch/src/main/java/com/alibaba/cloud/ai/examples/deepresearch/DeepResearchAgent.java,类 DeepResearchAgent,方法 getResearchAgent(...)createResearchAgent(...)createCritiqueAgent(...)subAgentAsInterceptors(...)
DeepResearch 如何暴露给 Studioexamples/deepresearch/src/main/java/com/alibaba/cloud/ai/examples/deepresearch/AgentStaticLoader.java,类 AgentStaticLoader,方法 listAgents()loadAgent(...)
Voice Agent 启动与配置examples/voice-agent/src/main/java/com/alibaba/cloud/ai/examples/voiceagent/VoiceAgentApplication.java,类 VoiceAgentApplication,方法 main(...)VoiceAgentConfig.java,方法 sandwichAgent(...)RealtimeVoiceConfig.java,方法 dashScopeAudioTranscriptionModel(...)
Voice 流式编排examples/voice-agent/src/main/java/com/alibaba/cloud/ai/examples/voiceagent/stream/RealtimeVoiceAgentStreamService.java,类 RealtimeVoiceAgentStreamService,方法 streamWithAudioRealtime(...)runAgentWithStreamingTts(...)extractAudio(...)parseArgs(...)
Sandbox 工具边界spring-ai-alibaba-sandbox/src/main/java/com/alibaba/cloud/ai/sandbox/SandboxAwareTool.java,类 SandboxAwareTool,方法 getSandbox()setSandbox(...)getSandboxClass()
内置节点spring-boot-starters/spring-ai-alibaba-starter-builtin-nodes/src/main/java/com/alibaba/cloud/ai/graph/node/AgentNode.javaLlmNode.javaToolNode.java

Built with VitePress. Deployed on Cloudflare Pages.