介绍
之前 @Achuan-2 大佬写了一个插件 写了一个思源 Copilot 插件,实现基于思源笔记内容进行 AI 问答和编辑 非常好用!非常强大!
但也有一点点不足之处,比如,有时你可能需要的是快速划词查看,用完即关或根据自己的需要自定义不同的工具按钮。
本代码针对上述痛点进行了解决,并增强了划词功能,比如多选块和对代码块的支持。
主要功能有:
- 划词解释、翻译、纠错、总结等
- 在解释、翻译、纠错、总结后,可继续聊天,也可以 ctrl/cmd + alt + z 打开聊天窗口
- 支持多选段落和代码块选择
- 支持图片上传和关联当前文档(剪切板图片也可直接粘贴,暂不支持文件)
- 可配置不同模型和提示词
- 可自定义更多功能和工具按钮
注意:这个代码不是插件,是 js 代码片段,点这里下载代码,然后放到思源 js 代码片段即可。
名字 Thpilot 由来:
顾名思义,来源于 Copilot,Thpilot 全名是 Third pilot,即二副的意思,意思是继 Copilot 之后,思源 AI 领域的又一大利器。
效果展示
行内选择

多行选择

代码块选择

解释

翻译

纠错

聊天

ai 选择

右键功能

对话工具按钮

1.0.3 新增保存当前聊天到指定路径功能

