(更新)org-supertag 4.0 发布

(更新)移除「标签关系设置」

在之前的版本,org-supertag 的标签和标签之间,可以设置不同的关系。当时觉得这一点很酷,但在实践中发现,这无疑还是增加了记笔记这件事情的的认知和操作负担。所以我保留了自动生成的【标签同现关系】,去掉了需要手动添加标签关系的部分。

此外,由于标签关系将记录的 RAG 的知识库里,中间还会让 LLM 进一步提供标签关系的说明,这一步因此就不需要用户手动设置标签关系了。

org-supertag 与其它 RAG 的不同

绝大部分 RAG 是针对长篇累牍的文档,这些文档从数据角度,是缺乏结构化的。它们只是在排版方面进行了结构化,比如 Markdwon,用 ## 这些来代表文章里大的分块。这个事实导致了,所有 RAG 系统必须包含 Chunk(切块)机制,将一个长文档,切成均等的文本块。这种方式导致了一个后果,RAG 常常有「信息损失」的风险。

但 org-mode 不同,不光排版,它还在数据层面进行了结构化。一个 org-headline,不光是单纯的语法标记,从数据角度来说,它还代表着一个数据块(大家都应该记得在 org-mode 如何畅快地移动 org-headline 吧,它不光移动一个标题,还移动标题以下的内容)。

这得益于 org-mode 之前一直努力引入的具备 AST 结构的渲染机制——这是 org-mode 可以傲视 MarkDown、Word、PDF 等通用文档格式的地方。我认为这代表着文档格式进化方向,不再为排版服务,而是为数据服务。

org-supertag 不用再包含传统的 Chunk 机制,基于 org-mode 的渲染机制,以及诸多开放 API 接口,org-supertag 可以轻松地将一个 org-headline 以及其所包含的内容,视为一个数据块,就可以了。而且不光如此,由于 org-mode 如此强大和便利,从数据结构的角度记录一个 org-headline 它还记录了大量结构化信息,包括 olp,tags 等等。这些结构化信息,让 org-mode 天然地与 GraphRAG 的方式吻合。


与 org-mode 解耦

关于这一次更新,最大的变化,不光是增加了 AI 与 RAG 方面的支持,还有对 EPC 部分功能的完全重构,其它组件在功能和交互上的精简。

直观结果是代码行数的变化,应该比之前要少了几千行代码。从功能交互来说,更加紧凑聚焦。

其中一个最大的变化是,部分重要功能完全与 org-mode 解耦:

  • 标签功能,目前仅支持输入 #inline-tag,放弃支持 org-mode 的 :TAG:

这么做,是因为我自己在日常使用的时候,脑子里总是想什么标签用 :TAG: 什么标签用 #inlien-tag,是很沉重的认知负担。而就我对大部分 org-mode 用家的了解,:TAG: 一般和 org-agenda 或这是日程安排有比较紧密的相连。所以我认为 org-supertag 没必要强行兼容 :TAG: 样式,而应该保留 :TAG: 原本用途的纯粹性,服务于日程、任务的安排。

同时,也能够纯粹 #inline-tag 的用途,就是它完全服务于笔记,只用于记录概念名。

  • 属性功能,不再支持 org-mode 的 PROPERTIES,所有属性记录将直接在数据库的记录上进行增删改。

我认为 org-mode 的 PROPERTIES 只需要负责显示它原本的那些内容就已经很多了。更多的 PROPERTIES,会给用户带来很大的视觉压力——我自己用的时候都觉得难受。

另外从精简功能和保持简单逻辑的角度出发, 这也令 org-supertag 的属性组件,不再同时向 2 个地方负责,而只需要负责面向数据库就可以了。这可以减轻我维护的压力。


同步策略的变化。

在上一个版本,我最自豪的是引入了 org-supertag-sync.el 这个自动化将文件数据同步到数据库的组件。

之前的同步策略是,扫描 org 文件,为所有 org-headline 创建 ID(这个过程就是转换成 node)。当时我觉得,数据库应当做到「不遗漏」。但最近,我的看法有了变化——一方面是来自 Github 上一名用户跟我的讨论,他提到,他不会为所有的 org-headline 都添加 ID,因为一些任务性的安排,是没有必要添加 ID 的。换言之,他添加 ID 的目的,都是为了知识而服务。

所以,这一次我的同步策略也有了变化,不再强制为每一个 org-headline 添加 ID 了。用户如果要为 org-headline 添加 ID, org-supertag 设计了多种途径:可以用 org-supertag-node-create 命令,也可以直接添加标签,这样子 org-headline 会自动转化成 node。

总而言之,这一次更新最主要的一个目的是降低 org-supertag 的复杂度,让它变得更加简单。


更新记录

新增功能

AI Chat服务

  • 用户可以通过 M-x org-supertag-view-chat 打开 AI 聊天界面。
    • *User: 后输入消息,直接按 RET 发送即可。

    • 支持 RAG 上下文检索:展开上下文时,可直接点击源内容快速跳转。

    • 支持类似 Claude 的 /commands 命令系统:

      • 输入 /command-name 即可调用命令。
      • 示例:通过 /define <name> "Prompt" 自定义新指令,并支持 $INPUT 变量识别。
    • 支持多语言对话:通过 org-supertag-view-chat-lang 设置。

