Solon v4.1.0

harness - 配置参考

</> markdown
2026年9月7日 上午11:20:32

HarnessEngine 的配置示例:

HarnessEngine engine = HarnessEngine.of("work", ".soloncode/")
     .systemPrompt("你是一个 AI 助手")
     .sessionWindowSize(12)
     .compressionThreshold(100, 0.75D)
     .toolsAdd(ToolName.TOOL_ALL_FULL) // 设定工具权限
     .build();

可选配置:

1、核心配置项

配置项类型默认值描述
workspaceStringwork工作区
harnessHomeString.solon/马具主目录(例:.soloncode
systemPromptString/系统提示词
userAgentString/用户代理标识(会自动传播给所有模型)
toolsSet/工具权限配置(** = 所有公域与私域工具;* = 当前内置公域工具集合)
disallowedToolsSet/禁用工具配置(使用具体工具名)
defaultModelString/默认模型名(不指定则取 models 中第一个)
modelsMap/大模型配置
maxTurnsint20根代理最大循环步数
autoRethinkbooleantrue最大步数自动续航(由 LLM 反思控制)
sessionWindowSizeint12会话历史窗口大小(新指令时使用几条历史消息)
compressionMaxMessagesint100触发上下文压缩并在压缩后保留的消息数上限
compressionMaxContextRatiodouble0.75上下文压缩使用的模型上下文窗口比例;最终 Token 阈值为上下文长度乘以该比例
compressionModelString/压缩用大模型(不指定则使用主模型)
cacheControlCacheControl/缓存控制(用于 Anthropic 等支持 prompt caching 的模型)
skillProviderSkillProvider/技能提供者(可对接数据库等外部存储,不指定则用默认 MountManager)

models 模型配置参考:《模型配置与请求选项》

2、安全与行为配置

配置项类型默认值描述
sandboxEnabledbooltrue沙盒模式,启用时禁止访问绝对路径(只能访问工作区与用户主目录)
sandboxAllowUserHomebooltrue沙盒模式下允许访问用户主目录
sandboxSystemRestrictboolfalse沙盒系统级限制
hitlEnabledboolfalse是否启用人工审核(危险操作需人工确认)
subagentEnabledbooltrue是否启用子代理模式(自动委派任务给专家代理)
bashAsyncEnabledboolfalse是否启用 Bash 异步执行
memoryEnabledbooltrue是否启用心智记忆
apiRetriesint3API 重试次数
mcpRetriesint3MCP 重试次数
modelRetriesint3模型重试次数

3、扩展配置

配置项类型默认值描述
mountsMountDir/挂载配置(alias 须以 @ 开头)
mcpServersMap/Mcp 服务配置
apiServersMap/Web Api 服务配置
lspServersMap/LSP 服务配置
extensionsList/扩展接口配置
compressionInterceptorContextCompressionInterceptor自动创建上下文压缩拦截器;compressionModel(...) 已弃用,需要定制压缩模型时应自定义此拦截器
stopLoopInterceptorStopLoopInterceptor自动创建停止循环拦截器(默认参数:3 次连续相同错误 / 8 轮窗口)
hitlInterceptorHITLInterceptor自动创建人工介入拦截器(默认对 bash 工具绑定 BashToolStrategy
sessionProviderAgentSessionProvider/会话提供者;持久会话、engine.getSession(...) 和子任务场景应配置
memoryProviderMemorySolutionProvider/心智记忆存储方案

附录、工具权限配置选择(tools)

工具名类型描述
**-所有公域 + 私域工具
*-当前实现中的公域工具集合;memory 不在此集合中,需显式授权或使用 **
pi聚合微型命令行工具(read、write、edit、bash、bash_start、bash_wait、bash_stop)
hitl私域人工介入审核
generate私域动态生成子代理
openapi私域OpenAPI HTTP 接口接入(restapi 为兼容旧代号;Java 枚举使用 ToolName.TOOL_OPENAPI
mcp私域MCP 服务接入
lsp私域LSP 代码理解服务
code公域编码指引(自动分析项目类型、编译指令等)
codesearch公域网络代码搜索
websearch公域网络搜索
webfetch公域网页内容抓取
todo公域任务清单管理
skill公域专家技能调用
task公域子代理任务委派
bash公域Shell 命令执行
ls公域列出目录内容
grep公域递归内容搜索
glob公域通配符文件搜索
edit公域文件编辑(精准文本替换,支持多处原子编辑;含 write、read)
read公域读取文件内容
write公域写入文件内容
clock自动附加只要存在非空工具配置,ClockTalent 就会自动加入;它不是 * 的独立枚举项
memory私域心智记忆读写(MemoryTalent 提供);需显式授权或使用 **

附录、运行时动态修改

HarnessEngine 构建完成后,仍可在运行时动态调整工具权限与模型(变更后会自动重建主代理,使其立即生效)。

  • 动态调整工具权限
engine.allowTool("websearch"); // 动态授权一个工具
engine.disallowTool("bash"); // 动态禁用一个工具

engine.allowToolReset(Arrays.asList("read", "write", "edit")); // 仅重置白名单(allowedTools)
engine.disallowToolReset(Arrays.asList("bash")); // 仅重置黑名单(disallowedTools)
engine.toolPermissionReset(Arrays.asList("read", "write"), Arrays.asList("bash")); // 同时重置白/黑名单(避免两次重建)

三种重置方法的区别

  • allowToolReset(tools) — 仅重置白名单(allowedTools),黑名单不变;
  • disallowToolReset(tools) — 仅重置黑名单(disallowedTools),白名单不变;
  • toolPermissionReset(tools, disallowedTools) — 同时重置白/黑名单,触发一次主代理重建,比分别调用前两者更高效。
  • 动态管理模型
engine.addModel(new ChatConfig().then(c -> {
 c.setApiUrl("https://api.deepseek.com");
 c.setApiKey("sk-***");
 c.setModel("deepseek-v4-flash");
})); // 添加模型

engine.setDefaultModel("deepseek-v4-flash"); // 设定默认模型(影响主代理时自动刷新)
engine.removeModel("deepseek-v4-flash"); // 移除模型
  • 其它运行时配置
engine.setMaxTurns(30);
engine.setSessionWindowSize(12);
engine.setCompressionThreshold(100, 0.75D);
engine.setSandboxEnabled(true);
engine.setHitlEnabled(false);
engine.setSubagentEnabled(true);
engine.setMemoryEnabled(true);
engine.setCacheControl(CacheControl.of(...));
engine.setSystemPrompt("新的系统提示词");

// 上述两项只更新 Harness 配置;主代理已经创建时需显式刷新后才会生效
engine.refreshMainAgent();
  • 动态管理扩展
engine.addExtension((engineRef, agentName, agentBuilder) -> {
    // 自定义拦截器或工具注入
});
engine.removeExtension(extension); // 移除扩展(触发主代理重建)
  • 动态管理服务器与挂载点
// 动态添加 MCP 服务
engine.addMcpServer("my-mcp", mcpServerParameters);
engine.refreshMcpServer("my-mcp");
engine.removeMcpServer("my-mcp");

// 动态添加 OpenAPI 服务
engine.addApiServer(apiSource);
engine.refreshApiServer(docUrl);
engine.removeApiServer(docUrl);

// 动态添加 LSP 服务
engine.addLspServer("my-lsp", lspServerParameters);
engine.removeLspServer("my-lsp");

// 挂载点管理
engine.addMount(mountDir);
engine.removeMount("@alias");
engine.refreshMount(null);  // null 表示刷新所有