整个项目架构可以拆分为四层:Agent 核心层、工具与协议层、决策与编排层,以及产品层。

①、Agent 核心层是整个系统的心脏,实现了标准的 ReAct 循环——推理(Reasoning)、行动(Acting)、观察(Observing)三步循环。
原理其实也简单,LLM 思考要不要调用工具,如果需要就执行工具拿到结果,再继续思考,直到任务完成。
// Agent.java - ReAct 核心循环
while (true) {
if (CancellationContext.isCancelled()) {
return "⏹️ 已取消当前任务。";
}
maybeCompactHistory();
AgentBudget.ExitReason exitReason = budget.check();
if (exitReason != AgentBudget.ExitReason.WITHIN_BUDGET) {
break;
}
// 发请求、解析 tool_calls、执行工具、塞回历史...
}
②、工具与协议层支持 MCP 协议的两种传输方式:stdio(本地子进程)和 Streamable HTTP(远程服务)。
还可以接入文件操作、Git、数据库、GitHub 等各种工具。
我们还实现了 Chrome DevTools Protocol,让 Agent 能直接操控浏览器。

③、决策与编排层包括 Skill 系统和多 Agent 编排。
通过内置的 web-access Skill,我们的PaiCLI可以自主决策,是使用内置的 web-fetch,还是 web-search,还是 Chrome Devtools MCP 打开浏览器,还是直接通过 CDP 复用已有的登录信息来访问目标网站。

多 Agent 编排实现了 Orchestrator 模式,包含 Planner(任务拆解)、Worker(执行)、Reviewer(验证)三个角色。

④、产品层则覆盖了 HITL 人类审批、Token 预算控制、摘要压缩、异步并行执行、多模型适配等生产级特性。
为什么选择纯 Java 手搓?
这个问题很多球友可能会问,为什么不用 LangChain、Spring AI 这些框架?

主要是:
对于Agent项目,面试官其实想看的是你的底层理解。
用框架调 API 谁都会,但能说清楚 ReAct 循环怎么实现、Tool Calling 的 JSON-RPC 怎么实现、MCP 的生命周期怎么管理,这才是区分你到底有没有掌握 Agent 技术的关键。
说白了,PaiCLI 不是那种调个 API 套个壳的 AI Demo。
别人的项目说“我用了 SpringAI 调用 LLM”,你的项目说“我从零实现了 ReAct、手写了 MCP 客户端和通信协议、自己设计了 Skill 加载机制、接入了Chrome Devtools MCP 来控制浏览器、实现了 Memory 的持久化和上下文的摘要压缩、实现了 Multi-Agent和 Plan-and-Execute、实现了联网搜索和图片识别的视觉能力等等”。
面试官一听就知道,你是真的懂 Agent 的底层原理和实现细节的。
这里有一个介绍:https://paicli.paicoding.com/