Skip to content

Bob 1.8.0 插件新特性 2023-05-18

Bob 1.8.0 为插件新增了一些特性,可以更好地支持 OpenAI 相关插件的开发。

  • 插件支持流式请求、取消请求
  • 翻译插件支持流式输出
  • 插件支持内置多图标、名字
  • 插件偏好设置文本类型组件支持自定义高度、高亮关键字等特性

支持流式请求、取消请求

$http 接口新增 $http.streamRequest(object) 方法,可以发送流式请求,同时请求参数中新增了以下属性:

参数类型说明
cancelSignal$signal取消信号,可传入该对象用于取消请求 Bob 1.8.0+ 可用
streamHandlerfunction流数据回调函数,仅流式请求可用,详情见下方 $http.streamRequest 方法 Bob 1.8.0+ 可用

翻译插件的 query 参数中会携带一个 cancelSignal,可直接将其透传给 $http 实现自动取消请求。

流式请求回调函数有如下修改:

  • streamHandler 用于接收流式数据回调,数据都在该函数下发
  • handler 回调的 resp 对象不包含 datarawData 属性

所以流式请求需要在 streamHandler 处理好所有数据,handler 回调时即代表请求完成,最终一定会回调 handler,但 handler 里面不包含数据。

streamHandler 回调函数的参数如下:

属性类型说明
textstring流式数据解析为 utf8 字符串,可能为空
rawData$data原始二进制数据,一定不为空

issue #451 对流式请求做了一些补充说明,有需要可以了解下。

翻译插件支持流式输出

翻译插件 translate 方法的 query 参数新增了以下属性:

属性类型说明
cancelSignal$signal取消信号,可直接将此对象透传给 $http 请求用于取消,同时也可以监听此信号做一些额外的逻辑 Bob 1.8.0+ 可用
onStreamfunction流式数据回调函数 Bob 1.8.0+ 可用
onCompletionfunction翻译完毕回调函数 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 resulttoParagraphs 返回的应该是翻译结果根据换行符分割之后的 string 数组,Bob 在展示拼接时会自动在每个 string 元素中间插入空行。

但是如果是 OpenAI 类型的插件,部分情况下可能希望保留格式,不想要插入空行,此时可以不对 string 做分割,仅给 toParagraphs 数组设置一个元素,把完整的 string 直接回传给 Bob,Bob 此时不会自动插入空行

除此之外,请尽量按照上述规范分割,以保证显示上统一。

插件支持内置多图标、名字

通过对 info.json 增加字段,可以实现插件内置多个图标,并且与某个选项进行联动。

info.json 增加以下字段:

字段类型是否必须说明
iconsarray-插件图标数组,对象属性参考 icon object。配合 keyOption 可以实现插件切换图标,详情参考下面 keyOption 相关描述。 Bob 1.8.0+ 可用

icon object 信息如下:

字段类型是否必须说明
identifierstring图标唯一标识符。
typestring图标类型。值可以为以下类型:
builtIn - Bob 内置图标
file - 插件提供图标文件
builtInIdstringbuiltIn 类型必须赋值builtIn 类型图标 ID,可以从 这个图标列表 中选择任意一个 ID 作为本字段的值。
filePathstringfile 类型必须赋值file 类型图标文件路径。相对于插件根目录的路径,例如插件根目录存在一个 test.png 文件,则该字段赋值为 test.png 即可。

option object 新增 isKeyOption 字段,可将某个 menu 类型的选项设置为关键选项,可以联动修改插件默认图标和名字。

menu object 新增以下字段:

字段类型是否必须说明
defaultPluginIconIdentifierstring-选中本选项时插件的默认图标 identifier,需要是 icons 数组中的值。此设置仅对 keyOption 有效。 Bob 1.8.0+ 可用
defaultPluginNamestring-选中本选项时插件的默认名称。此设置仅对 keyOption 有效。 Bob 1.8.0+ 可用

综上,即可实现选项和图标联动。

插件偏好设置文本类型组件优化

info.json 中,option object 针对 text 类型的选项还新增了 textConfig 字段,用于对输入框类型选项进行详细设置。

字段类型是否必须说明
textConfigtext config object-输入框类型选项的详细设置。 Bob 1.8.0+ 可用

text config object 字段如下:

字段类型是否必须说明
typestring文本框类型。值可以为以下类型:
secure - 安全类型输入框,默认自动隐藏用户输入的内容
visible - 可视输入框,可直接查看输入的文本
heightnumber-输入框高度。默认为 21,可以根据大概行数来设置,比如两行可以考虑设置为 40。
placeholderTextstring-输入框占位文本。跟 defaultValue 不同,此文本起提示性作用,在未输入内容时展示,不影响输入框实际内容。
keyWordsarray-关键字数组,元素为 string 类型。此值仅 visible 类型输入框有效,用户输入关键字时将高亮展示。

Tip

注意,使用最新 API 后,如果不准备做低版本 Bob 兼容,必须将 info.json 的 minBobVersion 字段提升到最新的版本,同时 appcast.json 文件的 minBobVersion 也需同步修改。

如果想做 Bob 低版本兼容,可以考虑使用 $env 辅助实现,不过 $env 也是 1.6.0 版本才有的 API,需要考虑 undefined 的情况,判断起来可能会比较麻烦。

相较于 Bob 内置的 OpenAI 自定义 Prompt 而言,插件具有如下优势:

  • 可以做更多的逻辑控制,更加深度地实现自己定制化的需求,例如根据输入的内容是单词或者句子,执行不同的 Prompt
  • 可以更快地更新迭代,自由发版
  • 可以内置更多经过验证的 Prompt
  • ...