首页 > 基础资料 博客日记
agentscope-harness vs solon-ai-harness:Java 智能体「马具引擎」的双雄对决
2026-05-13 13:00:01基础资料围观7次
2026 年,Java AI 智能体开发领域正在经历一场「运行时层」的竞赛。阿里系的 AgentScope Java 和杭州无耳的 Solon AI 框架,分别交出了各自对「AI Agent Harness」的理解答卷。本文从架构设计、功能覆盖、开发者体验三个维度,对两者进行深度对比分析。
一、背景:什么是「Harness」?
在 AI Agent 开发中,Harness(马具/套件) 是一个承上启下的概念。业界目前有两个极具启发性的定义:
- 公式定义:
Agent = Model + Harness。模型提供推理,而 Harness 提供落地执行的实体。 - 硬件类比:Model 是 CPU(计算核心),Context 是内存(瞬时寻址),而 Harness 则是操作系统(资源调度与环境隔离)。
没有 Harness 的 Agent 就像一个漂浮在大脑中的灵魂——虽然能思考,但无法稳定地感知物理世界、无法受控地操作工具,更无法在复杂的长程任务中保持状态。
| 框架 | 所属生态 | Harness 模块名 | 底层框架要求 |
|---|---|---|---|
| AgentScope Java | 阿里巴巴 / AgentScope AI | agentscope-harness |
JDK 17+,独立运行 |
| Solon AI | 无耳科技 / OpenSolon | solon-ai-harness |
JDK 8+,可嵌入任意框架 |
二、架构设计对比
2.1 agentscope-harness:单体式「全副武装」运行时
AgentScope 的 Harness 模块定位非常清晰——一个功能完备的智能体增强运行时。核心类 HarnessAgent 实现了 Agent 和 StateModule 双接口,通过委托模式包装底层的 ReActAgent。
模块结构(9 大子系统):
io.agentscope.harness.agent/
├── filesystem/ # 文件系统抽象(本地/远程/沙箱三种模式)
├── hook/ # 生命周期钩子(8+ 内置 Hook)
├── memory/ # 记忆管理(刷盘、压缩、合并)
├── sandbox/ # 沙箱运行环境(Docker 隔离)
├── session/ # 会话持久化
├── store/ # 命名空间存储
├── subagent/ # 子智能体编排
├── tool/ # 内置工具集(文件/Shell/记忆)
└── workspace/ # 工作区管理
设计哲学: 「大而全,开箱即用」。HarnessAgent 的 Builder 模式暴露了 30+ 配置项,从文件系统到子智能体编排,从记忆压缩到沙箱管理,一应俱全。开发者可以用最少的代码构建一个生产级的智能体。
HarnessAgent agent = HarnessAgent.builder()
.name("MyAgent")
.model("openai:gpt-5.5") // 字符串模型 ID
.workspace("/path/to/workspace") // 工作区路径
.enablePlan() // 启用计划本
.compaction(CompactionConfig.builder().triggerMessages(20).build())
.filesystem(SandboxFilesystemSpec.builder() // 沙箱文件系统
.client(dockerClient).build())
.subagent(SubagentSpec.builder() // 子智能体
.name("researcher").build())
.build();
2.2 solon-ai-harness:引擎式「克制而有力」运行时
Solon 的 Harness 模块同样是一个完整自包含的智能体编排与执行引擎,核心类 HarnessEngine 以 Builder 模式构建,整合了主代理、子代理、技能池、MCP 网关、REST API、HITL 安全审计等全套能力。
模块结构与依赖包能力全图:
solon-ai-harness 核心模块
│
├── HarnessEngine.java # 马具引擎核心(Builder 模式,组装主代理/子代理)
├── HarnessProperties.java # 统一配置属性(models/tools/skillPools/mcpServers...)
├── HarnessExtension.java # 扩展接口(自由定制代理行为)
├── agent/
│ ├── AgentDefinition.java # 代理定义(支持 Markdown YAML Frontmatter 解析)
│ ├── AgentFactory.java # 代理工厂(权限矩阵 + 工具装配)
│ ├── AgentManager.java # 代理管理器(注册/加载/扫描 agents 目录)
│ ├── TaskSkill.java # 子代理技能(task/multitask 工具)
│ └── GenerateTool.java # 动态代理生成工具
├── code/
│ └── CodeSkill.java # 代码工程规约技能(技术栈识别)
├── hitl/
│ └── HitlStrategy.java # 人工介入策略(bash 安全审计规则)
└── permission/
└── ToolPermission.java # 工具权限枚举(18+ 细粒度权限)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Maven 依赖包及其提供的能力:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
┌─ solon-lib(Solon 基础运行时)
│ └── 依赖注入、配置、AOP 等核心能力
│
├─ solon-ai-agent(传递引入 solon-ai-core)
│ ├── ReActAgent / SimpleAgent / TeamAgent(推理-行动代理体系)
│ ├── ChatModel / ChatConfig(LLM 调用核心接口)
│ ├── @ToolMapping / @Param(工具声明注解)
│ ├── Skill / AbsSkill(技能抽象体系)
│ ├── SummarizationInterceptor(上下文摘要拦截器)
│ └── AgentSession 会话管理
│
├─ solon-ai-skill-cli(终端操作技能包)
│ ├── TerminalSkill:bash, read, write, edit, glob, grep, ls
│ └── ExpertSkill:skill 技能调用、技能发现
│
├─ solon-ai-skill-web(联网技能包)
│ ├── WebsearchTool(联网搜索)
│ ├── WebfetchTool(网页内容抓取)
│ └── CodeSearchTool(代码仓库搜索)
│
├─ solon-ai-skill-lsp(语言服务协议技能包)
│ ├── LspManager(LSP 服务器生命周期管理)
│ └── LspSkill(代码诊断、符号导航等 IDE 级能力)
│
├─ solon-ai-skill-restapi(REST API 技能包)
│ └── RestApiSkill(解析 OpenAPI 文档,动态生成 REST 调用工具)
│
├─ solon-ai-skill-toolgateway(工具网关技能包)
│ └── ToolGatewaySkill(MCP Server 能力桥接为 Agent 工具)
│
└─ solon-serialization-snack4(JSON 序列化)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
可选扩展模块(按需引入,不内嵌于 harness):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
┌─ solon-ai-skill-memory(长期记忆 + 心智模型) ← 重点
│ ├── MemSkill(5 大核心操作:提取/搜索/召回/巩固/修剪)
│ ├── RedisClient KV 存储 + Lucene 语义索引
│ ├── 基于重要性的动态 TTL 过期策略
│ └── 心智模型自动注入(作为 Agent "前意识")
│
├─ solon-ai-skill-diff(文本差异对比)
├─ solon-ai-skill-lucene(Lucene 搜索技能)
├─ solon-ai-skill-mail / pdf / data / file / ...(更多生态技能)
└─ HarnessExtension SPI 插件(~/.soloncode/extensions/ 目录)
设计哲学: 「克制而有力」。不追求一个大而全的 Builder 类堆砌 30+ 配置项,而是通过 HarnessProperties 统一配置 + HarnessEngine 核心编排 + 各专能模块协作的方式,保持每个类的职责单一。依赖包按能力域清晰拆分(cli / web / lsp / restapi / toolgateway / memory),开发者可按需引入。同时,通过 HarnessExtension 扩展点和 CommandRegistry 命令注册表,提供极强的可定制性。
// 配置属性
HarnessProperties props = new HarnessProperties(".solon/");
props.addTools(ToolPermission.TOOL_ALL_FULL);
props.setWorkspace("/path/to/workspace");
props.setSandboxMode(true);
props.setHitlEnabled(true);
// 构建引擎
HarnessEngine engine = HarnessEngine.of(props)
.sessionProvider(sessionProvider)
.build();
// 使用主代理
engine.prompt("分析当前项目的技术栈")
.session(session)
.options(o -> {
o.toolContextPut(HarnessEngine.ATTR_CWD, "/path/to/project");
})
.call();
2.3 架构哲学对比
| 维度 | agentscope-harness | solon-ai-harness |
|---|---|---|
| 设计理念 | 单体式增强运行时,单一 Builder 类 | 引擎式编排框架,Properties + Engine + 模块协作 |
| 最低 JDK | 17+(使用 sealed class、record 等新语法) | 8+(兼容性更广,覆盖信创国产化场景) |
| 核心抽象 | HarnessAgent(30+ Builder 配置项) |
HarnessEngine(引擎核心)+ HarnessProperties(配置) |
| 文件系统 | 内置 3 种模式(本地/远程/沙箱) | 本地文件系统 + 沙箱模式(sandboxMode 开关) |
| 响应式 | 基于 Project Reactor(Mono/Flux) | 基于 Project Reactor(stream() 流式输出) |
| 学习曲线 | 较陡(30+ Builder 配置项) | 中等(配置驱动 + 清晰的模块边界) |
| 核心依赖 | agentscope-core | solon-ai-agent、solon-ai-skill-* 系列模块 |
三、核心功能深度对比
3.1 工作区管理(Workspace)
agentscope-harness 的工作区管理极为丰富:
- 自动加载
AGENTS.md、MEMORY.md、KNOWLEDGE.md等上下文文件 - 支持自定义额外上下文文件(如
SOUL.md、PREFERENCE.md) WorkspaceManager统一管理文件系统的所有读写操作- Token 预算控制(
maxContextTokens,默认 8000) - 三种文件系统后端:本地、远程、Docker 沙箱
solon-ai-harness 的工作区管理有完整的目录结构约定:
{harnessHome}/
├── sessions/ # 会话存储(支持 FileAgentSession 持久化)
├── skills/ # 技能定义(Markdown 格式)
├── agents/ # 子代理定义(Markdown + YAML Frontmatter)
├── memory/ # 主代理记忆
├── commands/ # 自定义命令
├── download/ # 下载缓存
└── channels/ # 连接通道
- 配置加载有明确的优先级链:资源文件 → 工作区配置 → 用户目录配置 → 程序旁边配置
- 系统提示词通过
AGENTS.md文件定义,支持工作区和用户目录两级配置 - 会话支持
FileAgentSession持久化,可在~/.soloncode/sessions/下跨会话恢复
3.2 安全机制(Sandbox & HITL)
agentscope-harness 在沙箱方面投入巨大:
- 完整的 Docker 沙箱生命周期管理(
SandboxManager、SandboxLifecycleHook) - 分布式沙箱支持(
SandboxDistributedOptions),跨实例的状态恢复 - 基于 Redis 的执行守卫(
RedisSandboxExecutionGuard) - 工作区快照(
SandboxSnapshotSpec),支持归档提取和恢复
solon-ai-harness 采用了「沙箱模式 + HITL 安全审计」的双重安全策略:
- 沙箱模式(
sandboxMode):终端操作在受限模式下运行,禁止绝对路径、系统目录删除、网络配置修改等危险操作 - HITL 人工介入(
HitlStrategy):对 bash 命令进行多层安全审计——- 命令注入防御(拦截反引号、
$(...)、设备重定向) - 系统级安全(拦截 sudo/chown/chmod/kill/reboot)
- 路径边界(禁止
../回溯和敏感目录访问) - 包管理变更拦截(install/remove/commit)
- 网络行为拦截(curl/wget/ssh)
- 管道安全限制(只允许只读工具链)
- 文件操作拦截(递归删除 rm -rf 和文件移动 mv)
- 命令注入防御(拦截反引号、
- 通过
HITLInterceptor拦截器实现,可在引擎构建时自定义拦截规则
3.3 上下文摘要与会话管理(Context Engineering)
agentscope-harness 的记忆系统是一大亮点:
- 三层记忆架构:短期记忆 + 长期记忆 + 工作区记忆(
MEMORY.md) - 自动刷盘:
MemoryFlushHook在模型调用前后自动将记忆持久化到工作区 - 智能压缩:
CompactionHook在上下文溢出时自动触发对话压缩 - 紧急恢复:上下文溢出时自动降低阈值强制压缩并重试
- 工具结果驱逐:
ToolResultEvictionHook将超大工具输出卸载到文件系统
solon-ai-harness 的上下文工程体系同样完善:
- SummarizationInterceptor(摘要拦截器):当 Token 接近上限时自动触发摘要压缩
- 采用
CompositeSummarizationStrategy组合策略:KeyInfoExtractionStrategy:提取关键信息("去水")HierarchicalSummarizationStrategy:分层滚动更新摘要
- 可配置
summaryWindowSize(默认 30)和summaryWindowToken(默认 30000) - 支持独立的摘要模型(
summaryModel),可使用更便宜的模型执行摘要任务
- 采用
- AgentSessionProvider:会话持久化接口,支持自定义实现
- 内置
InMemoryAgentSession(内存会话) - 内置
FileAgentSession(文件持久化会话,支持断点续传)
- 内置
- sessionWindowSize(默认 8):控制短期工作记忆窗口大小
- autoRethink(自我反思):Agent 在达到步数上限时可自动反思并扩展
此外,solon-ai-harness 还可通过引入 solon-ai-skill-memory 模块获得长期记忆与心智模型能力,形成"短期摘要 + 长期心智"的双层记忆架构。详见第 3.8 节。
3.4 子智能体编排(Subagent)
agentscope-harness 的子智能体系统非常成熟:
- 声明式子智能体(通过
subagents/*.md文件定义) - 叶子节点保护(子智能体不能递归生成子智能体)
- 后台执行和会话持久化
- 模型覆盖(子智能体可独立指定模型)
solon-ai-harness 的子智能体编排同样功能完备:
- TaskSkill:内置
task和multitask两个工具task:委派单一任务给专项子代理(串行执行)multitask:并行执行多个互不依赖的子任务
- AgentDefinition:支持 Markdown + YAML Frontmatter 格式定义子代理
--- name: code_reviewer description: 代码审查专家 tools: - read - grep - bash maxTurns: 10 --- 你是一个资深的代码审查专家... - AgentManager:代理管理器,支持多级代理池(全局
~/.soloncode/agents/+ 本地{workspace}/.soloncode/agents/) - GenerateTool:运行时动态创建子代理并持久化到文件
- AgentFactory:根据
AgentDefinition自动构建ReActAgent,独立配置工具权限和步数 - 子代理支持独立的工具权限隔离(上下文隔离)
3.5 工具体系(Tools)
agentscope-harness 的内置工具:
- 文件操作工具(读/写/搜索)
- Shell 执行工具
- 记忆搜索/获取工具
- 会话搜索工具
solon-ai-harness 拥有极为丰富的工具体系,18+ 细粒度权限控制:
| 权限 | 说明 |
|---|---|
read |
读取文件完整内容 |
write |
写入文件完整内容 |
edit |
修改文件内容(含 read+write+edit) |
bash |
运行 Shell 命令 |
glob |
使用模式匹配查找文件 |
grep |
基于正则表达式的全文检索 |
ls/list |
列出目录内容 |
webfetch |
抓取网页内容 |
websearch |
互联网搜索 |
codesearch |
代码仓库搜索 |
skill |
调用预定义的专家技能模块 |
code |
编码指导模块 |
todo |
任务清单管理 |
mcp |
MCP 服务工具 |
restapi |
REST API 工具 |
task |
调度子代理 |
generate |
动态创建子代理 |
hitl |
人工介入拦截 |
lsp |
LSP 语言服务协议集成 |
* |
全部公开工具 |
** |
全部工具(含私有) |
此外还具备:
- CliSkillProvider:技能池管理器,支持多级技能池(
@global、@local、@skills、@skillhub) - CodeSkill:代码工程规约技能,自动识别技术栈(Maven/Node),生成构建与测试指令
- LspSkill:LSP 语言服务协议集成,支持代码诊断、类型信息等 IDE 级别的能力
- ToolGatewaySkill(MCP 网关):动态加载 MCP Server 工具
- RestApiSkill:将 REST API 作为 Agent 工具调用
- CommandRegistry:自定义命令注册表
3.6 生命周期与拦截器
agentscope-harness 内置 8+ 个生产级钩子(Hooks):
| Hook | 功能 |
|---|---|
AgentTraceHook |
智能体推理和工具执行的链路追踪 |
CompactionHook |
对话上下文自动压缩 |
MemoryFlushHook |
记忆自动刷盘 |
MemoryMaintenanceHook |
记忆维护和合并 |
SandboxLifecycleHook |
沙箱生命周期管理 |
SessionPersistenceHook |
会话自动持久化 |
SubagentsHook |
子智能体编排调度 |
ToolResultEvictionHook |
工具结果自动驱逐 |
WorkspaceContextHook |
工作区上下文注入 |
所有钩子都可以通过 disable*() 方法独立禁用。
solon-ai-harness 采用「内置拦截器 + 自由扩展」双层架构:
- SummarizationInterceptor:上下文摘要拦截器,基于组合策略自动压缩
- HITLInterceptor:人工介入拦截器,对高危工具调用进行安全审计
- 拦截器可在引擎构建时通过 Builder 注入自定义实现
- HarnessExtension 扩展点:通过
addExtension()自由扩展引擎行为(详见第 3.9 节)
3.7 协议支持
| 协议 | agentscope-harness | solon-ai-harness |
|---|---|---|
| MCP(工具集成) | ✅ 通过 agentscope-core | ✅ ToolGatewaySkill(MCP 网关) |
| ACP(Agent 协作协议) | ❌ 未内置 | ✅ 支持 stdio/WebSocket 传输 |
| REST API 集成 | ❌ 未内置 | ✅ RestApiSkill |
| LSP(语言服务协议) | ❌ 未内置 | ✅ LspSkill + LspManager |
| A2A(多智能体协作) | ✅ agentscope-extensions-nacos-a2a | 通过 ACP 协议实现 |
| OpenTelemetry | ✅ 可插拔 Tracer SPI | ✅ 通过 Solon 可观测插件 |
3.8 长期记忆与心智模型:solon-ai-skill-memory
前面提到 agentscope-harness 拥有令人印象深刻的三层记忆架构。solon-ai-harness 虽然没有将记忆模块内嵌为必须依赖,但通过可选引入 solon-ai-skill-memory(org.noear:solon-ai-skill-memory,v3.9.5+),提供了另一种更具启发性的记忆范式——心智模型(Mental Model)。
核心设计理念:不是简单地「存储和检索」,而是模拟人类认知过程,让 Agent 拥有「提取 → 搜索 → 召回 → 巩固 → 修剪」的完整认知循环。
五大核心操作(通过 @ToolMapping 暴露为 Agent 工具):
| 操作 | 方法名 | 说明 |
|---|---|---|
| 提取 | mem_extract |
将事实、偏好或进度存入心智模型。若同名 Key 已存在,返回旧记录触发"认知对比"反思 |
| 语义搜索 | mem_search |
通过自然语言描述在心智模型中寻找相关记忆碎片 |
| 精确召回 | mem_recall |
通过 Key 获取该认知条目的完整细节 |
| 认知巩固 | mem_consolidate |
将多个低层事实碎片整合为高层偏好模型(importance 自动设为 10,永久存储) |
| 认知修剪 | mem_prune |
删除错误、重复或过时的认知 |
基于重要性的动态 TTL 过期策略:
| 重要性评分(importance) | TTL | 说明 |
|---|---|---|
| ≥ 10 | 永久存储(-1) | 生命周期关键点 |
| 5 ~ 9 | 30 天 | 核心规约、行为偏好 |
| 1 ~ 4 | 7 天 | 琐碎事实、临时细节 |
两层存储架构:
| 层级 | 技术 | 职责 |
|---|---|---|
| KV 存储 | RedisClient | 主存储,结构化记忆数据,基于 importance 的 TTL 物理过期 |
| 语义索引 | Lucene(或向量数据库) | 多租户隔离的语义检索,支持模糊/自然语言搜索 |
心智模型自动注入:这是最精妙的设计。MemSkill 覆写了 AbsSkill.getInstruction(Prompt) 方法,在每次对话开始前自动注入高价值"热记忆"作为 Agent 的"前意识"——不需要 Agent 主动调用工具检索,心智模型已经在它的"潜意识"中了。
// 集成示例(solon-ai-skill-memory 为可选依赖)
MemSearchProvider memSearch = new MemSearchProviderLuceneImpl();
MemSkill memSkill = new MemSkill(redisClient, memSearch);
// 通过 HarnessExtension 注入到引擎
props.addExtension((agentName, builder) -> {
builder.defaultSkillAdd(memSkill);
});
对比 agentscope-harness 的记忆系统:
| 维度 | agentscope-harness | solon-ai-skill-memory |
|---|---|---|
| 架构方式 | 内嵌必须依赖 | 可选引入,按需加载 |
| 存储后端 | 文件系统(MEMORY.md)+ 可选长期记忆 | Redis + Lucene 双层 |
| 记忆生命周期 | 刷盘 + 压缩 + 合并 | 提取 + 搜索 + 召回 + 巩固 + 修剪 |
| 过期策略 | 无自动过期 | 基于重要性的动态 TTL |
| 认知模型 | 无 | 有(心智模型 + 自动注入前意识) |
| 多租户 | 无 | 有(userId 隔离) |
3.9 自由扩展:addExtension 机制
如果说 agentscope-harness 的扩展方式是「在 Builder 中预设所有选项」,那么 solon-ai-harness 的 addExtension 则提供了编程式的无限扩展可能。
HarnessExtension 接口定义(v3.10.4+,@Preview):
@Preview("3.10")
public interface HarnessExtension {
/**
* 配置代理
* @param agentName 当前代理名称(主代理为 "__main__")
* @param agentBuilder ReActAgent.Builder 实例,可自由定制
*/
void configure(String agentName, ReActAgent.Builder agentBuilder);
}
这个接口极为简洁——只有一个方法。但正是这种简洁,赋予了它无限的组合可能。
三种注册方式:
// 方式一:编程式注册(最直接)
HarnessProperties props = new HarnessProperties(".solon/");
props.addExtension((agentName, builder) -> {
// 添加自定义工具
builder.defaultToolAdd(myCustomTool);
// 添加自定义技能
builder.defaultSkillAdd(mySkill);
// 添加生命周期拦截器
builder.defaultInterceptorAdd(new ReActInterceptor() {
@Override
public void onAgentStart(ReActTrace trace) {
System.out.println("任务要开始了...");
}
@Override
public void onReason(ReActTrace trace, AssistantMessage message) {
System.out.println("又思考了...");
}
@Override
public ChatResponse interceptCall(ChatRequest req, CallChain chain) throws IOException {
System.out.println("要调用工具了...");
return chain.doIntercept(req);
}
});
});
// 方式二:YAML 配置声明
// config.yml:
// soloncode:
// extensions:
// - "com.example.MyExtension"
// 方式三:Solon SPI 自动装配(推荐,即插即用)
// 1. 实现 HarnessExtension 接口
// 2. 创建 Plugin 类注册到 Solon 容器
// 3. 在 META-INF/solon/ 下声明 SPI
// 4. JAR 包放入 ~/.soloncode/extensions/ 目录
通过 Extension 可操作的 Agent Builder 能力:
| 方法 | 能力 |
|---|---|
defaultToolAdd(Tool) |
添加自定义工具 |
defaultSkillAdd(Skill) |
添加自定义技能 |
defaultInterceptorAdd(ReActInterceptor) |
添加生命周期拦截器 |
systemPrompt(Function) |
设置/覆盖系统提示词 |
maxSteps(int) |
设置最大推理步数 |
autoRethink(boolean) |
启用/禁用自我反思 |
sessionWindowSize(int) |
设置会话窗口大小 |
defaultToolContextPut(String, Object) |
注入工具上下文变量 |
关键设计细节:每个代理创建时(包括主代理和所有子代理),所有注册的 Extension 都会被逐一调用。这意味着你可以:
- 为所有代理统一注入日志/审计拦截器
- 为特定代理注入专项工具
- 动态调整不同代理的行为参数
与 agentscope-harness 的对比:
| 维度 | agentscope-harness | solon-ai-harness |
|---|---|---|
| 扩展方式 | Builder 预设选项 + Hook SPI | HarnessExtension 接口 + SPI 自动装配 |
| 扩展粒度 | Agent 级别 | 代理级 + 全局级(按 agentName 区分) |
| 工具注入 | 构建时固定 | 运行时动态 |
| 第三方插件 | 需手动集成 | JAR 包放入 extensions/ 即插即用 |
四、模型管理与多模型支持
agentscope-harness:
- 通过字符串模型 ID 指定模型(如
"openai:gpt-5.5") - 子智能体可独立指定模型
solon-ai-harness 的模型管理更加灵活:
HarnessProperties支持配置多个ChatConfig(List<ChatConfig> models)- 支持运行时动态切换主模型:
engine.switchMainModel("gpt-5.5") - 通过
getModelOrMain(name)方法按名称获取模型 - 支持独立的摘要模型(
summaryModel),可用更便宜的模型执行摘要任务 - 模型支持重试配置(
modelRetries)、API 重试(apiRetries)、MCP 重试(mcpRetries) - 支持
UserAgent统一配置
五、开发者体验对比
5.1 上手难度
agentscope-harness:
- 优势:一个 Builder 搞定所有配置,文档齐全
- 挑战:30+ 配置项的选择困难,概念较多(IsolationScope、NamespaceFactory 等)
- 适合:需要快速搭建复杂 Agent 的团队,阿里云生态用户
solon-ai-harness:
- 优势:配置驱动(
HarnessProperties),API 直觉化(engine.prompt("...").call()) - 挑战:需了解 Solon 框架基础概念
- 适合:需要定制化 Agent 的团队,企业级开发场景
5.2 部署与兼容性
| 维度 | agentscope-harness | solon-ai-harness |
|---|---|---|
| JDK 版本 | 17+(强制) | 8 ~ 25(全兼容) |
| GraalVM 原生镜像 | 支持 | 支持(Solon 原生支持) |
| 信创国产化 | 需适配 | 天然支持(国产框架) |
| 启动速度 | 一般(Reactor 依赖链) | 极快(Solon 内核 0.3m) |
| 内存占用 | 中等 | 低(Solon 节省 50%) |
| 代码体积 | 大(9 大子系统) | 中等(引擎式精简) |
5.3 实战验证
agentscope-harness:阿里巴巴内部大规模使用,经过 AgentScope 生态的实战打磨。
solon-ai-harness:已在 SolonCode CLI 项目中经过了三个月的深度打磨与实战验证。SolonCode CLI 完全基于 solon-ai-harness 构建,是框架能力的最佳实战证明——支持 CLI 交互、Web 界面、ACP 协议三种运行模式。
六、代码风格对比:同一场景的不同写法
场景:创建一个带工作区、会话和安全的智能体
agentscope-harness 写法:
HarnessAgent agent = HarnessAgent.builder()
.name("CodeReviewer")
.model("openai:gpt-5.5")
.sysPrompt("你是一个代码审查专家。")
.workspace("/project/code-review")
.compaction(CompactionConfig.builder()
.triggerMessages(20).build())
.longTermMemory(redisLongTermMemory)
.longTermMemoryMode(LongTermMemoryMode.BOTH)
.enablePlan()
.build();
Msg response = agent.call(
Msg.userMsg("请审查这个 PR"),
RuntimeContext.builder()
.sessionId("review-001")
.userId("user-123")
.build()
).block();
solon-ai-harness 写法:
// 1. 配置属性
HarnessProperties props = new HarnessProperties(".solon/");
props.addTools(ToolPermission.TOOL_READ, ToolPermission.TOOL_GREP,
ToolPermission.TOOL_BASH);
props.setWorkspace("/project/code-review");
props.setSystemPrompt("你是一个代码审查专家。");
props.setSessionWindowSize(8);
props.setSummaryWindowSize(30);
props.setSandboxMode(true);
props.setHitlEnabled(true);
props.addModel(ChatConfig.of("openai:gpt-5.5").build());
// 2. 会话提供者
AgentSessionProvider sessionProvider =
sessionId -> new FileAgentSession(sessionId, "/project/.solon/sessions/" + sessionId);
// 3. 构建引擎
HarnessEngine engine = HarnessEngine.of(props)
.sessionProvider(sessionProvider)
.build();
// 4. 执行任务
AgentSession session = engine.getSession("review-001");
engine.getMainAgent().prompt("请审查这个 PR")
.session(session)
.call();
场景:动态创建一个代码审查子代理
agentscope-harness 写法:
// 通过配置在 subagents/ 目录下定义,或通过 Builder 添加
HarnessAgent agent = HarnessAgent.builder()
.subagent(SubagentSpec.builder()
.name("code_reviewer")
.model("openai:gpt-4o-mini")
.build())
.build();
solon-ai-harness 写法:
// 方式一:代码动态创建
AgentDefinition definition = new AgentDefinition();
definition.setSystemPrompt("你是一个代码审查专家。");
definition.getMetadata().addTools(ToolPermission.TOOL_READ, ToolPermission.TOOL_GREP);
definition.getMetadata().setMaxSteps(10);
ReActAgent subagent = engine.createSubagent(definition).build();
subagent.prompt("审查 src/main/java 目录下的代码")
.session(session)
.call();
// 方式二:通过 Markdown 文件定义(agents/code_reviewer.md)
// 方式三:通过 GenerateTool 让 AI 动态创建
七、选型建议
选 agentscope-harness 的场景:
- 重度 Docker 隔离需求:需要完整的容器化沙箱、分布式会话管理
- 阿里云生态用户:与 DashScope、百炼等服务深度集成
- 三层记忆架构:需要短期/长期/工作区三层记忆管理和语义搜索
- 快速原型验证:一个 Builder 搞定所有,适合快速验证想法
选 solon-ai-harness 的场景:
- 信创国产化项目:需要国产框架,兼容 JDK 8 老系统
- 已有 Solon 项目:零迁移成本,无缝集成
- 追求轻量与高性能:对启动速度和内存有严格要求(微服务、Serverless)
- 需要 REST API/LSP/ACP 集成:框架内置这些能力,无需额外开发
- 多模型动态切换:运行时灵活切换不同模型
- 细粒度工具权限控制:18+ 权限项,精确控制 Agent 能力边界
- 定制化 CLI/Web/协议智能体:已有 SolonCode CLI 作为实战参考
共存场景:
对于大型企业,两者并不冲突:
- 新项目(JDK 17+,阿里云部署,Docker 隔离需求强)可用 agentscope-harness
- 老项目改造(JDK 8,信创要求,轻量级需求)可用 solon-ai-harness
- 通过 ACP/A2A 等协议,两个框架的 Agent 可以互相发现和调用
八、总结
| 维度 | agentscope-harness | solon-ai-harness |
|---|---|---|
| 功能完备性 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 架构复杂度 | 高 | 中 |
| 上手难度 | 中高 | 中 |
| JDK 兼容性 | 17+ | 8 ~ 25 |
| 沙箱隔离 | ⭐⭐⭐⭐⭐(Docker 级) | ⭐⭐⭐⭐(策略级) |
| 工具丰富度 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐(18+ 权限) |
| 上下文工程 | ⭐⭐⭐⭐⭐(三层记忆) | ⭐⭐⭐⭐⭐(组合策略摘要 + 可选心智模型) |
| 长期记忆 | ⭐⭐⭐⭐(内置) | ⭐⭐⭐⭐⭐(solon-ai-skill-memory,动态 TTL + 认知巩固) |
| 协议支持 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐(MCP/ACP/REST/LSP) |
| 模型管理 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐(多模型动态切换) |
| 可扩展性 | ⭐⭐⭐⭐(Hook SPI) | ⭐⭐⭐⭐⭐(addExtension + SPI 即插即用) |
| 生产就绪度 | 高(大厂背书) | 高(SolonCode CLI 验证) |
一句话总结:
agentscope-harness 是一座装备齐全的军事堡垒——Docker 沙箱、三层记忆、分布式会话,重型场景一应俱全。solon-ai-harness 是一台精密的组合机床——18+ 工具权限、MCP/ACP/REST/LSP 四协议集成、多模型动态切换、心智模型可选加载、addExtension 无限扩展,灵活而强大。
两者代表了 Java AI 智能体运行时的两种哲学:深度防护 vs 广度赋能。选择哪个,取决于你的场景——需要 Docker 级隔离选 agentscope,需要协议广覆盖和工具细粒度控制选 solon。但无论如何,Java 开发者在 AI Agent 时代,终于有了真正强大的选择。
本文基于 agentscope-java main 分支和 Solon AI v3.10.5 的公开源码进行分析,最后更新:2026-05-13。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
上一篇:Java Map 循环:遍历方式与性能对比
下一篇:OOP2:数组

