# web.form.chat 库模块帮助文档

## web.form 成员列表 <a id="web.form" href="#web.form">&#x23;</a>

### web.form.chat <a id="web.form.chat" href="#web.form.chat">&#x23;</a>
用于显示 Markdown 生成的 HTML 的 AI 助手专用 web 窗体。  
此对象继承自 web.form.simpleMarkdown 与 web.form 对象。  
支持 Markdown 自动渲染与就地增量更新，  
例如 SSE 流式接收的增量 Markdown 可以就地快速插入当前页面。  

使用标准库 string.markdown 提供的 Markdown 解析器，  
可支持 NCR 编码的 Font Awesome 字符。

创建用于显示 Markdown 生成的 HTML 的 AI 助手专用 web 窗体。   
此对象继承自 web.form.simpleMarkdown 与 web.form 对象。

### web.form.chat() <a id="web.form.chat" href="#web.form.chat">&#x23;</a>
[返回对象:webFormChatObject](#webFormChatObject)

### web.form.chat(winform,hostFlags,dlControl,userAgent,securityTrusted) <a id="web.form.chat" href="#web.form.chat">&#x23;</a>
创建 Web 窗体。  

参数 @winform 可指定窗体或 custom 控件作为网页宿主窗口。  
@winform 也可以指定 null 值或 win.form 构造参数表以创建新窗体。  

其他参数不必指定，这些参数的用法请参考 web.form 。

## webFormChatObject 成员列表 <a id="webFormChatObject" href="#webFormChatObject">&#x23;</a>

### webFormChatObject.aardioSystem <a id="webFormChatObject.aardioSystem" href="#webFormChatObject.aardioSystem">&#x23;</a>
自动创建 aardio 编程助手系统提示词（仅限 IDE 内有效）。  

@cacheControl 为可选参数，仅 anthropic 协议与个别其他接口可支持此参数。  
可指定为 `true` 时自动转换为 `{ "type": "ephemeral" }`，  
请参考 anthropic 文档谨慎指定此参数。

### webFormChatObject.aardioSystem(prompt,cacheControl) <a id="webFormChatObject.aardioSystem" href="#webFormChatObject.aardioSystem">&#x23;</a>
增加 aardio 编程助手提示词（如果已添加则忽略）。  
如果指定参数 prompt 则追加到系统提示词（不检测之前是否已添加过）

### webFormChatObject.assistant(content,silent) <a id="webFormChatObject.assistant" href="#webFormChatObject.assistant">&#x23;</a>
追加并输出 AI 助手回复的增量文本。  
- 参数 @content 必须是文本（或流式输出的增量文本）或者 null 值。  
仅指定一个 null 参数时结束增量输出并执行完整的 Markdown 渲染。  
连续传 null 参数调用此函数不重复执行/无副作用，保持幂等性。  

可选参数 @silent 为 true 则不在界面上输出（仅对话，导入会话时忽略）

### webFormChatObject.assistantOnce(content) <a id="webFormChatObject.assistantOnce" href="#webFormChatObject.assistantOnce">&#x23;</a>
在界面上直接输出并记录一条完整的 AI 助手回复。  
此方法不会使用打字机流式渐进显示，而是一次性完整渲染。  
参数 @content 可选指定回复正文。

### webFormChatObject.beforerWriteEnd <a id="webFormChatObject.beforerWriteEnd" href="#webFormChatObject.beforerWriteEnd">&#x23;</a>

```aardio
webFormChatObject.beforerWriteEnd = function(markdown){
	/*在输出完整回复以前，可在此回调中修改返回输出的全部 Markdown。  
错误输出不会触发此函数。*/
}
```

### webFormChatObject.chatMessages <a id="webFormChatObject.chatMessages" href="#webFormChatObject.chatMessages">&#x23;</a>
消息队列，用于发送到 chat/completions 聊天接口。  

[返回对象:webRestChatMessagesObject](#webRestChatMessagesObject)

### webFormChatObject.clear() <a id="webFormChatObject.clear" href="#webFormChatObject.clear">&#x23;</a>
清除会话记录

### webFormChatObject.clearErrorMessage() <a id="webFormChatObject.clearErrorMessage" href="#webFormChatObject.clearErrorMessage">&#x23;</a>
清除页面上输出的错误信息

### webFormChatObject.close() <a id="webFormChatObject.close" href="#webFormChatObject.close">&#x23;</a>
立即关闭窗口

### webFormChatObject.close(true) <a id="webFormChatObject.close" href="#webFormChatObject.close">&#x23;</a>
异步关闭窗口

### webFormChatObject.context(context,source) <a id="webFormChatObject.context" href="#webFormChatObject.context">&#x23;</a>
以插入问答对的方式添加上下文资料（文档、知识库、联网查询结果）。  
可避免影响系统提示词缓存命中率或干扰对话结构。  
必须用参数 @context 指定要添加的资料（字符串）。  
可选用参数 @source 指定资料来源或网址。

### webFormChatObject.doModal(ownerForm,showFlags) <a id="webFormChatObject.doModal" href="#webFormChatObject.doModal">&#x23;</a>
宿主窗口显示为模态对话框。  
可选用参数 @ownerForm 指定所有者窗口，  
参数 @showFlags 可选用 _SW_ 前缀常量指定显示选项。

### webFormChatObject.enableKatex(true) <a id="webFormChatObject.enableKatex" href="#webFormChatObject.enableKatex">&#x23;</a>
允许解析数学公式，参数为 false 则禁用此功能（默认）。  
低于 Windows 10 系统忽略此设置。

### webFormChatObject.errorMessage(错误信息) <a id="webFormChatObject.errorMessage" href="#webFormChatObject.errorMessage">&#x23;</a>
显示错误信息。  
参数 @1 可指定字符串、table 对象或 null 值，其他类型转换为字符串显示。  
参数 @1 指定 null 值忽略不执行任何操作。  
如果会话未开始可将参数 @2 设为 true 以覆盖页面的其他内容。

### webFormChatObject.findSystem(模式串) <a id="webFormChatObject.findSystem" href="#webFormChatObject.findSystem">&#x23;</a>
使用模式匹配语法查找消息队列中是否存在指定的系统提示词

### webFormChatObject.getMarkdown() <a id="webFormChatObject.getMarkdown" href="#webFormChatObject.getMarkdown">&#x23;</a>
返回输出到页面的所有 Markdown 格式内容。

### webFormChatObject.lastAssistantMessage() <a id="webFormChatObject.lastAssistantMessage" href="#webFormChatObject.lastAssistantMessage">&#x23;</a>
获取 AI 最后一次返回的消息。  
如果最后一个消息不是 assistant 消息则返回 null。  
无参数返回包含 content 字段的表对象。  
参数 @1 为  true 返回 content 字段（通常是 Markdown 格式字符串）

### webFormChatObject.prompt <a id="webFormChatObject.prompt" href="#webFormChatObject.prompt">&#x23;</a>
添加用户提示词，成功返回 true 。

### webFormChatObject.prompt(content) <a id="webFormChatObject.prompt" href="#webFormChatObject.prompt">&#x23;</a>
添加用户提示词。  
content 可以是字符串，也可以是对象数组。  
content 为空字符串或 null 直接返回 null 。  
请参考调用模型与接口的文档了解支持的对象格式。

### webFormChatObject.prompt(txtContent,bitmap) <a id="webFormChatObject.prompt" href="#webFormChatObject.prompt">&#x23;</a>
添加并显示用户 @txtContent 参数指定的文本提示词。  
可选使用参数 @bitmap 指定 gdip.bitmap 或 gdip.image 对象

### webFormChatObject.prompt(txtContent,imageBufferOrPath) <a id="webFormChatObject.prompt" href="#webFormChatObject.prompt">&#x23;</a>
添加并显示用户 @txtContent 参数指定的文本提示词。  
可选用 @imageBufferOrPath 指定图像数据（必须是 buffer 对象），  
支持 JPG,PNG,GIF,WEBP 格式图像。  

注意请参考接口文档以了解调用模型是否支持图像识别。  

如果 @imageBufferOrPath 使用字符串指定文件路径则调用 string.loadBuffer 读取为 buffer。

### webFormChatObject.prompt(txtContent,imageUrl,silent) <a id="webFormChatObject.prompt" href="#webFormChatObject.prompt">&#x23;</a>
添加并显示用户 @txtContent 参数指定的文本提示词。  
可选用 @imageUrl 指定图像网址，  
本地图像可调用 inet.urlData 转换为 Data URL（Base64) 格式。  
注意请参考接口文档了解调用模型是否支持图像识别。  
可选参数 @3 如果为 true 则界面不输出（导入会话时会显示），  
显式指定为 true 则不显示 AI 思考状态。

### webFormChatObject.promptOnce(content) <a id="webFormChatObject.promptOnce" href="#webFormChatObject.promptOnce">&#x23;</a>
添加用户提示词，不显示 AI 思考状态。

### webFormChatObject.setMarkdown(markdown,scrollToEnd) <a id="webFormChatObject.setMarkdown" href="#webFormChatObject.setMarkdown">&#x23;</a>
输出参数 @1 指定的 Markdown 格式内容到页面，  
覆盖控件存储的 Markdown。  

可选用参数 @scrollToEnd 指定是否滚动到最后（默认为 true）

### webFormChatObject.show(false) <a id="webFormChatObject.show" href="#webFormChatObject.show">&#x23;</a>
隐藏窗口

### webFormChatObject.show(true) <a id="webFormChatObject.show" href="#webFormChatObject.show">&#x23;</a>
显示窗口

### webFormChatObject.showLoading(title) <a id="webFormChatObject.showLoading" href="#webFormChatObject.showLoading">&#x23;</a>
显示加载动画，可选用 title 指定标题。  
如果会话未开始可将参数 @2 设为 true 以覆盖页面的其他内容。

### webFormChatObject.showThinking(reasoning) <a id="webFormChatObject.showThinking" href="#webFormChatObject.showThinking">&#x23;</a>
显示推理过程，reasoning 参数指定 AI 返回的推理响应文本。

### webFormChatObject.started() <a id="webFormChatObject.started" href="#webFormChatObject.started">&#x23;</a>
是否已经发起对话。  
发起对话指的是消息队列中包含非 system 角色的消息。

### webFormChatObject.successMessage(成功信息) <a id="webFormChatObject.successMessage" href="#webFormChatObject.successMessage">&#x23;</a>
显示成功信息。  
参数 @1 可指定字符串、table 对象或 null 值，其他类型转换为字符串显示。  
参数 @1 指定 null 值忽略不执行任何操作。  
如果会话未开始可将参数 @2 设为 true 以覆盖页面的其他内容。

### webFormChatObject.system(prompt,cacheControl) <a id="webFormChatObject.system" href="#webFormChatObject.system">&#x23;</a>
添加系统提示词。  
系统提示词总是会放在其他角色的消息之前。  
系统提示词不应存放过于频繁变动的内容。  
临时的动态的知识库应当改用 context 方法添加。  
消息上限不计算系统提示词。  

@cacheControl 为可选参数，仅 anthropic 协议与个别其他接口可支持此参数。  
@cacheControl 指定为 `true` 自动转为 `{ "type": "ephemeral" }`，  
请参考 anthropic 文档谨慎指定此参数。

### webFormChatObject.url() <a id="webFormChatObject.url" href="#webFormChatObject.url">&#x23;</a>
获取参数 @1 指定网址的内容并转换为 Markdown 格式或者文本格式提示词。  
参数 @1 也可以指定包含 url 字段的对象，或这样的对象数组。  
参数为 包含 url 字段的对象时如果同时包含 text 字段，则直接自 text 字段获取网页文本。  
如果参数 @1 指定数组参数，则将所有数组成员作为参数获取目标内容。  
如果参数为空数组、空字符串、null 则返回 null。  
成功返回添加的提示词，失败返回  null,错误信息 。  

如果提前导入 web.turndown 库则支持自动转换 HTML 为 Markdown 格式文本。

### webFormChatObject.write() <a id="webFormChatObject.write" href="#webFormChatObject.write">&#x23;</a>
清空页面内容，解析并显示参数 @1 指定的 Markdown 为网页。  
控件仅解析与显示 Markdown，不会存储此 Markdown，  
也不会改变  getMarkdown 函数的返回值。

### webFormChatObject.writeDelta() <a id="webFormChatObject.writeDelta" href="#webFormChatObject.writeDelta">&#x23;</a>
向页面追加 Markdown 格式的增量文本。  
- 参数 @1 必须是文本（或流式输出的增量文本）或者 null 值。  
指定null 参数时结束增量输出并执行完整的 Markdown 渲染。  
连续传 null 参数调用此函数不重复执行/无副作用，保持幂等性。  

AI 助手回复的消息应当调用 assistant 方法而不是 writeDelta 方法。  
writeDelta 只会输出内容到页面，不会添加到 chatMessages 属性（消息队列）。

### webFormChatObject.zoom() <a id="webFormChatObject.zoom" href="#webFormChatObject.zoom">&#x23;</a>
缩放页面。  
参数 @1 指定 100 为 100% 缩放，省略参数则默认设为  100% 。  
只能在加载网页就绪后才能调用此函数，建议首先调用 wait 方法。  
此函数执行失败会忽略不执行操作（不会抛出异常）。  

如果要禁止触屏双击放大，可在 CSS 样式中指定:  
`html{     
   	-ms-touch-action: none;  
	-ms-content-zooming: none;  
}`

## webFormChatObject 事件列表 <a id="webFormChatObjectEvent" href="#webFormChatObjectEvent">&#x23;</a>

### webFormChatObject.onComplete() <a id="webFormChatObject.onComplete" href="#webFormChatObject.onComplete">&#x23;</a>
对话已完成，回调 onComplete 事件。

### webFormChatObject.onComplete(success) <a id="webFormChatObject.onComplete" href="#webFormChatObject.onComplete">&#x23;</a>

```aardio
webFormChatObject.onComplete = function(success){
	/*如果定义了此回调函数，则调用 errorMessage 会被自动调用（参数为 false）。  
建议在 AI 对话结束后主动调用此回调（参数为 true），  
并在此回调内添加对话完成后需要执行的代码。*/
}
```

### webFormChatObject.onWriteEnd <a id="webFormChatObject.onWriteEnd" href="#webFormChatObject.onWriteEnd">&#x23;</a>

```aardio
webFormChatObject.onWriteEnd = function(){
	/*AI 单次回复完成将回调此事件。  
部分支持交替思考的模型有可能在一轮对话中多次回调此事件，  
因此不能以来此事件判断会话是否完成。*/
}
```

