告别付费 API!使用 Ollama 和 MATLAB 玩转本地大模型

在“当MATLAB遇见ChatGPT?”一文中介绍了名为MatGPT的插件,该插件通过调用ChatGPT的API,实现了在MATLAB中与Chat GPT对话的功能。

虽然Open AI的GPT3.5和GPT4o可以免费使用,但调用API却需要收费,因此使用MatGPT这类插件的成本还是略显高昂。

随着开源大模型的发展,其综合性能已经不逊色于传统的商业模型,借助ollama这样的框架可以将各类开源模型部署在本地,可以不受网络于账号的限制随时随地的免费使用。

在“如何在本地一键配置最强国产大模型”中介绍了使用ollama在本地个人电脑部署国产Qwen2大模型的方法。借助MATLAB官方推出的“Large Language Models (LLMs) with MATLAB”库,可以实现在MATLAB中调用通过ollama部署的本地模型,这样就可以解决ChatGPT等商业模型的API需要付费的问题。

LLMs with MATLAB库介绍

Large Language Models (LLMs) with MATLAB库可以实现将 MATLAB 连接到 OpenAI Chat Completions API(支持 ChatGPT)、OpenAI Images API(支持 DALL·E)、Azure OpenAI 服务和本地 Ollama模型的代码,可以实现直接在 MATLAB 环境中利用大型语言模型的自然语言处理功能。

LLMs with MATLAB库对MATLAB及大模型服务有一定的限制要求。

对MATLAB的要求:

  • 需要 MATLAB R2024a 或更高版本。
  • 一些示例需要 Text Analytics Toolbox。

对大语言模型服务的要求:

  • 对于OpenAI的连接:需提供有效的 OpenAI API 订阅和 API 密钥。
  • 对于 Azure OpenAI 服务:需要具有OpenAI访问、部署和 API 密钥的有效 Azure 订阅。
  • 对于 Ollama:需要本地安装的Ollama。目前仅支持 localhost 上的连接,即 Ollama 和 MATLAB 必须在同一台计算机上运行。

配置方法

要将LLMs with MATLAB库与本地安装的 MATLAB 一起使用,首先要克隆该存储库。

  1. 在系统命令提示符下,运行下述命令将LLMs with MATLAB库克隆至本地工作路径。
git clone https://github.com/matlab-deep-learning/llms-with-matlab.git

  1. 打开 MATLAB 并导航到克隆存储库的目录。

  1. 将使用addpath将目录添加到 MATLAB 路径。
addpath('路径/llms-with-matlab');

如果不方便使用git clone也可以直接在github或MATLAB File Exchange下载压缩包后解压至本地使用。

本地调用Ollama

在下载并配置完成LLMs with MATLAB库后,可以调用ollamaChat类创建与本地ollama的连接。

通过下面的命令创建一个基于本地模型的聊天,这里以Qwen2为例:

chat = ollamaChat("qwen2:7b")

可以看到MATLAB实例化了一个ollamaChat对象,包含以下几种属性:

  • Model:模型

  • TopK:考虑用于输出的tokens的最大数量。默认值为Inf,允许所有tokens。较小的值减少了输出的多样性。

  • Temperature:温度值,用于控制输出的随机性。较高的数值会增加输出的随机性(在某种意义上,“创造性”),较低的数值则会减少它。设置为0完全消除了输出的随机性。

  • TopP:控制输出多样性的最高概率质量值。默认值为1,也被称为top-p抽样。

  • StopSequences:触发停止生成的字符串向量。

  • TimeOut:连接超时时间(秒)。默认值是120。

  • ResponseFormat:模型返回的响应格式。

通过chat对象的generate方法,已经可以与模型进行对话,例如:

>> chat.generate('你是谁?')ans = "我是阿里云开发的一款超大规模语言模型,我叫通义千问。作为一个AI助手,我的目标是帮助用户获得准确、有用的信息,解决他们的问题和疑惑。无论是关于学术知识、技术问题、日常建议还是其他各种主题,我都尽力提供高质量的回答。请随时向我提问,我会尽全力给予支持和协助!"

设置聊天循环

要实现连续对话就需要建立聊天循环,官方给出了一个案例:

