Solon v4.0.2

harness - OpenAPI 业务接口接入

</> markdown
2026年6月14日 下午11:44:58

马具可以把现有的 HTTP 业务接口(OpenAPI 文档)接入为 Agent 可调用的工具,让 Agent 直接调用你的业务系统。接入以 docUrl(OpenAPI 文档地址)为唯一标识,支持 OpenAPI v2 / v3 文档。

1、构建期静态注册

HarnessEngine engine = HarnessEngine.of("work", ".soloncode/")
        .sessionProvider(sessionProvider)
        .toolsAdd(ToolPermission.TOOL_RESTAPI)        // 开启 restapi 工具权限
        .apiServerAdd("orders", new ApiSource().then(s -> {
            s.setDocUrl("https://api.example.com/v3/api-docs");  // OpenAPI 文档地址(唯一标识)
            s.setApiBaseUrl("https://api.example.com");          // 接口基地址
        }))
        .build();

ApiSource 也可用标准 setter 逐项设置:

ApiSource source = new ApiSource();
source.setDocUrl("https://api.example.com/v3/api-docs");
source.setApiBaseUrl("https://api.example.com");
source.addHeaderVar("Authorization", "Bearer ${token}");   // 透传请求头
source.addAllowedTool("getOrder");                          // 只暴露指定接口

2、ApiSource 字段说明

字段默认值描述
docUrl/OpenAPI 文档地址,作为该 API 源的唯一标识
apiBaseUrl/接口基地址(覆盖文档中的 server 地址)
headers/自定义请求头(可用 addHeaderVar 追加)
allowedTools/白名单,仅暴露列出的接口为工具
disallowedTools/黑名单,排除列出的接口
timeout/请求超时(Duration
authenticator/鉴权器(ApiAuthenticator
enabledtrue是否启用

接口工具的暴露由 allowedTools / disallowedTools 共同裁剪:先取白名单(为空则全取),再剔除黑名单。

3、运行时动态管理

engine.addApiServer(apiSource);          // 添加(以 docUrl 为标识)
engine.getApiServer(docUrl);             // 获取 ApiSourceClient
engine.refreshApiServer(docUrl);         // 刷新(权限/文档变更后)
engine.removeApiServer(docUrl);          // 移除
engine.getApiServers();                  // 全部 API 源

ApiSourceClient 可查看该源解析出的接口工具:

ApiSourceClient client = engine.getApiServer(docUrl);
client.getTools();             // 全部接口工具
client.getToolsActivated();    // 经白/黑名单裁剪后实际生效的工具

4、说明