フルスクラッチで爆速!Zig言語だけで作る検索&推論データベース
A search-and-inference database from scratch in pure Zig
A search-and-inference database from scratch in pure Zig
Zig言語のみを使用して、ゼロから検索と推論のためのデータベースを構築するプロジェクトです。
少し前に紹介したAntfly https://news.ycombinator.com/item?id=47414291 を、GoからZigに書き直してみたよ。AnthropicによるBunの書き換えと対比させると面白いんじゃないかと思って、なぜ自分たちが逆の選択をしたのか話したいんだ!開発プロセスや技術についてぜひ語り合おう。ベンチマーク結果は記事にリンクしてあるけど、念のためここにも置いておくね https://antfly.io/releases/v0.2
新しいエンジンについてお祝いを言うべきところだけど、個人的にはそのやり方を詳しく聞かせてほしいな。シミュレーターは「何が正しいか」、そして「どんな失敗をコードに投げ込むべきか」を知っていないと機能しないよね?その2つを決めたのは誰?コードを書いたのと同じエージェント?それとも人間が書いたものか、あるいはフォーマルな仕様から導き出したのかな?「これは正しい」と言える基準として、E2Eテスト、フォーマルモデル、そして以前のGo版の挙動という3つの要素があったと思う。それらの意見が食い違ったとき、どれを信頼したの?テスト自体が間違っていたことはあった?シミュレーターがリリース前に何かを見つけたとき、間違っていたのはコードだった?それとも正しさの定義?エージェントを使ってコーディングする際のベストプラクティスについて、すごく有益な知見がありそう。Bunのチームも同じアプローチをとっていたら、書き換えなんてしなかったんじゃないかな。
そもそも「完璧な」検索って何なのか、って疑問だよね。魔法のような全知全能と見分けがつかなくなるんじゃないか?あとさ、「あのクライアントとの資料、あのスライドショーをどうにかして見つけたいんだよ…Googleドライブにあったっけ?」みたいな状況もよくあるよね。解決策が何でもかんでもClaudeに突っ込むこと、っていうのは正直避けたい。
注意:Antflyはオープンライセンスではありません。利用は自己責任で。
実はこれを使ってローカルファイル検索エージェントを作っているんだ。最初はAntflyのGo版で始めたんだけど、新しいZigランタイムはリソース利用効率、信頼性、復旧能力などすべてにおいて大幅に改善されているよ。macOSのSpotlight検索を使ったことがある人なら知ってると思うけど、(1)リソースを食いつぶすし、(2)(macOS 27で追加されたSiriの機能を含めても)正直あまり役に立たない。だから、もっと快適で、かつすべてを端末内で完結させる(外部の推論プロバイダーを使わない)ネイティブアプリを自作したくてね。Antflyをベースにすれば、エンジンを一つに統合できるから、RAGパイプライン全体を調整するよりずっとシンプルで済むんだ。[補足: 私はAntflyの社員。ローカル検索アプリは現在プレビュー版を searchaf.com で公開中。近いうちにオープンソース化して、参考アーキテクチャとしてShow HNに投稿する予定だよ]
(開示:私は最近Antflyに入社しました)入社前に、Antflyを使って自分の語学学習用コンプリヘンシブル・インプット・キュレーション・エンジンを開発し始めたんだ。Ankiの学習デッキをインデックスしてスペイン語の受動語彙をトラッキングしたり、パブリックドメインの読解資料をインデックスして、自分のレベルに最適なコンテンツをハイブリッド検索/RRFで抽出したりしているよ。Antflyの推論を使って難しい一節を簡易的に書き換え、自分の理解レベルに合わせるような試みもしているところ。Antflyの強みを生かした面白いユースケースだと思う。大量の行動データをクラウドやモデルプロバイダーに送らずに、ユーザーに合わせた学習・研究に一般化できる概念じゃないかな。今のところ読解資料だけだけど、ビデオやオーディオなどにも広げていきたいと思ってる!
(開示:Antfly CEO)Slack、Googleドライブ、メールを検索するためだけにAnthropicやOpenAIに膨大なトークンを消費している企業や、SharePoint内のものを見つけられないCopilotのやり取りにフラストレーションを感じている企業といろいろ話をしてきた。私たちはこれを改善できると考えているし、データは自分自身のものにするべきだよ。
(開示:Antflyで推論担当)Antflyの推論とファインチューニングについての背景を少し。私たちのモデルランタイムはC++のバインディングや依存関係なしでZigで書かれている。ここ数ヶ月で、Gemma4、Gliner2、Qwen3、Florence2などサポートしているモデル向けに、CPU、Metal、CUDAカーネルを自前で実装したんだ。Metal/CUDAカーネル用のJITコンパイラも作成済みで、これによって今後のカーネル実装の追加がもっと速くなるはず。現在はGemma4やGliner2モデルをAntfly内で直接ファインチューニング(およびデプロイ)するためのインフラを構築中。推論ランタイムやファインチューニング作業についての質問があれば気軽にどうぞ!