%%配置模型
%设置每次聊天会话允许的最大字数,并定义关键字,当用户输入该关键字时,该关键字将结束聊天会话。
wordLimit = 2000;
stopWord = "end";%创建一个实例ollamaChat来执行聊天,创建一个实例messageHistory来存储会话历史记录。
chat = ollamaChat("qwen2:7b");
messages = messageHistory;%% 聊天循环
% 开始聊天并保持聊天,直到出现stopWord设置的语句出现
totalWords = 0;
messagesSizes = [];
%% 
% 主循环会无限地继续下去,直到输入设置好的stopWord或按下Ctrl+ c 
while truequery = input("User: ", "s");query = string(query);%dispWrapped("User", query)
%% 
% 如果您输入了stopWord,则显示消息并退出循环。if query == stopWorddisp("AI: Closing the chat. Have a great day!")break;endnumWordsQuery = countNumWords(query);
%% 
% 如果查询超过字数限制,则显示错误消息并停止执行。if numWordsQuery>wordLimiterror("Your query should have fewer than " + wordLimit + " words. You query had " + numWordsQuery + " words.")end
%% 
% 跟踪每条消息的大小和到目前为止使用的总字数。messagesSizes = [messagesSizes; numWordsQuery]; %#oktotalWords = totalWords + numWordsQuery;
%% 
% 如果总字数超过限制,则从会话开始时删除消息,直到不再使用为止。while totalWords > wordLimittotalWords = totalWords - messagesSizes(1);messages = removeMessage(messages, 1);messagesSizes(1) = [];end
%% 
% 将新消息添加到会话并生成新的响应。messages = addUserMessage(messages, query);[text, response] = generate(chat, messages);dispWrapped("AI", text)
%% 
% 计算回复中的字数并更新总字数。numWordsResponse = countNumWords(text);messagesSizes = [messagesSizes; numWordsResponse]; %#oktotalWords = totalWords + numWordsResponse;
%% 
% 向会话添加响应。messages = addResponseMessage(messages, response);
end
%% |Helper Functions|
% 该函数用于计算文本字符串中的单词数function numWords = countNumWords(text)numWords = doclength(tokenizedDocument(text));
end
%% 
% 该函数显示从前缀挂起缩进的换行文本function dispWrapped(prefix, text)indent = [newline, repmat(' ',1,strlength(prefix)+2)];text = strtrim(text);disp(prefix + ": " + join(textwrap(text, 70),indent))
end
%% 

运行该脚本即可在命令行窗口实现连续对话:

总结

以上介绍了通过LLMs with MATLAB库在MATLAB中调用基于Ollama的本地大模型的方法。

LLMs with MATLAB库提供的各类接口可以帮助我们在MATLAB中实现对大模型的调用或二次开发,其应用包括但不限于:

  • 基于各类模板的聊天机器人
  • 检索增强生成(RAG:Retrieval-augmented generation)
  • 文本摘要
  • 从ArXiv提取论文
  • 生成图像

同时官方提供了包括上文提到的的各类应用案例,方便学习和使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/43385.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mybatis 延迟加载

MyBatis的延迟加载(Lazy Loading)是一种优化技术,用于在需要时才加载关联对象或集合,从而提高性能和效率。以下是对MyBatis延迟加载的详细介绍: 延迟加载的基本概念 延迟加载是指在第一次访问对象的属性时才加载该对象…

阿一课代表随堂分享:红队反向代理之使用frp搭建反向代理

frp反向代理 frp简介 frp 是一个开源、简洁易用、高性能的内网穿透和反向代理软件,支持 tcp, udp, http, https等协议。 frp 是一个可用于内网穿透的高性能的反向代理应用,分为服务端frps和客户端frpc,支持 tcp, udp, http, https 协议。详…

修改服务器挂载目录

由于我们的项目通常需要挂载一个大容量的数据盘来存储文件数据,所以我们每台服务器都需要一个默认的挂载目录来存放这些数据,但是由于我们的误操作,导致挂载目录名字建错了,这时候后端就读不到挂载目录了,那我们我们的…

竟能让函数只执行一次?分享 1 段优质 JS 代码片段!

本内容首发于工粽号:程序员大澈,每日分享一段优质代码片段,欢迎关注和投稿! 大家好,我是大澈! 本文约 700 字,整篇阅读约需 1 分钟。 今天分享一段优质 JS 代码片段,确保某函数在某…

Java面经知识点汇总版

