跳到主要内容

视觉语言模型

视觉语言模型(VLM)可以在同一请求中理解图像和文本。您可以将其用于图像描述、视觉问答、类 OCR 提取、图表和文档理解、截图分析以及多图像比较。

对于大多数集成,使用 OpenAI 兼容的 /chat/completions API。请求格式与文本模型使用的基本消息格式相同,但消息的 content 可以是混合文本块和图像块的数组。

视觉语言模型的功能

典型用例包括:

  • 描述或摘要图像内容
  • 回答有关图像中对象、文本、布局或关系的问题
  • 从收据、表单、标签或截图中提取文本或结构化信息
  • 在一个请求中比较多个图像
  • 理解图表、表格、幻灯片和其他视觉文档
  • 将视觉输入与对话历史结合用于多轮工作流

请求格式

要发送图像,向 /chat/completions 传递 messages 数组。在视觉请求中,content 通常是块数组:

  • 一个 text 块用于指令或问题
  • 一个或多个 image_url 块用于图像输入

基本结构:

{
"model": "moonshotai/kimi-k2.5",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "Describe this image."
},
{
"type": "image_url",
"image_url": {
"url": "https://example.com/image.jpg"
}
}
]
}
]
}

url 可以指向:

  • 公开图像 URL
  • data:image/...;base64,... 数据 URL,用于您自行编码为 base64 的本地图像

某些视觉模型还支持 image_url 内的可选 detail 字段,例如 lowhighauto。仅当所选模型支持图像细节控制时才使用它。

单图像示例

curl 'https://api.luchentech.com/inference/v1/chat/completions' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <your_token_here>' \
--data '{
"model": "moonshotai/kimi-k2.5",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "What is happening in this image? Answer in 3 bullet points."
},
{
"type": "image_url",
"image_url": {
"url": "https://example.com/image.jpg"
}
}
]
}
],
"max_tokens": 300
}'

从以下位置读取生成的答案:

choices[0].message.content

Base64 图像输入

如果您的图像存储在本地或无法公开访问,请将其编码为 base64 并作为数据 URL 发送。

Python 示例

import base64
import os
from openai import OpenAI

def encode_image(path: str) -> str:
with open(path, "rb") as f:
return base64.b64encode(f.read()).decode("utf-8")

client = OpenAI(
api_key=os.environ["INFERENCE_API_KEY"],
base_url=os.environ["INFERENCE_BASE_URL"],
)

image_base64 = encode_image("sample.jpg")

response = client.chat.completions.create(
model=os.environ["INFERENCE_MODEL"],
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "Extract the visible text from this image."},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{image_base64}"
},
},
],
}
],
max_tokens=300,
)

print(response.choices[0].message.content)

JavaScript / TypeScript 示例

import fs from "fs";
import OpenAI from "openai";

const client = new OpenAI({
apiKey: process.env.INFERENCE_API_KEY,
baseURL: process.env.INFERENCE_BASE_URL,
});

const imageBase64 = fs.readFileSync("sample.jpg", "base64");

const response = await client.chat.completions.create({
model: process.env.INFERENCE_MODEL!,
messages: [
{
role: "user",
content: [
{ type: "text", text: "Summarize the key information in this screenshot." },
{
type: "image_url",
image_url: {
url: `data:image/jpeg;base64,${imageBase64}`,
},
},
],
},
],
max_tokens: 300,
});

console.log(response.choices[0].message.content);

多图像

您可以在同一消息中包含多个图像块。这对于比较、前后分析或要求模型合并多个截图或页面的信息非常有用。

{
"model": "moonshotai/kimi-k2.5",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "Compare these two images and explain the main differences."
},
{
"type": "image_url",
"image_url": {
"url": "https://example.com/image-1.jpg"
}
},
{
"type": "image_url",
"image_url": {
"url": "https://example.com/image-2.jpg"
}
}
]
}
]
}

请注意:

  • 多个图像会增加 Token 使用量和延迟
  • 某些模型系列只能很好地处理少量图像
  • 对于较小或较旧的 VLM,较少的图像通常产生更好的结果

提示词技巧

视觉质量在很大程度上取决于提示词。以下实践通常有帮助:

  • 明确告诉模型要查找什么,例如文本、对象、布局、缺陷或差异
  • 要求特定的输出格式,如项目符号、JSON 或表格
  • 说明您需要的是 OCR、摘要、分类还是比较
  • 对于文档图像,按名称要求提取字段
  • 对于多图像提示词,在指令中标记图像,例如"第一张图像"和"第二张图像"

示例:

{
"role": "user",
"content": [
{
"type": "text",
"text": "Read this invoice image and return JSON with invoice_number, vendor_name, invoice_date, and total_amount."
},
{
"type": "image_url",
"image_url": {
"url": "https://example.com/invoice.png"
}
}
]
}

常见用例

类 OCR 提取

使用文档图像加上明确的字段指令:

{
"model": "moonshotai/kimi-k2.5",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "Extract the product name, serial number, and price from this label. Return valid JSON."
},
{
"type": "image_url",
"image_url": {
"url": "https://example.com/label.jpg"
}
}
]
}
],
"response_format": {
"type": "json_object"
}
}

截图或 UI 分析

这适用于 QA 工作流、设计审查或支持自动化:

{
"model": "moonshotai/kimi-k2.5",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "Analyze this application screenshot and identify any visible errors, warnings, or UX issues."
},
{
"type": "image_url",
"image_url": {
"url": "https://example.com/app-screen.png"
}
}
]
}
]
}

Token 使用量与成本

图像在模型回答之前被转换为视觉 Token。这意味着图像输入像文本 Token 一样计入使用量和计费。

实际 Token 使用量取决于所选模型,在某些情况下还包括:

  • 图像分辨率
  • 图像数量
  • 模型是否支持 detail 控制
  • 提供商如何在内部预处理图像

如果您的请求变得昂贵或缓慢:

  • 减少图像数量
  • 上传前调整大尺寸图像的大小
  • 尽可能裁剪到相关区域
  • 如果所选模型支持,使用较低细节的图像设置

限制与最佳实践

  • 使用明确支持图像输入的模型。并非所有聊天模型都具备视觉能力。
  • 在硬编码模型名称之前检查当前模型目录,因为可用的 VLM 列表可能随时间变化。
  • 公开图像 URL 应可被推理服务直接访问。
  • 对于本地文件,base64 数据 URL 通常是最可靠的选项。
  • 非常大的图像、过多的图像或低质量截图可能会降低准确性。
  • 某些模型在自然图像上表现更好,而另一些在文档、OCR 或图表方面更强。
  • 如果需要严格的机器可读输出,请将视觉输入与 response_format 结合使用。

选择视觉模型

选择模型时,请考虑:

  • 视觉理解质量
  • OCR 和文档解析性能
  • 多图像支持
  • 延迟和成本
  • 最大上下文和图像处理限制

如果您不确定使用哪个模型,请先检查平台目录中当前可用的模型,选择一个明确支持视觉输入的模型。