请允许我自我宣传一波,同时也是希望有同样需求的朋友能够一起开发这个项目,特别是能够开发思源插件的朋友,因为我完全不会 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 的测试,等等
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于