玩转大语言模型——langchain调用ollama视觉多模态语言模型

系列文章目录

玩转大语言模型——使用langchain和Ollama本地部署大语言模型
玩转大语言模型——三分钟教你用langchain+提示词工程获得猫娘女友
玩转大语言模型——ollama导入huggingface下载的模型
玩转大语言模型——langchain调用ollama视觉多模态语言模型
玩转大语言模型——使用transformers中的pipeline调用huggingface中模型
玩转大语言模型——transformers微调huggingface格式的中文Bert模型
玩转大语言模型——使用GraphRAG+Ollama构建知识图谱
玩转大语言模型——完美解决GraphRAG构建的知识图谱全为英文的问题
玩转大语言模型——配置图数据库Neo4j(含apoc插件)并导入GraphRAG生成的知识图谱
玩转大语言模型——本地部署带聊天界面deepseek R1的小白教程
玩转大语言模型——本地部署deepseek R1和本地数据库的小白教程(Ollama+AnythingLLM)
玩转大语言模型——使用LM Studio在本地部署deepseek R1的零基础)教程
玩转大语言模型——Ubuntu系统环境下使用llama.cpp进行CPU与GPU混合推理deepseek
玩转大语言模型——使用Kiln AI可视化环境进行大语言模型微调数据合成



前言

视觉多模态语言模型由预训练的多模态编码器、预训练的 LLM 以及连接两者的多模态接口等主要组件构成。将图像信息转换为可被语言模型处理的特征表示。拥有强大的视觉理解能力,能够准确理解图像内容,进行图像描述、视觉问答、图像定位等任务。可以与用户进行多轮交互,根据用户的文本和图像输入生成连贯、准确且有针对性的回答。本篇文章将介绍使用langchain调用ollama视觉多模态语音模型。


使用Ollama下载模型

查找模型

Ollama官网:https://ollama.com/
在这里插入图片描述
在Ollama官网上点击左上角的Models
在这里插入图片描述
选择Vision后就可以看到所有的支持视觉的模型了,在本篇文章中我们将使用llava模型进行演示,笔者也可以选择其他模型进行测试。LLaVA(Large Language and Vision Assistant)是一种多模态模型,它结合了视觉编码器和 Vicuna 以实现通用视觉和语言理解,在科学问答、数据分析和学术任务导向的视觉问答中表现出色,为研究人员提供了强大的工具。
在这里插入图片描述
左侧可以选择模型大小,模型越大一般来说效果越好,但针对测试来说7b的模型是够用的,为了兼容更多人的硬件设备,我们选用7b模型即可。右侧的就使用ollama下载模型的命令。

下载模型

打开命令行窗口,输入ollama下载模型的命令:ollama run llava,该命令会下载模型并直接执行,在初次下载成功后再执行命令不会重复下载。
执行命令后会先下载llava模型然后运行。如果想仅下载不运行,可以使用ollama pull llava
使用ollama run llava下载模型,可以直接与模型对话验证下载是否成功,如果使用的是ollama pull llava可以通过ollama list查看模型有没有被添加到列表,如果添加到列表,说明下载成功。
在这里插入图片描述


测试模型

ollama测试

下面我们用这样一张图片测试一下模型的性能。图片的路径在:D:/test_llava.png
在这里插入图片描述
打开命令行输入:ollama run llava,可以直接在提问时提出图片路径使用模型。
在这里插入图片描述
但是llava模型默认会使用英文回答,所以最好在询问的时候让模型用中文回答。从中文的回答上来看,回复内容是比较宽泛的描述,并且有可能会出错(羊驼被当作了斑羊)。这可能和模型或者模型大小有关,可以尝试其他模型测试一下,后期笔者也会写一篇相关的测试文章,请关注我的专栏。

langchain测试

加载图片

在langchain中使用视觉多模态语言模型时,图片应该是Base64编码的格式,下面介绍两种图片转Base64编码的方式。

从网络获取图片

import base64
import httpx

image_url = "图片的网络链接"
image_base64 = base64.b64encode(httpx.get(image_url).content).decode("utf-8")

从本地获取图片
从本地获取图片并不能直接读取并转换Base64编码格式,在这里我们可以编写一个函数来解决。

import base64
from PIL import Image
import io

def image_to_base64(image_path):
    with Image.open(image_path) as img:
        buffer = io.BytesIO()
        img.save(buffer, format="PNG")
        img_bytes = buffer.getvalue()
        img_base64 = base64.b64encode(img_bytes).decode("utf-8")
        return img_base64


local_image_path = "D:/test_llava.png"
image_base64 = image_to_base64(local_image_path)

