重要なポイント
- Apache 2.0ライセンス、無料でオープンソース。ライブラリ自体に有料プランはない
- デフォルトで組み込み型 — Faissベクトルインデックスとローカルファイルに保存されるSQLiteメタデータストレージ
- ベクトル検索だけでなく、RAG、エージェント、マルチモデルワークフローを1パッケージでカバー
- Hugging Face Transformers、Sentence Transformers、FastAPIを基盤に構築。Python 3.10以上が必要
- ローカルLLM(Hugging Face、llama.cpp、Ollama、vLLM)とAPIベースモデル(OpenAI、Claude、AWS Bedrock、LiteLLM経由)の両方に対応
- NeuML(創業者David Mezzetti)が保守 — 独自のクラウド製品はまだなく、ホスト型サービスtxtai.cloudは開発中
📍 一文で説明
txtaiは、ベクトルデータベース、セマンティック検索、RAGパイプライン、LLMオーケストレーションを別サーバー不要の1パッケージにまとめた無料・オープンソース(Apache 2.0)のPythonライブラリである。
💬 簡潔に説明
ChromaやQdrantをバックグラウンドサービスとして動かし別フレームワークを組み合わせる代わりに、txtaiをpipでインストールすれば、ベクトルストア・検索・RAGロジックが自分のPythonプログラム内にそのまま入る。SQLiteが独立したデータベースサーバーではなくアプリ内で動くのと同じ考え方だ。
📌補足: txtaiは専用ベクトルDBサービスが持つ水平スケーラビリティと引き換えに、デプロイの手間をゼロにしている。シングルノードのアプリケーションやプロトタイピングには適するが、複数マシンへの分散が必要なデータセットには向かない。
txtaiとは何か?
txtaiは、セマンティック検索、LLMオーケストレーション、言語モデルワークフローのためのオープンソースPythonフレームワーク(Apache 2.0ライセンス、github.com/neuml/txtai)で、NeuMLが開発・保守している。中核となるのはembeddingsデータベースで、公式ドキュメントではベクトルインデックス(密・疎)、グラフネットワーク、リレーショナルデータベースを1つのオブジェクトに統合したものと説明されている。
- ベクトル検索:密・疎の埋め込み、SQLフィルタリング、トピックモデリング、グラフ解析、マルチモーダルインデックス(テキスト、文書、音声、画像、動画)を1つのインデックスで実現
- パイプライン:質問応答、要約、翻訳、文字起こし、テキスト分類向けの言語モデルのラッパーが用意されている
- ワークフロー:複数のパイプラインを1つの処理ジョブに連結。シンプルな2ステップスクリプトからマルチモデルのバッチ処理まで対応
- エージェント:埋め込み、パイプライン、ワークフローを組み合わせて多段階タスクをこなす自律エージェント。smolagentsフレームワーク上に構築
- APIとバインディング:REST/FastAPIサービスに加えてModel Context Protocol(MCP)サーバーを提供。JavaScript、Java、Rust、Go向けクライアントバインディングもある
- 70以上のサンプルノートブックがフレームワーク全体を網羅し、コアライブラリと並行して保守されている
txtaiの組み込みアーキテクチャはどう動くのか?
**txtaiのEmbeddingsオブジェクトは、ベクトルインデックスとメタデータストアを自身のPythonプロセス内に保持し、両方をローカルファイルに永続化する。別のデータベースサービスと通信することはない。** デフォルトではベクトルインデックスにFaissを使用し、コンテンツメタデータはローカルのSQLiteファイルに保存される — これはPostgreSQLのようなクライアント/サーバーモデルではなく、SQLite自身が採用している「アプリケーションプロセスに組み込む」モデルそのものだ。
- ANNバックエンド(
backend設定):デフォルトはFaiss。HNSW、Annoy、pgvectorは他のコードを変更せずに切り替えられる代替バックエンドとして利用可能 - コンテンツストレージ(
content設定):有効化時のデフォルトはSQLite。1ファイルの規模を超えるチームには接続URL経由のDuckDBまたはクライアント/サーバー型データベースも選択できる - オブジェクトストレージ:同じembeddingsインデックス上に構築される、画像や任意のpickleオブジェクト向けのオプションのバイナリストレージ
- 永続化:
embeddings.save(path)でインデックスとデータベースを可搬なディレクトリとしてディスクに書き出し、embeddings.load(path)で新しいプロセスからインポート/エクスポート不要で再度開ける - 起動・監視・パッチ適用が必要なサーバープロセスは存在しない — インデックスはインメモリキャッシュやファイルベースのキャッシュと同様、自アプリケーションプロセスの生存期間と一致する
txtaiは独立型ベクトルデータベースとどう違うのか?
Chroma、Qdrant、Weaviate、Milvusは通常、独自のサービス — コンテナやマネージドエンドポイント — として動き、アプリケーションはネットワーク経由で接続する。 txtaiは代わりに呼び出し元のプロセス内で動作する。SQLiteとPostgreSQLの違いに近く、接続文字列も不要、生かし続ける別プロセスも不要、コードとインデックス間のネットワークホップも発生しない。
📌補足: Chromaもプロトタイピング向けの組み込みモードを提供しているが、本番運用の経路はサーバーになる。txtaiには移行すべき別の本番モードがなく、組み込み型が唯一のアーキテクチャだ。
txtaiはRAGとAIエージェントに対応しているか?
はい — Retrieval-Augmented Generation(RAG)と自律エージェントは、ベクトルストアに後付けされた機能ではなく、txtaiの中核的なユースケースである。
- RAG:
RAGパイプラインはEmbeddingsインデックスとLLMを組み合わせ、クエリに関連する箇所を取得して出典付きの回答を生成する。公式ドキュメントはRAGを「ベクトル検索以上のもの」と説明し、WebやSQLからのコンテキスト取得もサポートする - エージェント:Hugging Faceのsmolagentsフレームワーク上に構築され、txtaiエージェントは埋め込み、パイプライン、ワークフロー、他のエージェントを連携させて多段階タスクを自律的にこなす。
agents.mdやskill.mdによるエージェントプロンプティングにも対応 - ワークフロー:テキスト抽出、チャンク分割、埋め込み、各チャンクの要約といった処理を、つなぎのコードを手書きすることなく線形または分岐したジョブとして連結できる
- ナレッジグラフ:LLMによるエンティティ抽出でembeddingsインデックス上にセマンティックグラフを構築し、単純な類似検索に関係性分析を加えられる
txtaiで使えるLLMは?
**txtaiはLLMとRAGという同じパイプラインインターフェースでローカルモデルとAPIベースモデルの両方に対応する — 切り替えはコードの書き直しではなく設定変更で済む。**
方式 | タイプ | 備考 |
|---|---|---|
| Hugging Face Transformers | ローカル | Hugging Face Hub上または任意のローカルパスのCausal LM |
| llama.cpp | ローカル | GGUF形式の量子化モデル、CPUまたはGPU |
| Ollama | ローカル | 起動中のOllamaサーバーを指定 |
| vLLM | ローカル/セルフホスト | 本番向け高スループット推論サーバー |
| LiteLLM | API | OpenAI、Anthropic Claude、AWS Bedrockなどへルーティング |
txtaiのRAGクイックスタート例は、Hugging Faceモデルをパス文字列(例:Qwen/Qwen3-0.6B)で指定し、embeddingsインデックスと並べてRAGパイプラインに直接読み込む。スループットを重視して意図的に運用する場合を除き、別のLLMサーバーは不要だ。
txtaiのセットアップ方法は?
セマンティック検索インデックスを動かすには、pip installと数行のPythonコードだけで十分だ。事前にコンテナを設定する必要はない。
- 1Python 3.10以上をインストールし、パッケージをインストールする:
pip install txtai。RAG用に文書抽出(PDF、DOCX、HTML)も必要なら`pip install "txtai[pipeline-data]"`を使う。 - 2Pythonスクリプトでembeddingsインデックスを作成する:
import txtaiのあとembeddings = txtai.Embeddings()。 - 3ドキュメントのリストをインデックス化する:`embeddings.index(["Correct", "Not what we hoped"])
。呼び出すたびにテキスト(大規模データセットでは(id, text)`タプル)がディスク上のインデックスに追加される。 - 4セマンティック検索を実行する:
embeddings.search("positive", 1)はキーワードの一致ではなく意味的に最も近い結果を返す。 - 5インデックスを永続化して再利用する:
embeddings.save("index_path")でディスクに書き出し、後でembeddings.load("index_path")で開き直せば実行間の再インデックスは不要。 - 6組み込みスクリプトではなくWeb APIとして使う場合:
embeddings.pathモデルを指定した最小限のapp.ymlを定義し、CONFIG=app.yml uvicorn "txtai.api:app"で提供、curlでHTTP経由に問い合わせる。
import txtai
# embeddingsインデックスを作成(デフォルトはFaiss + ローカルストレージ)
embeddings = txtai.Embeddings()
# テキストをインデックス化 — 各文字列が検索可能なエントリになる
embeddings.index(["Correct", "Not what we hoped"])
# セマンティック検索 — キーワード一致ではなく意味を検索
results = embeddings.search("positive", 1)
print(results) # [(0, 0.298...)] — インデックス0("Correct")が最も近い
# プロセス再起動後も使えるようディスクに保存
embeddings.save("index_path")txtaiの最小構成例にGPUは必要か?
不要。デフォルトの埋め込みモデル(sentence-transformers/all-MiniLM-L6-v2)とFaiss ANNバックエンドはどちらもCPUで動作する。大規模になると埋め込み生成やLLM推論をGPUで高速化できるが、このセットアップを試すだけなら不要だ。
このセットアップにRetrieval-Augmented Generationを追加するには?
同じEmbeddingsオブジェクトを、ローカルまたはAPIベースのLLMとともにtxtai.RAGパイプラインへ渡す:rag = txtai.RAG(embeddings, "model-name")のあとrag("質問内容")を呼び出す。検索とプロンプト構築はパイプラインが処理する。
txtaiはどんな人に向いているか?
検索・RAG・エージェントをインフラなしで1つのPython依存関係にまとめたい場合はtxtaiを使う。多数の独立アプリケーションから水平スケール可能なベクトルストアが必要な場合は避けるべきだ。
📌補足: 結論:「1つのPythonアプリ、1台のマシン、最小限の運用」という制約ならtxtaiを選ぶ。「初日から多数のサービスが同じインデックスを大規模に問い合わせる」という制約なら独立型ベクトルデータベース(Qdrant、Weaviate、Milvus)を選ぶ。
txtai vs Chroma、Qdrant、LlamaIndex
この4つは重なりつつも異なる課題を解決する。txtaiとChromaはどちらもベクトルストアを内蔵し、Qdrantは専用データベースサービス、LlamaIndexは独自のストアを持たないオーケストレーションフレームワークだ。
ツール | アーキテクチャ | デプロイ | ライセンス | 最適な用途 |
|---|---|---|---|---|
| txtai | 組み込みベクトルDB+RAG/エージェント | In-process、サーバー不要 | Apache 2.0 | 1パッケージで完結するPython製RAG/エージェント |
| Chroma | ベクトルデータベース | 組み込みまたはサーバーモード | Apache 2.0 | シンプルなプロトタイプ用ベクトルストア |
| Qdrant | ベクトルデータベース | サーバー(Docker/クラウド) | Apache 2.0 | 大規模・マルチクライアント本番検索 |
| LlamaIndex | RAG/オーケストレーションフレームワーク | 外部ベクトルストアが必要 | MIT | 任意のベクトルDB上のデータコネクタ |
txtaiを評価する際のよくある誤解
これらの誤解は、サーバー型ベクトルデータベースを前提とした思い込みを、根本的に異なるデプロイモデルを持つライブラリにそのまま当てはめることから生じる。
よくある質問
txtaiは無料で使えますか?
はい。txtaiはApache 2.0ライセンスのオープンソースで、ライブラリ自体に利用上限やライセンス費用はありません。保守元のNeuMLは有料AIコンサルティングを提供しており、執筆時点でまだ開発中のホスト型製品txtai.cloudも別途開発しています。
txtaiは別のデータベースサーバーが必要ですか?
いいえ。txtaiはベクトルインデックスとメタデータストアをPythonプロセス内に直接組み込みます — デフォルトではFaiss ANNインデックスとSQLiteファイルの両方をローカルファイルとして永続化するだけで、デプロイや監視が必要なサーバープロセスはありません。
txtaiがFaiss以外に対応しているANNバックエンドは?
デフォルトはFaissです。txtaiはHNSW、Annoy、pgvector(およびannエクストラパッケージ経由の他のバックエンド)にも対応しており、アプリケーションコードを変更せずにbackend設定で切り替えられます。
txtaiはChromaとどう違いますか?
どちらも組み込み型ベクトルストアを内蔵しますが、Chromaの一般的な本番経路はサーバーとして動かすことです。txtaiには移行すべき別のサーバーモードがなく、同じパッケージ内にRAGパイプライン、エージェント、マルチモデルワークフローも束ねている点がChromaにはない特徴です。
txtaiはQdrantとどう違いますか?
Qdrantは、独自プロセス(Docker経由またはマネージドクラウドエンドポイント)として動き、多数のクライアントから同時に問い合わせられるよう設計された専用ベクトルデータベースサービスです。txtaiは単一のアプリケーションプロセス内に組み込まれて動作し、その並行性と水平スケールをデプロイの手間ゼロと引き換えにしています。
txtaiはRetrieval-Augmented Generation(RAG)に対応していますか?
はい。RAGパイプラインはEmbeddingsインデックスとローカルまたはAPIベースのLLMを組み合わせ、クエリに関連する箇所を取得して出典付きの回答を生成します。公式ドキュメントはRAGを単なるベクトル検索以上のものと位置づけ、WebやSQLからのコンテキスト取得もカバーしています。
txtaiはクラウドAPIの代わりにローカルLLMを使えますか?
はい。txtaiはHugging Face Transformers、llama.cpp(GGUF形式)、Ollama、vLLM経由で完全にローカルな推論を行うモデルを読み込めるほか、APIベースのモデルを使いたい場合はLiteLLM経由でOpenAI、Anthropic Claude、AWS Bedrockにルーティングできます。同じLLM/RAGパイプラインインターフェースが両方をカバーします。
txtaiはAIエージェントに対応していますか?
はい、Hugging Faceのsmolagentsフレームワーク上に構築されています。txtaiエージェントは埋め込み、パイプライン、ワークフローを連携させて多段階タスクを自律的にこなし、agents.mdやskill.mdといったエージェントプロンプティングの規約にも対応します。
txtaiはどのライセンスで公開されていますか?
Apache License 2.0で、ロイヤリティなしでの商用利用、改変、再配布が認められています。ChromaやQdrantと同じ寛容なライセンスです。
txtaiは誰が保守していますか?
txtaiはNeuMLが開発・保守しています。NeuMLはDavid Mezzettiが創業した企業で、オープンソースライブラリの保守に加えてtxtaiスタックを軸にした有料AIコンサルティングも提供しています。
txtaiは1台のマシンに収まらない大規模データセットを扱えますか?
デフォルトの組み込みモードでは扱えません。単一ファイルのFaiss/SQLiteインデックスは、それを保持するマシンに限定されます。複数ノードへの分散が必要なデータセットや、多数の独立したサービスが同じインデックスに同時に問い合わせる必要がある場合は、専用の水平スケール可能なベクトルデータベースの方が適しています。
最初のRAGプロトタイプにtxtaiは良い選択ですか?
はい、特にPython開発者にとっては良い選択です。インデックス、RAGパイプライン、必要に応じてLLMまで含めたスタック全体がpip install txtai一つでインストールでき、アプリケーションロジックの最初の1行を書く前にデータベースコンテナを立てる必要もなく、単一のスクリプトで動作します。
