type
status
date
slug
summary
tags
category
icon
password
auto1.0 之前名称为 yuhanbo-ai ,文章视频请前往:OB插件yuhanbo-ai:快速生成、插入或替换内容 | 余汉波 文档
auto1.0 在 github 开源:yuhanbo758/obsidian-yuhanbo-ai
概述
本文档旨在为技术背景的读者提供关于 Obsidian AI 自动插件(版本 2.0.0)的详细解释。该插件由余汉波开发,旨在通过调用 OpenRouter、Deepseek 和 Gemini API 自动生成和替换 Obsidian 文档中的内容。我们将深入探讨插件的功能、结构、算法和潜在改进,并概述其所使用的编程语言和库。
插件功能
该插件主要提供以下几个核心功能:
- 内容生成和替换:允许用户选中一段文本,然后通过 AI 生成的内容替换选中的文本。
- 内容生成和插入:允许用户选中一段文本,然后将 AI 生成的内容插入到选中文本的后面。
- 直接生成内容:允许用户直接通过 AI 生成内容,并将内容插入到光标所在位置。
- 定时任务:允许用户设置定时任务,自动从指定文件读取内容,通过 AI 处理后,保存到指定文件。
- 快速生成:允许用户设置快捷键,快速通过 AI 生成内容,并将内容插入到光标所在位置。
插件结构
该插件主要包含以下几个文件:
- manifest.json:插件的清单文件,包含插件的 ID、名称、版本、描述、作者和是否为桌面应用等信息。
- package.json:Node.js 的包管理文件,包含插件的名称、版本、描述、入口文件、脚本、关键词、作者、许可证、开发依赖和依赖等信息。
- styles.css:插件的样式文件,包含插件的样式定义,用于美化插件的界面。
- main.js:插件的主文件,包含插件的核心逻辑。
manifest.json
该文件定义了插件的基本信息,包括插件的 ID(
obsidian-ai-auto
)、名称(yuhanbo-ai-auto
)、版本(2.0.0
)、最低 Obsidian 版本(0.15.0
)、描述(选中内容,定时自动生成内容,调用OpenRouter、Deepseek和Gemini生成内容
)、作者(余汉波
)和是否为桌面应用(false
)。package.json
该文件定义了插件的依赖和脚本。其中,
main
字段指定插件的入口文件为 main.js
。scripts
字段定义了开发和构建插件的脚本。devDependencies
字段定义了开发依赖,包括 @types/node
、obsidian
和 esbuild
。dependencies
字段定义了插件的依赖,包括 moment
。styles.css
该文件包含了插件的样式定义,用于美化插件的界面。其中定义了 prompt modal,template list,scheduled task 等组件的样式。
main.js
main.js
是插件的核心文件,包含了插件的主要逻辑。下面我们将详细分析 main.js
中的代码。默认设置
DEFAULT_SETTINGS
定义了插件的默认设置,包括 OpenRouter API Key、Gemini API Key、Deepseek API Key、默认模型、模板路径、自定义模型、定时任务和快速生成设置。内置模型列表
BUILT_IN_MODELS
定义了插件的内置模型列表,包括 Deepseek、Gemini 和 OpenRouter 提供的模型。每个模型包含 value
、label
和 provider
字段。OpenRouterPlugin 类
OpenRouterPlugin
类是插件的主类,继承自 obsidian.Plugin
。该类包含了插件的核心逻辑。onload 方法
onload
方法是插件加载时执行的方法。该方法主要完成以下几个任务:- 加载插件设置。
- 添加三个命令,分别用于调用 AI 生成并替换内容、调用 AI 生成并插入内容和直接调用 AI 生成内容。
- 添加设置 Tab,用于设置插件的参数。
- 启动所有定时任务。
- 注册快速生成命令。
- 启动本地服务器,用于处理来自其他应用的请求。
onunload 方法
onunload
方法是插件卸载时执行的方法。该方法主要完成以下几个任务:- 关闭服务器。
- 停止所有定时任务。
startAllScheduledTasks 方法
startAllScheduledTasks
方法用于启动所有定时任务。该方法会遍历 this.settings.scheduledTasks
数组,然后调用 this.startScheduledTask
方法启动每个定时任务。stopAllScheduledTasks 方法
stopAllScheduledTasks
方法用于停止所有定时任务。该方法会遍历 this.tasks
Map,然后调用 clearInterval
方法停止每个定时任务。startScheduledTask 方法
startScheduledTask
方法用于启动单个定时任务。该方法主要完成以下几个任务:- 检查是否已经存在该任务,如果存在,则先停止该任务。
- 计算下次运行时间。
- 设置定时器,到下次运行时间时,执行以下操作:
- 读取源文件内容。
- 处理内容(与选中发送保持一致的逻辑)。
- 生成文件名。
- 保存生成的内容。
- 根据任务类型决定是否安排下一次执行。
generateAIContent 方法
generateAIContent
方法用于调用 AI 生成内容。该方法主要完成以下几个任务:- 根据模型名称,找到选择的模型信息。
- 根据不同的提供商,调用相应的 API。
- 返回 AI 生成的内容。
generateWithGemini 方法
generateWithGemini
方法用于调用 Gemini API 生成内容。generateWithDeepseek 方法
generateWithDeepseek
方法用于调用 Deepseek API 生成内容。searchFilePaths 方法
searchFilePaths
方法用于搜索文件路径。handleQuickGenerate 方法
handleQuickGenerate
方法用于处理快速生成内容。getTemplates 方法
getTemplates
方法用于获取模板列表。getTemplateContent 方法
getTemplateContent
方法用于获取模板内容。saveGeneratedContent 方法
saveGeneratedContent
方法用于保存生成的内容。PromptModal 类
PromptModal
类是插件的提示框类,继承自 obsidian.Modal
。该类用于显示提示框,让用户输入提示词。OpenRouterSettingTab 类
OpenRouterSettingTab
类是插件的设置 Tab 类,继承自 obsidian.PluginSettingTab
。该类用于显示设置 Tab,让用户设置插件的参数。CustomModelModal 类
CustomModelModal
类是插件的自定义模型模态框类,继承自 obsidian.Modal
。该类用于显示自定义模型模态框,让用户添加自定义模型。ScheduledTaskModal 类
ScheduledTaskModal
类是插件的定时任务模态框类,继承自 obsidian.Modal
。该类用于显示定时任务模态框,让用户添加定时任务。QuickGenerateSettingModal 类
QuickGenerateSettingModal
类是插件的快速生成设置模态框类,继承自 obsidian.Modal
。该类用于显示快速生成设置模态框,让用户添加快速生成设置。[[OB插件yuhanbo-ai:快速生成、插入或替换内容]]