当前位置: 首页 > news >正文

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

系列文章目录

玩转大语言模型——ollama导入huggingface下载的模型
玩转大语言模型——langchain调用ollama视觉多模态语言模型


langchain调用ollama视觉多模态语言模型

  • 系列文章目录
  • 前言
  • 使用Ollama下载模型
    • 查找模型
    • 下载模型
  • 测试模型
    • ollama测试
    • langchain测试
      • 加载图片
      • 加载模型
    • 模型回复


前言

视觉多模态语言模型由预训练的多模态编码器、预训练的 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 httpximage_url = "图片的网络链接"
image_base64 = base64.b64encode(httpx.get(image_url).content).decode("utf-8")

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

import base64
from PIL import Image
import iodef 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_base64local_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 ChatOpenAImodel = 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 ChatOllamamodel = 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 HumanMessagemessage = 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)

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

相关文章:

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

系列文章目录 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 langchain调用ollama视觉多模态语言模型 系列文章目录前言使用Ollama下载模型查找模型下载模型 测试模型ollama测试langchain测试加载图片加载模型…...

Github 2025-01-11 Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2025-01-11统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10C项目1Swift项目1Yazi - 快速终端文件管理器 创建周期:210 天开发语言:Rust协议类型:MIT LicenseStar数量:5668 个Fork数量:122…...

【学习】【记录】【分享】微型响应系统

前言 本篇博客源于对Vue和React框架中响应式系统的好奇与探索。若文中存在任何错误或有更优的解决方案,欢迎各位读者不吝指正,让我们一起学习,共同进步。 1. 什么是响应式系统 响应式系统是一种编程范式,它允许数据的变化自动地…...

vue城市道路交通流量预测可视化系统

文章结尾部分有CSDN官方提供的学长 联系方式名片 文章结尾部分有CSDN官方提供的学长 联系方式名片 关注B站、收藏、不迷路! 项目亮点 编号:R09 🚇 网站大屏管理三大前端、vuespringbootmysql、前后端分离架构 🚇 流量预测道路查询…...

Windows7 Emacs设置及中文乱码解决

个人博客地址:Windows7 Emacs设置及中文乱码解决 | 一张假钞的真实世界 环境说明 Windows7GNU Emacs 25.1.1安装路径:D:/apps/emacs/ 配置Emacs 在Windows7下安装完Emacs后,默认情况下Emacs不会在一启动的时候就生成.emacs配置文件和.ema…...

Python AI教程之十五:监督学习之决策树(6)高级算法C5.0决策树算法介绍

C5.0决策树算法 C5 算法由 J. Ross Quinlan 创建,是 ID3 决策树方法的扩展。它通过根据信息增益(衡量通过按特定属性进行划分而实现的熵减少量)递归地划分数据来构建决策树。 对于分类问题,C5.0 方法是一种决策树算法。它构建规则集或决策树,这是对 C4.5 方法的改进。根…...

MOS管为什么会有夹断,夹断后为什么会有电流?该电流为什么是恒定的?

