Skip to content

启发式收集

启发式收集允许服务端在工具执行期间请求用户额外输入。它取代了已弃用的采样机制(SEP-2577)。

表单模式

通过 JSON Schema 表单请求结构化用户输入:

cpp
ElicitRequestParams params;
params.message = "请提供您的收货地址";
params.requested_schema = JsonValue::Parse(R"({
    "type": "object",
    "properties": {
        "street": {"type": "string"},
        "city": {"type": "string"},
        "zip": {"type": "string"}
    },
    "required": ["street", "city", "zip"]
})");

auto future = server->Elicit(params);
auto result = future.get();
if (result.values) {
    auto street = (*result.values)["street"];
}

泛型类型化表单

使用 Elicit<T> 模板实现类型安全的启发式收集:

cpp
struct AddressForm {
    std::string street;
    std::string city;
    std::string zip_code;
};

auto future = server->Elicit<AddressForm>("请提供您的收货地址");
auto result = future.get();
if (result.is_accepted() && result.content) {
    auto& addr = *result.content;
    std::cout << addr.street << ", " << addr.city << "\n";
}

启发式收集结果

结果有三种取值:

动作含义
accept用户提交了表单
decline用户明确拒绝
cancel用户未操作直接关闭(默认)