色々なメッセージサービスに対応してるのでDiscordと連携するように設定して使っていましたが、 調べ物をさせていると過去記事を確認する頻度があがり、データの持続性が気になるように。
LLMもローカルなのでメッセージサービスもローカルにするしかないね。
ということで下記を構築しました。
- Reverse Proxy: Caddy
- 分散SNS: Matrix Synapse
コンテナも提供されてるので構築は簡単です。
ただ、非暗号化ルームを使用するとメッセージ検索で日本語が使えません。
暗号化ルームの場合、検索はクライアント側で行うのですが非暗号化の場合サーバ側で検索をする実装になっているようです。
調査するとsynapseのsearch.pyとsynapse_port_db.pyのSQLでto_tsvectorなどの呼び出しが'english'とハードコードされています。
PostgreSQLの日本語検索対応としては古いものになりますが、改造コストを考えると上記で'japanese'を指定できるtextsearch_ja を使うのが良さそうです。
コンテナビルド時にPostgreSQLにtextsearch_jpの組み込み、synapseの該当箇所を編集したもので非暗号化ルームの検索で日本語が使えるようにできています。
hermesにコンテナ作成などしてもらいましたが意外と優秀。
だがしかし、クライアントでメッセージスレッドに対応し、(非暗号化ルームの)検索がうまく動作するものがない...。
特にスレッドに対応しているものが少ない。
対応していて検索できてもスレッド内のメッセージにジャンプできないとか。
これは、日本語の検索とは関係ない話なので、スレッドはあまり使われれないのかな。
検索とかも。
非暗号化ルームを使用して
- スレッドを使う。
- メッセージを検索する。
- 検索結果からメッセージを表示させる。
MatrixはE2EEが売りの一つなので非暗号化ルームの使用はマイナーなんだろうか。
ローカル利用なのでサーバ側で暗号化されてないデータがある方が扱いやすいので何とかしたい。
参考)