外观
Bob 1.8.0 插件新特性 2023-05-18
Bob 1.8.0 为插件新增了一些特性,可以更好地支持 OpenAI 相关插件的开发。
- 插件支持流式请求、取消请求
- 翻译插件支持流式输出
- 插件支持内置多图标、名字
- 插件偏好设置文本类型组件支持自定义高度、高亮关键字等特性
支持流式请求、取消请求
$http 接口新增 $http.streamRequest(object)
方法,可以发送流式请求,同时请求参数中新增了以下属性:
参数 | 类型 | 说明 |
---|---|---|
cancelSignal | $signal | 取消信号,可传入该对象用于取消请求 Bob 1.8.0+ 可用 |
streamHandler | function | 流数据回调函数,仅流式请求可用,详情见下方 $http.streamRequest 方法 Bob 1.8.0+ 可用 |
翻译插件的 query 参数中会携带一个 cancelSignal,可直接将其透传给 $http 实现自动取消请求。
流式请求回调函数有如下修改:
streamHandler
用于接收流式数据回调,数据都在该函数下发handler
回调的 resp 对象不包含data
和rawData
属性
所以流式请求需要在 streamHandler
处理好所有数据,handler
回调时即代表请求完成,最终一定会回调 handler
,但 handler
里面不包含数据。
streamHandler
回调函数的参数如下:
属性 | 类型 | 说明 |
---|---|---|
text | string | 流式数据解析为 utf8 字符串,可能为空 |
rawData | $data | 原始二进制数据,一定不为空 |
issue #451 对流式请求做了一些补充说明,有需要可以了解下。
翻译插件支持流式输出
翻译插件 translate 方法的 query 参数新增了以下属性:
属性 | 类型 | 说明 |
---|---|---|
cancelSignal | $signal | 取消信号,可直接将此对象透传给 $http 请求用于取消,同时也可以监听此信号做一些额外的逻辑 Bob 1.8.0+ 可用 |
onStream | function | 流式数据回调函数 Bob 1.8.0+ 可用 |
onCompletion | function | 翻译完毕回调函数 Bob 1.8.0+ 可用 |
cancelSignal
用于监听用户取消翻译的行为。
onStream
函数用于回调流式数据,参数为 translate result 对象,必须赋值 toParagraphs
属性,toDict
属性将会被忽略。如果无需流式输出,不需要调用本函数。
onCompletion
用于替代之前单独的 completion
参数,与其等效。不过为了兼容老版本插件,completion
参数目前会保留。
js
function translate(query, completion) {
...
...
// Bob 1.8.0 之前
completion({'result': result});
// or
completion({'error': error});
// Bob 1.8.0+
query.onCompletion({'result': result});
// or
query.onCompletion({'error': error});
}
一般来说 translate result 的 toParagraphs
返回的应该是翻译结果根据换行符分割之后的 string 数组,Bob 在展示拼接时会自动在每个 string 元素中间插入空行。
但是如果是 OpenAI 类型的插件,部分情况下可能希望保留格式,不想要插入空行,此时可以不对 string 做分割,仅给 toParagraphs
数组设置一个元素,把完整的 string 直接回传给 Bob,Bob 此时不会自动插入空行。
除此之外,请尽量按照上述规范分割,以保证显示上统一。
插件支持内置多图标、名字
通过对 info.json 增加字段,可以实现插件内置多个图标,并且与某个选项进行联动。
info.json 增加以下字段:
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
icons | array | - | 插件图标数组,对象属性参考 icon object 。配合 keyOption 可以实现插件切换图标,详情参考下面 keyOption 相关描述。 Bob 1.8.0+ 可用 |
icon object 信息如下:
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
identifier | string | ✅ | 图标唯一标识符。 |
type | string | ✅ | 图标类型。值可以为以下类型:builtIn - Bob 内置图标file - 插件提供图标文件 |
builtInId | string | builtIn 类型必须赋值 | builtIn 类型图标 ID,可以从 这个图标列表 中选择任意一个 ID 作为本字段的值。 |
filePath | string | file 类型必须赋值 | file 类型图标文件路径。相对于插件根目录的路径,例如插件根目录存在一个 test.png 文件,则该字段赋值为 test.png 即可。 |
option object 新增 isKeyOption
字段,可将某个 menu
类型的选项设置为关键选项,可以联动修改插件默认图标和名字。
menu object 新增以下字段:
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
defaultPluginIconIdentifier | string | - | 选中本选项时插件的默认图标 identifier ,需要是 icons 数组中的值。此设置仅对 keyOption 有效。 Bob 1.8.0+ 可用 |
defaultPluginName | string | - | 选中本选项时插件的默认名称。此设置仅对 keyOption 有效。 Bob 1.8.0+ 可用 |
综上,即可实现选项和图标联动。
插件偏好设置文本类型组件优化
info.json 中,option object 针对 text
类型的选项还新增了 textConfig
字段,用于对输入框类型选项进行详细设置。
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
textConfig | text config object | - | 输入框类型选项的详细设置。 Bob 1.8.0+ 可用 |
text config object 字段如下:
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
type | string | ✅ | 文本框类型。值可以为以下类型:secure - 安全类型输入框,默认自动隐藏用户输入的内容visible - 可视输入框,可直接查看输入的文本 |
height | number | - | 输入框高度。默认为 21,可以根据大概行数来设置,比如两行可以考虑设置为 40。 |
placeholderText | string | - | 输入框占位文本。跟 defaultValue 不同,此文本起提示性作用,在未输入内容时展示,不影响输入框实际内容。 |
keyWords | array | - | 关键字数组,元素为 string 类型。此值仅 visible 类型输入框有效,用户输入关键字时将高亮展示。 |
Tip
注意,使用最新 API 后,如果不准备做低版本 Bob 兼容,必须将 info.json 的 minBobVersion
字段提升到最新的版本,同时 appcast.json 文件的 minBobVersion
也需同步修改。
如果想做 Bob 低版本兼容,可以考虑使用 $env 辅助实现,不过 $env
也是 1.6.0
版本才有的 API,需要考虑 undefined 的情况,判断起来可能会比较麻烦。
相较于 Bob 内置的 OpenAI 自定义 Prompt 而言,插件具有如下优势:
- 可以做更多的逻辑控制,更加深度地实现自己定制化的需求,例如根据输入的内容是单词或者句子,执行不同的 Prompt
- 可以更快地更新迭代,自由发版
- 可以内置更多经过验证的 Prompt
- ...