有一种感觉,用过就很难描述。
你正在写一段文书,一句话写到一半,停了一秒。屏幕上悄悄出现了灰色的字,接着你没打完的意思,顺着你的节奏,把后面说完了。

你按下 Tab。字变黑,光标跳到末尾。
生成文章是一件事,陪你写文章是另一件事。用过你就明白,两件事差了不止一个量级。
我第一次体验到这个,是在 Cursor 里写代码。但 Cursor 毕竟是为代码设计的,拿它来写法律文书,提示词体系都是代码语境,那种顺手的感觉就找不着了。
后来我自己搭了一个叫 lawtab 的工具,在团队内部用,专门针对法律文书写作做了优化,小伙伴们反馈还不错
再后来迁到了 Obsidian,发现插件市场里还真有几个类似的东西,以经整理了一下,挑三个介绍给大家。
Markpilot:老实人,两年没更新,但思路是对的
这个插件专注做行内补全,最后一次更新已经是两年前的事了。

模型供应商只支持三家,OpenAI、OpenRouter 和 Ollama,国内用户直接上手会有点费劲。

但它的补全策略设计得挺清醒的,主要两个部分。
上下文:没有无脑发全文
它只截取光标前后各约 256 个字符,中间用一个 <MASK> 标记告诉模型:这里该你填了。请求快,也省 token。
更聪明的地方在于,它会先判断你光标落在哪种 Markdown 元素里,是标题、段落、列表项、引用块,还是代码块,然后换不同的提示词去问模型。写代码时它甚至能识别出是 Python 还是 JavaScript,把语言信息一起塞进去。每种上下文有独立的 few-shot examples,让补全风格更对味。
快捷键:没什么花头
Tab = 接受灰色补全,光标跳到末尾 Esc = 拒绝,同时取消还在路上的请求
就这两个,没别的。
补全体验是由策略决定的,快捷键只是最后那个动作。
Inscribe:可定制,还在更新,国内可用
Inscribe 上次更新是五天前,还活着。

模型支持得多一些。

供应商支持比较齐全,OpenAI、Ollama、Gemini、Grok 都有,最关键的是有一个 OpenAI compatible 选项,也就是说你可以接 DeepSeek、硅基流动、火山引擎,对国内用户友好多了。
上下文:把模板控制权交给你
Inscribe 没有像 Markpilot 那样内置一堆上下文类型,它的思路是:给你几个基础变量,让你自己写提示词模板。
它内置了 Mustache 模板,默认模板大概长这样:
Ifthelastsentenceisincomplete,onlycompletethesentenceandnothingelse.
Ifthelastsentenceiscomplete,generate a new sentence that follows logically:
---
{{{pre_cursor}}}你能用的变量就这几个:
pre_cursor:光标前的全部文本(从文档开头到光标) post_cursor:光标后的全部文本 active_sentence:NLP 库提取的"光标所在句子" last_line:文档最后一行
默认就是把光标前所有文字都发给模型,没做字符级截断,除非你自己在模板里只用 {{{active_sentence}}} 这类短变量。
输出这边有个聪明设计:模型返回的内容不照单全收,而是用 NLP 库做句子级裁剪,默认最多展示 1 个完整句子的补全,控制 ghost text 长度,也降低了接受时的决策成本。

快捷键:分步接受是最大亮点
Inscribe 支持"分步接受",按一次 Tab 只插入一部分:
可以像嗑瓜子一样,Tab 一下接受一个词,看一眼,再 Tab 一下接受下一句。剩余的 ghost text 会继续飘在后面等你。
拒绝机制很佛系:没有专门的 Esc 键,只要你动一下光标,或者打了和 AI 预测不同的字,补全就自动消失。
分步接受的价值就在这里:想接多少接多少,剩下的随时可以不要。
RosyPilot:我们自己搞的,尝试做一点优化
这个在插件市场里没有,需要去 GitHub 下载。
https://github.com/zh-xx/rosypilot/releases

在 Markpilot 的基础上二次开发的,感谢原作者 Taichi Maeda。
安装方式:在 Obsidian 仓库文件夹里找到 .obsidian/plugins 文件夹(没有就新建),在里面再建一个名为 rosypilot 的文件夹,把解压出来的三个文件放进去,重启 Obsidian 就好了。

目前支持的模型是 DeepSeek 和火山引擎。

主要改了两块:模型和补全策略。
模型:换成国内的
Markpilot 原版支持 OpenAI、OpenRouter、Ollama,国内用户上手要绕一圈。RosyPilot 直接换成 DeepSeek 和火山引擎,统一用 OpenAI compatible 接口对接,国内部署开箱即用。
DeepSeek推荐用deepseek-chat,豆包用lite或者mini模型。
补全策略:让模型读懂法律文书的层级
这是改动最大的地方。
Markpilot 的上下文提取很简单,光标前后各截一段,中间塞个 <MASK>,就发给模型了。它不知道你现在在写哪一章、哪一条、列的是第几项。
RosyPilot 在这里做了结构化处理,能识别三种场景:
写标题时,它会提取父级标题、同级标题、子标题,告诉模型这条标题在整个文件结构里的位置。法律意见书的章节标题续写,是有上下文约束的,不能凭空补。
写段落时,它会先提取你所在的章节路径,然后才是上下文文本。模型看到的是"第三章、违约责任、第二节"这样的位置信息,而不只是光标前后一段裸文字。
写列表时,它能识别列表标记,同时提取同级的其他列表项,让模型参照格式和内容续写,不至于写出和上一条风格差很多的东西。
另外还加了两个小东西:中文输入法输入过程中暂停补全触发,避免打字时冒出来乱入(这个很重要,老外不懂我们的这个需求);以及每次补全的完整 prompt 和响应都可以在 debug 面板里看到,方便调整。
这个工具我们自己每天在用,所以会持续改。发现哪里不对就调,有新想法就加进去。等有了比较大的变化,再来和大家分享。
三个放在一起看
如果你是国内用户,用 DeepSeek 或者火山引擎,想要一个专门为中文场景调过参数的工具,RosyPilot 目前是对口的选择,代价是安装要手动,也还在持续迭代,不如前两个稳定。
Markpilot 适合已有 OpenAI 或 OpenRouter 账号、希望补全风格能随 Markdown 元素自适应的用户。Inscribe 则适合对提示词有自己想法、想精细控制补全策略的用户,分步接受是三个里面最有趣的设计。
三个都免费,只需自备 API,选哪个主要看你的模型偏好和对"控制感"的需求高低
行内补全这种体验,讲不清楚,但用过的人都懂。
它不代替你写,也不打断你写,只是在你停下来的那一秒,轻轻推了你一把。
这一推,和 AI 帮你生成整篇文章,是完全不同的两件事。


夜雨聆风