以下是对MOS管MOS管为什么会有夹断,夹断后为什么还会有电流?该电流为什么是恒定的?的一些心得体会。 1. MOS管为什么会有夹断? 可以认为D极加压使得D极的耗尽层增大(原因是N极接正极,P极接负极,电子被吸引…...

网络安全-RSA非对称加密算法、数字签名

数字签名非常普遍: 了解数字签名前先了解一下SHA-1摘要,RSA非对称加密算法。然后再了解数字签名。 SHA-1 SHA-1(secure hash Algorithm )是一种 数据加密算法。该算法的思想是接收一段明文,然后以一种不可逆的方式将…...

【AI日记】25.01.13

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】 AI kaggle 比赛:Forecasting Sticker Sales 读书 书名:罗素论幸福 律己 AI: 8 小时,良作息:1:00-9:00, 良短视频&…...

Mysql--运维篇--空间管理(表空间,索引空间,临时表空间,二进制日志,数据归档等)

MySQL的空间管理是指对数据库存储资源的管理和优化。确保数据库能够高效地使用磁盘空间、内存和其他系统资源。良好的空间管理不仅有助于提高数据库的性能,还能减少存储成本并防止因磁盘空间不足导致的服务中断。MySQL的空间管理涉及多个方面,包括表空间…...

JVM面试相关

JVM组成 什么是程序计数器 详细介绍Java堆 什么是虚拟机栈 能不能解释一下方法区? 直接内存相关 类加载器 什么是类加载器,类加载器有哪些 什么是双亲委派模型 类加载过程 垃圾回收 对象什么时候可以被垃圾回收器回收 JVM垃圾回收算法有那些 JVM的分代…...

【leetcode 13】哈希表 242.有效的字母异位词

原题链接 题解链接 一般哈希表都是用来快速判断一个元素是否出现集合里。 当我们想使用哈希法来解决问题的时候,我们一般会选择如下三种数据结构。 数组 set (集合) map(映射) 如果在做面试题目的时候遇到需要判断一个元素是否出现过的场景…...

Blazor开发复杂信息管理系统的优势

随着现代企业信息管理需求的不断提升,开发高效、易维护、可扩展的系统变得尤为重要。在这个过程中,Blazor作为一种新兴的Web开发框架,因其独特的优势,逐渐成为开发复杂信息管理系统的首选技术之一。本文将结合Blazor在开发复杂信息…...

ue5 1.平A,两段连击蒙太奇。鼠标点一下,就放2段动画。2,动画混合即融合,边跑边挥剑,3,动画通知,动画到某一帧,把控制权交给蓝图。就执行蓝图节点

新建文件夹 创建一个蒙太奇MA_Melee 找到c_slow 调节一下速度 把D_slow拖上去 中间加一个片段 哎呀呀,写错了,我想写2 把这个标记拖过来,点击默认default 弄第二个片段 就会自己变成这个样子 把2这个标记拖到中间 鼠标左键&a…...

2025,AI走向何方?暴雨技术专家为您展望

过去一年中,人工智能技术飞速发展,在各行各业都收获了巨大进展。面对即将到来的2025年,暴雨技术研发团队的专家对AI领域的发展趋势进行了展望,让我们来看看未来一年,有哪些重要趋势值得关注。 迈向关键转折的一步 20…...

Threejs实现 区块链网络效应

大家好!我是 [数擎 AI],一位热爱探索新技术的前端开发者,在这里分享前端和 Web3D、AI 技术的干货与实战经验。如果你对技术有热情,欢迎关注我的文章,我们一起成长、进步! 开发领域:前端开发 | A…...

宁德时代C++后端开发面试题及参考答案

请阐述面向对象的三大特性。 面向对象编程有三大特性,分别是封装、继承和多态。 封装是指将数据和操作数据的方法绑定在一起,对数据的访问和操作进行限制。这样做的好处是可以隐藏对象的内部细节,只暴露必要的接口给外部。例如,我们可以把一个汽车类的内部引擎状态、速度等…...

【三维数域】三维数据调度-负载均衡和资源优化

在处理大规模三维数据时,负载均衡和资源优化是确保系统高效运行、提供流畅用户体验的关键。这两者不仅影响到系统的性能和稳定性,还直接决定了用户交互的质量。以下是关于如何在三维数据调度中实现有效的负载均衡和资源优化的详细探讨。 一、负载均衡 负…...

Linux服务器网络丢包场景及解决办法

一、Linux网络丢包概述 在数字化浪潮席卷的当下,网络已然成为我们生活、工作与娱乐不可或缺的基础设施,如同空气般,无孔不入地渗透到各个角落。对于 Linux 系统的用户而言,网络丢包问题却宛如挥之不去的 “噩梦”,频繁…...

【信息系统项目管理师】高分论文:论信息系统项目的采购管理(数据中台项目)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 1、规划采购管理。2、实施采购3、控制采购2022年3月,我以项目经理的身份参加了xx银行xx省分行的数据中台项目。该项目历时10个月,项目经费500万。通过该项目,我们搭建了数据中台,实现了实时的、灵活可配的数…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

JavaSec-RCE

简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性&#xff0c…...

XCTF-web-easyupload

试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...