LangChain开发(六)多模态输入与自定义输出

多模态数据输入

这里演示如何将多模态输入直接传递给模型。我们目前期望所有输入都与OpnAI期望的格式相同。对于支持多模态输入的其他模型提供这,我们在类中添加了逻辑以转换为期望格式。

url传入图片地址

传入一个url,让大模型描述图片里面有什么

from langchain_core.messages import HumanMessage
from langchain_openai import ChatOpenAI

image_url = "https://avatars.githubusercontent.com/u/64422807?v=4"
model = ChatOpenAI(model="gpt-4o")
message = HumanMessage(
    content=[
        {"type": "text", "text": "用中文描述描述这张图片"},
        {"type": "image_url", "image_url": {"url": image_url}}
    ],
)

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

输出示例:

这是一幅黑白风格的图像,背景为单色。主体人物的头发较为卷曲,呈现自然的纹理效果。在人物头发的左侧,有一些花朵的图案,与头部融合在一起,增添了艺术的感觉。人物穿着简单的白色上衣,整体呈现出一种简洁而富有艺术感的风格。

只有一部分大模型支持该能力

base64编码传入图片

在本地将url对应的图片base64编码后传给大模型

# 获取图片后base64发送给大模型
import base64
from langchain_core.messages import HumanMessage
from langchain_openai import ChatOpenAI
# 用httpx,获取图片的base64编码
import httpx

image_url = "https://avatars.githubusercontent.com/u/64422807?v=4"
# 将图片二进制数据转换为base64编码
image_data = base64.b64encode(httpx.get(image_url).content).decode("utf-8")
model = ChatOpenAI(model="gpt-4o")
message = HumanMessage(
    content=[
        {"type": "text", "text": "用中文描述描述这张图片"},
        {
            "type": "image_url",
            "image_url": {"url": f"data:image/png;base64,{image_data}"},
        }
    ],
)

response = model.invoke([message])
print(response.content)
这张图片的背景是简单的灰色,给人一种简洁和宁静的感觉。画面中人物的头发呈深色卷发,线条柔和,增添了些许艺术感。发间融入了一些灰色的花瓣图案,仿佛花瓣从头发中生长出来,让整体效果显得富有创意和美感。人物穿着一件白色上衣,与整个色调的搭配和谐,看起来干净而柔和。整个图像呈现出一种朦胧且充满梦幻的风格。

适用于大部分支持多模态的模型

传入多个url

一次性传入多个图片url,让大模型比较分析

# 传入多个图片url并比较图片
from langchain_core.messages import HumanMessage
from langchain_openai import ChatOpenAI

image_url1 = "https://avatars.githubusercontent.com/u/64422807?v=4"
image_url2 = "https://i-avatar.csdnimg.cn/a565ae7306de49babdb4ac8d52f50c19_weixin_43811294.jpg!1"
model = ChatOpenAI(model="gpt-4o")
message = HumanMessage(
    content=[
        {"type": "text", "text": "这两张图片有啥区别"},
        {"type": "image_url", "image_url": {"url": image_url1}},
        {"type": "image_url", "image_url": {"url": image_url2}}
    ],
)

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

输出示例:

两张图片在风格和背景上有所不同。第一张图片是人物肖像艺术作品,整体风格比较抽象,使用了花朵的元素,并且背景颜色较为淡雅。第二张图片则是一位坐在电脑前的人,背景呈现出一种科技感和夜晚的氛围,充满了蓝色和紫色的光影,营造出一种现代化、数字化的环境。

工具调用

一些多模态模型也支持调用功能。要使用此类调用工具,只需以通常的方式将工具绑定到它们,然后使用所需类型的内容块(例如,包含图像数据)调用模型。

# 图片识别+工具调用
from typing import Literal
from langchain_core.messages import HumanMessage
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool


@tool
def color_tool(color: Literal["黑色的", "白色的", "绿色的", "灰色的", "蓝色的"]) -> None:
    """Describe the color"""
    pass


model = ChatOpenAI(model="gpt-4o")
model_with_tool = model.bind_tools([color_tool])
image_url1 = "https://avatars.githubusercontent.com/u/64422807?v=4"
image_url2 = "https://i-avatar.csdnimg.cn/a565ae7306de49babdb4ac8d52f50c19_weixin_43811294.jpg!1"
message = HumanMessage(
    content=[
        {"type": "text", "text": "用中文描述这两张图片的主题颜色"},
        {"type": "image_url", "image_url": {"url": image_url1}},
        {"type": "image_url", "image_url": {"url": image_url2}}
    ],
)

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

输出示例

[{'name': 'color_tool', 'args': {'color': '灰色的'}, 'id': 'call_kovBTsMEYBp0nJhiGeunGvO2', 'type': 'tool_call'}, {'name': 'color_tool', 'args': {'color': '蓝色的'}, 'id': 'call_1tNCe6TPAbvjts9bmhc3STvT', 'type': 'tool_call'}]

源码地址

https://github.com/lys1313013/langchain-example/tree/main/07-multimodal

参考资料

B站:2025吃透LangChain大模型全套教程(LLM+RAG+OpenAI+Agent)第6集

LangChain官网: Multimodal

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丶只有影子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值