[js] 思源 AI 助手(Thpilot),实现划词 AI 解释、翻译、纠错、总结、聊天等

介绍

之前 @Achuan-2 大佬写了一个插件 写了一个思源 Copilot 插件,实现基于思源笔记内容进行 AI 问答和编辑 非常好用!非常强大!

但也有一点点不足之处,比如,有时你可能需要的是快速划词查看,用完即关或根据自己的需要自定义不同的工具按钮。

本代码针对上述痛点进行了解决,并增强了划词功能,比如多选块和对代码块的支持。

主要功能有

  1. 划词解释、翻译、纠错、总结等
  2. 在解释、翻译、纠错、总结后,可继续聊天,也可以 ctrl/cmd + alt + z 打开聊天窗口
  3. 支持多选段落和代码块选择
  4. 支持图片上传和关联当前文档(剪切板图片也可直接粘贴,暂不支持文件)
  5. 可配置不同模型和提示词
  6. 可自定义更多功能和工具按钮

注意:这个代码不是插件,是 js 代码片段,点这里下载代码,然后放到思源 js 代码片段即可。

名字 Thpilot 由来

顾名思义,来源于 Copilot,Thpilot 全名是 Third pilot,即二副的意思,意思是继 Copilot 之后,思源 AI 领域的又一大利器。

效果展示

行内选择

toolbar1.png

多行选择

toolbar2.png

代码块选择

toolbar3.png

解释

explain.png

翻译

trans.png

纠错

check.png

聊天

chat.png

ai 选择

ai.png

右键功能

contextmenu.png

对话工具按钮

intro.png

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

image.png