Java面经知识点汇总版 算法 14. 最长公共前缀(写出来即可) Java 计算机基础 数据库 基础 SQL SELECT first_name, last_name, salary FROM employees WHERE department Sales AND salary > (SELECT AVG(salary)FROM employeesWHERE department Sal…

德语中含“Augen”的惯用语表达-柯桥小语种学习德语考级

在我们的德语学习过程中,除了词汇的记忆,另一项重要的记忆任务就是惯用语的背诵啦。要知道,德语中有大量的Redewendung,他们以其言简意赅的表达,在日常用语中备受青睐。上一期我们已经学习了部分含有“Hand”的惯用语&…

小抄 20240707 晚熟

01 在抖音快手微博小红书,搜“晚熟的人”,你会看到上百种晚熟的表现,而且写出这些表现的博主,还都会说摘自莫言《晚熟的人》。 “不是我说的,是莫言说的,我说的可能有假,莫言说的还能有假吗&am…

神经网络习题

不具有权重共享的网络是: **多层感知机(Multilayer Perceptron,MLP): ** 特点:每一层的每一个神经元都与上一层的每一个神经元全连接,权重独立于每个连接,不存在权重共享。 权重共享…

Unicode 与 UTF-8 的区别与联系

文章目录 UnicodeUTF-8联系区别Unicode 转义序列字符编码与字符的对应规则例子 Unicode 定义:Unicode 是一个字符编码标准,旨在为世界上所有的字符分配一个唯一的编码。 编码范围:Unicode 的编码范围从 0x0000 到 0x10FFFF,能够表…

算法·高精度

高精度算法 分为四则运算加减乘除 适用条件 都高精度了,肯定时long long都会爆的情况——一般与阶乘有关 注意事项 用数组模拟位运算,最后在一起考虑进位 注意res[i1]res[i]/10; 是""不是 两数相加,相乘数组的新长度会变&…

去中心化时代的到来:区块链如何重新定义权力和控制

随着区块链技术的迅猛发展,我们正逐步进入一个去中心化的新时代。区块链不仅仅是一种技术,更是一种理念,它通过去除中心化的权威和控制节点,重新定义了数据管理、交易验证和权力分配的方式。本文将深入探讨区块链如何在去中心化时…

成都欣丰洪泰文化传媒有限公司电商服务领航者

在当今数字化浪潮中,电商行业正以前所未有的速度蓬勃发展。作为这片蓝海中的佼佼者,成都欣丰洪泰文化传媒有限公司凭借其专业的电商服务能力和对市场的敏锐洞察力,成为众多品牌信赖的合作伙伴。今天,就让我们一起走进成都欣丰洪泰…

CC5利用链分析

分析版本 Commons Collections 3.2.1 JDK 8u65 环境配置参考JAVA安全初探(三):CC1链全分析 分析过程 CC6是在CC1 LazyMap利用链(引用)的基础上。 CC5和CC6相似都是CC1 LazyMap利用链(引用)的基础上,改变了到LazyMap的入口类。 CC6是用TiedMapEntry的hashCode方…

Pinia 实战指南:轻松驾驭前端状态管理

前言 本文讲解一下在前端开发中经常使用的一个状态管理工具Pinia Pinia 是 Vue 的专属状态管理库,很值得我们深入去学习一下 Pinia是什么? Pinia是专门为Vue.js应用程序设计的一个状态管理库 主要特点: 简单性: Pinia的设计目标是提高开发效率和用户体验,因此…

gen_circle_contour_xld 创建XLD轮廓对应于圆或圆弧。

gen_circle_contour_xld (Operator)创建XLD轮廓对应于圆或圆弧。 Signature 签名 gen_circle_contour_xld( : ContCircle : Row, Column, Radius, StartPhi, EndPhi, PointOrder, Resolution : ) Description 描述 Gen_circle_contour_xld创建一个或多个圆弧或闭合的圆。圆…

MySQL 的 Buffer Pool 的结构及有什么作用

MySQL 的 Buffer Pool 是 InnoDB 存储引擎中的一个关键组件,负责管理数据库缓存,以提高数据读取和写入的性能。它通过将磁盘上的数据页缓存到内存中,使得数据库可以更快地访问频繁使用的数据,从而降低磁盘 I/O 操作。下面是 MySQL…

全志A527 T527 android13支持usb摄像头

1.前言 我们发现usb摄像头在A527 android13上面并不能正常使用,需要支持相关的摄像头。 2.系统节点查看 我们查看系统是否有相关的节点生成,发现/dev/video相关的节点已经生成了。并没有问题,拔插正常。 3.这里我们需要查看系统层是否支持相关的相机, 我们使用命令进行…

pyqt5图片分辨率导致的界面过大的问题

项目场景:pyqt5的图片分辨率和屏幕分辨率问题 提示:这里简述项目相关背景:图片分辨率:500*500;显示屏分辨率:600;导致界面显示不全; 在其他高分辨率显示屏中没有这个问题。 问题描述…

鹦鹉智能财税系统:代账公司的智能化升级之路

随着新公司法的颁布与实施,财税政策的不断更新,以及大数据、人工智能等新技术的广泛应用,企业老板对于财税合规,以及企业资金安全的需求日益增加。乐财业-鹦鹉智能财税系统从企业老板视角出发,在助力企业合规经营的前提…

量化交易机器人APP软件开发搭建

量化交易机器人APP软件的开发搭建是一个涉及多个环节和技术的过程。以下是一个简化的开发搭建流程,并结合搜索结果给出相关说明: 需求分析: 明确量化交易机器人的功能需求,如数据收集、策略分析、自动交易等。 确定目标市场、用…