自己写了一个用思源进行 RAG 的服务端

请允许我自我宣传一波,同时也是希望有同样需求的朋友能够一起开发这个项目,特别是能够开发思源插件的朋友,因为我完全不会 TypeScript,也几乎没怎么用过 Vue.js。

项目地址:https://github.com/Firefox2100/siyuan-ai-companion

更详细的文档请参见项目仓库。

开发动机

虽然思源有自己的 AI 功能,也有一些 AI 插件,但是没有一个完全符合我的希望的:

  • 能够使用多个笔记本,整个笔记库进行 RAG
  • 完全自部署,不依赖外部 AI 服务
  • 开源,免费(至少没有订阅费用,单次付费或者赞助可以接受)

所以我就自己写了一个。后来因为我自己需要语音转文字和说话人识别的功能,于是就加进去了。

功能

注意:功能没有完全测试(服务器性能不够),请在使用前务必做好备份!有任何问题或者 bug 请提交 issue。

目前的功能还不完善,但是已经实现的有:

  • 对整个笔记库进行嵌入和查询
  • OpenAI 代理层,即本服务有一个 OpenAI 兼容的接口,会在提示词内插入笔记内容然后提交给上游服务
  • 部分更新,只对更新了的块进行嵌入更新
  • 能够对音频附件直接进行下载,转文字,说话人分析,然后写进笔记本里

已知的缺陷包括:

  • 没有对笔记进行语义分割。这是因为笔记是以块为单位从思源提取的,同时也是以块为单位更新的, 所以在查询的时候也是获取的块。如果只提交一个块,几乎没有什么语境(比如,只提交了一个标题或者是列表里的一项),但是在查询的时候对笔记进行语义分割又太慢了,所以目前会提交整篇笔记。我有计划再加一个数据库,在生成嵌入的时候也进行语义分割并且保存对照信息。现在还没做。
  • 音频文件部分,因为思源本身没有这类支持,所以需要直接对 API 进行操作,比如通过命令行或者 Postman。我有计划写个 UI,但是依然还没有开始,因为更好的选项是直接写成插件,但是苦于不会 TypeScript 没法动手。
  • 不是完全支持所有的笔记内容块,目前已知不支持的是表格,数据库和各类媒体文件。详情见下方。同时因为我找不到一个完整的思源内部数据块类型的文档,我是将所有的块都创建了一个来测试的,很可能有缺漏。请知道这个的朋友帮忙指路。
  • 没有多语言支持,目前默认音频识别和提示词注入都是英文。后面会添加配置选项(可能导致模型调整)

以后计划添加的功能包括(除了把上面的部分写完):

  • 直接在这个服务里运行 LLM 的功能,省去再部署一个额外的 LLM 服务(可选,会做成可以关闭的模式)
  • 想个办法把音频文件和生成的文本内容关联起来,这样从思源内部可以看到,也可以通过 API 查询
  • 性能优化,数据量压缩,错误处理,日志记录等等
  • 表格支持:表格相对简单,可以输出 Markdown 格式的表格或者 Tab 分隔的字符串,但是需要我花一些时间
  • 数据库支持:这个比较复杂,因为数据库除了表格格式之外还有计算得到的模板内容和外链。还没想好怎么支持

请求帮助

本服务完全开源免费,开发动机来源于我本身的需求。但是我自己水平不够,没有办法实现所有想要的功能,所以真诚请求有能力有兴趣的朋友一同开发,包括:

  • 对于各类数据块的支持
  • 思源插件的开发
  • 思源 API 的更深度的整合
  • 其他任何的 PR,功能想法,问题和 bug 的测试,等等
  • RAG
    6 引用 • 51 回帖
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    184 引用 • 1020 回帖
  • 思源笔记

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

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

    25511 引用 • 105491 回帖

相关帖子

欢迎来到这里!

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

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

  • Vue 插件可以参考这个:https://github.com/siyuan-note/plugin-sample-vite-vue

    看你会 py,TS 可以不用管,js 开发就行。Vue 方面跟你用 py 开发界面差不了多少。

    另外,插件虽然可以启动后端服务,相对来说还是稍微有点麻烦的,你这个功能,适合单独作为一个后端服务、后端项目来用。

    然后集市里有 z 佬开发的后端插件,可以参考一下,然后问问他。

    开发交流的话,进折腾群会好一些,沟通比较及时一点。

    1 回复
  • firefox2100

    感谢指点。本意是这个项目作为独立后端运行,但是开发一个插件,通过思源代理连接这个服务,实现管理功能(选择模型,手动启动嵌入,选择音频文件,等等)和 LLM 的交互。

    我现在是部署了多个 Docker 容器,包括一个 ollama,思源,和这个服务的一套。插件方面的话,我在用一个 Notebook Assistant,它有一个聊天的界面,不过自带的 RAG 功能似乎没有完成。有在计划用 React 或者是 Flutter 写一个前端单独使用。

    最后,能否请教一下后端插件指的是哪个吗?我好像没用过。。。感谢指点

    1 回复
  • 刚刚看了一下,好像移除了。

  • ChalMeng

    你好,我有一点点 Python Flask + Vue 的开发经验(有一个开源项目:教师闪卡),或许我可以为你的项目提供一些小小的帮助。

    最大的问题是我们学校放假,大概两周左右才能放假,这时我才能写。所以我可能没办法贡献很多,但前端之类的我还是能出点力的。

    您可以私信联系我。

  • ChalMeng

    你好,我有一点点 Python Flask + Vue 的开发经验(有一个开源项目:教师闪卡),或许我可以为你的项目提供一些小小的帮助。

    最大的问题是我们学校放假,大概两周左右才能放假,这时我才能写。所以我可能没办法贡献很多,但前端之类的我还是能出点力的。

    您可以私信联系我。

请输入回帖内容 ...