比較 / JevModel

Googleスプレッドシートのテキスト分類:=AI()関数 vs Apps Script → Jev API

GoogleスプレッドシートのAI関数、またはApps ScriptからJevModelを呼んで行にラベルを付ける方法を比較。固定Choiceラベルと確率、レビュー列、Apps Scriptの割り当て、CSVをConsole → Batchに上げるほうが簡単な場面。

最終更新:

要点:セル内のプロンプト vs 固定ラベル契約

  • GoogleのAI関数(=AI()または=Gemini())はプロンプトと任意の範囲を受け取り、用途として「情報の分類」や感情分析が挙げられています。対象のGoogle WorkspaceまたはGoogle AIプランが必要で、出力はテキストのみ、IFなど他の数式に入れ子にできず、一度に生成されるのは選択したAIセルのうち最初の350個までです。
  • Apps Scriptのメニューコマンドで各行をJevModelの/api/v1/systemoneへPOSTすると、自分で定義した2〜12個のラベルからChoiceが返り、通常は確率も付きます。ラベル列と確率列を書き込み、確率の低い行をレビューに回せます。
  • 有料APIを呼ぶならカスタム関数よりメニューコマンドを。カスタム関数は30秒以内に返す必要があり、参照セルが変わると再計算されてAPIを再び呼ぶ(課金される)ことがあります。メニューから実行するスクリプトは1回最大6分、URL Fetchは個人アカウントで1日20,000回、Workspaceで1日100,000回までです。
  • コード不要の方法もあります。シートをCSVで書き出し、JevModelのConsole → Batchにアップロードします(購入前は1バッチ50行まで、購入後は1,000行)。どの方法でも、人手でラベル付けした列を残し、一致率を測ってからラベルを信頼してください。

スプレッドシートでのテキスト分類とは

表計算での分類作業はたいてい同じ形です。自由記述の列(アンケート回答、フォーム送信、問い合わせ、レビュー)、短いカテゴリ一覧、そして各行にそのうち1つだけを入れる新しい列。あると便利なのは信頼度の列、「要レビュー」フラグ、結果を確かめるためのサンプル行の人手ラベル列です。Googleスプレッドシートでラベル列を埋める現実的な方法は3つ。組み込みのAI関数、JevModelのような外部分類APIを呼ぶApps Script、そしてCSVを書き出して別の場所で分類し、結果を貼り戻す方法です。

How to classify text with the JevModel APIJevModel API によるバッチテキスト分類

GoogleスプレッドシートのAI関数:Googleのドキュメントの記載

Googleのヘルプでは構文はAI("prompt", [任意の範囲])で、=Gemini()も同じ意味です。セルを選んでGenerate and Insertを押し、出力を更新したいときはRefresh and Insertを使います。Google自身の例には、問い合わせを「お褒め・交換依頼・返品依頼」に分ける、メール本文を「肯定・否定・中立」に分ける、といったものがあります。分類で効いてくる制限は次のとおりです。出力はテキストのみ。関数が見るのは渡した範囲だけでシート全体ではない。他の数式に埋め込めない(GoogleはAI()をIFで囲む例を非対応としている)。一度に生成されるのは選択した最初の350個のAIセルまで。短期・長期の生成上限がある。利用可否はプラン、管理者設定、言語に左右される。強みは対象アカウントなら設定不要で、開発者でなくてもプロンプトを直せること。限界は出力が自由テキストなので、プロンプトと後処理で値を固定しない限りラベルが揺れる(「Return」「return request」「Returns」)こと、そしてレビューのしきい値に使えるラベル別確率の列がないことです。

2026年のゼロショットテキスト分類:LLMプロンプト、Hugging Face、型付きAPIの比較Jev vs GPT・Claude:判断層を選ぶ

Apps Script → Jev:カスタム関数ではなくメニューコマンドで

Apps ScriptはUrlFetchAppで任意のHTTPS APIを呼べ、Googleのカスタム関数ガイドでもURL Fetchはカスタム関数で使えるサービスの1つとされています。それでも従量課金の分類呼び出しを置く場所としては不向きです。カスタム関数は30秒以内に返さないとセルが#ERROR!になり、使うたびにApps Scriptサーバーへ別々に呼び出され、参照セルが変わるたびに再計算されます。つまり編集ひとつで同じ行を黙って再分類し、また課金されることがあります。カスタムメニューならこれを避けられます。クリックしたときに1回だけ実行し、選択行を読み、JevModelを呼び、ラベルと確率を再計算されない通常の値として書き込みます。Googleが公開している上限を前提にしてください。スクリプト1回の実行は最大6分、URL Fetchは個人アカウントで1日20,000回、Google Workspaceで1日100,000回(変更されうると明記)。1回の実行で終わる範囲ずつ選択しましょう。JevModelのキーはセルではなくProject Settings → Script propertiesに保存し、シートを編集できる人はバインドされたスクリプトも編集できる点に注意して、編集者を絞ってください。

