世界从未停止变化。RSS
BIG CHANGE.

Markdown 版本

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

# 类似 Jev 的视觉封装器:将图像问题转化为类型化选项

> 一个独立的 Python 示例使用视觉模型的 token 概率,根据图像返回类型化判断。作者报告了摄像头处理帧率,但尚未测试准确性。

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 风格的决策请求,使其能够附带图像。它将每一帧摄像头画面连同简短问题一起发送给视觉模型,再把模型下一个 token 的概率转换为“是/否”值、选项或评分。这个示例是独立封装器,并非 Jev 的视觉功能,也不是对 Jev 模型的测试。

对开发者而言,这项技术的适用边界最有参考价值。视觉模型可以回答受约束的问题,而不必生成描述;但返回的选项概率取决于提示词、可用的 token 备选项和模型本身。该博文提供了一个可供检查的实现模式,而非准确性研究。

## 重大变化

- **发生了什么变化:**一名开发者将 Jev 常用的小型决策格式应用于通用视觉模型。每次请求都会附上图像,而单字母回答则把视觉问题转换成软件可以处理的值。
- **为何重要:**开发者可以通过更改文本中的判断标准,获得类型化结果,而无需为每个问题单独构建图像分类器。这个示例涵盖画面中是否可见人物或植物、场景属于室内还是室外,以及亮度如何;但它并未证明这些判断能否可靠地迁移到其他摄像头或场景。
- **接下来关注什么:**关键在于所选模型和端点能否稳定返回所需的备选 token 分数。要让摄像头结果驱动某项操作,必须在有代表性的图像上同时测量帧处理速度和判断质量。

## 图像判断如何运作

