目的: 2024年了, 重新整理一下几个 AI 类插件的功能特点, 分别擅长干啥事, 讨论在笔记库里做向量搜索是不是好主意
测试了三个目前仍持续更新的 AI 类插件, 简单总结如下
- Text Generator 可以结合在正文写作流程里而不只是侧栏对话框, 且定制能力最强
- Smart Connections 可能是潜力最大的, 目前已经支持对话+全库向量嵌入搜索
- Copilot for Obsidian 可以做到纯本地部署
Text Generator
这个插件功能侧重 写 和 改写, 也是少数几个没侧栏对话框, 而是直接从笔记正文界面操作文字的
特点
支持自定义模型, 意味着也可以用国内的模型 (最好是跟 OpenAI 的请求格式兼容的)
无论 OpenAI 家的模型还是自定义模型, 都可以改请求格式和应答格式的所有参数 (其他插件顶多让调个温度啥的)
可能是唯一支持在笔记里写一半它给自动补全下一句的插件 (类似于邮件或代码自动补全工具那种方式)
可以写复杂的 prompt 模板 Handlebar Templates - Text Generator Plugin
问题
- 定位有点跟 Templater 重复了, 理论上 Obsidian Templater 写个 http request 也可以调各种语言模型 (当然 Text Generator 交互细节更好)
- 需要折腾以满足个性要求
- 需要持续维护的模板社区, 需要教程
Smart Connections
这个插件特点是全库的向量索引和关联查询
特点
几个重要功能
对话: 符合 Ob 使用习惯, 可以这么写 根据 [[xxx_note]] 和 [[yyy_note]] 回答, 俩文章的观点有啥不同?
关联笔记推荐: 要先做向量嵌入, 关联推荐的颗粒度可以精确到笔记的小标题级, 即 “推荐跟当前主题有关的, 其他笔记的具体某个章节”
全部笔记做为知识库的检索: 要先做向量嵌入, 之后以自指词 “I, me, my, mine, we” 提问时会触发, AI 回答时会有 “Base on your notes…” 字样
问题
- 不支持自定义模型, 现在只有经典 OpenAI 全家桶, 支持别家模型不知得等啥时候
- bug 还是比较多
- 中文支持差
- 没找到免费的, 适合中文的, 运行在本地的嵌入模型
Copilot
这插件理论上可离线使用, 是一套完整的向量搜索 + 问答的本地方案
特点
支持本地模型部署 (LM Studio, Ollama) Mistral 7B, Mistral 8x7B 都在 Ollama 里面
界面设计也挺不错
对话支持 Long Note QA 和 Vault QA (dev), 总计三种模式:
- Chat: 跟别家一样没啥特别的, 不需要做文本嵌入
- Long Note QA: 单笔记做文本嵌入, 根据关联的片段回答用户问题
- Vault QA: 同上, 但它是全库文本嵌入和对话
问题
嵌入+搜索部分还不太完善
对话部分跟别家的差不多
过程中我自己遇到的问题
问: 这些插件都需要付费吗
看选啥模型
在线模型一般是通过 “指定 api_url + api_key + model_name 的方式” 用, 这些大部分是付费的
在线模型也有免费的, 尤其国内各平台都处在招新期, 许多都有限时免费
有的模型可以本地部署, 例如 Copilot 可以本地部署 Mistral 7b, smart-connections 的嵌入模型可设为 “跑在 transformer.js 上用本机硬件计算”
注:
若为节省成本而折腾本地模型, 可能还不如用平台的划算
本地模型主要还是出于隐私和离线使用的考量
问: 文本嵌入 / 向量搜索 是啥意思, 能干啥?
- 文本嵌入 : 一段文本, 交模型处理后返回一串数字 (向量), 这串数字记录着文本的 “语义信息”
- 向量数据库 : 把许多文本都这么处理, 就得到一个数据库, 两个向量夹角小, 就代表两段文本的含义接近
- 向量搜索 : 现在有一段新文本, 也同样把它变成一串数字, 跟所有向量比对一下夹角, 就可知道新文本跟原先哪个笔记的语义最相似
能干啥? 对话时从知识库里自动取最相关的几条笔记, 跟你的问题一块发给聊天模型, 增强回答的效果; 以及自动为当前笔记推荐近似笔记
问: 模型太多挑花眼, 推荐几个好用的?
我也在琢磨该怎么搭配
对话模型
- 我用的是 ChatGPT3.5 … (本文写于 2024年3月)
- 我正在试 Moonshot.ai 很厉害, 快, 聪明, API 调用有免费额度, 接口跟 OpenAI 家一摸一样
嵌入模型
- 我用的是 text-embedding-3-small, 便宜, 快, 效果好
- 而在本地运行的 Jina 系列, 效果差了点, 保护隐私可以用
至于公正, 科学, 详尽的 LLMs 能力测试,
有个 Chatbot Arena 项目 (魔型斗蛐蛐, 欢乐每一期)
希望也有个对嵌入模型的类似的对比网站, 没找到
问: 我仓库笔记多, 全做文本嵌入能行吗? 这要花多少 tokens / 钱
token 可以理解为机器能识别的 “字”, 文本里的字符转换 token 按照:
- 英文笔记大约
1单词 = 1token
粗略估计 - 中文笔记大约
1汉字 = 1token
粗略估计
模型平台按 token 收费:
- text-embedding-3-small 是
0.02刀 / 1m tokens
- 阿里云 灵积 通用文本向量 是
免费 500000 tokens
之后0.7元 / 1m tokens
最后本地文本的体积和字符数的数据是:
- 以 utf-8 存档的 3mb 纯文本, 大约一百万字
嵌入整个仓库笔记要花多少钱? 可根据以上数据大致估算
TIP1 给个例子《红楼梦》120回版, 总字数约90万, 使用 text-embedding-3-small
做嵌入, 总计花费约两毛钱
TIP2 (对于 smart-connections) 建议先在 Obsidian 小仓库测试, 先了解插件大致是怎么个用法, 啥时会对全库做嵌入, 啥时只做当前笔记的嵌入, 只要不是频繁全库做嵌入, 一般成本能接受
TIP3 (对于 smart-connections) 插件设置里, 可以一次添加所有子目录到黑名单, 先全给添了, 一点点把需要做嵌入的笔记放出来
问: 我数据会被上传吗?
道理跟 “付费” 那一节类似
A 数据留在本地:
- 嵌入模型里
Jina-v2-small-xxK
系列, 是 transformers.js 在本地硬件算的 - 对话模型的能本地部署的那几个, Ollama Mistral 7b 等
B 数据上传远端, 但远端也归自己控制:
- 例如私有化部署的大模型
C 数据会上传给服务方:
- 所有 OpenAI 家的服务 (即 ChatGPT, 以及 OpenAI 提供的 embedding)
- 第三方代理 ChatGPT, 卖 key 的商家
- 国内 AI 平台: moonshot.ai, 腾讯云混元, 阿里云灵积, 千帆, …
问: 文本嵌入和搜索, 用在笔记库里真是好主意吗?
这是写这文章的初衷
文本嵌入后可以做两个事, 给当前笔记推荐关联笔记, 问答时先召回关联片段然后一起发给 LLMs 实现更智能的知识搜索
目前我的理解是:
- 对于已经很熟悉的领域: 推荐关联笔记价值没那么大
- 对于需要快速拓展知识的领域: 推荐关联笔记是好主意, 即使仅为 surprise 也是有用的
- 对于熟或不熟的领域, “结合自己笔记知识的搜索” 都是好主意, 问题想把它做完善了非常难
- smart-connections 起个了头, 里面细节还多着呢
- 可以参考 高级 RAG 技术:图解概述 或 Advanced RAG Techniques: an Illustrated Overview
- 希望 “自然语言查询” 能帮我做到 “传统搜索搞不定的事”: 目前我看悬, 未来应该行
- 为啥在 Obsidian 里面 做这事? 找典型的向量检索知识库工具不好吗: 那就更加折腾了, 且知识库侧重 “用”, 问题是我除了 “用” 还得 “写和改”
- 普通的向量检索知识库工具 + Obsidian 插件做为知识库 client 不好吗: 这可能是未来的方向, 例如 Khoj 等工具, 感觉要再观望一下
以上看法不太成熟, 欢迎大家讨论
也推荐大家看看 GPT 配合文本向量搜索 参考其中观点
问: 想要个简单省事的 Obsidian AI 插件
最方便的是 Custom Frames + 任何网页版的大模型
这能避免大部分折腾
且网页版存着历史聊天记录, 相当于自带同步
问: 想要个功能强大, 默认搭配能上手, 定制以后上限高, 支持国内模型, 且免费和保护隐私的插件
呃…
目前谨慎看好 Smart Connections, 但它还得再完善些, 自定义模型得加上, 严重 bug 改改, 界面优化一下, 学点 RAG 的常见技巧, 才好用
暂且写到这里, 找到好的资料我再补充, 欢迎大家交流