大家都在聊 Agent Harness,Java 团队也该有自己的 Runtime 了:Pi Java 近期迭代
最近 AI Agent 圈的讨论,正在从“哪个模型更强”转向“同一个模型,为什么在不同 Agent 里表现差这么多”。
GitHub 最近甚至专门公开评测自己的 agentic harness:模型提供原始能力,而 harness 决定模型如何拿到上下文、调用工具、保存状态、处理失败,并最终把任务做完。这个判断很接地气——真正做过 Agent 的人都知道,接通一次模型 API 只要半天,后面 80% 的时间都花在运行时细节上。
参考:GitHub 对 agentic harness 的评测
这也是 Pi Java 最近一轮迭代的主线:不再只是“Java 能调用几个大模型”,而是逐步补齐一个 Agent 真正跑起来需要的 Provider、Tools、Session、Skills、Trust 和 Spring 接入。
项目地址:https://github.com/MarcelLeon/pi-java
Pi Java 是什么
Pi Java 是一个受开源项目 Pi 启发的 Java/Spring 实现。
它想解决的不是“再造一个聊天框”,而是一个很具体的问题:大量业务系统已经在 Java 和 Spring Boot 上,但 Agent 生态里的许多新能力往往先出现在 TypeScript 或 Python。Java 团队如果想实验 session、tool calling、skills 和 agent loop,经常要么跨语言搭一层,要么从零拼运行时。
Pi Java 希望提供一条更熟悉的路:用 Java 类型、Maven 模块和 Spring Starter,把 Agent 的关键运行时能力接进现有系统。
近期最明显的变化:从“接模型”走向“跑 Agent”
1. GitHub Copilot 不再只是一个配置占位
这一轮补上了相对完整的 Copilot 非流式接入链路:
- OAuth Device Flow;
- token 本地持久化;
- 过期 token 自动刷新;
- 按账号发现可用模型;
- OpenAI-compatible chat transport;
tool_calls解析与历史消息序列化;- 请求级 Header 扩展边界。
换句话说,Copilot Provider 已经从“代码里有这个名字”,推进到“具备认证、模型发现、对话和工具调用基础链路”。
这也贴合了 Copilot CLI 的近期演进:模型选择、跨会话记忆、Skills、工具与可恢复任务,正在成为 coding agent 的标配,而不再只是附加功能。
2. 四类 Provider 开始共享同一套工具调用语义
Pi Java 当前围绕 OpenAI、Anthropic、Amazon Bedrock 和 GitHub Copilot,补齐了多项非流式能力:
- 请求级认证、模型参数和自定义 Header;
- 图片消息;
- thinking / reasoning 元数据;
- Provider 原生的 tool call 与 tool result;
- 可重试错误识别;
- 空工具结果占位;
- assistant
tool_calls历史续写。
重点不是“支持四个 Logo”,而是把不同 Provider 的返回结构收敛到同一条 Java Agent Loop:模型提出工具调用,运行时执行工具,把 TOOL_RESULT 写回会话,再继续下一轮,直到得到最终回答或达到轮次上限。
这才是多模型对业务有用的地方:上层流程不用为每家模型重写一遍。
3. 工具会执行,也会在不确定时刹车
项目已经内置 read、write、edit、bash、find、grep、ls 等工具,并给工具标注 read/write/system 权限类别。
近期补强的不是工具数量,而是执行边界:
- 工具调用按轮次受限,避免无限循环;
- 长度截断的 tool call 不会拿着残缺参数直接执行;
- 空结果会被规范化,避免 Provider 收到不可解释的空消息;
bash超时被严格限制在 1—60 秒;edit使用可验证的字面替换语义。
一个 Agent 是否可靠,往往就体现在这些“不顺利的时候会怎样”。
4. 会话终于不是一段用完就丢的聊天记录
Pi Java 的 Session 层现在支持:
- 会话树和 JSONL 持久化;
- restore、resume、fork、import、export;
- usage 与 reasoning token 元数据保留;
- 会话重命名和
session_info_changed事件; - 分支压缩摘要的串行编排;
- 非法非空 JSONL 的覆盖保护。
这意味着一个任务可以暂停、恢复、从中间节点分叉,也能把会话文件交给别人复现。对于需要审计、回放或人工接管的业务 Agent,这比“上下文窗口再加长一点”更实际。
5. AGENTS.md、Prompts、Skills 和项目 Trust 接上了
近期 CLI 已经能发现并加载:
- 父目录中的
AGENTS.md/CLAUDE.md; - 用户级和项目级 prompt 模板;
.pi/skills、.agents/skills下的 Skill;- 已安装 Pi package 中的 prompt / skill 文件;
.pi/settings.json里的资源覆盖规则。
项目级资源不会默认无条件执行,而是经过 /trust 控制。CLI 还提供 /resources、/prompts、/skills、/edit 等入口。
这部分看起来不像“炫技功能”,却是 Agent 进入真实仓库必须补的一层:它不仅要知道用户说了什么,还要知道这个项目自己的规范、工作流和权限边界。
对 Java / Spring 团队,现在实际能做什么
目前比较务实的使用方式有三类:
- 用
pi-starter在 Spring Boot 应用里嵌入 Pi 风格的 Agent Loop。 - 把 Provider、Session、Tools 当成自研 Agent 平台的参考实现或基础模块。
- 用 CLI 验证模型路由、工具调用、项目上下文、Skills 和会话恢复流程。
项目构建基线已经调整到 Java 17,并在最新 GitHub Actions 中完成 Maven Build、Tests 和 Smoke 验证:
https://github.com/MarcelLeon/pi-java/actions/runs/30816401722
它还不是什么
Pi Java 目前仍是“部分能力对齐”,不是上游 Pi 的完整 Java 替代品。
当前明确的差距包括:完整流式 Agent Runtime、成熟 TUI、可执行扩展与主题/包生态、完整 RPC/SDK、Copilot 流式与真实账号端到端验证,以及更完整的供应链保护。
如果你需要的是成熟开箱即用的终端 Agent,现在还不能只看名字就直接替换;如果你想在 Java/Spring 体系里研究和搭建 Agent Runtime,它已经比“封装一次模型请求”往前走了不少。
最后
这轮 AI 热点里,我最认同的一句话不是“模型又涨了多少分”,而是:模型提供智力,Harness 决定智力怎么落地。
Pi Java 最近做的事情也可以压缩成一句话:让 Java Agent 不只是会回复,而是开始会登录模型、调用工具、保存现场、恢复任务、理解项目规则,并接进 Spring。

浙公网安备 33010602011771号