# Core 执行端口反转
日期:2026-08-14
# 目标
将 Java 版本从“core 直接依赖 model、tools”收敛为 pi-mono 风格:内核只定义循环、协议和执行端口;Provider、本地工具和会话压缩策略在外层实现。
# 变更
core.ModelExecutor:定义模型同步/流式执行端口。AgentLoop仅依赖该端口,不认识 OpenAI、Mock 或ModelConfig。core.ToolExecutor:定义按工具名执行的端口。ToolRegistry实现它;AgentLoop不再依赖本地注册表类型。core.ContextCompressor:定义会话摘要端口。SessionStore不再 importmodel.Model。model.Model继承ModelExecutor,以默认方法将既有CompleteInput适配到 core 端口,因此已有 Provider 实现无需重写。model.ModelContextCompressor将 LLM 摘要能力适配为ContextCompressor;模型不可用或摘要为空时仍回退原始转录。- CLI 与 Web 的产品层显式组装
Model、ToolRegistry、ModelContextCompressor后传入 core/session。
# 依赖方向
core: Protocol + AgentLoop + ModelExecutor + ToolExecutor + ContextCompressor
↑ ↑ ↑
model.Model ───────┘ │
tools.ToolRegistry ─────────────────┘
model.ModelContextCompressor ──> session.SessionStore
web / cli 负责装配以上实现
# 保持不变
Protocol、SSE 事件、ToolResult、暂停/ask_user 恢复与历史 JSONL 格式不变。Model.CompleteInput保留,OpenAI/Mock 实现继续使用原有 Provider 调用代码。ToolRegistry的注册、错误转换、超时标记与工具 schema 暴露方式不变。
# 验证
rg 'piagent.(model|tools)' pi-agent-v1/src/main/java/piagent/core:无匹配。mvn -pl pi-agent-v1 clean test:通过。- 后续以打包 Jar 的 Mock
/api/chatSSE 冒烟验证 Web 装配链路。