Jupyter AI入門:実践ガイド
私は長年Jupyterノートブックを使ってきましたが、壁にぶつかったのは複雑なデータクリーニングスクリプトを書く必要があった時です。その週に同じ正規表現パターンを5回も書いていたことに気づきました。そこで、コード生成とチャットをノートブック環境に直接もたらす拡張機能、Jupyter AIを試してみることにしました。1週間の徹底的なテストの後、学んだことをお伝えします。壊れた部分とその修正方法も含めて。
セットアップ:実際に必要なもの
まず、基本を押さえましょう。必要なのはJupyterLab 3.5以上(私は3.6.1を使用)とPython 3.8以上です。インストールは簡単ですが、注意点があります。開始前にAIプロバイダーを決める必要があります。
ステップ1:Jupyter AIのインストール
pip install jupyter-ai
これでコアパッケージがインストールされます。ただし、モデルプロバイダーも必要です。私は2つをテストしました。
- OpenAI(APIキーが必要、GPT-4およびGPT-3.5で動作)
- Hugging Face(無料ですが、低速)
ステップ2:プロバイダーの設定
OpenAIの場合:
export OPENAI_API_KEY="your-key-here"
Hugging Face(無料オプション)の場合:
pip install jupyter-ai-huggingface
export HUGGINGFACEHUB_API_TOKEN="your-token"
警告: APIコールが失敗する原因のデバッグに30分費やしました。環境変数名にタイポがあったのです。HUGGINGFACEHUB_API_TOKEN('HUB'に注意)を再確認してください。
インターフェース:魔法を見つける場所
JupyterLabを再起動すると、左側のサイドバーに新しいAIアイコン(キラキラしたもの)が表示されます。クリックするとチャットパネルが表示されます。しかし、最初に混乱したのは、ただチャットを始められないことです。最初にモデルを選択する必要があります。
チャットパネルで:
- 歯車アイコン(設定)をクリック
- ドロップダウンからプロバイダーを選択(例:GPT-4の場合は
openai-chat) - モデルを設定(複雑なタスクには
gpt-4、簡単な作業にはgpt-3.5-turboを使用)
プロのヒント: 予算が限られている場合は、無料のHugging Faceのmicrosoft/DialoGPT-mediumを使用してください。ただし、応答時間は5〜10秒かかります。
最初の実際のテスト:データクリーニングスクリプトの自動化
50,000行の顧客データを含む乱雑なCSVファイルがありました。チャットパネルに入力した内容は次のとおりです。
'email'、'phone'、'age'のカラムを持つDataFrameをクリーニングするPython関数を書いてください。
メールが欠落している行を削除し、電話番号を(XXX) XXX-XXXXの形式にフォーマットし、
年齢を整数に変換してください。
Jupyter AIが約3秒でこのコードを生成しました。
def clean_customer_data(df):
# メールが欠落している行を削除
df = df.dropna(subset=['email'])
# 電話番号をフォーマット
import re
def format_phone(phone):
digits = re.sub(r'\D', '', str(phone))
if len(digits) == 10:
return f"({digits[:3]}) {digits[3:6]}-{digits[6:]}"
return phone
df['phone'] = df['phone'].apply(format_phone)
# 年齢を整数に変換
df['age'] = pd.to_numeric(df['age'], errors='coerce').astype('Int64')
return df
感心した点: errors='coerce'を指定したpd.to_numericを使用していたことです。まさに私が書くであろうコードでした。また、NaN値を適切に処理するInt64(nullable整数)を使用していました。
壊れた点: 電話番号のフォーマットが国コード(+1)を処理していませんでした。修正を依頼したところ、20行の正規表現ソリューションを生成しましたが、やりすぎでした。結局、自分でよりシンプルなバージョンを書きました。
真の力:%%aiマジックコマンド
チャットも便利ですが、Jupyter AIの真価はマジックコマンドにあります。セル内で%%aiを使用すると、コードをインラインで生成できます。
例:可視化スクリプトの生成
新しいセルに次のように入力します。
%%ai openai-chat
dfというDataFrameから'sales'対'profit'の散布図を作成するmatplotlibコードを書いてください。
'region'カラムに色を使用してください。
AIがセル内に直接コードを生成します。
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 6))
for region in df['region'].unique():
subset = df[df['region'] == region]
plt.scatter(subset['sales'], subset['profit'], label=region, alpha=0.6)
plt.xlabel('Sales')
plt.ylabel('Profit')
plt.title('Sales vs Profit by Region')
plt.legend()
plt.show()
重要なヒント: %%aiコマンドはセル全体の内容を置き換えます。既存のコードがある場合、上書きされます。この方法で50行の関数を失いました。%%aiを実行する前に、必ずセルの内容をコピーしてください。
発見した欠点
1週間の集中的な使用後、次の点に不満を感じました。
コンテキストウィンドウが小さい - AIは5分前の会話を覚えていません。DataFrameの構造を数クエリごとに再説明する必要がありました。
コード実行のフィードバックがない - AIはコードを実行して動作を確認しません。実際のDataFrameに存在しないカラムを参照する関数が生成されました。
Hugging Faceモデルが遅い - 無料モデルは応答に10〜15秒かかります。OpenAIのGPT-4はほぼ瞬時です。
セキュリティ上の懸念 -
%%aiを使用すると、セル全体の内容(機密データを含む)がAIプロバイダーに送信されます。誤って顧客メールを含むDataFrameをOpenAIのサーバーに送信してしまいました。
実際に機能する実用的なワークフロー
試行錯誤の結果、推奨するワークフローは次のとおりです。
コード生成には%%aiを使用し、チャットは使わない - チャットパネルも使えますが、マジックコマンドの方が高速で焦点が絞られています。
常にモデルを指定する - デフォルトに依存しないでください。複雑なタスクには
%%ai openai-chat -m gpt-4を使用します。生成されたコードは別のセルでテストする - AIの出力を盲目的に信頼しないでください。生成されたコードを新しいセルにコピーし、小さなサンプルでテストします。
/fixコマンドを使用する - 生成されたコードにエラーがある場合、
/fixの後にエラーメッセージを入力します。デバッグに驚くほど優れています。コンテキストを2〜3メッセージに制限する - 3回のやり取りを超えると、AIは幻覚を起こし始めます。長い会話の後、存在しないpandas関数を提案することがわかりました。
実世界の例:ETLパイプラインの構築
完全な例を説明します。ログファイル用のETLパイプラインを構築する必要がありました。
ステップ1:データの読み込み
%%ai openai-chat
'logs/'というディレクトリからすべてのCSVファイルを読み取り、
1つのDataFrameに結合し、ファイル名を含む'source_file'カラムを追加するpandasコードを書いてください。
ステップ2:データのクリーニング
%%ai openai-chat
'timestamp'、'level'、'message'、'user_id'のカラムを持つDataFrameから:
- 'timestamp'をdatetimeとして解析
- 'level'が'DEBUG'の行をフィルタリング
- 'message'の重複エントリを削除
ステップ3:サマリーの生成
%%ai openai-chat
'level'と'message'のカラムを持つDataFrameを受け取り、
各ログレベルのカウントと上位10件のメッセージを含む辞書を返す関数を書いてください。
各ステップで生成されたコードを手動で組み合わせました。AIは定型作業の入力に約2時間の節約になりました。
結論:使用すべきか?
Jupyter AIは次のような場合に最適です。
- 定型コードの生成(データ読み込み、基本的なクリーニング)
- matplotlib/seabornの可視化の作成
- 複雑なpandas操作の説明
次のような場合には苦手です。
- ドメイン固有のロジック(例:財務計算)
- 過去のコンテキストを記憶する必要がある複数ステップのワークフロー
- データベースやAPIと連携するコード
最大の推奨事項: 最終的な解決策ではなく、出発点として使用してください。生成されたコードは下書きのように扱い、入力の手間を省いてくれますが、本番データで実行する前に必ずレビューとテストを行ってください。
次のステップ
読むだけでなく、今すぐ試してみてください。Jupyterノートブックを開き、jupyter-aiをインストールして、次のコマンドを実行してください。
%%ai openai-chat
'customer_id'、'name'、'email'、'signup_date'、'plan_type'のカラムを持つ
モック顧客データの10行をランダムに生成してください。
次に、生成されたコードを実行して動作を確認してください。その力と限界の両方をすぐに理解できるでしょう。そして、必ず何か間違ったものが生成された場合(必ずそうなります)、/fixを使用してデバッグしてください。そこで本当の学びが得られます。