如何在思源中实现 diff 与合并?

本贴最后更新于 258 天前,其中的信息可能已经物是人非

智能画布插件 0.2.0 发布:更加稳定和可用的版本(借着版本发布谈谈当前的开发困境)

我正在开发 Canvas 插件,目前的版本很尴尬,它对文档的编辑操作太不稳定了,原因就是 AI 和思源之间隔了一层块操作。

想来想去,如果要实现 GPT Canvas 和 Cursor 那样的丝滑编辑,就不能让 AI 看到块和操作块的工具,而只是看到文档。

这样就必须准备一个用来 diff 的中间层:

  1. 准备当前文档的全文 md
  2. AI 返回修改内容
  3. 将 AI 返回的内容合并到当前文档的 md 中,得到修改后的全文 md
  4. 将修改后的全文 md 通过某种方式应用到当前文档

前 3 步简单,第 4 步我奋战了 30 小时,我能想到的方法都用遍了,可以说宣告失败了。

于是想请教各位大佬,有没有什么可行的方法能够指点一二?或者有没有什么我不知道的现成的方案?

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    28448 引用 • 119792 回帖
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    11156 引用 • 50667 回帖 • 52 关注

相关帖子

被采纳的回答
  • 3000 悬赏啊,那不得不回答一下了。doge

    用纯 MD 做对比,用 kramdown 做修改。(左边 Kdown,右边 MD)。

    基本上属于 MD 一行等于 Kdown 两行(内容行 + 属性行)。逐行对比决定要不要保留就行,只不过具体的 diff 逻辑会有点麻烦,不过可以考虑让 AI 修改时提供具体的修改操作,比如在操作过的行的行首增加[C]、[U]、[D]等标记。

    逐行对比的过程中,遇到 C 就在 kdown 里对应位置插入行,U 替换,D 删除。

    不过对于列表、列表项、超级块等格式倒是需要额外进行处理一下。大思路这样基本上没问题,小思路就得增对

    image.png

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 注意一下格式,你用 getKdown 那个 api 获取全文 kdown 以后,你修改一两个文字再丢 update 看能不能更新就知道是不是格式问题了。

    1 回复
  • 其他回帖
  • Wetoria 1 2 评论

    3000 悬赏啊,那不得不回答一下了。doge

    用纯 MD 做对比,用 kramdown 做修改。(左边 Kdown,右边 MD)。

    基本上属于 MD 一行等于 Kdown 两行(内容行 + 属性行)。逐行对比决定要不要保留就行,只不过具体的 diff 逻辑会有点麻烦,不过可以考虑让 AI 修改时提供具体的修改操作,比如在操作过的行的行首增加[C]、[U]、[D]等标记。

    逐行对比的过程中,遇到 C 就在 kdown 里对应位置插入行,U 替换,D 删除。

    不过对于列表、列表项、超级块等格式倒是需要额外进行处理一下。大思路这样基本上没问题,小思路就得增对

    image.png

    1 回复
    多谢指教 🙏 我去试试
    B3000Kcn
    有钱能使鬼推磨,典型案例 ,哈哈
    HugZephyr 1 赞同
  • Wetoria 1 2 评论

    kdown:/api/block/getBlockKramdown

    md:/api/export/exportMdContent

    下次自己翻思源的 router.go 文件就好,支持的 api 都在里面了。

    感谢解答 🙏 我看到这个 api 了,但我没想到 getBlockKramdown 填文档 id 就是获取全文 kramdown🤣
    B3000Kcn
    @B3000Kcn 实践出真知。准备个 apiFox,自己试一下就知道了。我也就是这么弄的。
    Wetoria 1
  • B3000Kcn

    感谢解答,刚才自己试出来了,太激动了!

    之前 update 失败是因为没有去掉末尾的文档块属性 😂

    这下真的胜利在望了!

    image.png

    1 回复
  • 查看全部回帖

推荐标签 标签

  • 分享

    有什么新发现就分享给大家吧!

    251 引用 • 1801 回帖 • 1 关注
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    960 引用 • 946 回帖
  • 996
    13 引用 • 200 回帖 • 7 关注
  • Firefox

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    7 引用 • 30 回帖 • 367 关注
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 405 关注
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 203 关注
  • 叶归
    25 引用 • 100 回帖 • 37 关注
  • Visio
    1 引用 • 2 回帖 • 1 关注
  • sts
    2 引用 • 2 回帖 • 260 关注
  • Chrome

    Chrome 又称 Google 浏览器,是一个由谷歌公司开发的网页浏览器。该浏览器是基于其他开源软件所编写,包括 WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。

    63 引用 • 289 回帖 • 1 关注
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 475 关注
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 545 关注
  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    60 引用 • 22 回帖
  • 锤子科技

    锤子科技(Smartisan)成立于 2012 年 5 月,是一家制造移动互联网终端设备的公司,公司的使命是用完美主义的工匠精神,打造用户体验一流的数码消费类产品(智能手机为主),改善人们的生活质量。

    4 引用 • 31 回帖 • 3 关注
  • API

    应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    79 引用 • 431 回帖 • 1 关注
  • 持续集成

    持续集成(Continuous Integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

    15 引用 • 7 回帖
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖
  • 程序员

    程序员是从事程序开发、程序维护的专业人员。

    599 引用 • 3541 回帖
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    91 引用 • 113 回帖
  • RESTful

    一种软件架构设计风格而不是标准,提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

    30 引用 • 114 回帖 • 9 关注
  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 11 关注
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    36 引用 • 200 回帖 • 54 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    119 引用 • 54 回帖
  • 尊园地产

    昆明尊园房地产经纪有限公司,即:Kunming Zunyuan Property Agency Company Limited(简称“尊园地产”)于 2007 年 6 月开始筹备,2007 年 8 月 18 日正式成立,注册资本 200 万元,公司性质为股份经纪有限公司,主营业务为:代租、代售、代办产权过户、办理银行按揭、担保、抵押、评估等。

    1 引用 • 22 回帖 • 838 关注
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    85 引用 • 324 回帖
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖 • 1 关注
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 121 关注