告别付费 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 协议。详…

修改服务器挂载目录

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

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”的惯用语&…

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

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

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

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

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创建一个或多个圆弧或闭合的圆。圆…

全志A527 T527 android13支持usb摄像头

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

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

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

电机控制杂谈——位置环到底该用什么调节器?

1.为什么位置环用P调节器尽可以实现无静差调节? 当时在学《运动控制》这门课程时,用的是陈伯时老师的教材。在介绍调节器的时候,教材中说到,P(比例)调节器会存在稳态误差,所以在转速环和电流环…

node使用express在服务器上创建接口,携带参数访问时返回参数

一、下载nodejs​​​​​​Node.js — 在任何地方运行 JavaScriptNode.js is a JavaScript runtime built on Chromes V8 JavaScript engine.https://nodejs.org/zh-cn 二、 安装Express 找一个文件夹,创建 mkdir myapp cd myapp三、初始化一个新的Node.js项目&…

OS Copilot:新手测评体验

文章目录 前言一、OS Copilot(阿里云操作系统智能助手)简介二、测评体验总结OS Copilot 产品体验评测OS Copilot 产品功能反馈 前言 本文简单分享一下自己使用OS Copilot测评体验。 一、OS Copilot(阿里云操作系统智能助手)简介 …

linux驱动应用开发就业前景如何 ?

Linux驱动应用开发的就业前景可以说是非常广阔和有吸引力的,特别是随着物联网(IoT)、嵌入式系统、云计算和大数据等技术的迅速发展。我收集归类了一份嵌入式学习包,对于新手而言简直不要太棒,里面包括了新手各个时期的…

zerotier-one自建根服务器方法五

一、简介 前面几篇文章已经写完了自己建立服务器的方法,今天写一下我在使用过程中遇到的问题和解决方法。 二、准备工作 准备一个有公网IP的云主机。 要稳定性、安全性、不差钱的可以使用阿里、腾讯等大厂的云服务器。 本人穷屌丝一枚,所以我用的是免…

【中项第三版】系统集成项目管理工程师 | 第 4 章 信息系统架构③ | 4.6

前言 第4章对应的内容选择题和案例分析都会进行考查,这一章节属于技术相关的内容,学习要以教材为准。本章分值预计在4-5分。 目录 4.6 网络架构 4.6.1 基本原则 4.6.2 局域网架构 4.6.3 广域网架构 4.6.4 移动通信网架构 4.6.5 软件定义网络 4.6…

【C++ 】-vector:新时代动态数组的革新与未来

目录 1. vector的介绍及使用 1.1 vector的介绍 1.1.1 vector是什么 1.1.2 vector的存储机制 1.2 vector的使用 1.2.1 定义和构造函数 1.2.2 迭代器 1.2.3 容量相关操作 1.2.4 元素访问和修改 1.3 迭代器失效问题 2. vector深度剖析及模拟实现 2.1 std::vector的模拟…

js实现移动蒙版层

移动蒙版层 可在整个页面拖动方块&#xff0c;但方块不能超出页面 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">…