obsidianAI开发插件,记录我的第一个ai开发插件经验,插件的主要用途是全库收集自定义高亮块并提供查看和管理,聚焦摘录重点内容和批注

我用ai开发了一个高亮块插件,主要是在文档内创建高亮块,并在视图内和侧边栏展示,可以编辑和管理。利用的免费的trae cn和codebuddy,创建插件需要配置git防止ai乱删东西导致恢复困难,这个可以交给agent自己弄。这俩实际都有免费额度,但是我感觉勉强够用。目前插件还有一些问题我准备让ai慢慢修复

我发现ai还是比较蠢的,有时候会删掉一些重要文件,我的插件已经崩溃两次了,一次是大量css相关被删掉了,一次是缓存逻辑被改崩溃了,我的缓存逻辑大概是原子写入加一个中转的缓存文件,视图内和文档内都先同步到这个缓存文件然后再同步到另一边。之前缓存逻辑被改坏之后导致定位不到高亮块,现在改好之后大概有0.1到0.3秒左右的延迟





给每个高亮块添加了唯一的锚点用的时间戳加随机字符。跳转依赖id



利用编辑功能删减正文内容和标签,可以正常同步

原理利用的增量扫描加缓存,优先读取的变化的文件和缓存文件获取高亮块,目前正在实验移动文件,重命名和删除的影响,之前全量扫描仓库,高亮块出现的很慢,现在这种估计不太稳定但是可以实现极速加载数据。我的核心数据还是依赖文档内高亮块,这样删除缓存文件之后也可以依赖扫描恢复大部分,利用块id可以恢复创建时间,但是修改时间和其他的例如评分这种会丢失

等我有空了弄一个移动云盘的链接分享源代码文件和插件文件,不过插件目前还是有bug,感兴趣的可以在单独的仓库测试,也可以在trae 或者codebuddy里进行修改,我本人就是代码啥都不会,靠ai帮我修改

ai写插件风险不小,最近修改插件给插件写出问题了,我的视图内高亮块编辑和修改跳转都能正常定位到文档内高亮块,文档内高亮块如果直接在源码中修改也可以同步到视图内,但是文档内高亮块借助编辑高亮块不能正确定位到真正的高亮块而是文档内第一个创建的高亮块。看起来靠缓存中转可能不是很可靠。

经过我的实践ai实际写不了太复杂的插件,一共用ai试图生成三个插件,一个大纲扫描加diff,一个仓库diff和备份这个失败了,做出来的一坨,根本用不了,一个高亮块管理。这个是大纲重复扫描与diff,实际上这个dataview也可以实现,不过我还加了diff对比,用的扁平化对比,忽略换行符号。


高亮块管理插件及其侧边栏展示效果:


顺便借助已经在另一个插件实现的diff功能实现了高亮块相似性对比,只是简单的相似性对比,我不会用ai 插件也没有内置哎。

强化了引用管理,可以查看那些文档引用了高亮块,利用锚点位置计算动态行号防止文档修改导致行号与实际偏移

由于我英文不好,我让ai吧插件名称 命令 设置都弄成中文的了,ai有时候会突发奇想删掉东西或修改成别的,所以ai开发插件离不开git,不然没法回退,插件没有回退就会自己乱编东西。为了方便排查我让ai自己写了一个检测放到设置里边,但是很多逻辑错误还需要自己测试才能发现


这是高亮块插件的源代码和插件文件,感兴趣的可以在单独的仓库使用,目前我感觉没啥大bug了但是也许有我没发现的问题,如果有新想法也可以在电脑上下载TRAE CN 或者codebuddy 来修改,目前这俩8月前还能免费用,我在移动端也优化了很多,但是可能在一些小地方还有样式或操作问题。我用中国移动云盘给你分享的文件:“高亮块插件仓库.zip”
链接: https://yun.139.com/shareweb/#/w/i/2w2KTxWU0SA1d
提取码: k2y5
/*a9g9WByFMvcR:/
复制本段信息,打开「中国移动云盘APP」获取。人人不限速,移动用户免流量!
以及插件安装包的链接链接:https://caiyun.139.com/w/i/2w2KVA5Roofz1
提取码:he35
复制内容打开移动云盘PC客户端,操作更方便哦

codebudddy目前工作页面这样,没啥使用门槛。

刚用ai生成了一个选择起始点创建高亮块的功能,出了bug修复了三次才成功


ai还是好用的,昨天又搓了一个统计字数统计的



我最近用的codebuddy,刚好有一个模型限免到八月五号,可惜不能识别图片,codebuddy会调用没有授权的文件夹,我可以让它直接把插件复制到我的测试仓库省去我手动复制的时间。不过ai设计出来的样式一般都很粗糙需要自己一点点调整

而且有时候缺少足够数据也可以让ai生成一些文件,比如我缺少高亮块卡片的逾期数据就靠ai生成了一些文件塞进去

以及重复数据都是让ai直接在测试库写

其实,完全可以用agent在外部处理md文档呀,AI读取md文档是很方便的,当然通过插件会更快,不过我是不想装太多插件,能不装就不装。

确实,我平时也会导入ima让ima帮我找,主要有时候ima找到的和我想的不一样,所以会手动标记部分重要内容

趁着免费又做了一个仓库变动的插件主要是为了方便我导出指定日期的文件,因为ima导出后我需要隔一段时间导入最近变化和新建的过去,但是obsidian原生的筛选感觉不是很方便。这是最早用trae生成的,基本上用不了每次都全量读取和写入导致读不到增量数值

后来又用ai生成了一个勉强能用