Portia: 検証可能なデータエンジニアリングのためのオープンソースエージェントハーネス
Portiaは、AIモデルが生レコードにアクセスすることなく、データの分析、SQLの生成、結果の検証を行う新しいオープンソースツールです。
英語の原文から自動翻訳されました。
2026年10月7日にリリースされたPortiaは、実世界のデータエンジニアリングタスクを支援するために設計されたオープンソースのエージェントハーネスです。Jad1908によって作成され、GitHubでホストされているこのツールは、主要なデータウェアハウスやローカルファイルシステムに接続し、テーブルのプロファイリング、質問への回答、SQLパイプラインの生成を行います。生データを直接処理する多くのAIアシスタントとは異なり、Portiaは基盤となる言語モデルが実際のデータセットにアクセスしないことを保証し、すべての数値的な主張に対して決定論的なコードに依存します。
何が起きたか
本プロジェクトは、Snowflake、BigQuery、PostgreSQL、またはCSVおよびParquetファイルを含むローカルフォルダと統合されるデータ作業用のコパイロットを導入します。接続後、Portiaは遭遇するすべてのテーブルをプロファイリングし、結合操作が実行される前にNULL率、ユニークカウント、キーカバレッジ、ファンアウトを測定します。ユーザーは、特定の識別子が一意かどうかの確認や、月別収益の内訳の依頼など、データ構造や内容に関する自然言語での質問を行うことができます。その後、システムは要求されたテーブルを1つの意思決定ずつ構築し、各ステップをYAML仕様書に記録します。
Portiaにおける重要なアーキテクチャ上の選択は、推論とデータアクセスの分離です。対話に使用される言語モデルには、ファイルシステムアクセスもシェル機能もありません。ユーザーに提示されるすべての数値や統計量は、モデルの確率的な次トークン予測によって生成されるのではなく、決定論的なコードによって計算されます。この設計により、メモリに収まらないほど大きなテーブルを扱いながら、すべての主張を検証可能に保つことができます。最終的な出力は、Portiaから独立して実行できるdbt形式のSQLファイルにコンパイルされ、生成されたパイプラインがツール自体にロックインされないことを保証します。
また、このシステムにはNeo4jを搭載したナレッジグラフが含まれており、列の系統(lineage)やデータセット間の測定された重複を格納します。このグラフは、コパイロットがユーザーのクエリに関連するテーブルを判断するのに役立ちます。ユーザーはこのグラフをローカルで閲覧し、パイプライン全体で列がどのように関連しているかを理解できます。さらに、Portiaは会話インターフェース内での視覚的なチャート表示をサポートしています。基盤となるモデルが画像入力をサポートする場合、コパイロットはユーザーのブラウザでレンダリングされたチャートを視覚的に検査し、発見事項を報告する前にその正確性を確認できますが、画像自体は保存されず、数値的な判断にも使用されません。
仕組み
Portiaは、データソースをインデックス化し、メタデータのカタログを構築することで動作します。ユーザーが質問をすると、コパイロットはナレッジグラフを参照して関連するテーブルと列を特定します。次に、ユーザー自身の認証情報を使用してデータソースに対して実行されるクエリを策定します。データベース接続の場合、クエリはユーザーのロールの下で実行されるため、アプリケーションサーバーにデータがダウンロードされることはなく、新しいテーブルはウェアハウス内に直接作成されます。ローカルファイルの場合、データはディスク上に留まり、コピーされません。モデルが見るのは、スキーマ、要約統計量、およびこれらの決定論的クエリの結果のみです。
このツールはClaude Agent SDK上で動作し、修正なしでClaude Codeを駆動できます。Python 3.11以上、uv、Dockerが必要です。インストールには、リポジトリのクローン作成、依存関係の同期、Neo4jコンテナの起動が含まれます。ユーザーは独自のAnthropic APIキーを提供するか、Ollamaやllama.cppなどのローカルモデルプロバイダーを設定する必要があります。エージェント向けの指示は約15,000トークンの長さであるため、ローカルモデルは少なくとも32Kトークンのコンテキストウィンドウをサポートする必要があります。システムはプロンプトを送信する前にこの要件を確認し、コンテキストが不十分な場合は進行を拒否します。
主要な詳細
- データプライバシー: 言語モデルは生データを読み取らず、ファイルシステムアクセスもシェル機能も持ちません。
- 対応ソース: Snowflake、BigQuery、PostgreSQL、およびCSVまたはParquetファイルを含むローカルフォルダに接続します。
- 検証: すべての数値的な主張は決定論的なコードによって計算され、ユーザーが結果を独立して確認できるようにします。
- 出力形式: Portiaなしでも実行可能な、
models/ディレクトリに保存されるdbt形式のSQLファイルを生成します。 - ナレッジグラフ: Neo4jを使用して列の系統を格納し、パイプライン全体の列間の重複を測定します。
- ローカルモデルサポート: Ollamaおよびllama.cppと互換性があり、ローカル推論には最小32Kのコンテキストウィンドウが必要です。
なぜ重要なのか
ソフトウェアエンジニアやデータチームにとって、Portiaの主な価値はその検証可能性にあります。従来のAI支援コーディングツールは、構文やロジックのハルシネーション(幻覚)を起こすことが多く、多大な手動レビューが必要になります。データエンジニアリングにおいて、誤ったSQLはサイレントなデータ破損や誤解を招く分析につながる可能性があります。すべての測定においてモデルが決定論的なコードに依存することを強制し、生データを見せないようにすることで、Portiaは統計量のハルシネーションリスクを低減します。「ゼロに対するゲート」機能は、クエリが空の結果セット、非ユニークな粒度、または完全にNULLの列を返す場合に結果の書き込みを拒否することで、一般的なエラーからさらに保護します。
仕様を標準SQLにコンパイルできる能力は、ベンダーロックインも軽減します。チームはPortiaを使用してデータパイプラインの初期開発を加速できますが、結果として得られるSQLファイルは既存の本番環境にデプロイできます。つまり、このツールはランタイム依存関係ではなく、開発アクセラレーターとして機能します。build --checkコマンドを介したCIパイプラインとの統合により、SQLファイルが元の仕様から逸脱した場合、ビルドが失敗し、意図と実装の一貫性が維持されます。
できること
- Python 3.11+が利用可能であることを確認し、uvとDockerを使用してPortiaをインストールします。
- テストデータベースまたはサンプルCSVファイルのフォルダにツールを接続し、プロファイリング機能を探索します。
devtools.demodataモジュールを使用して、既知の問題を含む5テーブルのデモプロジェクトを生成し、テストを行います。- クラウドベースのAPIを使用したくない場合は、Ollama経由でQwen 3 8Bなどのローカルモデルを設定します。
- 生成されたYAML仕様とコンパイルされたSQLファイルをレビューし、エージェントが意思決定をどのように構造化しているかを理解します。
- localhost:7474でNeo4jナレッジグラフを閲覧し、列の系統と重複を可視化します。



