PKMer_Obsidian 插件:Smart Second Brain

Smart Second Brain 是一个 Obsidian 插件,通过利用 Ollama 或 OpenAI 与您的隐私助手进行交互,使您的第二大脑变得更智能。该插件的功能和使用场景尚未确定,但它提供了两种模式:隐身模式和非隐身模式。在隐身模式下,它使用 Ollama 在您的计算机上运行 LLM。在非隐身模式下,它使用 OpenAI 的 GPT 模型。要使用 Ollama,您需要按照 README 中的说明安装和配置它。要使用 OpenAI,您需要创建一个 OpenAI 账户并生成 API 密钥。将 API 密钥粘贴到 Smart Second Brain 的设置中即可。请注意,目前需要 OpenAI 付费账户才能使用 API 密钥。


这是一个从 https://pkmer.cn/pkmer-docs/10-obsidian/obsidian%e7%a4%be%e5%8c%ba%e6%8f%92%e4%bb%b6/smart-second-brain 下的原始话题分离的讨论话题

通过这个插件绑定了本地大模型llama3,但运行时报错。
运行 Smart Second Brain 失败 (Error ,Error:
User query is too long or a single document
was longer than the context length (should not
happen as we split documents by length in
post processing))。 请重试。

这种错误不太好搞, 内部有太多细节


自己目前的理解, 这句报错 ref 来自插件的底层库 papa-ts, 用于处理 Ob 笔记的切分细节, 拼接文档片段的元数据, 和定义 RAG Pipeline 等

在 papa-ts 实现里, 读 Ob 笔记后将按照 chunkSize = 2048 (字符, 不是 token) 切分笔记, 如果是中文笔记, 根据不同的 encoder, 这字符数换成 token 可能得有 2000~4000 tokens

如果同时遇到: 1 插件判断应该对召回的片段做缩减; 2 聊天模型的输入 max token 比较小, 3 几乎满 2048 中文字符的大片段, …

则可能发生: 缩减提示词 Prompts[pipeInput.lang].reduce 加上一个文档片段, 就超了聊天模型的输入 token 限制, 此时就无法执行了, 报错


以下是也许有帮助的解决办法:

  • 换个 “大上下文” 的聊天模型
  • 插件设置里, 减少每次允许 “检索的文档数” (这值可能默认 100) 改小点能降低出事概率
  • 不太隐私的话, 可以借助 LangSmith 看看到底错在哪一步

换了一个模型就可以了,可能是那个模型本身的问题 。
不过本地电脑性能不好,放弃这一项尝试。
后面有时间再试一下使用API的方式

换了模型也不行。有具体解决办法吗?