RAG 服务

  • RAG 服务将自动检查数据库当中的变更,自动将变化增量更新到 SQLite-vss 数据库中
  • 用户可以 M-x org-supertag-backgorund-run-now 手动运行 RAG 同步
  • RAG 将在后台为 LLM 提供准确地资料检索

自动标签建议

  • LLM 将在后端自动为没有标签的 node 生成标签建议
  • 提供统一的标签建议应用界面

智能伙伴:新增智能伙伴功能

  • 智能伙伴将自动为没有标签的 node 生成标签建议
  • 提供统一的标签建议应用界面

定时任务:用于管理后台各类服务

重构

EPC 模块:完全重构 EPC 服务器后端。

  • 改进代码结构,减少冗余。

标签系统

  • 统一标签建议界面。
    • 放弃“预设标签”机制,仅支持自定义 #inline-tag 标签。
    • 放弃对传统 Org TAGS 的支持,避免输入限制。

关系管理

  • 放弃单独保存“同现关系”,统一整合到 LINK 数据对象中。

补全系统

  • 放弃直接支持 Company 接口,改用 Emacs 的 completion-at-point。兼容各种 completion 方式(如 Company、Corfu)。

Behavior 系统

  • 各模块定时任务抽离为独立系统 org-supertag-scheduler.el

移除

  • org-supertag-backlink.el 移除。
    • 功能已整合进 `org-supertag-view-node
4 个赞

已经有人愿意帮 org-supertag 录制视频了,LOL

2 个赞

org-supertag 在 github 上被这位作家关注了:

他之前演讲,展示了自己怎么用 Emacs 写诗😄

本来是想重写 README 的,不小心整了个活儿,搞了个 Kanban 视图出来:

卡片可以直接左右移动

等有时间再让这个界面不那么单调。

1 个赞

org-super-tag-query后,现在出现的是#tag对应的Node,未来是否有可能在相应的node下显示#tag前后部分内容,方便选择

能举个例子吗?

比如这个第3个node下面,显示出#tag左右的文字。

我理解你的意思了。其实性能开销蛮大的,我要看看怎么处理

你现在可以升级 org-supertag 最新版本,我升级了query 的样式:

效率好高啊,这样我感觉更实用了,原来的Node一般都是比较精练的描述,有了上下文,更加容量找到想要的Node。

现在搜索范围变小了,还能实现原来的搜索 title tags properties field value吗?

我的意思是,有些#tag我写在了properties里,之前能搜索出来。

你是怎么写在 Properties 的?

我的node是这样的,我把一些随记写在了 ;LOG: 下面,用org-ql做summary。 上一个版本的org-supertag,能query出来。

现在的 Fields 和 Properties 解耦了,所以不会索引你直接添加到 Properties 里的内容。 你要真的记录,就得 M-x org-supertag-view-node 里记录。

后台自动sync后,还是能query出Properties里面的#tag, 只是不在context里显示了。

哦,你希望显示吗?

对我来说,我希望能显示,因为我很多log记在了Properties里。

我想想怎么弄哈

已经更新了。目前版本更新到 4.3.0。

Query Buffer 里的搜索结果卡片的 Context 部分,可以显示来自 Field 的匹配结果。

提供了类似 LogSeq 的页内通过 Query 表达式实时插入检索结果的特性:

PixPin_2025-07-29_01-21-31

特性(query):增强 S 表达式查询引擎和用户体验

  1. 动态表格输出(S 表达式查询)
  • org-babel-execute:org-supertag-query 函数现为 S 表达式查询生成动态 Org 表格
  • 第一列显示可点击的节点链接(节点标题)
  • 第二列展示关联标签
  • 根据查询指定的字段(如 (field "Status" "On-going"))动态添加额外列
  • org-supertag-query Babel 块默认设置 results raw 头部参数,确保链接可点击
  1. 新增查询操作符
  • 引入时间基操作符:(before "DATE")(after "DATE")(between "START_DATE" "END_DATE")
  • 日期参数同时支持绝对格式(如 "YYYY-MM-DD")和相对格式(如 "-7d""+1m""now"
  1. 改进字段查询(field 操作符)
  • field 操作符 (field "FIELD_NAME" "VALUE") 经过全面调试和重构
  • 精确检索节点时会深度解析 org-supertag-db.el 中的链接存储机制
  • 确保字段名称和值匹配时返回正确结果
  1. 增强交互式查询上下文
  • org-supertag-query-find-nodes 函数优化交互式查询缓冲区的上下文提示
  • 若关键词匹配字段名或字段值,优先显示 Field [FIELD_NAME]: FIELD_VALUE
  • 更智能地呈现相关字段信息而非通用内容片段
  1. 新增交互式命令
  • 添加 M-x org-supertag-insert-query-block 命令
  • 在光标处快速插入预格式化的 org-supertag-query Babel 块
  • 通过交互提示获取 S 表达式内容