JevModel API:リクエストと応答JevModel の料金と Jev 無料枠Private runs and history

比較:=AI() vs Apps Script → Jev vs CSVをConsole → Batchへ

下表はワークフローの形と出力契約の比較で、精度の比較ではありません。ベンチマークではないので、自分のラベル付きサンプルで測ってください。

JevModel API によるバッチテキスト分類How to classify text with the JevModel APIChoice, Score, and Noul
比較:=AI() vs Apps Script → Jev vs CSVをConsole → Batchへ
観点Sheets =AI()Apps Scriptメニュー → JevModelCSV → Console → Batch
準備対象のWorkspace/Google AIプラン;プロンプトを入力スクリプトを貼り、Script propertiesにキーを保存CSVを書き出し、アップロードし、結果を書き出す
ラベル出力自由テキスト;値の正確さはプロンプト次第自分で定義した2〜12個から1つのChoice ID、通常は確率付き同じJevの質問を全行に適用
レビューしきい値ラベル別確率の列はないラベルの隣に確率を書き、低い行をフィルタ書き出しに行ごとの回答
主な制限1回350セル;生成上限;入れ子不可1回6分;URL Fetchの日次割り当て;リクエスト約8,000文字購入前は1バッチ50行、購入後1,000行
課金Googleのプランとその上限の範囲成功したリクエストごとにJevModelトークン;失敗分は返却PlaygroundやAPIと同じトークン残高

Apps Scriptの例:選択した行を分類(説明用)

Extensions → Apps Scriptを開いてコードを貼り、JevModel Console → API keysで作ったキーをJEVMODEL_API_KEYというスクリプトプロパティに保存し、シートを再読み込みします。1列のテキストセルを選び、Jev → Classify selected rowsを選ぶと、右隣の2列にラベルと確率が書き込まれます。リクエストはドキュメントどおり、state(セルのテキスト)と名前付きの質問で構成され、ここではcriteriaがラベルIDと短い定義を対応させるChoiceを1つ使います。明確な定義(はっきりした「other」を含む)は凝った言い回しより大切です。本サイトはOpenRouter経由でtypesafe/jev-1.13に固定しているため、modelフィールドはありません。JevModelはJevを開発するTypeSafe AIとは独立しています。0以外のcode(例:INSUFFICIENT_TOKENS)はERRORとして書くので、その行だけ再実行できます。APIに冪等キーはないため、ラベル済みの行は再実行しないでください。

JevModel API:リクエストと応答Choice, Score, and NoulJevModel の料金と Jev 無料枠
// Illustrative only. Save the key as the script property JEVMODEL_API_KEY.
// Run from the menu, not as a custom function, so edits never re-bill rows.
const LABELS = {
  billing: "Charges, refunds, invoices or payment methods.",
  shipping: "Delivery status, delays or address changes.",
  product: "How the product works, or a defect report.",
  other: "Anything that fits none of the labels above.",
};

function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu("Jev")
    .addItem("Classify selected rows", "classifySelection")
    .addToUi();
}

function classifySelection() {
  const key = PropertiesService.getScriptProperties().getProperty("JEVMODEL_API_KEY");
  const sheet = SpreadsheetApp.getActiveSheet();
  const range = sheet.getActiveRange(); // one column of text cells
  const rows = range.getValues().map(([text]) => {
    if (!text) return ["", ""];
    const res = UrlFetchApp.fetch("https://jevmodel.app/api/v1/systemone", {
      method: "post",
      contentType: "application/json",
      headers: { Authorization: "Bearer " + key },
      muteHttpExceptions: true,
      payload: JSON.stringify({
        state: String(text),
        questions: {
          route: {
            type: "choice",
            instructions: "Which support queue should handle this message?",
            criteria: LABELS,
          },
        },
      }),
    });
    const body = JSON.parse(res.getContentText());
    if (body.code !== 0) return ["ERROR", body.message];
    const answer = body.data.answers.route;
    const p = answer.probabilities ? answer.probabilities[answer.choice] : "";
    return [answer.choice, p];
  });
  // Plain values in the next two columns: label, probability.
  sheet.getRange(range.getRow(), range.getColumn() + 1, rows.length, 2).setValues(rows);
}

