[AI66-6]FTO Search - Optimize Query Iteratively
Runs multiple rounds of recall evaluation and automatic query rewriting on the aggregated query, internally running every round until convergence or the max_iterations cap in one call (unlike the MCP side's single-round heartbeat mode). When the query is omitted, it is read back from this task's history. Takes 3-15 minutes. POST returns running immediately; poll GET /fto_steps/iterative_optimization/{task_id} for the result.
Request Parameters
List of parameters supported by this API endpoint
| Name | Type | Example | Description |
|---|---|---|---|
| string | fto-20260928-a1b2c3d4 | Task ID. Auto-generated as fto-{yyyymmdd}-{8-hex} on first call when omitted (same format as resolve_task_id in app/fto_mcp/context.py). Later steps must reuse the same task_id to read upstream artifacts. |
| string | cn | Input language: cn / en / tw / jp. This step does not currently use this field (kept for compatibility, safe to ignore). |
| string | 一种折叠屏电子设备的转轴结构,包括壳体、同步旋转机构与快拆锁定件…… | Technical proposal description. When omitted, it is read back by task_id from a prior artifact (usually the refined result of proposal_refine, or an earlier raw proposal already persisted). Returns 422 when neither is available. |
| string | (AUTHORITY:(CN) AND SIMPLE_LEGAL_STATUS:(1 OR 2)) AND (TAC_ALL:(防漏隔边 OR 防漏侧边)) | The complete aggregated query, taken from aggregated_query of query_generation. When omitted, it is read back from this task's history as the last query with generation_method "auto_combined"; returns 422 when neither is available. |
| array | [
{
"query": "TAC_ALL:(防漏隔边 OR 防漏侧边)",
"sequence": "S1",
"actual_query": "TAC_ALL:(防漏隔边 OR 防漏侧边)",
"is_available": true,
"result_count": 18624,
"is_combination": false
}
] | The complete query list needed to continue iterating (not only the aggregated one). When omitted, it is read back from this task's history; falls back to an empty list when unavailable (affecting where the sequence counter starts). |
| object | {
"tech_field": "折叠屏设备转轴的同步旋转与快拆锁定结构",
"search_elements": []
} | Feature extraction result, used as technical context when attributing or rewriting clauses. Defaults to an empty dict when omitted, which does not block the main flow but leaves attribution descriptions without technical background. |
| array | [
"CN"
] | List of patent authorities. When omitted, reads back user_input_filter.country persisted by create_task, defaulting to ["CN"] if still unavailable. |
| integer<int32> | 10 | Maximum number of iteration rounds, 10 by default; internally runs every round until convergence or this cap before returning. |
Response Schema
Structure of the API response data
| Field Name | Type | Example | Description |
|---|---|---|---|
statusRequired | string | running | Status right after submission, always running; the actual execution happens in the background, poll with GET for the terminal state. |
task_idRequired | string | fto-20260928-a1b2c3d4 | Task ID; when the request body omits it, this is the value generated for this call. Later steps must carry it to continue the chain. |
step_nameRequired | string | proposal_refine | The submitted step name, matching the URL path. |
Success Response Example
Example of a successful API response
JSON
{
"status": true,
"task_id": "fto-20260928-a1b2c3d4",
"step_name": "proposal_refine",
"error_code": 0
}Error Codes
List of possible error codes returned by this endpoint
Business Errors
| Error Code | Description |
|---|---|
68300004 | Invalid parameter! |
68300005 | Search api failure! |
68300006 | Analytic basic access error! |
68300007 | Bad request! |
68300008 | Service error, please try again later! |
68300010 | The file does not comply with upload specifications! |
Platform Errors
| Error Code | Description |
|---|---|
67200000 | API call exceeds the total limit set by the platform! |
67200001 | API call exceeds the total limit set by the platform! |
67200002 | The current call rate is too fast, exceeding the current configuration limit QPS! |
67200003 | The key and secret parameters for applying for the token are incorrect or the client has been disabled! |
67200004 | The requested api does not have permission. Please contact our support personnel! |
67200005 | Insufficient account balance/number of calls! |
67200006 | The client has exceeded the activation validity period! |
67200007 | The current call exceeds the configured usage limit of the day! |
67200008 | Please check if the required apikey in the query parameter has been transmitted! |
67200009 | The apikey does not match the passed bearerToken. Please check if a valid token is being used! |
67200012 | The request is illegal! |
67200100 | The current server status is busy, request response timeout! |
67200101 | The API requested currently does not exist. Please check the request path! |
HTTP Status Codes
| Status Code | Description |
|---|---|
0 | Success |
422 | Validation Error |
409 | 同一 task_id 已有步骤正在运行 |