# web.rest.aiChat 库模块帮助文档

[调用 AI 大模型指南](https://www.aardio.com/zh-cn/doc/library-guide/std/web/rest/aiChat.md) [入门范例](https://www.aardio.com/zh-cn/doc/example/AI/aiChat.html) [temperature 参数](https://www.aardio.com/zh-cn/doc/guide/ide/ai.md#temperature)

## web.rest 成员列表 <a id="web.rest" href="#web.rest">&#x23;</a>

### web.rest.aiChat <a id="web.rest.aiChat" href="#web.rest.aiChat">&#x23;</a>
用于调用 Anthropic 或 OpenAI 兼容 AI 聊天接口。  
[范例](https://www.aardio.com/zh-cn/doc/example/Web/REST/aiChatCon.html)。  
如果需要 Web 聊天界面可参考 web.form.chat 库源码。

### web.rest.aiChat() <a id="web.rest.aiChat" href="#web.rest.aiChat">&#x23;</a>
[返回对象:webRestAiChatObject](#webRestAiChatObject)

### web.rest.aiChat(config) <a id="web.rest.aiChat" href="#web.rest.aiChat">&#x23;</a>

```aardio
web.rest.aiChat(  
	proxy = proxy,  
	model = "model-id",  
	temperature = 0.1,  
	maxTokens = 1024,  
	url = ""  
)/*创建 AI 聊天客户端。参数说明：  
- url 字段指定 OpenAI,Anthropic,Gemini 等兼容接口网址，如果网址只有域名没有路径则自动追加"/v1"后缀。  
接口网址兼容 Ollama，兼容豆包或通义智能体接口。  
- model 字段指定模型名称。  
- 可选用 proxy 字段指定代理服务器，代理格式: https://www.aardio.com/zh-cn/doc/library-guide/std/inet/proxy   
- 可选用 userAgent 字段指定用户代理。  
- 关于 temperature 参数请参考: https://www.aardio.com/zh-cn/doc/guide/ide/ai#temperature   
- 可选指定 topP，但一般建议调整 temperature 而不是 topP，topP 不指定保持默认值即可。  
- 可选用 maxTokens 限定最大回复长度。  
- 可选指定 tools 字段以支持 function call 。  
- 可选用 toolChoice 字段指定工具调用规则，默认值为 "auto"。   
- 可选用字段 stop 指定停止输出的 token 或 token 数组。  
- 可选使用 reasoning.effort / reasoning.maxTokens 字段控制推理强度。  
- 可选用 extraParameters, extraUrlParameters 字段指定附加参数表（table）*/
```

## webRestAiChatObject 成员列表 <a id="webRestAiChatObject" href="#webRestAiChatObject">&#x23;</a>

### webRestAiChatObject._http <a id="webRestAiChatObject._http" href="#webRestAiChatObject._http">&#x23;</a>
inet.http客户端，用于执行 http 请求  

[返回对象:inetHttpObject](https://www.aardio.com/zh-cn/doc/library-reference/inet/http.html#inetHttpObject)

### webRestAiChatObject._protocol <a id="webRestAiChatObject._protocol" href="#webRestAiChatObject._protocol">&#x23;</a>
会自动设置为 "openai","anthropic","google","vertex" 等值。  
可选在创建对象的构造参数中指定 protocol 的值（默认自动选择），  
但在创建对象以后不能再手动修改 protocol 属性。

### webRestAiChatObject.close() <a id="webRestAiChatObject.close" href="#webRestAiChatObject.close">&#x23;</a>
关闭对象释放资源

### webRestAiChatObject.defaultHeaders <a id="webRestAiChatObject.defaultHeaders" href="#webRestAiChatObject.defaultHeaders">&#x23;</a>
替换所有请求默认添加的HTTP头  
请求结束时不会清空此属性  
该值可以是一个字符串,也可以是键值对组成的table对象

### webRestAiChatObject.external <a id="webRestAiChatObject.external" href="#webRestAiChatObject.external">&#x23;</a>

```aardio
webRestAiChatObject.external = {
	getWeather = function(){
		return "24℃";
	};/*external 表用于定义的 AI 可以调用的函数。  
用于支持 OpenAI 兼容接口的 function calling 功能。  
创建 web.rest.aiChat 对象时，参数表必须通过 tools 字段声明允许被调用的函数。*/
}
```

### webRestAiChatObject.extraParameters <a id="webRestAiChatObject.extraParameters" href="#webRestAiChatObject.extraParameters">&#x23;</a>
指定附加到所有请求参数中的默认参数  
该值应当是一个表,请求参数指定表对象时或为null才会附加extraParameters

### webRestAiChatObject.extraUrlParameters <a id="webRestAiChatObject.extraUrlParameters" href="#webRestAiChatObject.extraUrlParameters">&#x23;</a>
指定附加到所有请求 URL 的默认参数。  
该值可以是一个表或字符串。  
表参数使用 inet.url.stringifyParameters 转换为字符串。  
表中的值如果是函数则每次请求都调用该函数取值

### webRestAiChatObject.get(网址,参数表) <a id="webRestAiChatObject.get" href="#webRestAiChatObject.get">&#x23;</a>
使用该GET方法提交请求,获取资源  
请求参数将会自动转换为URL附加参数,  
请求参数可以指定表或字符串,如果是表请求前会转换为字符串  
成功返回数据,失败返回空值,错误信息,错误代码

### webRestAiChatObject.lastRequestUrl <a id="webRestAiChatObject.lastRequestUrl" href="#webRestAiChatObject.lastRequestUrl">&#x23;</a>
获取最后一次请求的 URL。  
允许的 beforeRequestHeaders 事件中修改此属性以改变请求地址。

### webRestAiChatObject.lastResponse() <a id="webRestAiChatObject.lastResponse" href="#webRestAiChatObject.lastResponse">&#x23;</a>
获取最后一次服务器返回的数据，流式调用时此函数返回值无意义。  
如果控制台已打开或在开发环境中导入 console 库则在控制台输出数据  
下载文件时该值为空

### webRestAiChatObject.lastResponseError() <a id="webRestAiChatObject.lastResponseError" href="#webRestAiChatObject.lastResponseError">&#x23;</a>
返回服务器最后一次返回的错误响应，并转换为错误对象。  
与调用 API 时转换响应数据一样，支持相同的服务器响应格式 。  
如果错误来自本地（lastStatusCode 属性为 null）则此函数返回 null 。  
如果最后一次发生请求成功，则此函数返回 null 。  

如果在参数 @1 中指定返回字段，且错误对象包含该字段则使用直接下标获取并返回字段值。  
获取字段失败返回 null 而非抛出异常

### webRestAiChatObject.lastResponseObject() <a id="webRestAiChatObject.lastResponseObject" href="#webRestAiChatObject.lastResponseObject">&#x23;</a>
获取最后一次服务器返回的对象（已将响应文本解析为对象），  
如果是 SSE 流式调用，返回最后一次接受的包含 token 计数的对象  
请求失败，或者下载文件时此属性值为空。

### webRestAiChatObject.lastResponseString() <a id="webRestAiChatObject.lastResponseString" href="#webRestAiChatObject.lastResponseString">&#x23;</a>
获取最后一次服务器返回的原始数据，流式调用时此函数返回值无意义。  
请求失败，或者下载文件时此属性值为空

### webRestAiChatObject.lastStatusCode <a id="webRestAiChatObject.lastStatusCode" href="#webRestAiChatObject.lastStatusCode">&#x23;</a>
获取最近一次请求返回的HTTP状态码  
100 ~ 101 为信息提示  
200 ~ 206 表示请求成功  
300 ~ 305 表示重定向  
400 ~ 415 表求客户端请求出错  
500 ~ 505 表示服务端错误

### webRestAiChatObject.lastStatusMessage() <a id="webRestAiChatObject.lastStatusMessage" href="#webRestAiChatObject.lastStatusMessage">&#x23;</a>
获取最近返回的HTTP状态码文本描述  
第二个返回值为状态码

### webRestAiChatObject.listModels() <a id="webRestAiChatObject.listModels" href="#webRestAiChatObject.listModels">&#x23;</a>
返回接口支持的模型信息列表。  
有些服务端不支持这个接口。

### webRestAiChatObject.messages <a id="webRestAiChatObject.messages" href="#webRestAiChatObject.messages">&#x23;</a>
调用聊天会话接口。

### webRestAiChatObject.messages(msg) <a id="webRestAiChatObject.messages" href="#webRestAiChatObject.messages">&#x23;</a>
仅指用参数 @msg 指定聊天消息上下文（web.rest.aiChat.message 对象），  
省略其他参数时则直接返回服务器响应的最终数据，  
返回值是解析 JSON 响应数据得到的表对象。  
失败返回 null, 错误信息,错误代码。

### webRestAiChatObject.messages(msg,writeDelta,extraParams) <a id="webRestAiChatObject.messages" href="#webRestAiChatObject.messages">&#x23;</a>
调用聊天会话接口。  
- 可选用参数 @msg 指定 web.rest.aiChat.message 对象（这也是一个包含对话上下文的数组）。  
- 可选用参数 @writeDelta 指定 AI 以流式回复时接收文本的回调函数。  
	* @writeDelta 函数的回调参数 1 为文本时则应输出增量回复，回调参数为 null 时完成输出。  
	* @writeDelta 函数返回 false 停止接收回复。  
	* 如果不指定 @writeDelta 则函数直接返回最终结果（解析服务器回复 JSON 并返回表对象）。  
- 可选用参数 @extraParams 一个表指定要发送的其他请求参数。  

成功返回 true（或表对象），失败返回 null, 错误信息,错误代码。

### webRestAiChatObject.ok() <a id="webRestAiChatObject.ok" href="#webRestAiChatObject.ok">&#x23;</a>
最后一次请求是否成功  
服务器应答并且状态码为2XX该函数返回真

### webRestAiChatObject.post(网址,参数表) <a id="webRestAiChatObject.post" href="#webRestAiChatObject.post">&#x23;</a>
使用该POST方法提交请求,新增或修改资源  
请求参数可以指定表或字符串,如果是表请求前会转换为字符串  
成功返回数据,失败返回空值,错误信息,错误代码

### webRestAiChatObject.referer <a id="webRestAiChatObject.referer" href="#webRestAiChatObject.referer">&#x23;</a>
引用页地址。  
如果此属性指定了一个值，则每次请求都会使用该引用页。  
如果不指定，每次请求都会自动设置上次请求的网址为引用页。  
这个属性不像 inet.http 对象的 referer 属性那样每次请求结束都会清空。

### webRestAiChatObject.setHeaders <a id="webRestAiChatObject.setHeaders" href="#webRestAiChatObject.setHeaders">&#x23;</a>
设置所有请求默认添加的HTTP头

### webRestAiChatObject.setHeaders(headers) <a id="webRestAiChatObject.setHeaders" href="#webRestAiChatObject.setHeaders">&#x23;</a>
参数 @headers 必须指定一个表中,  
用该表中的键值对更新 defaultHeaders 属性中的键值  
如果addHeaders的原属性值不是一个表,则先清空该属性

### webRestAiChatObject.setTimeouts(连接超时,请求超时,接收超时) <a id="webRestAiChatObject.setTimeouts" href="#webRestAiChatObject.setTimeouts">&#x23;</a>
设置超时,以亳秒为单位（1秒为1000毫秒）。

## webRestAiChatObject 事件列表 <a id="webRestAiChatObjectEvent" href="#webRestAiChatObjectEvent">&#x23;</a>

### webRestAiChatObject.onDeltaToolCalling <a id="webRestAiChatObject.onDeltaToolCalling" href="#webRestAiChatObject.onDeltaToolCalling">&#x23;</a>

```aardio
webRestAiChatObject.onDeltaToolCalling = function(toolCalls,finishReason){
	/*自定义流式回复中的 tool_calls 处理方法。  
一般不建议定义或使用此回调函数，用法请参考库源码 */
}
```

## webRestAiChatObject.config 成员列表 <a id="webRestAiChatObject.config" href="#webRestAiChatObject.config">&#x23;</a>

自定义的 API 配置表。  
默认指向创建对象时指定的表参数。

### webRestAiChatObject.config.reasoning <a id="webRestAiChatObject.config.reasoning" href="#webRestAiChatObject.config.reasoning">&#x23;</a>
推理配置表。  
如果仅指定空表  `{}` 则启用推理模式。  
默认启用推理的模型可用 `{maxTokens=0}` 禁用推理。  

指定 maxTokens 字段可限制推理消耗的最大 tokens 。  

也可以通过 effort 字段指定   "high", "medium", 或 "low" 之一的值设置推理强度。  
这两个字段可以自动转换以兼容不同接口。  

注意不是所有大模型都支持此设置。