レビュー列を追加し、使う前にラベルを確かめる

スプレッドシートなら評価は簡単なので、必ずやりましょう。シート全体を分類する前に、無作為に選んだ行を別の列で人手ラベル付けし、同じ質問を実行して、COUNTIFSやピボットテーブルで比べます。ラベルごとの一致率と、どのラベル同士が混同されるか。次にそのサンプルからレビュー規則を決めます。たとえば「不一致が多かった水準より確率が低い行はレビュー」とし、=IF(C2<0.7,"review","ok")のような数式列を追加します(0.7は仮の値で推奨値ではありません)。「other」ラベルは残し、「other」の割合が高いのはモデルの失敗ではなくラベル一覧を見直す合図と考えます。TypeSafeが説明するChoiceの信頼度(p − 1/n)/(1 − 1/n)はラベル数を補正しますが、これも校正済みの精度ではありません。ラベルや定義を変えたらサンプルを再確認してください。

Jev probability, confidence and human-review thresholdsEvaluate a Jev workflow顧客フィードバック分類:テーマは1つ、優先度は別、感情分析だけでは足りない理由

どの方法を選ぶか

対象プランがあり、一度きりの探索で、どのみち人が結果を読むなら=AI()。同じラベルを繰り返し使う、確率列でレビュー対象を決めたい、あるいは他の自動化(Zapier、Make、n8n、Power Automate、Pipedream、自社アプリ)が同じAPIで使うラベルと揃える必要があるならApps Script → Jevメニュー。コードを書かずにJevのラベルが欲しい、または小さなファイルで質問を試したいならCSV → Console → Batch。どの方法でも確認すること:1)明確な「other」を含むラベル定義を書く、2)サンプルを人手でラベル付けする、3)採用した結果は生きた数式ではなく値で残す、4)APIキーをセルに置かない、5)サンプルで測っていない精度を謳わない。1行に複数ラベルが付きうるなら、1つのChoiceに押し込まずmulti-label-text-classificationを参照してください。

マルチラベルテキスト分類:1つのChoice、複数のはい/いいえ、それとも2回目のリクエストかZapierテキスト分類:AI by Zapier Classify vs Vertex Classify Text vs HTTP → JevMake.com Categorize Text:AI Toolkit vs HTTP → Jev(型付きラベルと信頼度しきい値)JevModel API によるバッチテキスト分類Power Automateテキスト分類:AI Builderカテゴリモデル vs HTTP → JevPipedreamテキスト分類:Hugging Faceアクション vs HTTP → Jev(型付きラベル)n8n Text Classifierノード:組み込み分類 vs ワークフローからJevを呼ぶ顧客フィードバック分類:テーマは1つ、優先度は別、感情分析だけでは足りない理由JevModel API:リクエストと応答Airtableのテキスト分類:Run a scriptオートメーションとJevでレコードに自動ラベルを付ける

よくある質問

GoogleスプレッドシートのAI関数でテキスト分類はできますか?

はい。Googleは情報の分類や感情分析を用途に挙げており、=AI("Categorize the customer inquiry as a compliment, exchange request, or return request.", C2)のような例があります。対象のGoogle WorkspaceまたはGoogle AIプランが必要で、出力は自由テキスト、IFなどの数式に入れ子にはできません。

=JEV(A2)のようなカスタム関数にしないのはなぜ?

技術的には可能ですが、カスタム関数は参照セルが変わると再計算され、30秒以内に終える必要があります。従量課金のAPIが支払い済みの行に対して再び呼ばれ、広い範囲はタイムアウトします。メニューコマンドは1回だけ実行し、通常の値を書き込みます。

GoogleスプレッドシートからJevで何行分類できますか?

制限は3つあります。JevModelのトークン残高(認証済みアカウントは100,000トークン無料から)、Apps Scriptの1回6分の実行上限と1日のURL Fetch割り当て、そしてサイト全体の1日の容量です。1行が通常の1リクエストで、まとめ割引はありません。ファイルならConsole → Batchで購入前は1バッチ50行、購入後は1,000行です。

シートのデータはJevModelに送られますか?

送られるのはスクリプトがstateに入れた内容だけです(例ではセルのテキスト)。JevModelはそれをOpenRouter経由でモデルに渡します。メールアドレスや電話番号など不要な列は送る前に除き、実行履歴の保存についてはプライバシーガイドを確認してください。

JevModel は独立したプロジェクトで、TypeSafe AI とは提携していません。