Obsidian 插件 QuickAdd 中 AI 助理(AI Assistant)的设置与使用(初步)

全篇文字描述,因为我懒得截图,但我会把步骤写得很细致,所以照着操作肯定没问题。

一、笔记与 AI

最初的时候我是不太能接受这两者的结合的,因为现在的 AI 也算不上什么智能,至少说,它没有区分对错的能力,会把自己臆造的信息当成真的,信誓旦旦的讲给你听。这种不可靠的东西放在笔记里是不是有点太胡闹,至少太不严谨了呢?

后来发现终究还是我思路被局限了。为什么一定是用它来生成内容呢,它还可以有一些其他用法的。

比如 Markdown 的表格语法就很难写,后期更难调整。那如果让 AI:帮我生成一个三行六列的表格,其中第 3、6 列居中,最末一列右对齐,其他左对齐。列标题分别为:可爱、卖萌、帅气、聪明、阳光、的我,是不是就很简单呢?(这个提示语的要求有点多了,生成的结果可能有小错误,但修改一下比自己去写还是要简单的)。又或者让它帮你格式化一下你修改过的表格什么的,这还是很便利的。

对,AI 爱出错,所以一定要在它生成之后有一个自己审查的环节,这很重要。当然,也可以把一些任务进行拆解,让 AI 处理它擅长的,回避它不擅长或者不好描述需求的事情。昨天我在群里举了这样的例子:

比如我要用复式记账,当然你也不需要理解复式记账,只需要知道我记账的格式是这样的:

2024-03-10 * “淘宝” “咖啡豆一磅”
支出账户 -72 CNY
零食开销 +72 CNY

这样的格式自己写起来有点麻烦,就可以用 AI,这样就能用自然语言记账了。但是实际使用 AI 又会发现这个提示词非常不好写,你得解释清除每个细节,会非常烦(并且因为提示词很长,花费也高)

但是如果可以编程(搭配其他处理流程),就可以让 AI 提取日期(如果没有日期就使用今天的日期),消费平台(列出可选项),支出账户,支出分类,金额,备注,以列表形式返回。然后自己套一下模板(这样可以保证格式上完全无差错)

AI 擅长理解自然语言,并从中提炼出你需要的信息。这个功能自己编程实现会非常困难,而用 AI 就极其轻松。同时向 AI 传递太多需求它就会搞错,丢失信息,但是这种场景下的输入一般都很简短,出错概率不高,而且回避了解释模板的大量需求(我测试了一阵子,想要让 AI 套用不出错需要的描述还是挺多的)。

所以,扬长避短啦。而且上面这个例子推广到记录待办、灵感……都可以的。算是一些专门方向的助理了。

好,总结一下:

  • AI 有用,主要是用来辅助
  • 合理运用,扬长避短
  • 尽量减少要求,降低出错概率
  • 辅助其他流程,搭配完成复杂操作

所以,单纯的问答式 AI 助理其实并不算强,能整合进其他流程的助理才能真正爆发生产力。于是绕不开的编程能力的重要性。

二、有点意思

支持 AI 的插件很多,但我觉得 QuickAdd 有点意思,理由如下:

  • 接入 AI 很简单,而且支持第三方(代理)API
  • 本身属于 Obsidian 必备插件
  • 可以简单搭建日常使用流程(小白友好)
  • 可以自己编写脚本(上限非常高)

所以我非常关注这个插件的 AI 能力,在它升级了 1.8.1 之后,也就是可以使用第三方 API 之后,就开始了研究。以下记录初步的设定过程,供各位参考。

重要提示:建议严格遵照我的操作顺序。因为其中的一些东西涉及变成层面的声明和注册,顺序错了会出现奇怪的问题,就类似“拿起笔来写笔记”,拿笔和写笔记这两件事情的顺序颠倒就……如果真的搞错顺序了,重启 Obsidian 能解决大部分问题。

三、花钱

用 AI 是得花钱的。当然这里特指购买 OpenAI (就是最出名的那个 AI)的服务,如果是自己本地搭建肯定就不用了,但我们现在是基础流程啦。