[TypeSafe AI 的 Jev 快速入门指南](https://docs.typesafe.ai/introduction/quickstart)介绍了一个`state`状态以及一组类型化的`questions`:`noul`,用于“是/否”值;`choice`,用于命名选项;`score`,用于有序等级。Boll 的脚本沿用这些名称,并增加了一个`attachments`数组,用于存放图像路径或 base64 数据 URL。这个字段是他对请求对象所作的扩展;文中引用的 Jev 快速入门指南介绍了文本状态,但未将该字段记载为 Jev API 输入。

对于每个问题,脚本都会构建一个提示词,其中包含带字母标记的选项,例如`[A] true`和`[B] false`。它要求模型用最合适的字母作答,并读取第一个输出 token 的`top_logprobs`。随后,脚本对返回的 log 概率取指数,将权重在列出的字母之间归一化,再根据问题类型映射结果。`choice`会返回权重最高的选项及其分布。`noul`会返回某个选项对应的权重:`true`。`score`会返回有序等级的加权平均值。如果被省略的选项 token 仍可能具有较大权重,脚本就会拒绝该响应。

每个问题都会附带图像。示例针对每个问题分别发起请求,而不是在一次模型调用中取得所有答案。它的 OpenAI 路径使用 Responses API,并配合`input_image`、`top_logprobs`和`message.output_text.logprobs`;本地 llama.cpp 路径则使用 Chat Completions,传入一个`image_url`内容项并启用 log 概率。[OpenAI 的图像指南](https://developers.openai.com/api/docs/guides/images-vision)介绍了 base64 图像数据 URL;其[Responses 参考文档](https://developers.openai.com/api/reference/resources/responses/methods/create)说明了 log 概率输出,以及每个 token 位置最多返回 20 个备选项。[llama.cpp 服务器文档](https://github.com/ggml-org/llama.cpp/blob/master/tools/server/README.md)说明了其聊天接口接受图像 URL。这些来源支持上述请求模式;我们并未使用任一端点实际运行该示例。

## 摄像头示例测量了什么

脚本使用 OpenCV 捕获画面、编码为 JPEG,然后提出四个问题:画面中是否有人或植物、场景是在室内还是室外,以及画面有多亮。后台工作线程每次处理一帧,同时预览画面继续运行。它的摄像头配置使用 Linux V4L2,因此不作修改就无法在不同平台上通用。文章正文称每帧询问三个问题,但发布的代码实际包含四个;本文的计数依据是代码。

Boll 报告称,使用 RTX 3090 上本地运行的 Gemma 4 12B QAT 模型时,**每秒约评估一帧**;使用托管版 GPT-6 Luna 时,约为**每秒 0.2 帧**。他认为,反复建立连接可能是托管版本表现较慢的原因之一。博文没有对硬件、网络、图像尺寸、缓存、准确性或请求耗时进行受控比较。这些数字只反映作者自己的配置和代码,不能据此对模型速度作一般性排名。[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`推理设置。

对于要改编脚本的开发者,首先应进行几项具体检查:确认模型接受图像输入并提供所需的首 token 备选项;检查所有选项字母是否均已返回;然后在来自目标摄像头或数据集的标注图像上评估输出判断。归一化权重是相对于列出的字母 token 而言的。它们本身并不是视觉判断正确概率的实测值。OpenAI 的[早期 logprobs 教程](https://developers.openai.com/cookbook/examples/using_logprobs)解释了 token 概率的概念,但该教程已标记为存档,API 示例可能过时。

这个封装器还说明,类型化结果仍有哪些部分需要由应用代码处理。模型根据文字描述的标准判断给定图像;应用程序负责选择帧、处理缺失分数,并决定某个结果是否足以安全地触发操作。Boll 的示例会输出一个表格,但没有报告自动化操作或经过测量的部署结果。

## 来源与延伸阅读

- [Allan Riordan Boll,《适用于 LLM(包括视觉模型)的 Jev 式封装器》,2026 年 9 月 25 日](https://allanrbo.blogspot.com/2026/09/a-jev-like-wrapper-for-llms-including.html):独立 Python 示例、摄像头工作流和作者报告的帧率。正文称每帧提出三个问题,但代码定义了四个。其计时结果并非独立或受控基准测试。
- [TypeSafe AI:Jev 快速入门指南](https://docs.typesafe.ai/introduction/quickstart):介绍文本状态以及`noul`、`choice`和`score`问题类型。它未记载作者自定义的`attachments`字段是 Jev API 的一项功能。
- [OpenAI:图像与视觉](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`以及每个 token 位置可返回的备选项数量上限。
- [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 的聊天端点和 image\_url 输入。仍需针对实际使用的具体版本和模型检查后端支持情况及其返回的 token 列表。
- [OpenAI Cookbook:《使用 logprobs》](https://developers.openai.com/cookbook/examples/using_logprobs):介绍 token 概率的背景知识。OpenAI 已将此示例标记为存档,并提醒其可能不适用于当前模型或 API。

## Sources

- [Allan Riordan Boll:适用于 LLM(包括视觉模型)的 Jev 式封装器](https://allanrbo.blogspot.com/2026/09/a-jev-like-wrapper-for-llms-including.html) — 独立 Python 代码及作者报告的摄像头测试观察。代码定义了四个问题,但正文称有三个;未提供受控基准测试或独立准确性研究。
- [TypeSafe AI:Jev 快速入门指南](https://docs.typesafe.ai/introduction/quickstart) — 介绍文本状态、问题类型和示例请求正文。博文作者在自己的类似 Jev 请求对象中添加附件;该快速入门指南未记载此字段。
- [OpenAI:图像与视觉](https://developers.openai.com/api/docs/guides/images-vision) — 介绍图像输入和 base64 数据 URL。支持上述请求模式,但不能证明作者报告的处理速度。
- [OpenAI:创建模型响应](https://developers.openai.com/api/reference/resources/responses/methods/create) — 介绍图像输入、message.output_text.logprobs,以及每个 token 位置最多 20 个 top log 概率(有时会更少)。
- [OpenAI:GPT-6 Luna 与模型指南](https://developers.openai.com/api/docs/models/gpt-6-luna) — 列出图像输入和 none 推理力度;OpenAI 的模型指南解释了不同推理力度下 logprobs 参数的限制。
- [llama.cpp 服务器 README](https://github.com/ggml-org/llama.cpp/blob/master/tools/server/README.md) — 介绍兼容 OpenAI 的聊天端点和 image_url 输入。我们未使用这里描述的确切后端与模型版本进行独立测试。
- [OpenAI Cookbook:《使用 logprobs》](https://developers.openai.com/cookbook/examples/using_logprobs) — 提供 token 概率的背景说明。OpenAI 将此 Cookbook 示例标记为存档,并提示它对于当前模型或 API 可能已经过时。