在函数image_to_base64中,这里使用Image.open函数打开指定路径的图片文件。ImagePIL库中的类,open方法用于打开图片文件。with语句用于确保在使用完图片资源后,自动关闭文件,释放资源,避免资源泄漏。io.BytesIO是 Python 标准库io中的类,用于在内存中创建一个二进制流缓冲区。这个缓冲区将用于存储图片数据。将打开的图片img保存到之前创建的缓冲区buffer中后,使用getvalue方法用于获取缓冲区中的所有数据然后通过base64.b64encode函数用于对二进制数据img_bytes进行 Base64 编码,返回一个字节对象。然后使用decode("utf-8")方法将字节对象转换为 UTF-8 编码的字符串,得到最终的 Base64 编码的图片字符串。

加载模型

这里使用langchain中OpenAI接口和Ollama接口分别加载模型
首先下载langchain-openailangchain-ollama包,打开命令行,分别输入:

pip install -U langchain-openai
pip install -U langchain-ollama

OpenAI模型加载

from langchain_openai import ChatOpenAI

model = ChatOpenAI(
    temperature=0,
    model="llava:latest",
    openai_api_base="http://localhost:11434/v1/",
    openai_api_key="any key"
)

因为我们在本地使用ollama下载了llava模型了,所以openai_api_baseollama提供的URL:http://localhost:11434/v1/openai_api_key可以为任何值,但不能不传这个参数或者为空并且不能是中文。
Ollama模型加载

from langchain_ollama.chat_models import ChatOllama

model = ChatOllama(model="llava:latest", temperature=0)

使用Ollama方式加载就更简单了,不过这种方式仍然可以访问远程的URL。下面给出例子

model = ChatOllama(model="llava:latest", base_url="http://localhost:11434/v1/", stream=True, temperature=0.6)

如果要访问其他地址的ollama的URL,修改base_url参数即可。

模型回复

from langchain_core.messages import HumanMessage

message = HumanMessage(
    content=[
        {"type": "text", "text": "描述一下这幅图,用中文回答"},
        {
            "type": "image_url",
            "image_url": {"url": f"data:image/jpeg;base64,{image_base64}"},
        },
    ],
)
response = model.invoke([message])
print(response.content)

运行结果:
在这里插入图片描述

### 如何使用 LangChain4j 调用视觉多模态语言模型 LangChain 是一个多模态框架,能够集成多种类型的预训练模型来完成复杂的任务。以下是关于如何使用 LangChain4j 来调用视觉多模态语言模型的相关说明。 #### 配置环境 在初始化阶段,需要设置 Java 环境并引入 LangChain4j 的相关依赖项。这可以通过 Maven 或 Gradle 完成。例如,在 `pom.xml` 文件中添加以下内容: ```xml <dependency> <groupId>com.langchain</groupId> <artifactId>langchain4j-core</artifactId> <version>0.1.0</version> </dependency> ``` 此部分操作属于初始化阶段的一部分[^2]。 #### 数据输入与解析 对于多模态数据(如图像和文本),需先对其进行标准化处理。假设我们有一个图片文件路径以及一段描述性的文字作为输入,则可以按照如下方式定义输入结构: ```java import com.langchain.input.MultiModalInput; public class Main { public static void main(String[] args) { String imagePath = "path/to/image.jpg"; String textDescription = "A description of the image"; MultiModalInput input = new MultiModalInput(imagePath, textDescription); } } ``` 上述代码展示了如何创建一个包含图像路径和文本描述的对象实例。 #### 模型调用与执行 一旦完成了数据准备之后,就可以利用 LangChain 提供的功能去调用相应的视觉多模态语言模型来进行进一步的分析或者生成新的内容了。这里是一个简单的例子展示如何加载模型并对之前构建好的输入对象进行预测: ```java import com.langchain.model.VisionLanguageModel; import com.langchain.output.PredictionResult; public class ModelExecutionExample { public static void main(String[] args) throws Exception { VisionLanguageModel model = VisionLanguageModel.loadPretrained("model_name"); PredictionResult result = model.predict(input); System.out.println(result.getTextOutput()); } } ``` 在这个片段里,`VisionLanguageModel` 类代表了一个已经经过训练可用于联合理解视觉信息和自然语言表达的任务导向型模型;而方法 `.loadPretrained()` 则是从远程仓库或者其他指定位置下载特定名称版本号下的权重文件以便本地部署使用。 #### 结果反馈与优化 最后一步是对整个流程的结果给予适当的关注,并据此调整算法参数以获得更好的效果。这部分工作可能涉及到重新训练某些子组件或者是微调超参设定等方面的工作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

艾醒(AiXing-w)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值