Agent 架构总览
本章节面向要把 Agent 真正上线的开发者,目标是让你快速回答三个问题:
- AI4J Agent 由哪些模块组成?
- 应该如何选择运行时(ReAct / CodeAct / DeepResearch)?
- 单 Agent、SubAgent、Agent Teams、StateGraph 的边界分别是什么?
1. Agent 能力地图(从核心到扩展)
AI4J Agent 不是一个只能聊天的封装,而是一套可拆分、可替换、可观测的工程化框架:
- 模型适配层:统一 Chat/Responses 两类协议;
- 运行时层:ReAct、CodeAct、DeepResearch;
- 工具层:Function Tool、MCP Tool、自定义 ToolExecutor;
- 记忆层:会话记忆、窗口压缩、摘要压缩;
- 编排层:顺序流、StateGraph、SubAgent、Agent Teams;
- 治理与观测层:handoff policy、trace/exporter、事件监听;
- 交付入口层:SDK 内嵌接入、
ai4j-clicoding-agent CLI/TUI。
核心入口类:
AgentAgentBuilderAgentSessionAgentContextAgents
2. 模块结构与职责
2.1 agent
- 负责组装运行时、模型、工具、记忆;
Agent.newSession()用于创建独立会话上下文;AgentBuilder.build()会自动补齐默认组件。
2.2 agent.runtime
BaseAgentRuntime:统一步骤循环(step loop);ReActRuntime:默认通用运行时;CodeActRuntime:代码驱动工具调用;DeepResearchRuntime:规划优先、研究型任务。
2.3 agent.model
AgentModelClient统一模型调用接口;ResponsesModelClient与ChatModelClient分别适配不同协议;AgentPrompt/AgentModelResult作为运行时与模型适配层之间的稳定契约。
2.4 agent.tool
AgentToolRegistry:决定“暴露给模型哪些工具”;ToolExecutor:决定“工具调用如何执行”;- 默认执行器
ToolUtilExecutor支持 Function/MCP。
2.5 agent.memory
- 默认
InMemoryAgentMemory; - 支持
MemoryCompressor和窗口压缩策略。
2.6 agent.workflow
- 顺序编排:
SequentialWorkflow; - 状态图编排:
StateGraphWorkflow; - 可做分支、循环、条件路由。
2.7 agent.subagent
- 主 Agent 通过 handoff 工具调用子代理;
HandoffPolicy管理超时、深度、失败回退等治理策略。
2.8 agent.team
- 多成员协作(Lead + Members + 任务板 + 消息总线);
- 支持任务依赖、轮次调度、消息广播、任务认领/转派。
2.9 agent.trace
- 统一追踪事件和 span;
- 可接内存导出器、控制台导出器或自定义 exporter。
3. 运行时怎么选
ReActRuntime(默认)
适合大多数业务 Agent:
- 文本任务 + 工具调用;
- 多轮推理但不需要代码执行环境;
- 接入与维护成本最低。
CodeActRuntime
适合“批量工具调用 + 代码组织”任务:
- 一次生成代码,代码内部多次调用工具;
- 对复杂数据加工更稳定;
- 可开启
CodeActOptions.reAct=true形成“代码执行后再总结”的双阶段模式。
DeepResearchRuntime
适合研究型任务:
- 先规划,再分阶段收集证据,再汇总;
- 更强调结构化输出和来源一致性。
4. 单 Agent 到多 Agent 的演进建议
推荐按复杂度逐步演进,而不是一开始就上 Teams:
- 单 Agent(ReAct):先稳定模型与工具白名单;
- CodeAct:处理复杂数据加工或多工具批处理;
- StateGraph:任务需要显式分支/循环;
- SubAgent:主从委派、严格 handoff 治理;
- Agent Teams:多角色协作、共享任务板、成员间通信;
- Trace + 在线观测:为排障与审计提供依据。
5. 最小示例(可运行)
Agent agent = Agents.react()
.modelClient(new ResponsesModelClient(responsesService))
.model("doubao-seed-1-8-251228")
.systemPrompt("你是一个严谨的助手")
.instructions("需要时再调用工具")
.toolRegistry(java.util.Arrays.asList("queryWeather"), null)
.build();
AgentResult result = agent.run(AgentRequest.builder()
.input("请给出北京今天的天气摘要")
.build());
System.out.println(result.getOutputText());
6. Agent 章节阅读顺序
建议按下面顺序读完:
Coding Agent CLI 与 TUI多 Provider Profile 实战Coding Agent 命令参考手册Provider 配置样例自定义 Agent 开发指南System Prompt 与 InstructionsModel Client 选择与适配Runtime 实现详解Memory 管理Workflow StateGraphCodeAct(含自定义沙箱)SubAgent 与 handoff policyAgent TeamsTrace 可观测核心类参考手册
7. 关键测试索引
你可以直接运行这些测试来理解行为:
WeatherAgentWorkflowTestStateGraphWorkflowTestCodeActRuntimeTestCodeActRuntimeWithTraceTestSubAgentRuntimeTestSubAgentParallelFallbackTestHandoffPolicyTestAgentTeamTestAgentTeamTaskBoardTestDoubaoAgentTeamBestPracticeTest
如果你希望把 Agent 模块接入生产,建议至少跑通:
- 一套单 Agent 回归;
- 一套 CodeAct 回归;
- 一套 Team/Workflow 回归;
- 一套 Trace 验证回归。