配置说明
-
config.libs 中的类库建议保存到本地更快速和安全(不然,如果哪天平台挂了就没了)
-
models 和 vipKey 也可以单独在代码片段中配置,防止分享代码时不小心泄漏隐私,可分别用
var llmModels = [{...}, {...}];和var thpilotVipKey = '';在外部配置,如下
-
buttons 中的 replaceCallback 配置后,聊天按钮会出现插入按钮,可在光标处出结果,比如纠正后的结果,翻译等
-
buttons 中的 beforeCallback 和 afterCallback 可在聊天前后做些事情,这种自定义按钮时非常有用。
-
如果想设置为聊天按钮必须配置 isChat 参数为 true
-
buttons 中的 context 是关联上下文,取值如下:
blockText 当前块文本 blockHtml 当前块 HTML
editorText 当前编辑器文本(注意不是当前文本全文,是编辑器可见区域)editorHtml 当前编辑器 Html
bodyHtml body 的 html 源码(注意,可能文本较长,占用 token 较大)
currentMd 当前文档的 Markdown 源码
为空则不关联上下文 -
提示词可任意更改,
{{selection}}代表选中文本,{{context}}代表关联上下文。更专业的提示词建议参考 https://komorebi.001412.xyz/post?file=posts%2F5.md#toc-heading-prompt%E4%BC%98%E5%8C%9630
帮助手册
以下由 Claude Sonnet4.5 生成
SiYuan Thpilot 使用帮助文档
📖 简介
SiYuan Thpilot 是一个为思源笔记(SiYuan)设计的 AI 增强插件,提供划词解释、翻译、纠错、摘要和智能对话等功能。通过集成大语言模型,帮助您更高效地处理文本内容。
✨ 主要功能
1. AI 解释
- 对选中文本进行全面清晰的解释
- 自动识别并解释复杂术语和概念
- 支持上下文关联(当前块文本)
2. AI 翻译
- 智能识别源语言,自动翻译为目标语言
- 中文 ↔ 英文互译
- 保持原文风格和格式
- 支持 HTML 标签处理
3. AI 纠错
- 检查拼写、语法和标点错误
- 保持原始格式(包括 HTML 标签)
- 提供详细的修改说明
- 一键替换原文
4. AI 摘要
- 快速生成文本摘要
- 提取核心信息
- 支持长文本压缩
5. AI 聊天
- 全能 AI 助手对话
- 支持连续对话
- 可关联文档上下文
- 历史记录保存
🚀 快速开始
安装步骤
- 复制代码
- 将完整代码复制到思源笔记的代码片段中
- 路径:
设置→外观→代码片段→JS
- 配置 API
- 在代码顶部的"用户配置区"找到
models数组 - 填入您的 API 密钥和模型信息
- 在代码顶部的"用户配置区"找到
基础配置示例
const models = [ { url: 'https://api.example.com/v1', model: 'gpt-4', modelName: 'GPT-4', apiKey: '你的API密钥', // 👈 填写这里 stream: true, temperature: 0.7, } ];
⚙️ 配置说明
1. 界面配置
// 对话框尺寸 const width = 420; // 宽度(像素) const maxHeight = 468; // 最大高度(像素) // 快捷键设置 const shortcut = 'ctrl+alt+z'; // Windows/Linux // Mac 会自动转换为 'cmd+alt+z'
2. VIP 配置
const vipKey = '你的VIP密钥'; // 用于解锁聊天功能
提示:为避免泄露密钥,可在单独的代码片段中定义:
var thpilotVipKey = '你的VIP密钥';
3. 模型配置
完整参数说明
| 参数 | 类型 | 说明 | 示例 |
|---|---|---|---|
url |
string | API 地址 | https://api.example.com/v1 |
model |
string | 模型标识符 | gpt-4 |
modelName |
string | 显示名称 | GPT-4 |
apiKey |
string | API 密钥 | sk-xxx... |
stream |
boolean | 是否流式输出 | true |
temperature |
number | 温度参数 (0-2) | 0.7 |
thinking |
string | 思考链显示 | 'auto'/true/false |
URL 规则
- 自动补全:不含
chat/completions时自动添加 - 原始 URL:以
#结尾表示使用原始路径(去掉#) - 完整路径:包含
chat/completions不做处理
4. 按钮自定义
按钮配置结构
{ enable: true, // 是否启用 id: 'aiExplain', // 唯一标识符 name: 'AI解释', // 提示文本 icon: `...`, // SVG 图标 prompt: `提示词模板`, // AI 提示词 system: `系统指令`, // 系统角色设定 context: 'blockText', // 上下文类型 isChat: false, // 是否为聊天模式 isAutoSend: false, // 是否自动发送 pin: false, // 是否默认固定 useSelectedHtml: false, // 是否使用 HTML 选中内容 replaceCallback: (result, msg) => {} // 替换回调函数 }
上下文类型说明
| 值 | 说明 | 适用场景 |
|---|---|---|
blockText |
当前块文本 | 解释、摘要 |
blockHtml |
当前块 HTML | 格式保留 |
editorText |
编辑器可见文本 | 大段内容分析 |
editorHtml |
编辑器 HTML | 复杂格式处理 |
currentMd |
当前文档 Markdown | 全文理解 |
bodyHtml |
整个页面 HTML | 深度分析(慎用) |
''(空) |
无上下文 | 翻译、纠错 |
提示词变量
{{selection}}:选中的文本内容{{context}}:根据context配置自动注入的上下文
📱 使用方法
方法一:划词工具栏
- 选中文本
- 鼠标拖选文字
- 或选中多个块(按住
Ctrl点击)
- 点击工具栏按钮
- 工具栏自动出现在选区上方
- 点击对应功能按钮(解释/翻译/纠错/摘要/聊天)
- 查看结果
- AI 对话框弹出显示结果
- 支持流式输出(实时显示)
方法二:快捷键
- 按下快捷键
- Windows/Linux:
Ctrl+Alt+Z - Mac:
Cmd+Alt+Z
- Windows/Linux:
- 自动行为
- 如果有选中文本:自动发送到聊天助手
- 如果无选中文本:打开空白聊天窗口
特殊场景
代码块选择
- 在代码块内选择文本
- 工具栏显示在选区上方
- 支持代码解释和翻译
多块选择
- 按住
Ctrl点击多个块 - 工具栏显示在第一个块上方
- 会将所有块转为 Markdown 发送
🎨 界面操作
对话框功能
顶部按钮
- 📌 固定:窗口置顶,不随点击外部关闭
- 🔄 切换模型:下拉选择不同 AI 模型
- 🗑️ 清空历史:清除当前会话记录
- ❌ 关闭:关闭对话框
消息操作
每条 AI 回复下方包含:
- 复制:复制消息内容
- 替换:用 AI 回复替换原选中文本(如果配置了
replaceCallback) - 重新生成:重新请求 AI 回答
输入区域
- 文本框:输入消息或问题(
Shift+Enter换行) - 发送按钮:
Enter或点击发送
🔧 高级功能
1. 自定义替换逻辑
replaceCallback: (replaceResult, aiMessage) => { const protyle = getProtyleEl(); const wysiwyg = protyle.querySelector('.protyle-wysiwyg'); sendTextToEditable(wysiwyg, replaceResult); }
replaceResult:从 AI 回复提取的内容(如<div class="replace-result">包裹部分)aiMessage:完整 AI 回复
2. 全局历史记录
所有聊天记录自动保存到:
/data/temp/ai-global-history.json
配置最大历史条数:
const globalHistoryNum = 200; // 保留最近 200 条
3. 外部变量配置
在其他代码片段中定义:
// 自定义模型 var llmModels = [ { url: '...', apiKey: '...', ... } ]; // VIP 密钥 var thpilotVipKey = '你的密钥';
4. 深度思考模式
针对 DeepSeek-R1 等模型:
{ model: 'deepseek-ai/DeepSeek-R1', thinking: 'auto', // 选项: // 'auto' - 自动显示(有内容才显示) // true - 强制显示(即使为空) // false - 完全隐藏 }
后悔药
- 如果你没有钉住聊天窗口,不小心关闭了窗口,可以在控制输入
aiDialog.show()强制打开上次的窗口 - 如果你之前的历史会话忘记保存了,可以在控制输入
aiDialog.getGlobalHistory()查看所有历史会话(默认仅支持查看最近 200 条,可通过参数 globalHistoryNum 配置) - 思源崩溃了,历史会话未来得及保存,打开思源空间
/tmp/ai-global-history.json历史会话都在这里(默认仅支持查看最近 200 条,可通过参数 globalHistoryNum 配置)
使用技巧
- 双击标题可最大化,再次双击还原
- 最大化后,点击左侧的
-按钮可折叠窗口 - 鼠标移动到左右或底边或左下和右下可拖动窗口
- 配置 shortcut 参数可更改快速打开聊天窗口的快捷键
- shift+ 点击 ai 回复中的复制按钮可复制所有对话
- ai 回复下的按钮编辑可更改回复内容和历史会话中的内容;删除也会删除历史会话内容
- 重新生成后,点击分割线不同部分,可选中不同的内容,下面的编辑和复制按钮操作的是选中部分内容,不选中则是最后一部分的内容;删除时如果有多个部分优先删除选中部分或最后一部分,当剩一部分时删除该条聊天内容
- 调整模型配置顺序可修改模型默认值,最顶部的是默认值
- 输入框 shift+enter 换行,enter 或点击发送,滚轮可上下翻页查看文本内容
- 点击右上角的保存可把当前聊天内容保存到指定路径中,支持 ai 自动生成文档标题
代码
你怎么看?
你觉得这个功能有用吗?
你觉得使用上手难度如何?
推荐 AI 平台
注:通过邀请链接可获得额外赠送
- 免费模型平台 硅基
- 国外模型平台 V-API 价比高,快速稳定,模型齐全(claude4.5,gpt5 等)
- 特别推荐 ⭑⭑⭑ 如何获取上亿 token?
- 魔塔平台 http://modelscope.cn 单模型 400 次/日 总 2000 次/日
VIP
非 VIP 功能仅能使用划词解释、翻译、纠错、总结等,不能使用聊天功能。
购买后,填到这个参数里即可 const vipKey = ''; // 👈秘钥填这里
一次购买,终身享用!
购买 VIP 的方式(价格自己定,最低 5 元):
爱发电(自动发货,如果有问题可私信联系作者)

或访问链接
或打赏后私信


欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于