示例:定制一个 PiAgent
2026年10月8日 上午9:19:32
网上传说的 PiAgent 以 read、write、edit、bash 四类终端能力为核心。Harness 提供了 ToolName.TOOL_PI 这一快捷枚举,它在工具名映射层展开为 read、write、edit、bash、bash_start、bash_wait、bash_stop 七个名字,其中后三个用于异步 Bash 会话的启动、等待与终止。
1、代码示例
public class DemoApp {
public static void main(String[] arg) throws Throwable {
AgentSessionProvider sessionProvider = new AgentSessionProvider() {
private Map<String, AgentSession> sessionMap = new ConcurrentHashMap<>();
@Override
public AgentSession getSession(String instanceId) {
return sessionMap.computeIfAbsent(instanceId, k -> InMemoryAgentSession.of(k));
}
};
HarnessEngine engine = HarnessEngine.of(".tmp/", ".demo")
.sessionProvider(sessionProvider)
.toolsAdd(ToolName.TOOL_PI)
.build();
engine.prompt("网络调查 ai mcp 协议,生成一个 mcp.md 报告").call();
}
}
需要注意 bash_start、bash_wait、bash_stop 属于异步会话工具,只有在 bashAsyncEnabled(true) 时才会进入代理的真实工具集:AgentFactory 完成名字展开后,终端能力会按该开关过滤掉这三个异步工具,而 bashAsyncEnabled 默认为 false。所以按上例的默认配置,PiAgent 实际可用的是 read、write、edit、bash 四个基础工具。若确实需要完整的七个工具,构建时补上该开关即可:
HarnessEngine engine = HarnessEngine.of(".tmp/", ".demo")
.sessionProvider(sessionProvider)
.toolsAdd(ToolName.TOOL_PI)
.bashAsyncEnabled(true) //开启异步 bash 会话,才会暴露 bash_start/bash_wait/bash_stop
.build();