AI-translated from English; not yet reviewed by a fluent editor.

# Jev風の視覚ラッパーが画像の質問を型付きの選択肢に変える

> 独立したPythonの例では、視覚モデルのトークン確率を使い、画像から型付きの判断を返します。ウェブカメラの処理速度は作者の報告で、精度は未検証です。

By BIG CHANGE Editorial

Published: 2026-09-26T10:09:47.074Z
Updated: 2026-09-26T10:09:47.074Z
Canonical: https://bigchange.ai/blog/jev-like-llm-vision-wrapper-logprobs

![Conceptual charcoal illustration of a webcam clipped to a monitor and facing a leafy plant on a shelf.](https://bigchange.ai/api/media/file/jev-vision-webcam-plant-hero-v1.png)
AI-generated conceptual illustration by BIG CHANGE.

ある[開発者Allan Riordan Bollが9月25日に公開したPythonの例](https://allanrbo.blogspot.com/2026/09/a-jev-like-wrapper-for-llms-including.html)は、Jev風の判断リクエストに画像添付を加えたものです。各ウェブカメラ映像を短い質問とともに視覚モデルへ送り、次のトークンの確率をyes/noの値、選択肢、またはスコアに変換します。この例は独立したラッパーであり、Jevの視覚機能でも、Jevのモデルを試すテストでもありません。

開発者にとって有用なのは、この手法の適用範囲です。視覚モデルは説明文を書かずに制約付きの質問に答えられますが、選択肢ごとの確率はプロンプト、利用可能なトークン候補、モデルに左右されます。この投稿は検討できる実装例を示すもので、精度調査ではありません。

## 大きな変化

- **何が変わったか：**開発者がJevに関連する小さな判断の形式を、汎用の視覚モデルで画像に適用しました。画像は各リクエストに添付され、1文字の回答によって視覚的な質問がソフトウェアで扱える値になります。
- **なぜ重要か：**開発者は質問ごとに画像分類器を個別に作らなくても、視覚的な判定基準をテキストで変更し、型付きの結果を受け取れます。この例では、人や植物の有無、屋内外、明るさを扱いますが、別のカメラや場面でも同じ判断がどれほど確実に通用するかは示していません。
- **注目点：**実用上の判断ポイントは、選んだモデルとエンドポイントが、必要な代替トークンのスコアをタスクに十分な一貫性で返すかどうかです。ウェブカメラの結果を動作に結び付ける前に、代表的な画像でフレーム処理量と判断品質を同時に測る必要があります。

## 画像による判断の仕組み

[TypeSafe AIのJevクイックスタート](https://docs.typesafe.ai/introduction/quickstart)には、型付きの`state`と一連の型付きの`questions`を記載しています：`noul`yes/no値用の`choice`、名前付きの選択肢用の`score`、順序付きレベル用の。Bollのスクリプトはこれらの名前を使い、画像パスまたはbase64データURLの配列である`attachments`を追加します。このフィールドは彼がリクエストオブジェクトに加えた拡張です。引用されたJevクイックスタートはテキスト状態を説明していますが、Jev APIの入力としてこのフィールドを記載していません。

各質問について、スクリプトはたとえば`[A] true`や`[B] false`のような文字付き選択肢を含むプロンプトを作ります。モデルに最適な文字で答えるよう求め、最初の出力トークンの`top_logprobs`を読み取ります。返された対数確率を指数化し、一覧にある文字の間で重みを正規化して、質問の型に対応付けます。`choice`は最も重みの高い選択肢とその分布を返します。`noul`は`true`の重みを返します。`score`は順序付きレベルの加重平均を返します。省略された選択肢トークンに無視できない重みが残る可能性がある場合、スクリプトは応答を拒否します。

画像は各質問とともに渡されます。この例は、1回のモデル呼び出しですべての回答を得るのではなく、個別のリクエストを送ります。OpenAI向けの経路ではResponses APIと`input_image`、`top_logprobs`と`message.output_text.logprobs`を使います。ローカルのllama.cpp経路ではChat Completionsと`image_url`コンテンツ項目および対数確率を使います。[OpenAIの画像ガイド](https://developers.openai.com/api/docs/guides/images-vision)はbase64画像データURLを説明し、[Responsesリファレンス](https://developers.openai.com/api/reference/resources/responses/methods/create)は対数確率の出力と、トークン位置ごとに最大20個の代替候補が返されることを説明しています。[llama.cppサーバーのドキュメント](https://github.com/ggml-org/llama.cpp/blob/master/tools/server/README.md)はチャット画面での画像URLを説明しています。これらの資料はリクエストのパターンを裏付けますが、どちらのエンドポイントでも例を実行してはいません。

## ウェブカメラの例で測るもの

スクリプトはOpenCVでフレームを取得してJPEGに変換し、人または植物が見えるか、屋内か屋外か、明るさはどの程度かという4つの質問をします。プレビューを続けながら、バックグラウンドのワーカーが一度に1フレームを評価します。カメラ設定はLinux V4L2を使うため、掲載ファイルは変更せずにどの環境でも使えるウェブカメラ設定ではありません。記事本文は1フレームあたり3問としていますが、公開コードには4問あります。ここではコードの数を採用しています。

Bollは約**毎秒1フレームを評価**したと報告しています。RTX 3090上でローカル提供のGemma 4 12B QATモデルを使った結果で、**毎秒0.2フレーム**はホスト型GPT-6 Lunaを使った場合です。ホスト型の結果には接続を繰り返すことが影響した可能性があると、本人は述べています。投稿にはハードウェア、ネットワーク、画像サイズ、キャッシュ、精度、リクエスト時間を統制した比較はありません。これらの数値は作者の設定とコードでの結果であり、モデル全般の速度順位ではありません。[OpenAIはGPT-6 Lunaが画像入力を受け付けると記載しています](https://developers.openai.com/api/docs/models/gpt-6-luna)。また、[モデルガイド](https://developers.openai.com/api/docs/guides/latest-model)によると、Lunaはこの例で使われている`none`推論設定に対応しています。

スクリプトを応用する開発者が最初に確認すべき点は明確です。モデルが画像入力を受け付け、必要な最初のトークン候補を公開することを確認し、すべての選択肢の文字が返されるかを調べます。そのうえで、目的のカメラやデータセットから得たラベル付き画像を使って判断結果を評価します。正規化された重みは、一覧にある文字トークン間の相対値です。それだけで視覚判断の正しさを測る確率にはなりません。OpenAIの[古いlogprobsクックブック](https://developers.openai.com/cookbook/examples/using_logprobs)はトークン確率の考え方を説明していますが、アーカイブ扱いで、API例が古くなっている可能性があります。

このラッパーは、型付きの結果を得た後にアプリケーションコードが担う部分も明らかにします。モデルは与えられた画像を文章で示された基準に照らして判断します。アプリケーションはフレームを選び、スコアが欠けた場合に対処し、結果を安全に動作へ使えるかを判断します。Bollの例は表を出力しますが、自動動作や実測済みの導入事例を報告してはいません。

## 出典・関連資料

- [Allan Riordan Boll「A Jev-like wrapper for LLMs, including vision models」2026年9月25日](https://allanrbo.blogspot.com/2026/09/a-jev-like-wrapper-for-llms-including.html)：Pythonのオリジナル例、ウェブカメラの手順、作者が報告したフレーム処理速度。本文は1フレームあたり3問としていますが、コードでは4問です。時間の計測は独立した統制ベンチマークではありません。
- [TypeSafe AI「Jev quick start」](https://docs.typesafe.ai/introduction/quickstart)：テキスト状態と`noul`、`choice`、`score`の質問型を説明しています。作者独自の`attachments`フィールドをJev APIの機能とは記載していません。
- [OpenAI「Images and vision」](https://developers.openai.com/api/docs/guides/images-vision)：`input_image`、画像URL、視覚入力用のbase64データURLを説明しています。[Responses APIリファレンス](https://developers.openai.com/api/reference/resources/responses/methods/create)は`message.output_text.logprobs`と、返される代替候補の上限を説明しています。
- [OpenAI「GPT-6 Lunaとモデルガイド」](https://developers.openai.com/api/docs/models/gpt-6-luna)：画像入力とモデルの`none`推論設定を確認できます。[モデルガイド](https://developers.openai.com/api/docs/guides/latest-model)にはパラメーターの互換性が記載されています。これらの資料はブログ作者の処理速度を検証するものではありません。
- [llama.cppサーバーのREADME](https://github.com/ggml-org/llama.cpp/blob/master/tools/server/README.md)：OpenAI互換のチャットエンドポイントと画像URL入力を説明しています。使用するバージョンとモデルでバックエンドが対応するか、トークン一覧が返るかは引き続き確認が必要です。
- [OpenAI Cookbook「Using logprobs」](https://developers.openai.com/cookbook/examples/using_logprobs)：トークン確率の背景説明です。OpenAIはこのレシピをアーカイブ扱いとし、一部のモデルやAPIには古い情報が含まれる可能性があるとしています。

## Sources

- [Allan Riordan Boll：A Jev-like wrapper for LLMs, including vision models](https://allanrbo.blogspot.com/2026/09/a-jev-like-wrapper-for-llms-including.html) — 独立したオリジナルPythonコードと、作者が報告したウェブカメラでの観察。周辺の本文は3問としていますが、コードには4問あります。統制ベンチマークや独立した精度調査はありません。
- [TypeSafe AI：Jev quick start](https://docs.typesafe.ai/introduction/quickstart) — テキスト状態、質問型、リクエスト本文の例を説明しています。ブログ作者は自身のJev風リクエストオブジェクトに添付ファイルを追加していますが、このクイックスタートはそのフィールドを記載していません。
- [OpenAI：Images and vision](https://developers.openai.com/api/docs/guides/images-vision) — 画像入力とbase64データURLを説明しています。リクエストのパターンを裏付けますが、作者が報告した処理速度は裏付けません。
- [OpenAI：Create a model response](https://developers.openai.com/api/reference/resources/responses/methods/create) — 画像入力、message.output_text.logprobs、トークン位置ごとに最大20個、ときにはそれ未満のtop log probabilitiesを説明しています。
- [OpenAI：GPT-6 Lunaとモデルガイド](https://developers.openai.com/api/docs/models/gpt-6-luna) — 画像入力とnoneの推論強度を記載しています。OpenAIのモデルガイドは、推論強度ごとのlogprobパラメーターの制限を説明しています。
- [llama.cppサーバーREADME](https://github.com/ggml-org/llama.cpp/blob/master/tools/server/README.md) — OpenAI互換のチャットエンドポイントとimage_url入力を説明しています。バックエンドやモデルの正確なバージョンは、ここでは独立に実行検証していません。
- [OpenAI Cookbook：Using logprobs](https://developers.openai.com/cookbook/examples/using_logprobs) — トークン確率の背景説明です。OpenAIはこのCookbookの例をアーカイブ扱いとし、現在のモデルやAPIでは古くなっている可能性があるとしています。