配置说明

  1. config.libs 中的类库建议保存到本地更快速和安全(不然,如果哪天平台挂了就没了)

  2. models 和 vipKey 也可以单独在代码片段中配置,防止分享代码时不小心泄漏隐私,可分别用 var llmModels = [{...}, {...}];var thpilotVipKey = ''; 在外部配置,如下

    image.png

  3. buttons 中的 replaceCallback 配置后,聊天按钮会出现插入按钮,可在光标处出结果,比如纠正后的结果,翻译等

  4. buttons 中的 beforeCallback 和 afterCallback 可在聊天前后做些事情,这种自定义按钮时非常有用。

  5. 如果想设置为聊天按钮必须配置 isChat 参数为 true

  6. buttons 中的 context 是关联上下文,取值如下:

    blockText 当前块文本 blockHtml 当前块 HTML
    editorText 当前编辑器文本(注意不是当前文本全文,是编辑器可见区域)editorHtml 当前编辑器 Html
    bodyHtml body 的 html 源码(注意,可能文本较长,占用 token 较大)
    currentMd 当前文档的 Markdown 源码
    为空则不关联上下文

  7. 提示词可任意更改,{{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 助手对话
  • 支持连续对话
  • 可关联文档上下文
  • 历史记录保存

🚀 快速开始

安装步骤

  1. 复制代码
    • 将完整代码复制到思源笔记的代码片段中
    • 路径:设置外观代码片段JS
  2. 配置 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 规则

  1. 自动补全:不含 chat/completions 时自动添加
  2. 原始 URL:以 # 结尾表示使用原始路径(去掉 #
  3. 完整路径:包含 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 配置自动注入的上下文

📱 使用方法

方法一:划词工具栏

  1. 选中文本
    • 鼠标拖选文字
    • 或选中多个块(按住 Ctrl 点击)
  2. 点击工具栏按钮
    • 工具栏自动出现在选区上方
    • 点击对应功能按钮(解释/翻译/纠错/摘要/聊天)
  3. 查看结果
    • AI 对话框弹出显示结果
    • 支持流式输出(实时显示)

方法二:快捷键

  1. 按下快捷键
    • Windows/Linux:Ctrl+Alt+Z
    • Mac:Cmd+Alt+Z
  2. 自动行为
    • 如果有选中文本:自动发送到聊天助手
    • 如果无选中文本:打开空白聊天窗口

特殊场景

代码块选择

  • 在代码块内选择文本
  • 工具栏显示在选区上方
  • 支持代码解释和翻译

多块选择

  • 按住 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  - 完全隐藏
}

后悔药

  1. 如果你没有钉住聊天窗口,不小心关闭了窗口,可以在控制输入 aiDialog.show() 强制打开上次的窗口
  2. 如果你之前的历史会话忘记保存了,可以在控制输入 aiDialog.getGlobalHistory() 查看所有历史会话(默认仅支持查看最近 200 条,可通过参数 globalHistoryNum 配置)
  3. 思源崩溃了,历史会话未来得及保存,打开思源空间 /tmp/ai-global-history.json 历史会话都在这里(默认仅支持查看最近 200 条,可通过参数 globalHistoryNum 配置)

使用技巧

  1. 双击标题可最大化,再次双击还原
  2. 最大化后,点击左侧的 - 按钮可折叠窗口
  3. 鼠标移动到左右或底边或左下和右下可拖动窗口
  4. 配置 shortcut 参数可更改快速打开聊天窗口的快捷键
  5. shift+ 点击 ai 回复中的复制按钮可复制所有对话
  6. ai 回复下的按钮编辑可更改回复内容和历史会话中的内容;删除也会删除历史会话内容
  7. 重新生成后,点击分割线不同部分,可选中不同的内容,下面的编辑和复制按钮操作的是选中部分内容,不选中则是最后一部分的内容;删除时如果有多个部分优先删除选中部分或最后一部分,当剩一部分时删除该条聊天内容
  8. 调整模型配置顺序可修改模型默认值,最顶部的是默认值
  9. 输入框 shift+enter 换行,enter 或点击发送,滚轮可上下翻页查看文本内容
  10. 点击右上角的保存可把当前聊天内容保存到指定路径中,支持 ai 自动生成文档标题

代码

点这里下载

你怎么看?

你觉得这个功能有用吗?

单选 不公开 永不结束 4 票
非常需要
100% 4 票
不需要
0% 0 票
无所谓
0% 0 票

你觉得使用上手难度如何?

单选 不公开 永不结束 4 票
很难,不会用,需要深入研究
50% 2 票
简单,介绍清晰
25% 1 票
一般,稍微了解下就行
25% 1 票

推荐 AI 平台

注:通过邀请链接可获得额外赠送

  1. 免费模型平台 硅基
  2. 国外模型平台 V-API 价比高,快速稳定,模型齐全(claude4.5,gpt5 等)
  3. 特别推荐 ⭑⭑⭑ 如何获取上亿 token?
  4. 魔塔平台 http://modelscope.cn 单模型 400 次/日 总 2000 次/日

VIP

非 VIP 功能仅能使用划词解释、翻译、纠错、总结等,不能使用聊天功能

购买后,填到这个参数里即可 const vipKey = ''; // 👈秘钥填这里

一次购买,终身享用!

购买 VIP 的方式(价格自己定,最低 5 元):

爱发电(自动发货,如果有问题可私信联系作者)

aithpilot.png

或访问链接

思源 AI 助手 Thpilot VIP

或打赏后私信

image.png

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    28446 引用 • 119768 回帖
  • 代码片段

    代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。

    用户在该标签下分享代码片段时需在帖子标题前添加 [css] [js] 用于区分代码片段类型。

    285 引用 • 1985 回帖

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • wilsons

    不是插件,是 js 代码片段,点这里下载代码,然后放到思源 js 代码片段即可

    js 代码片段使用方法 https://www.siyuan-note.club/how-to-use-snippet

    1 回复
  • 其他回帖
  • wilsons

    @nightstars @wucunwei

    1.0.3 修复 bug、体验细节、和新增保存当前聊天到指定路径功能

    image.png

    配置该参数即可

    // 聊天默认保存的路径(点右上角保存按钮时会把当前聊天保存到指定目录)
    // ‼️注意:第一个必须是笔记名,然后后面是路径(即笔记名+路径),如果路径不存在则创建
    const saveToPath = '我的笔记/AI/聊天历史';
    

    由于生成的文档标题会根据聊天内容自动生成,因此也可指定生成标题的模型,默认是模型列表中最后一个模型,建议用免费模型即可,勿用深度思考模型,生成太慢。也可以自定义生成标题提示词。

    生成标题配置参数如下:

    // 生成标题模型(默认最后一个模型)【注意:别用深度思考模型,生成标题太慢】
    let titleModel = JSON.parse(JSON.stringify(models[models.length-1]));
    // 生成标题提示词 {{text}} 是聊天内容,默认截取前1000字
    const titlePrompt = `请根据以下聊天内容生成合适的文档标题,字数在20个字以内(忽略system提示词部分的文本):\n\n{{text}}`;
    
    2 操作
    wilsons 在 2025-11-24 00:05:36 更新了该回帖
    wilsons 在 2025-11-23 23:55:50 更新了该回帖
  • wilsons

    在光标跳动的静默海域,
    思源笔记的甲板之上,
    “二副”悄然登场。
    它不争夺船长的舵轮,
    只在风起时,为你辨识未知的方向。

    当蓝色的选框轻轻落下,
    仿佛给沉睡的文字施加了魔法。
    晦涩的定义被层层剥开,露出真容;
    异国的语言跨越时空,在此相逢。
    那些粗心的错漏、断裂的语法,
    都被它温柔地抚平,重回自然。

    它读懂代码的严谨逻辑,
    也洞察图像深处的隐秘。
    只需轻扣 Ctrl–Alt–Z 的和弦,
    便可唤醒一场灵感迸发的思辨。
    即便思绪迷航,
    那罐“后悔药”里,
    依旧安放着你遗落的曾言。

    它不只是工具,
    更是你随身掌控的锦囊。
    一次相逢,便许下恒久的守望;
    在每一次问与答的往返间,
    Thpilot,助你驶向知识的远方。

  • FlyingY

    您好 上架插件商城了吗 好像没找到

    1 回复
  • 查看全部回帖
wilsons
正式入驻知乎了,以后新贴主要在这里。 欢迎大家订阅关注! 你的关注对我是莫大鼓励,也能让我持续产出优质内容,我们一起成长 🙏 点这里立即关注:https://www.zhihu.com/people/wilsonses