Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
GoとClickhouseで作るRAGアプリ / Building RAG Applicati...
Search
linyows
July 21, 2026
Programming
1
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
GoとClickhouseで作るRAGアプリ / Building RAG Application with Go and Clickhouse
Fukuoka.go#23の資料
linyows
July 21, 2026
More Decks by linyows
See All by linyows
Kubernetesを使わない環境にもCloud Nativeなデプロイを実現する / Enabling Cloud Native deployments without the complexity of Kubernetes
linyows
3
700
Protocol Buffersの型を超えて拡張性を得る / Beyond Protocol Buffers Types Achieving Extensibility
linyows
0
280
研究開発と実装OSSと プロダクトの好循環 / A virtuous cycle of research and development implementation OSS and products
linyows
1
930
コードジェネレーターで 効率的な開発をする / Efficient development with code generators
linyows
0
490
研究を支える拡張性の高い ワークフローツールの提案 / Proposal of highly expandable workflow tools to support research
linyows
0
690
非コンテナ環境において宣言的Deploymentを手軽に実現する / Declarative deployment in non-container environments
linyows
1
600
メール送信サーバの集約における透過型SMTP プロキシの定量評価 / Quantitative Evaluation of Transparent SMTP Proxy in Email Sending Server Aggregation
linyows
0
1.2k
透過型SMTPプロキシによる送信メールの可観測性向上: Update Edition / Improved observability of outgoing emails with transparent smtp proxy: Update edition
linyows
2
680
研究の再現性を高める 仕組みをGoでつくる / Creating a system to improve the reproducibility of research using go
linyows
1
380
Other Decks in Programming
See All in Programming
Embedded SREと共に達成した会員管理システムのAWS移行 - SRE NEXT 2026 ランチスポンサーセッション
niftycorp
PRO
1
2.6k
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
140
OSINT for SRE: 学術論文とポストモーテムから探る システム障害の共通パターン / SRE NEXT 2026
tomoyk
1
3.8k
AI がコードを書く時代における新卒エンジニアの仕事風景 (2026) / New Graduate Engineers in the Era of AI Coding (2026)
sushichan044
0
220
5分で問診!Composer セキュリティ健康診断
codmoninc
0
270
「正の参照」と 「負の導出」で組む ハーネスエンジニアリング
cottpan
1
140
Performance Engineering for Everyone
elenatanasoiu
0
270
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
250
そのテスト、説明できますか?~LWテスト戦略FW~のご紹介
nakahara
0
210
Apache Hive: Toward a Cloud Native Lakehouse
okumin
0
130
関数型プログラミングのメリットって何だろう?
wanko_it
0
180
任せる範囲はこう広がった / How the Scope of AI Delegation Has Expanded
nrslib
1
260
Featured
See All Featured
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Building AI with AI
inesmontani
PRO
1
1.1k
Making the Leap to Tech Lead
cromwellryan
135
10k
We Have a Design System, Now What?
morganepeng
55
8.2k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
420
KATA
mclloyd
PRO
35
15k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
180
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
770
Marketing to machines
jonoalderson
1
5.6k
The Curious Case for Waylosing
cassininazir
1
430
Transcript
Tomohisa Oda / July 21, 2026 GoとClickHouseで作る RAG Application Fukuoka.go
#23
Fukuoka.go #23 @linyows Blog: tomohisaoda.com Affiliation: Sakura internet, Inc.
Fukuoka.go #23 共有メールホスティングにおける輻輳影響 を局所化する透過型SMTPプロキシの提案
Fukuoka.go #23 Warp Architecture: https://warp.linyo.ws
Fukuoka.go #23 はじめに
Fukuoka.go #23 メール技術は人気がない ๏ メールは古いオープンなメッセージングシステム ๏ 分散システムで複数のプロトコルの組み合わせで成り立つ ๏ 生活で使う身近な存在なはずだが、メール技術が好きだと言う若者に出会った ことがない
๏ 無料かつ高品質?なGmailの存在が大きいのかもしれない ๏ 日本ではLINEのようなクローズドなサービスが好まれるので、普通の人のメー ルは受信が中心
Fukuoka.go #23 何をやっているか ๏ 次世代のWebmailサービスを開発している ๏ Gmailの代わりになることを想定 ๏ メールサーバはオールインワンMTAのStalwartを使用 ๏
「検索:stalwart」→ これからメールサーバをつくるならStalwart ๏ StalwartとWebmailはJMAP:JSON Meta Application Protocolを使用する ๏ Webmailにはスマートな検索が必要
Fukuoka.go #23 Stalwartの全文検索Storages ๏ FoundationDB, RocksDB, SQLite ๏ PostgreSQL ๏
MySQL ๏ ElasticSearch ๏ Meilisearch
Fukuoka.go #23 検索パイプラインの分類 ๏ テキスト解析:トークナイズ・ステミング・サブワード化 ๏ インデックス構造:転置インデックス・グラフ・ツリー・量子 化・ハッシュ ๏ マッチング:ブールモデル・語検索・フレーズ検索・意味一致
๏ ランキング:スコアリング・ランク融合
Fukuoka.go #23 Storage テキスト解析 マッチング スコアリング RocksDB, FoundationDB, SQLite Stalwart実装
Stalwart実装 なし PostgreSQL PG実装 PG実装 なし MySQL Stalwart実装 MySQL実装 なし ElasticSearch ES実装 ES実装 ES実装(BM25) Meilisearch MS実装 MS実装 MS実装(バケットソート)
Fukuoka.go #23 スマートな検索を提供する ๏ レキシカル検索:全文検索、検索ワードがわかっているやつ ๏ セマンティック検索:意味検索、記憶が曖昧で言い換えるや つ(ただしChat形式ではない) 両方に対応するハイブリッド検索を提供する →
スマートな検索
Fukuoka.go #23 セマンティック検索を作る
Fukuoka.go #23 RAG Storeを選定する ๏ セマンティック検索にはEmbeddingモデルを使ったベクトルデータを作成しDBに保存す る ๏ ベクトル型とHNSW(Hierarchical Navigable
Small World)インデックスに対応の DBが必要 ๏ アカウント数、データ量が多い大規模を想定 ๏ 専用ベクトルDBはオンメモリで処理し、列指向DBのClickhouseはディスクストレージを 活用するので比較的安価 ๏ FromやDateでの絞り込みによる構造化検索も必要、ということでClickhouseを使用する
Fukuoka.go #23 System Architecture ๏ EmbeddingモデルはさくらのAI Engineで multilingual-e5-large を使う
Fukuoka.go #23 Go実装:chunk分割 ๏ htmlタグ、引用、署名を除去 ๏ 段落 → 改行 →
Max文字数の順で分割 ๏ ISO-2022-JPなどはサーバ側で全て UTF-8:JMAPの仕様
Fukuoka.go #23 Go実装:Clickhouse ๏ ドライバはClickhouse謹製の github.com/ClickHouse/ clickhouse-go/v2 ๏ 標準のnet/httpでも良いが、上のド ライバはバイナリ転送やOTEL対応
やTCPでのコネクションプールを やってくれるので便利 ๏ nativeインターフェース以外に database/sql 互換インターフェース ももっている
Fukuoka.go #23 ハイブリッド検索にする
Fukuoka.go #23 Go実装:異なる検索結果を一緒にする ๏ レキシカル検索結果はスコアリング順、セマンティック検索 の結果はコサイン距離順で、同じ順序でマージできない ๏ RRF:Reciprocal Rank Fusion(相互ランク融合)という
アルゴリズムがあり、順位だけを使ってスコアリングする手 法を使う
Fukuoka.go #23
Fukuoka.go #23 集合Mに含まれる 要素mの全ての総和 定数 順位
Fukuoka.go #23 Go実装:RRFの簡単な例 ๏ レキシカル検索(日付降順): [A, B, C] セマンティック検索(距離昇順): [B,
D, A] ๏ スコア(k=60): A = 1/61 + 1/63 ≈ 0.03226 B = 1/62 + 1/61 ≈ 0.03252 C = 1/63 ≈ 0.01587 D = 1/62 ≈ 0.01613 ๏ RRF: B, A, D, C ๏ 両方に出たアイテムは点が2回加算されて上位に来る ๏ ただ、ベクトル検索はどんなクエリにも必ず何かを返すので、絶対的な距離の閾値による足切りが必要
Fukuoka.go #23 まとめ
Fukuoka.go #23 まとめ ๏ Stalwartにおける検索バックエンドはいろんな選択肢がある ๏ 単純なレキシカル検索に加え、セマンティック検索をGoと ClickhouseでRAGアプリの構築例を紹介した ๏ また、異なる順位をマージにRRFを使用している
検索技術に詳しい人いろいろ教えてください ><
Fukuoka.go #23 Hiring: さくらインターネットでは Goを使ったクラウドのコン ポーネントの開発や、開発チームのマネージメントをしてくれ る仲間を探しています!気軽にお声かけください!