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
92
1
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
790
Protocol Buffersの型を超えて拡張性を得る / Beyond Protocol Buffers Types Achieving Extensibility
linyows
0
300
研究開発と実装OSSと プロダクトの好循環 / A virtuous cycle of research and development implementation OSS and products
linyows
1
980
コードジェネレーターで 効率的な開発をする / Efficient development with code generators
linyows
0
500
研究を支える拡張性の高い ワークフローツールの提案 / Proposal of highly expandable workflow tools to support research
linyows
0
720
非コンテナ環境において宣言的Deploymentを手軽に実現する / Declarative deployment in non-container environments
linyows
1
640
メール送信サーバの集約における透過型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
710
研究の再現性を高める 仕組みをGoでつくる / Creating a system to improve the reproducibility of research using go
linyows
1
400
Other Decks in Programming
See All in Programming
Press start. Python's next generation.
willingc
PRO
3
250
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
29
18k
信頼性の目標を誰も求めてない
shubox
0
180
<title><a id="</title>君はこのHTMLをパースできるか"></a></title> #雑LT_study
pizzacat83
0
180
PyConJP2026_wat_Python × Signal Processing: How to Draw Pictures with Sound Using Spectrogram Art
wat
0
570
生成AIで帳票OCRが「簡単に」作れる時代になった?
kon_shou
0
1.2k
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
3.7k
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
370
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
530
属人化した知識を、 AIが辿れる地図にする
pkshadeck
PRO
1
220
My Marp Sample
sinoue0108
0
120
AI Readyの正体はデータマネジメントだ メダリオン2.0の最前線
freee
PRO
0
420
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
430
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Ethics towards AI in product and experience design
skipperchong
2
350
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
350
Product Roadmaps are Hard
iamctodd
55
12k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
[SF Ruby Conf 2025] Rails X
palkan
2
1.3k
Crafting Experiences
bethany
1
270
Thoughts on Productivity
jonyablonski
76
5.3k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
240
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を使ったクラウドのコン ポーネントの開発や、開発チームのマネージメントをしてくれ る仲間を探しています!気軽にお声かけください!