作为一个的Obsidian用户,我一直对Notion AI那样将大语言模型能力与笔记软件结合的功能充满羡慕。这种整合不仅可以极大地提高知识管理的效率,还可以在创作和整理信息时提供巨大的帮助。Text Generator插件的出现,为我长期以来想在Obsidian中实现的功能提供了可能性,允许我直接在熟悉的环境中利用大语言模型的强大力量。但让我感到惊讶的是,在Obsidian社区,关于这个插件的讨论并不多。因此,我决定写下这篇文章,希望能够能够抛砖引玉,看到更多在obsidian应用大模型的用法。
如何在Obsidian中使用Text Generator插件?
1. 安装插件
首先,用户需要在Obsidian的插件市场中找到Text Generator插件,并完成安装。
步骤:
- 打开Obsidian
- 进入设置
- 选择“插件市场”
- 搜索并选择Text Generator插件
- 点击“安装”
2. 配置插件
安装完成后,需要对插件进行必要的配置后才能继续使用。
选择LLM模型
text generator 插件可以选择不同的大模型,但此处
配置模版保存路径。所谓的模版可以一整套处理逻辑,包括:怎么获取输入、提示词(Prompt)、怎么输出。默认模版保存路径为textgenerator/prompts
下,可以根据自己的习惯修改。
配置模版
text generator提供了一个模板管理工具,可以通过它安装预定义的一系列插件。我建议初次尝试的时候都安装官方默认的模板库。
通过command + p(windows下为crtl + p)打开控制面板,输入text generator,在跳出来的选项中选择“Text Generator: Template Packages Manager”。
这里提供了多个示例模板库,我建议安装“Deafult Prompts”和“Experimental Package”作为我们参考的范例。
模板文件会安装在之前配置的“模版保存路径”下,我之前配置了路径为“Extras/textgenerator/prompts”,因此模板文件夹就放在该文件夹下。
3. 使用示范
我提供2个我常使用的场景,抛砖引玉,希望能够看到更多在obsidian中集成大模型的用法。
用法1:改写文本
改写或润色文本是我最常使用的场景之一。我会利用大模型的能力来帮助我改进自己的文字,修正不恰当的表述和重复的表述。
在官方提供的默认库中,有一个rewrite
模板提供了类似的功能。但默认是英文,我们可以直接修改该模板的内容。
将正文内容修改为以下信息:
作为一名中文写作改进助理,你的任务是改进所提供文本的拼写、语法、清晰、简洁和整体可读性,同时分解长句,减少重复,并提供改进建议。请只提供文本的更正版本,避免包括解释。
===
{{tg_selection}}
***
{{output}}
接下来选中需要重写的文字,调出控制面板,输入“Text Generator”,找到“Text Generator: Templates: Generate & Insert”,再找到名为“rewrite”的模板,就可以让大模型重写文本了。
用法2:总结多个文件生成周报
除了常规用法之外,如果写一点java script代码,还能够实现更多功能,这里我提供一个总结每日笔记中运动记录并生成markdown表格的例子。
首先我们需要在text generator设置中允许执行java script脚本。
进入Text Generator设置,在"Template Settings"下,将“Allow scripts”选项打开。
我会在weekly
文件夹下创建多个名字为日期的笔记,每一则笔记都由“运动记录”和“工作日记”两部分组成,当一周结束的时候,我希望汇总当周运动时间并输出在表格里。
这里会用到两个模板,一个模板(weeklySummary)用来预处理,也就是读取符合条件的记录,另一个模板(summaizeWeeklyRecords)用来调用大语言模型的能力处理文本。
我们可以在模板文件中增加以下内容,读取符合格式的文件,提取标题为“运动记录”下的内容,然后将所有符合条件的内容都拼接在一起并请求处理。
{{#script}}
let activeFile = app.workspace.getActiveFile();
let currentDirPath = activeFile.parent.path;
let filesInDir = app.vault.getFiles();
let regex = /^\d{4}-\d{2}-\d{2}.md$/; // 读取符合 4个数字-2个数字-2个数字.md 的文件
let filteredMarkdownFiles = filesInDir.filter(file =>
file.path.startsWith(currentDirPath) &&
regex.test(file.name) // Test if the file name matches the pattern
);
const contentArray = [];
let weeklySummary = '';
for (const file of filteredMarkdownFiles){
notice("read from " + file.path);
const sectionCache = app.metadataCache.getFileCache(file);
const headingCache = sectionCache.headings?.filter(h => {
return h.heading === "运动记录"
})
if(headingCache?.length > 0) {
const headingRange = {
start: headingCache[0].position.start.offset,
end: headingCache[0].position.end.offset,
};
const heading = headingCache[0].heading;
const content = await read(file.path);
if(!content) continue;
const headingInRange = content.slice(headingRange.start, headingRange.end);
const contentInNextRange = content.slice(headingRange.end);
const level = headingInRange.match(/#{1,6}/)[0].length;
const nextHeadingRegex = new RegExp(`(^|\\n)#{1,${level}}\\s`);
const position = contentInNextRange.match(nextHeadingRegex);
let contentRange;
let positionEnd;
if(position) {
positionEnd = headingRange.end + position?.index;
contentRange = content.slice(headingRange.end, positionEnd);
}else {
contentRange = content.slice(headingRange.end);
}
weeklySummary += file.name + ': ' + '\n\n';
weeklySummary += contentRange+ '\n\n';
}
}
this.weeklyRecords = await run("default/summaizeWeeklyRecords", {selection: weeklySummary })
{{/script}}
第二模板文件写prompt
请帮我提取文本中的运动记录,并以"日期","运动项目","总计时间"的维度输出为markdown格式的表格
{{selection}}
***
{{output}}
使用效果见视频
总结
使用Text Generator的好处
高度集成:与Obsidian的紧密集成使得用户可以在熟悉的环境中使用AI辅助。
定制化程度高:用户可以根据自己的需求调整模型和模板,实现个性化的内容生成。
不足之处
配置繁琐:对于一些用户来说,Text Generator插件的配置可能比较复杂,需要一定的学习和实践。
学习成本:用户需要花时间了解如何有效地使用这个工具,包括掌握其配置和使用技巧。
Text Generator插件为我们这些Obsidian用户提供了一个强大的工具,便于和市面上各种大语言模型结合。虽然它带来了一定的学习成本,但其提供的定制化解决方案和扩展能力,无疑使它成为一个值得尝试的选择。