# web.rest.aiDecision 库模块帮助文档

<details>  <summary>接口说明</summary>  <p>

## AI 结构化决策客户端

`web.rest.aiDecision` 用于实现 OpenRouter Decisions 协议，不限定模型厂商；
目标模型与服务必须支持该协议。

- 默认端点：`https://openrouter.ai/api/alpha/decisions` ，或环境变量 `AI_DECISION_API_URL`
- 默认模型：`inception/mercury-decide`（仅 OpenRouter 端点）；构造参数或环境变量 `AI_DECISION_API_MODEL` 可覆盖
- 认证：构造参数 `key`，或环境变量 `AI_DECISION_API_KEY`
- 返回值保持 OpenRouter 的 `model / answers / usage` 结构，不转换成文本

`questions` 的各项可直接写为 `{type="noul";instructions="是否紧急？"}`，
也可简写为 `["noul","是否紧急？"]` 或 `[type,instructions,criteria]`。
`evaluate` 调用前统一将数组简写转换为协议对象，不改变调用者的数据；原生对象保留所有字段。
声明问题不会发送请求，只有调用 `evaluate` 才会请求模型。

所有决策模型在 OpenRouter 上使用相同的 `state / questions / model` 请求结构；
本库保留完整请求和原生问题对象的扩展字段，不硬编码模型清单、上下文长度或判定阈值。
这不表示各厂商的直连接口均兼容；更换模型后应重新评估中文样本与业务阈值。

`web.rest.aiDecision` 默认使用 mercury-decide 。
Jev（`~typesafe/jev-latest`）仅作为兼容选择（中文支持较差，不推荐用于中文任务）。
其他可用模型请参考 https://openrouter.ai/rankings/decisions?view=day#top-models

</p></details>