但是花钱也不容易的,因为国内的信用卡没法付款,很多人都卡在这个问题上。不过有问题就有办法,可以通过一些代理商来使用,付款简单了,但是因为是透过代理商使用,就需要填写代理商的 API 地址,早期版本的 QuickAdd 没提供这个设定,所以我一直等到了现在。

列举一些代理商:

大家自己判断选择。最终你需要获取的信息有两个:API 的地址,API_Key。一些平台提供初期的免费试用,虽然额度很低,但基本可以让你用来跑通初期流程。

四、设置 AI 助理

打开 QuickAdd 插件的设置,首先关闭最后一项:Disable Al & Online features,这样就会在上面出现:``AI Assistant` 的按钮了。点击进入设定。

第一项 Providers(供应商),进入之后自带 OpenAI,点击后面的 Edit(编辑)。

  • Endpoint 填写你获取到的 API 地址
  • API Key 填写你获取到的 API_Key

填写好之后保存,最好再检查一下确实修改保存了,因为我被坑了一次就是 API_Key 并没保存,然后调试一直出错。

下面的一些项目:

  • Prompt Template Folder Path 这个必须设置,说是提示词的模板文件夹(后面我会解释,你可以先选定一个空的文件夹)
  • Show Assistant 这个建议先开启,用来显示操作时的 AI 状态,调试好以后可以关闭,毕竟开着稍微有点烦(尤其是在移动端)

五、理解宏

Macro(宏)指的是用来完成某个任务的一系列操作,借助宏可以完成一些复杂的(不止一个步骤)的任务。这很强,但是很多 QuickAdd 用户其实并没用过这个功能(就比如我)。

我们会发现有一个 Manage Macros 的按钮,就是管理宏,于是觉得如果我想使用宏,第一步肯定是从这里进入,然后我就被坑了很多圈(嗷嗷哭

QuickAdd 的逻辑是创建一条指令对应一个同名的宏,更合理的操作如下:

  • 提示词是 Name 的文本框里输入一个名字,比如:AI
  • 后面下拉选框(默认是 Template,长得很像个白色按钮)中选择

Macro

  • 点击后面的 Add Choice 按钮

现在我们多了一条指令,借着对这条指令进行操作:

  • 点击指令后面的闪电图标,使之点亮,这样我们在命令面板中就能调用这条命令了(不点亮则需要在命令中使用 QuickAdd: Run QuickAdd 命令,然后再选择)
  • 点击指令后面的齿轮图标进入设置
  • 点击加号按钮,创建同名宏
  • 这时候前面下拉选框中出现了 AI(就是我们这个指令的同名宏),并且后面没有了加号按钮
  • 点击后面的齿轮图标(吐槽:这里居然换了另一种风格的图标,设计不统一)

到此,我们完成了宏的创建,此时这个宏已经可以在宏管理中看到和修改了(当然也可以按着刚才的方式进入管理)。

六、创建模板

先理解我们想要做什么。输入内容,发送给 AI,获得 AI 的答案,将答案输出。这是最基本的操作,今天我们就完成这个。

这里要先解释一下提示词模板。在实际流程中,发送给 AI 的是这个模板的内容,这样的好处是我们可以在里面设定一些每次都要有的提示词。但是今天我们只做最简单的,就创建一个非常简单的模板。

在前面设定的提示词模板文件夹中创建一篇笔记,就叫做:Ask.md 吧,注意如果你使用了一些自动更新 frontmatter 的插件,比如自动更新创建和更新时间这种,需要把这个文件夹排除在外。毕竟你不希望每次都向 AI 发送一些无用的信息浪费你的小钱钱。

笔记里的内容十分简单:

{{value}}

不用代码块哦,就非常简单的输入上面这些文字就行。这代表了我们使用时自己输入的内容。你可以参考这里获得更多参数:Format syntax

所以其实我们没有附加任何其他提示语。

七、设置宏

现在我们回去编辑宏,第一步当然是添加一个 AI 了,找一下宏编辑界面里的机器人图标,点一下。出现了一条 Al Assistant 的任务,我们点击后面齿轮图标进行设置:

  • Prompt Template 提示词模板,开启,并选择刚才的 Ask 模板,如果找不到模板,大概是你提示词模板文件夹没有设置对(这个设置需要手动填写,没有自动提示,差评)。如果不开启这一项,则会在使用时提示你选择需要的模板,如果有多个模板也可以这样使用。
  • Model 一般默认的 gpt-3.5-turbo 就够用,如果发送的字数很多,可以选择下面的 16k,1106 等。gpt-4 价格挺高的,请先确认自己能够承受再选用。
  • Output variable name 不用修改,但得记一下,后面要用
  • Show advanced settings 高级选项不需要动,但以后如果仔细了解一下的话,可以使你获取到的答案更符合预期,比如更加严谨还是更加放飞之类的。
  • System Prompt 这里输入系统级的对 AI 预设的提示词,默认的内容大概就是你是 Obsidian 中的的智能助理,应该帮助用户更好的整理笔记,回答使用 markdown 格式,以及一些格式细节。你可以参照这个思路进行修改,可以使用中文描述。

于是 AI 设置好了,但是现在 AI 的回答只是输出到了一个变量,我们是看不见的。我们要把这个变量写入到文档中才行。

还是在宏编辑界面,现在已经有一条任务了,就是刚才设置的 AI 助理,我们添加一个 Capture,就是和机器人那个图标在同一行的按钮。于是有了第二条任务,任务的名字不重要,我们点击后面的齿轮图标进行设置:

  • Capture To 捕获到,这里开启下面的选项:Capture to active file,捕获到当前激活的笔记。
  • 如果你有不同需求可以按需设置,毕竟这里就是最基础的 Capture 功能设定
  • 直接看最后一项:Capture format,开启,在下面的文本框中输入{{value:output}},意思是输出 output 这个变量(前面 AI 输出的变量名称)的值。

现在就全设置好了,一路点叉(或者按 Esc 按键)回来就好了。

八、使用

找一篇文档,进入编辑状态,光标在上面闪烁着,打开命令,查找 AI,运行,就会有输入框,输入你的问题,提交,等一下,答案就输出在笔记中了。

什么,报错了?先重启一下 Obsidian 再试,设定没问题的话这样基本就正常了。

九、其他

你问它日期或者时间之类 AI 给不出准确结果的,但是你可以先告诉他时间日期(参照: Format syntax)。提示词模板可以写的比较复杂,比如:

请将 {{value}} 转换为大写形式

这样就能将你输入的小写字母以大写的形式返回了。当然这没什么用,我只是为了让你理解啦。

当然也可以组合更复杂的流程,如果有编程能力也可以写脚本参与数据处理。

十、还有

学会了喵?那口干舌燥的大老鼠是不是可以拥有一杯咖啡呢? 爱发电 · 连接创作者与粉丝的会员制平台 (眼巴巴

QuickAdd 官方在关于 AI 助理的文档中提到了一个博客:

All of these examples, and more, can be found in Christian’s blog post about the AI Assistant.

我也是参照这个博客学习的。然后说一些自己的看法和收获。

1

他说 {{selected}} is either empty or whatever text you’ve selected, making it ideal for using AI in the active file。意思是当前选择的内容,但如果没有激活的笔记,则使用一个空值,这时候就只有模板中书写的提示词了。但是我不太理解这在什么场景下有用,尤其在后续的 Capture 目标是当前激活文件的时候。这里我喜欢使用 {{value}},因为这在自由选择文本的时候会弹出输入框自行输入,而选择文本的时候则直接使用选中文本。

此处没有优劣之分,主要是使用符合自己需求的方式。

2

AI 的链式处理,这个很有启发。

毕竟当前 AI 是有很大局限性的,同时给它较多要求,它会丢失掉一些要求;要求复杂一点也很容易出差错。但如果每次给出的是一个简单的需求,那大抵它不会出什么差错,所以把一件事情拆分成多个需求链式处理,效果会更好。

比如我说的复式记账的例子,我尝试过一次搞定,但是很难用提示词约束住 AI 不出差错,但如果链式处理,逐个提取信息,然后在让 AI 将这些信息组合输出,稳定性肯定能提高很多。