趋近智
虽然许多应用处理并生成文本,但现代大型语言模型(LLMs)正变得越来越支持多模态,能够理解语言之外的输入,比如图像。结合视觉功能可以构建能够“看”和解析视觉情境的应用,由此带来一类具有高效能的新应用场景。
本部分介绍如何使用视觉语言模型(VLMs)处理和分析图像。您将学习如何准备图像以进行API调用,通过统一的接口将它们发送到不同模型,并通过有针对性的提示来指导模型分析,从而完成物体识别、文本提取和结构化数据生成等任务。
视觉语言模型不直接处理图像文件。相反,它们需要将图像数据编码成一种可以通过API传输的格式,通常是Base64。这个过程将图像的二进制数据转换为字符串表示。该工具包会自动处理这种编码,但了解其过程很有帮助。
image_to_base64 函数提供了一种直接的方法来执行此转换。
from kerb.multimodal import image_to_base64
# 假设您有一个名为 'product-diagram.jpg' 的图像文件
image_path = "product-diagram.jpg"
# 将图像编码为 Base64 字符串
encoded_image = image_to_base64(image_path)
print(f"Base64 编码字符串(前60个字符):{encoded_image[:60]}...")
这个编码后的字符串,连同您的文本提示,构成了发送到视觉模型的多模态输入。
不同的提供商,如OpenAI、Anthropic和Google,都有各自处理多模态输入的API格式。该工具包通过一个单一函数 analyze_image_with_vision_model 简化了这一点,它将提供商特定的细节抽象化。这使得您可以编写一次代码,并通过很小的改动就能在不同的视觉模型之间切换。
下图展示了图像分析的典型工作流程。
该函数自动处理 Base64 编码,并根据所选模型的要求格式化请求。
让我们从一个基本任务开始:让模型描述一张图片。我们提供图像路径和引导分析的文本提示。
from kerb.multimodal import analyze_image_with_vision_model, VisionModel
# 假设 'product-diagram.jpg' 是产品示意图的图像
image_path = "product-diagram.jpg"
prompt_text = "描述这张图片中显示的对象。"
# 使用 OpenAI 的 GPT-4o 模型分析图像
analysis_result = analyze_image_with_vision_model(
image_path=image_path,
prompt=prompt_text,
model=VisionModel.GPT4O
)
print(analysis_result.description)
使用 VisionModel 枚举的 model 参数,决定要使用哪个提供商和模型。通过简单地将 model=VisionModel.CLAUDE_3_5_SONNET 更改,您可以切换到 Anthropic 的 Claude 3.5 Sonnet。
分析的质量在很大程度上取决于您提供的文本提示。通过具体化,您可以引导模型执行多种高级任务。
视觉模型在光学字符识别(OCR)方面表现良好,可以从扫描文档、截图或照片等图像中提取文本。
# 假设 'product-specs.jpg' 包含带有产品规格的文本
ocr_prompt = "提取此图片中的所有文本。按其显示的样子精确转录。"
ocr_result = analyze_image_with_vision_model(
image_path="product-specs.jpg",
prompt=ocr_prompt,
model=VisionModel.GPT4O
)
print("提取的文本:\n")
print(ocr_result.description)
这对于构建需要从数字和扫描文档组合中索引文本的RAG系统特别有帮助。
视觉语言模型最效能高的应用之一是从图像中提取结构化数据。通过指示模型以JSON等特定格式返回其结果,您可以创建可靠的数据处理流程。
想象您有一张名片的图像。您可以要求模型将联系信息提取到一个JSON对象中。
# 假设 'business-card.jpg' 是一张名片的图像
structured_prompt = """
分析图片中的名片并提取以下信息。
以有效的JSON对象形式返回输出,包含以下键:
- 姓名
- 职位
- 公司
- 电话
- 电子邮件
- 网站
"""
structured_result = analyze_image_with_vision_model(
image_path="business-card.jpg",
prompt=structured_prompt,
model=VisionModel.GPT4O
)
# 现在可以轻松解析和使用结果
import json
contact_info = json.loads(structured_result.description)
print(json.dumps(contact_info, indent=2))
此技术可用于发票、收据、表格或任何包含结构化信息的图像。
您也可以在一次调用中提供多张图像进行比较分析。该函数接受 image_path 参数的图像路径列表。这对于比较产品版本、识别两张图表之间的变化或在一组图像中找出异类等任务很有帮助。
# 假设您有两张来自不同季度的图表图像
image_paths = ["sales-q1.jpg", "sales-q2.jpg"]
comparison_prompt = "这两张图片显示了第一季度和第二季度的销售图表。 " \
"比较它们并描述您观察到的主要趋势。"
comparison_result = analyze_image_with_vision_model(
image_path=image_paths,
prompt=comparison_prompt,
model=VisionModel.GPT4O
)
print(comparison_result.description)
通过在同一上下文中提供两张图像,模型可以直接引用并比较它们,从而提供比单独处理更具说明性的分析。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造