[» 使用指南](https://www.aardio.com/zh-cn/docs/library/web/rest/aiDecision/index.html) [» 范例](https://www.aardio.com/zh-cn/docs/examples/AI/aiDecision.html)

## web.rest 成员列表 <a id="web.rest" href="#web.rest">&#x23;</a>

### web.rest.aiDecision <a id="web.rest.aiDecision" href="#web.rest.aiDecision">&#x23;</a>
AI 结构化决策客户端。  
优先使用 mercury-decide，兼容 OpenRouter Decisions 协议。  
输入 state 与类型化 questions，返回结构化 answers；不绑定单一模型厂商。  
Jev 仅兼容，中文支持较差。

### web.rest.aiDecision() <a id="web.rest.aiDecision" href="#web.rest.aiDecision">&#x23;</a>
[返回对象:webRestAiDecisionObject](#webRestAiDecisionObject)

### web.rest.aiDecision(cfg) <a id="web.rest.aiDecision" href="#web.rest.aiDecision">&#x23;</a>
创建 AI Decisions 客户端。  
配置表可指定 key,model,url,extraHeaders,extraParameters 等字段。  
默认 url 为 `https://openrouter.ai/api/alpha/decisions`。  
OpenRouter 默认 model 为 `inception/mercury-decide`，构造参数与 AI_DECISION_API_MODEL 可覆盖。  
自定义服务需使用与之匹配的模型 ID 和 Decisions 协议。

## webRestAiDecisionObject 成员列表 <a id="webRestAiDecisionObject" href="#webRestAiDecisionObject">&#x23;</a>

### webRestAiDecisionObject._http <a id="webRestAiDecisionObject._http" href="#webRestAiDecisionObject._http">&#x23;</a>
inet.http客户端，用于执行 http 请求  

[返回对象:inetHttpObject](https://www.aardio.com/zh-cn/docs/library-reference/inet/http.html#inetHttpObject)

### webRestAiDecisionObject.answer(response,questionId) <a id="webRestAiDecisionObject.answer" href="#webRestAiDecisionObject.answer">&#x23;</a>
从响应中安全读取指定问题的答案。

### webRestAiDecisionObject.ask(state,questions,model) <a id="webRestAiDecisionObject.ask" href="#webRestAiDecisionObject.ask">&#x23;</a>
evaluate 的别名。

### webRestAiDecisionObject.buildPayload(request) <a id="webRestAiDecisionObject.buildPayload" href="#webRestAiDecisionObject.buildPayload">&#x23;</a>
完整请求表补充默认模型并转换问题数组简写；保留其他协议字段。

### webRestAiDecisionObject.buildPayload(state,questions,model) <a id="webRestAiDecisionObject.buildPayload" href="#webRestAiDecisionObject.buildPayload">&#x23;</a>
构造请求体但不发送请求。  
将 questions 中的数组简写转换为协议对象，不改变调用者数据；简写格式错误返回 null,err。

### webRestAiDecisionObject.close() <a id="webRestAiDecisionObject.close" href="#webRestAiDecisionObject.close">&#x23;</a>
关闭对象释放资源

### webRestAiDecisionObject.config <a id="webRestAiDecisionObject.config" href="#webRestAiDecisionObject.config">&#x23;</a>
API 配置表。  
由构造参数浅拷贝并补充环境变量与默认值；model、url 记录客户端选用的模型与端点。

### webRestAiDecisionObject.decisions(state,questions,model) <a id="webRestAiDecisionObject.decisions" href="#webRestAiDecisionObject.decisions">&#x23;</a>
evaluate 的别名。

### webRestAiDecisionObject.defaultHeaders <a id="webRestAiDecisionObject.defaultHeaders" href="#webRestAiDecisionObject.defaultHeaders">&#x23;</a>
替换所有请求默认添加的HTTP头  
请求结束时不会清空此属性  
该值可以是一个字符串,也可以是键值对组成的table对象

### webRestAiDecisionObject.evaluate(request) <a id="webRestAiDecisionObject.evaluate" href="#webRestAiDecisionObject.evaluate">&#x23;</a>
传入完整请求表调用 Decisions 接口。

### webRestAiDecisionObject.evaluate(state,questions,model) <a id="webRestAiDecisionObject.evaluate" href="#webRestAiDecisionObject.evaluate">&#x23;</a>
调用 Decisions 接口。  
questions 为问题 ID 到问题声明的表，各项支持原生对象或 [type,instructions[,criteria]] 数组简写，可混用。  
model 可省略；成功返回原始响应，失败返回 null,err[,errCode]。

### webRestAiDecisionObject.extraHeaders <a id="webRestAiDecisionObject.extraHeaders" href="#webRestAiDecisionObject.extraHeaders">&#x23;</a>
设置每次请求都附加的 HTTP 请求头，可在构造参数表中指定初始值。  
此属性值可以是 web.joinHeaders 函数支持的字符串、表（数组、键值对）

### webRestAiDecisionObject.extraParameters <a id="webRestAiDecisionObject.extraParameters" href="#webRestAiDecisionObject.extraParameters">&#x23;</a>
指定附加到所有请求参数中的默认参数，值为表。  
由底层 REST 客户端补充；模型应使用 model 配置，问题应放在 evaluate 的 questions 中。

### webRestAiDecisionObject.extraUrlParameters <a id="webRestAiDecisionObject.extraUrlParameters" href="#webRestAiDecisionObject.extraUrlParameters">&#x23;</a>
指定附加到所有请求 URL 的默认参数。  
该值可以是一个表或字符串。  
表参数使用 inet.url.stringifyParameters 转换为字符串。  
表中的值如果是函数则每次请求都调用该函数取值

### webRestAiDecisionObject.get(网址,参数表) <a id="webRestAiDecisionObject.get" href="#webRestAiDecisionObject.get">&#x23;</a>
使用该GET方法提交请求,获取资源  
请求参数将会自动转换为URL附加参数,  
请求参数可以指定表或字符串,如果是表请求前会转换为字符串  
成功返回数据,失败返回空值,错误信息,错误代码

### webRestAiDecisionObject.lastRequestUrl <a id="webRestAiDecisionObject.lastRequestUrl" href="#webRestAiDecisionObject.lastRequestUrl">&#x23;</a>
获取最后一次请求的 URL。  
允许的 beforeRequestHeaders 事件中修改此属性以改变请求地址。

### webRestAiDecisionObject.lastResponse() <a id="webRestAiDecisionObject.lastResponse" href="#webRestAiDecisionObject.lastResponse">&#x23;</a>
获取最后一次服务器返回的数据，流式调用时此函数返回值无意义。  
如果控制台已打开或在开发环境中导入 console 库则在控制台输出数据  
下载文件时该值为空

### webRestAiDecisionObject.lastResponseError() <a id="webRestAiDecisionObject.lastResponseError" href="#webRestAiDecisionObject.lastResponseError">&#x23;</a>
返回服务器最后一次返回的错误响应，并转换为错误对象。  
与调用 API 时转换响应数据一样，支持相同的服务器响应格式 。  
如果错误来自本地（lastStatusCode 属性为 null）则此函数返回 null 。  
如果最后一次发生请求成功，则此函数返回 null 。  

如果在参数 @1 中指定返回字段，且错误对象包含该字段则使用直接下标获取并返回字段值。  
获取字段失败返回 null 而非抛出异常

### webRestAiDecisionObject.lastResponseObject() <a id="webRestAiDecisionObject.lastResponseObject" href="#webRestAiDecisionObject.lastResponseObject">&#x23;</a>
获取最后一次服务器返回的 JSON 对象。  
请求失败或下载文件时为空。

### webRestAiDecisionObject.lastResponseString() <a id="webRestAiDecisionObject.lastResponseString" href="#webRestAiDecisionObject.lastResponseString">&#x23;</a>
获取最后一次服务器返回的原始数据，流式调用时此函数返回值无意义。  
请求失败，或者下载文件时此属性值为空

### webRestAiDecisionObject.lastStatusCode <a id="webRestAiDecisionObject.lastStatusCode" href="#webRestAiDecisionObject.lastStatusCode">&#x23;</a>
获取最近一次请求返回的HTTP状态码  
100 ~ 101 为信息提示  
200 ~ 206 表示请求成功  
300 ~ 305 表示重定向  
400 ~ 415 表求客户端请求出错  
500 ~ 505 表示服务端错误

### webRestAiDecisionObject.lastStatusMessage() <a id="webRestAiDecisionObject.lastStatusMessage" href="#webRestAiDecisionObject.lastStatusMessage">&#x23;</a>
获取最近返回的HTTP状态码文本描述  
第二个返回值为状态码

### webRestAiDecisionObject.noulValue(response,questionId) <a id="webRestAiDecisionObject.noulValue" href="#webRestAiDecisionObject.noulValue">&#x23;</a>
读取 Noul 答案的 yes 概率。

### webRestAiDecisionObject.ok() <a id="webRestAiDecisionObject.ok" href="#webRestAiDecisionObject.ok">&#x23;</a>
最后一次请求是否成功  
服务器应答并且状态码为2XX该函数返回真

### webRestAiDecisionObject.post(网址,参数表) <a id="webRestAiDecisionObject.post" href="#webRestAiDecisionObject.post">&#x23;</a>
使用该POST方法提交请求,新增或修改资源  
请求参数可以指定表或字符串,如果是表请求前会转换为字符串  
成功返回数据,失败返回空值,错误信息,错误代码

### webRestAiDecisionObject.referer <a id="webRestAiDecisionObject.referer" href="#webRestAiDecisionObject.referer">&#x23;</a>
引用页地址。  
如果此属性指定了一个值，则每次请求都会使用该引用页。  
如果不指定，每次请求都会自动设置上次请求的网址为引用页。  
这个属性不像 inet.http 对象的 referer 属性那样每次请求结束都会清空。

### webRestAiDecisionObject.setHeaders <a id="webRestAiDecisionObject.setHeaders" href="#webRestAiDecisionObject.setHeaders">&#x23;</a>
设置所有请求默认添加的HTTP头

### webRestAiDecisionObject.setHeaders(headers) <a id="webRestAiDecisionObject.setHeaders" href="#webRestAiDecisionObject.setHeaders">&#x23;</a>
参数 @headers 必须指定一个表中,  
用该表中的键值对更新 defaultHeaders 属性中的键值  
如果addHeaders的原属性值不是一个表,则先清空该属性

### webRestAiDecisionObject.setTimeouts(连接超时,请求超时,接收超时) <a id="webRestAiDecisionObject.setTimeouts" href="#webRestAiDecisionObject.setTimeouts">&#x23;</a>
设置 HTTP 超时，单位为毫秒。  
本库 evaluate 使用非流式 JSON 请求。

### webRestAiDecisionObject.systemOne(state,questions,model) <a id="webRestAiDecisionObject.systemOne" href="#webRestAiDecisionObject.systemOne">&#x23;</a>
evaluate 的别名。
