【已解决】如何使用Text Generator对语音输入的文字进行改写,提高输入效果。

遇到的问题

1、Text Generator如何换行输入改写内容,而非在同一行后面紧跟生成改写文字。
2、目前改写生成的内容生成效果一般,如何写提示词更好(选用的是azure 的gpt-4o-mini的2024-08-01-preview模型)

问题背景

最近想尝试语音打字,但语音打字可能会有错别字,句子标点、结构等可能不太理想。或者过于口语化。想通过插件进行改写,最终期望是插件生成几个改写内容,从里面选择一个改写内容直接覆盖掉语音输入的文字。
目前根据我的小白水平想到的是改写的内容换行,然后通过按键精灵或者(obsidian内部插件?)设置一个快捷键,模拟键盘操作模拟将光标移动上一行,定位到语音输入所在行,然后删除此行。
如果插件本身如果能直接覆盖原先内容所在行更好。

预期的效果

改写内容直接覆盖原先内容所在行或者改写内容另起一行进行输入。

想实现效果1或效果2,改写的内容比较完整准确


下面是目前的效果
cceventapp_AVT0gm9JeJ

已尝试的解决方案

最初想直接覆盖改写掉语音输入内容,折腾好久没法实现,进而想到换行输入,方便后续通过快捷键删除原先语音输入的所在行。
插件官网文档如下
Introduction - Text Generator Plugin (text-gen.com)
目前配置如下

其他通用方案

通过电脑的copilot桌面应用,这个场景更加通用,不局限obsidian软件,而且免费。就是生成内容后需要选中,复制,粘贴,在切回到obsidian,并粘贴到对应的位置,日常会多一些操作,目前在想办法整合尽量少几步操作。

这插件提供的功能很多, 想要控制文字生成位置, 目前知道有俩办法:

1 利用 Auto Suggest 功能的思路

就是改进楼主的例子, 补全口令 (默认是双空格) 被触发后, TextGen 是把新文字直接生成在当前段落内
那么改成: 新起一行, 触发口令, 但是仍然让 TextGen 操作上一段的文字就行了

具体是:

  1. Auto Suggest 那一段设置里, 开启 Allow Suggest in new Line image
  2. Auto Suggest 那一段设置里, Custom auto-suggest Prompt 写成
简化下列段落, 纠正错字和误拼, 将口语表达改为书面表达, 输出简化后的段落即可, 不要写别的, 但在段落最开始增加(ai)字样: 

{{#script}}
    let paragraphs = this.tg_selection.trim().split(/\s*\n+\s*/);
    if (paragraphs[paragraphs.length - 1].length<=2) {
        // 口令可能不是双空格, 而是 :: .. 之类, 这也会被收集到 tg_selection 里
        // 如果 paragraphs 最后一段字符太少, 那么认为倒数第二段是应该操作的文本
        paragraphs.pop(); 
}
    let current_paragraph = paragraphs[paragraphs.length - 1];
    notice("当前关注的段落为:" + current_paragraph); // 测试无误可以去掉这行
    return current_paragraph;
{{/script}}

意思是, 当光标在新行起始时, tg_selection 选中范围本该是该笔记 “在光标前的所有字”, 但是我们只想把 “光标前的最后一段” 传给 LLM

现在可以在新行去触发口令了 (默认是双空格)



2 写成模板, 并替换掉当前选中文本的思路

不使用 Auto Suggest 的功能,
而是写个典型模板来做, TextGen 模板设 mode: replace 后, 生成文字会替换掉选中文字

---
promptId: SimplifyReplaceParagraph
name: 简化并替换当前选中文字
description: 简化并替换当前选中文字 需要事先选中文字 注意备份
mode: replace
---
简化下列段落, 纠正错字和误拼, 将口语表达改为书面表达, 输出简化后的段落即可, 不要写别的, 但在段落最开始增加(ai)字样: 
{{selection}}

PS. 别的办法应该也有许多, 比如后处理给生成的文字增加前后空行等等

1 个赞

非常感谢大佬的回答,有效的帮助我解决了问题,让我部分场景语音输入替换键盘输入能变得更好了 :smile: