13.10 OpenAPI 工具

`rust-agent-openapi` 从 OpenAPI 3.x 规范解析 HTTP 操作并实例化为 `ITool`,支持 path/query/header 参数、Bearer 安全方案和可选的响应 JSON Schema 校验。

核心类型

| 类型 | 说明 | |------|------| | `OpenApiSpec` | 解析后的规范对象 | | `OpenApiHttpTool` | 单个操作的 HTTP 工具实现 | | `OpenApiToolResolver` | 从 URL 或 JSON 字符串解析工具 | | `OpenApiToolConfig` | `spec_url`、`operation_id`、`tool_name`、`base_url` |

代码注册

use rust_agent_openapi::{OpenApiToolConfig, OpenApiToolResolver};

let tool = OpenApiToolResolver::resolve(&OpenApiToolConfig {
    tool_name: "get_pet".into(),
    spec_url: "file://./petstore.yaml".into(),
    operation_id: Some("getPetById".into()),
    base_url: None,
})
.await?;

AgentBuilder::new("api-agent")
    .chat_client(client)
    .with_tool(tool)
    .build()?;

响应 Schema 校验

启用 `validate` feature 后,工具执行结果会按 operation 的 `200`/`201`/`204` 响应 schema 校验(使用 `jsonschema`):

rust-agent-openapi = { version = "0.1", features = ["validate"] }
rust-agent-decl = { version = "0.1", features = ["openapi", "openapi-validate"] }

校验失败时 `ToolResult.ok` 为 `false`,结果 JSON 含 `schema_valid: false` 和 `schema_error` 字段。

声明式配置

tools:
  - kind: openapi
    name: get_pet
    specUrl: file://./openapi/petstore.yaml
    operationId: getPetById

需 `rust-agent-decl` 的 `openapi` feature;CLI 默认启用 `openapi-validate`。

规范解析能力

- `$ref` 解析(components/schemas、parameters、responses) - 嵌套 object/array schema 深度展开 - Path 参数替换、query/header 参数注入 - `securitySchemes` Bearer token(从工具参数或环境注入)