ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

MATLAB接入本地DeepSeek:从Ollama部署到AI编程实战

MATLAB接入本地DeepSeek:从Ollama部署到AI编程实战 先说个真实感受这段时间AI编程工具扎堆往外冒Claude Code、Codex、Cursor一个个都在抢大家手里的键盘编程圈几乎天天有人晒“AI帮我写完了整个项目”。但我一直觉得有个空白特别尴尬MATLAB用户几乎是被这些主流AI编程工具遗忘的那拨人。我身边做算法、搞仿真、处理信号和图像的朋友天天跟矩阵和模型打交道却没法像写Python的人那样顺畅地让AI帮忙写代码。有人试过把MATLAB代码贴给网页版ChatGPT效果确实有一点但代码一长、涉及项目数据不能外传的时候根本不敢往云端传。也试过给MATLAB装AI插件可要么对MATLAB语法支持太弱要么就是单纯文本补全根本理解不了Simulink和工具箱那一套东西。直到我把本地部署的DeepSeek接进MATLAB这个问题才算真正打通。做完之后我最大的感受是本地部署的大模型配合MATLAB这种“重工具链”环境才是眼下最实在的私有化AI编程方案。数据不会出本机断网能用模型随便换还能针对MATLAB的语法习惯做系统提示词定制。这篇文章我就把完整的落地过程写出来包括硬件怎么估算、Ollama怎么部署、MATLAB怎么调用、实际跑MATLAB任务时有哪些坑。内容偏实操想直接抄作业的朋友可以直接跳到第3节但建议还是花几分钟把第1节看完你先搞清楚这套东西解决了什么问题才好在后续应用时心里有数。1. 为什么要在MATLAB里接本地大模型三个被忽略的痛点1.1 在线AI助手帮不了MATLAB用户的真正原因先说结论不是AI不够聪明而是MATLAB这个生态天然和主流AI编程工具“不对付”。第一个问题是对MATLAB语法支持弱。像GitHub Copilot、Cursor这类工具训练数据主要来自GitHub上的Python、JavaScript、TypeScript、Java仓库。MATLAB代码在开源平台上的占比本来就不高还大量集中在高校和研究机构内部模型在MATLAB上的“语感”明显偏差。你让它自动补全一个parfor循环或者simulink操作它经常补出来一个语法正确但语义奇怪的玩意儿。第二个问题是数据隐私。MATLAB用得最重的场景是科研数据处理、算法设计、半物理仿真。这些项目的代码和中间数据往往是不能出内网的。我之前给一个做精密控制的团队做技术交流对方明确说了代码不能出实验室那台机器。这种场景下网页版AI助手无论多强你都不敢用它。第三个问题比较隐蔽在线AI助手对MATLAB的工具箱体系理解很浅。MATLAB真正值钱的是那几十个工具箱什么信号处理、优化、深度学习、控制系统、统计机器学习。你要是让在线AI写点调用fmincon或者lsqnonlin的代码它给的代码经常是老版本API跑起来一堆deprecation警告。本地模型虽然也有这个问题但你可以通过定制知识库和system prompt去压一压错误率。所以我并不认为“在线AI不如本地AI”而是在MATLAB这个赛道上本地部署反而更适合。1.2 本地部署解决的不只是“隐私”问题很多人一说本地部署就只想到隐私我觉得这是低估了它。本地部署DeepSeek之后几个实际好处立刻就出来了第一零API费用。只要机器开着你随便调用不用按token付费。写MATLAB代码经常要反复调试、追问、重写这种高频短对话场景在线API成本积少成多其实挺可观。本地跑一次用多少电不清楚但至少不会像看账单一样肉疼。第二离线可用。这个对工业现场、实验机房、内网开发环境特别重要。有些机器连外网都上不了但不影响你本地跑模型。只要提前把模型文件拉取好断网环境下照样能问“这个报错是什么意思”。第三可控的上下文和私有知识。你可以把团队内部的MATLAB编码规范、常用的自研函数清单写进system prompt让模型始终按照你的风格输出。在线模型虽然也能在对话里塞上下文但每次都有长度限制而且每次都要重新传一遍麻烦。第四也是我越来越看重的点模型版权和输出内容完全由自己管。你问过什么代码、模型生成过什么都不会流向第三方服务器。做预研、做课题这种安心感是很实在的。1.3 这套方案适合谁不适合谁先说适合的日常用MATLAB做数值计算、算法验证、数据可视化的工程师和研究人员代码环境受控、数据不能外传的团队想要在自己的IDE/编辑器和MATLAB之间有一个统一AI入口的人对AI生成代码的准确性要求不是“绝对生产级”而是“能给思路、能写框架、能查bug”的人。不适合的机器内存小于8GB尤其是只有老笔记本的人跑7B模型会非常吃力追求一次性生成上千行完美工程代码的人本地小模型目前还做不到不如用在线大模型只想要代码补全而不是“对话式问答”的人那应该去装IDE插件而不是搭这套东西。说实话本地部署不是万能的它是在“隐私、成本、可用性”三个约束和“模型能力”之间做平衡。认清这一点你后面用起来才不会失望。2. 环境准备与模型选型先算清硬件账再做部署2.1 你的电脑能跑多大的DeepSeek一张表算清内存和显存先把丑话说在前面本地跑大模型最大的瓶颈不是CPU不是硬盘而是内存和显存。AI模型在推理时要先把权重加载到内存里然后每生成一个token都要把所有参数过一遍。权重文件越大需要的算力就越大速度也就越慢。以DeepSeek R1系列为例我整理了常用规格的参考占用和体验感受。模型发布节奏很快但选型逻辑基本一致。模型规格量化精度权重文件大小最低可用配置推荐配置实际体验deepseek-r1:1.5bQ4约1.1GB4GB内存8GB内存能跑但不建议用于正经编程deepseek-r1:7bQ4约4.7GB8GB内存16GB内存/显存日常提问和简单代码够用推荐入门deepseek-r1:14bQ4约9GB16GB内存32GB内存/显存代码质量和逻辑性明显提升deepseek-r1:32bQ4约20GB32GB内存64GB内存/显存接近在线小模型效果但需强劲硬件这里的“最低可用配置”是我比较保守的估计。8GB内存跑7B模型虽然能跑但系统本身还要占几个GB内存一吃紧系统就会用虚拟内存推理速度会慢到让人抓狂。所以我建议直接用“内存/显存至少要大于模型文件大小的1.5倍”来估算最好能到2倍。另外说明一句Ollama下载模型时会自动采用量化版本通常是Q4_K_M这就是为什么7B模型的权重文件只有4.7GB左右而不是原来15GB的FP16版本。量化会损失一点精度但对日常问答和代码生成影响不大换来的是体积大幅缩小和速度提升这个交易很划算。2.2 部署路线怎么选为什么我推荐Ollama而不是LM Studio本地部署大模型的工具很多我用了一圈下来最推荐Ollama。原因很简单它把模型下载、量化、运行、API服务这四件事全包了而且还提供了OpenAI兼容接口方便后面MATLAB调用。LM Studio我也用过它的图形界面做得更友好适合“只想聊聊天”的用户。但如果是想编程方式调用、要便捷的API接口、要能在服务端长跑Ollama明显更合适。llama.cpp更底层适合有特殊需求、想手动编译优化的人普通用户没必要折腾。Ollama的部署步骤不复杂第一步到Ollama官网下载对应操作系统的安装包。Windows版直接双击安装macOS和Linux各装各的包官方文档写得很清楚。第二步打开终端Windows是PowerShell或CMDmacOS是Terminal拉取模型ollama pull deepseek-r1:7b这一步会下载模型文件下载时间取决于网速7B模型大概4.7GB耐心等一会儿就行。第三步验证模型是否能正常对话ollama run deepseek-r1:7b 用MATLAB写一个卡尔曼滤波函数如果返回了能跑的代码说明模型已经就绪。退出交互界面可以直接输入/bye或者按CtrlD。第四步让Ollama在后台常驻服务ollama serve默认情况下Ollama安装完会自动启动服务监听11434端口。如果没起来手动跑一下ollama serve就行。注意Windows下安装完Ollama后任务栏右侧会有个羊驼图标右键可以查看运行状态。如果图标是灰色的说明服务没跑起来先打开Ollama应用再试。2.3 别忘了给模型“加长记忆”调整上下文长度这一步特别容易被忽略但实际使用中非常关键。Ollama默认的上下文窗口很短有的版本只有2048 tokens好一点的4096。啥概念呢一段普通的MATLAB函数代码可能就有800到1500 tokens你要是让模型先读一段代码再改输入稍微一长它就把前面内容“忘”了。解决办法是调整num_ctx参数。我习惯改成16384既能覆盖大段代码又不至于显存爆掉。有两种改法改法一在交互界面临时调整ollama run deepseek-r1:7b进入交互界面后输入/set parameter num_ctx 16384 /save deepseek-r1:7b这样会把参数保存到当前模型上下次启动依然有效。改法二用Modelfile创建自定义模型先新建一个文件名字就叫Modelfile内容FROM deepseek-r1:7b PARAMETER num_ctx 16384然后执行ollama create my-deepseek -f Modelfile这样会生成一个名为my-deepseek的新模型。之后MATLAB调用时模型名写成my-deepseek就行。我建议直接用改法二因为改法一只影响当前模型实例而且有时候会忘记保存。用Modelfile的方式整个团队或者换电脑之后都能复现同样的配置。2.4 MATLAB版本和正版授权的提醒很多朋友问我的MATLAB版本老能不能接这里明确一下只要你的MATLAB支持HTTP请求功能理论都能接。MATLAB R2016b之后就内置了webwrite和matlab.net.httpR2021a之后这些接口更稳定。我自己的主力环境是R2023b测试下来没问题。但有两个建议第一能用新版本尽量用新版本。R2023b之后MATLAB对JSON解析、HTTP请求、Python调用这些能力改善了很多调试起来省心。如果你是学生或者老师用学校正版授权或者官方个人版都比折腾老版本舒服得多。第二关于正版授权多说一句。网上流传的什么“密钥”“破解补丁”千万别碰。一方面不合法另一方面老版本缺少官方支持包和工具箱更新你后面做AI集成、深度学习部署、Simulink联调时很容易卡住。官方官网有试用版也有针对个人和学术的授权方案正常成本并没有想象中高。别因为省这点钱把后面整个工程环境搞得不稳定。3. MATLAB调用DeepSeek的完整实现从一次请求到可复用工具箱3.1 最稳的接入方式用matlab.net.http直接发POST聊完了部署现在进入正题怎么让MATLAB调用本地DeepSeek。有人可能觉得要装什么插件、要配什么环境变量其实完全不需要。Ollama启动了之后就是一个本地HTTP服务MATLAB只需要向http://localhost:11434/v1/chat/completions发送一个POST请求把问题和参数用JSON格式传过去就能拿到返回结果。这个接口是OpenAI兼容的也就是说你想换别的也支持这种格式的模型服务代码基本不用大改。我写了一个通用的调用函数大家可以直接复制到自己的项目里function answer askDeepSeek(prompt, opts) % 调用本地Ollama中的DeepSeek模型返回模型生成的文本 % 输入: % prompt - 用户问题字符串 % opts.model - 模型名称默认 deepseek-r1:7b % opts.system - 系统提示词默认是MATLAB专家角色 % opts.maxTokens - 最大输出token数默认4096 arguments prompt string opts.model string deepseek-r1:7b opts.system string 你是一名MATLAB编程专家回答时优先给出可直接运行的代码。 opts.maxTokens double 4096 end import matlab.net.http.* import matlab.net.http.field.* url http://localhost:11434/v1/chat/completions; messages(1) struct(role, system, content, opts.system); messages(2) struct(role, user, content, prompt); body jsonencode(struct(model, opts.model, ... messages, messages, ... max_tokens, opts.maxTokens, ... stream, false)); request RequestMessage(POST, MediaType(application/json), MessageBody(body)); response request.send(url, HTTPOptions(ConnectTimeout, 10, Timeout, 180)); if response.StatusCode ~ 200 error(DeepSeek请求失败%d %s, response.StatusCode, string(response.StatusLine.ReasonPhrase)); end data jsondecode(response.Body.Data); answer string(data.choices(1).message.content); end这个函数定义好了之后在MATLAB命令行直接调用result askDeepSeek(写一个MATLAB函数输入一个矩阵输出它的逆矩阵要求用LU分解实现。)几秒钟之后就能看到模型生成的答案。这里我特别说明一下为什么不用MATLAB自带的官方OpenAI支持包。R2024a之后的MATLAB确实有OpenAI API支持包但默认是连OpenAI官方云服务的。本地Ollama虽然接口格式兼容但需要额外配置Endpoint地址很多老版本的MATLAB还不支持容易踩坑。直接用matlab.net.http自己写请求所有版本都能跑后面也方便扩展stream流式输出、自定义Header这些能力。3.2 怎么把模型返回的代码从“文字”变成“可运行文件”实际用的时候你会遇到一个问题模型返回的内容是一整段Markdown里面经常带着代码块标记比如matlab x rand(10,1); y movmean(x, 3); plot(x); hold on; plot(y, r-); 这段文字如果直接复制进MATLAB编辑器代码块标记matlab和被注释的说明文字都会混进来根本跑不了。我写了一个小函数把代码块提取出来function code extractMatlabCode(text) % 从模型返回的文本中提取第一个matlab代码块 text string(text); if contains(text, matlab) code extractBetween(text, matlab, ); code strip(code); else code strip(text); end % 清理掉模型中偶尔出现的文本说明前缀后缀 code regexprep(code, ^[\s\S]*?\n, , once); end注意一下上面的函数是简化版。实际使用中模型偶尔会输出matlab后面跟一个换行或者代码里有本身需要你根据自己的情况微调。核心思路就是优先提取代码块没有代码块就直接当代码返回。有了这个函数全流程就可以串起来了prompt 写一个函数myfit用最小二乘拟合二维散点数据的直线。; text askDeepSeek(prompt); code extractMatlabCode(text); disp(code); % 如果确认代码没问题直接写文件并运行 fid fopen(temp_ai_generated.m, w); fprintf(fid, %s\n, code); fclose(fid); % 这里建议先去编辑器里人工检查一下再运行 % run(temp_ai_generated.m);这一步做完你就拥有了一条“AI生成代码 → 提取代码 → 保存为.m文件”的完整链路。3.3 多轮对话让模型记住你之前的修改意见如果你只是单次问答第3.1节的函数已经够用了。但实际写代码时你通常会追问“把边界条件改一下”“用parfor加速”“再给这个函数加上注释”。这种连续追问需要让模型记住上下文。实现方式很简单把对话历史累积起来每次请求把之前所有消息都发给模型。我一般这样处理% 定义一个全局的对话历史cell数组 history {}; % 用户提问 history{end1} struct(role, user, content, 请编写一个移动平均滤波函数); % 调用模型生成回答 responseText askDeepSeekWithHistory(history); % 把模型回答加入历史 history{end1} struct(role, assistant, content, responseText); % 继续追问模型就会记得之前的代码和修改意见 history{end1} struct(role, user, content, 把窗口大小改成可配置参数); responseText askDeepSeekWithHistory(history);对应的调用函数可以写成function answer askDeepSeekWithHistory(history, modelName) arguments history cell modelName string deepseek-r1:7b end import matlab.net.http.* import matlab.net.http.field.* url http://localhost:11434/v1/chat/completions; body jsonencode(struct(model, modelName, ... messages, history, ... stream, false)); request RequestMessage(POST, MediaType(application/json), MessageBody(body)); response request.send(url, HTTPOptions(ConnectTimeout, 10, Timeout, 180)); if response.StatusCode ~ 200 error(请求失败%d %s, response.StatusCode, string(response.StatusLine.ReasonPhrase)); end data jsondecode(response.Body.Data); answer string(data.choices(1).message.content); end这段代码的核心就是把messages数组一直累积下去。模型不是“记得”你之前聊过什么而是你把之前聊的都作为输入又发了一遍。所以上下文越长占用的输入token越多响应时间也会越长。这就回到第2.3节为什么要调大num_ctx了——你历史消息一长默认的2048窗口根本不够用。4. 进阶实战让DeepSeek成为你的MATLAB编码搭档4.1 场景一自动生成带边界检查的数值计算函数现在整套通路已经通了接下来是真正的实战环节。我日常用得最多的场景是让DeepSeek帮我写函数框架尤其是那些涉及输入校验、边界检查的数值计算函数。这种代码写起来琐碎但又是工程里最容易出bug的地方。比如我需要一个滑动平均滤波函数可以这样提问请用MATLAB写一个滑动平均滤波函数 mysmooth。 要求 1. 输入参数x是一维数值数组窗口长度w必须是正整数且为奇数 2. 如果w是偶数报错提示窗口长度必须为奇数 3. 边界处理用same策略保证输出长度和输入一致 4. 用arguments块做参数类型校验 5. 给出一个简单的测试示例。模型返回的代码大致是function y mysmooth(x, w) arguments x {mustBeNumeric, mustBeVector} w {mustBePositive, mustBeInteger, mustBeOdd(w)} end y movmean(x, w, Endpoints, shrink); end function mustBeOdd(w) if mod(w, 2) 0 error(窗口长度必须为奇数); end end虽然mustBeOdd这个自定义校验函数的命名不规范但整体逻辑是对的而且比很多新手手写的代码健壮。我拿到后改成mustBeOdd与调用处不一致的地方再补个assert就能直接用。这就是AI编程的正确打开方式让它把框架和校验写好你负责审查和修正。4.2 场景二代码审查和优化建议第二个高频场景是代码审查。我自己写了多年的MATLAB但有些老代码自己回头看也头疼。现在直接扔给本地模型让它站在“批判者”角度提意见。我常用的提示词模板下面是一段MATLAB代码请帮我做代码审查。 要求 1. 指出可能导致性能低下的写法 2. 指出可能导致数值不稳定的写法 3. 指出MATLAB新版本中已弃用的API 4. 按照“问题-严重程度-修改建议”的格式输出 5. 最后给出一段改进后的完整版本。 代码 [粘贴你的代码]这个场景下模型虽然不能保证所有意见都对但80%的情况能帮你发现一些肉眼容易漏掉的问题。比如矩阵预分配、循环内动态增长数组、eval滥用、硬编码路径、缺少clear或close等习惯性问题。有一次我让它审查一段用for循环逐行处理几十万行数据的代码它直接建议改成向量化操作并且给出了用arrayfun和逻辑索引的两种替代方案。这种效率提升非常明显。4.3 场景三批量处理整个项目的注释和README还有一种场景我觉得特别值让本地模型帮你批量给项目里的.m文件生成注释和说明文档。做法是写个MATLAB脚本遍历某个文件夹下所有.m文件逐个调用DeepSeek让模型为每个文件生成文件头注释段甚至生成一个README片段。这样对于维护老项目非常有用。files dir(fullfile(src, *.m)); for i 1:length(files) filename fullfile(files(i).folder, files(i).name); content fileread(filename); prompt sprintf([请为以下MATLAB文件编写文件头注释包括\n ... 1. 文件功能描述2. 输入参数说明3. 输出参数说明\n ... 4. 依赖的工具箱5. 作者和日期占位。\n\n代码内容如下\n%s], content); comment askDeepSeek(prompt); % 这里建议做一个简单的安全检查确认返回内容不是空 if strlength(comment) 10 warning(%s 生成的注释异常跳过, filename); continue; end % 保存注释为一个.md文件原文件保持不变 [~, name, ~] fileparts(filename); fid fopen(fullfile(docs, name .md), w); fprintf(fid, %s\n, comment); fclose(fid); end这个脚本我实际跑过十几个小文件下来效果不错。但有两个注意点一次不要喂太长的代码。单个文件超过500行时7B模型的注意力会下降生成的注释质量打折扣。建议控制每次输入的代码量。脚本遍历时打点日志。比如每处理一个文件就打印一下当前文件名避免模型卡住或者某个文件格式异常导致循环中断。4.4 再扩展一步把DeepSeek接入你自己的Agent工具链如果你还有精力这套本地模型接口完全可以被更大范围的Agent工具链复用。比如现在很流行的Dify你可以把Ollama或这个HTTP接口配置成自定义模型提供方然后搭建知识库问答、自动报告生成这类工作流。换句话说MATLAB只是本地DeepSeek服务的第一个客户端后面你还可以接Python、Java、网页前端都走同一个/v1/chat/completions接口。我自己后面就打算把MATLAB生成的仿真结果直接喂给模型让它自动生成一份分析和总结报告再把报告写进项目文档。这一步打通之后很多重复劳动都可以省了。5. 常见问题与排查技巧实录实测踩坑合集5.1 连接不上Ollama没启动或端口冲突最典型的报错是MATLAB端提示Connection refused或者The connection was refused。排查顺序我建议是打开浏览器访问http://localhost:11434如果能打开说明服务正常问题出在MATLAB代码如果打不开说明Ollama服务没起。检查Ollama应用是否启动。Windows下是托盘图标macOS下是菜单栏图标确保服务进程在跑。检查端口是否被占用。11434端口被占用时Ollama可能起不来。可以用系统自带工具查端口占用把冲突进程关掉或换端口。如果是远程机器部署MATLAB和模型不在一台机器上那URL里的localhost要改成部署机器的IP同时要确保防火墙放行了11434端口。5.2 回答得特别慢GPU没跑满或者压根没用上本地模型慢了先别急着骂模型不行八成是推理根本没走GPU。排查办法在Ollama运行一条命令ollama ps看模型的PROCESSOR列。如果显示100% CPU说明模型全跑在CPU上速度自然上不去。这种情况常见于NVIDIA显卡驱动没装好Ollama没有识别到GPU显存不够模型部分层被放到CPU上Ollama通常会在日志里提示显卡太老不满足Ollama对GPU算力的最低要求。如果你的显卡支持且驱动正常模型应该显示100% GPU。另外提醒一句生成答案的速度和上下文长度也有关。上下文越长每次生成token时都要把之前的内容重新读一遍速度会明显下降。所以如果追求速度可以适当缩减num_ctx比如从16384降到8192。5.3 MATLAB返回400/415错误请求体格式问题用webwrite方法调用时新手特别容易遇到HTTP 415Unsupported Media Type或者400Bad Request。原因基本是请求头里的Content-Type没有设置对或者JSON格式错了。我自己的经验是在MATLAB里直接拼JSON字符串时最容易出问题的是多级嵌套的struct数组jsonencode偶尔会把单元素struct数组序列化成数组格式导致服务端解析失败。解决方案有两个使用第3.1节的matlab.net.http.RequestMessage方式它对Content-Type处理得更规范如果坚持用webwrite记住weboptions(MediaType, application/json)一定要设置且请求体最好用jsonencode预编码。5.4 模型开始胡言乱语上下文不够或模型太小有些朋友用了几天后反馈模型一开始挺正常的怎么越往后回答越离谱这个现象多数不是模型“变笨了”而是上下文窗口被撑爆之后模型只能截取一部分内容作为输入丢失了最早的对话信息于是逻辑就开始乱了。解决方法是按第2.3节把num_ctx调大并且控制历史消息条数太长的历史可以手动裁剪。如果是复杂任务比如让它同时分析三个代码文件并给出修改建议7B模型确实会吃力。这时候要么换14B或32B的模型要么把任务拆小一次只让它专注一个文件、一个问题。5.5 代码生成后不敢运行AI代码的安全隐患最后聊一个特别重要的安全意识问题。本地模型生成的代码虽然在你自己的机器上跑但它毕竟不是“经过验证的代码”。我踩过一次坑让模型生成一个批量重命名文件的脚本它生成的代码里包含了对系统目录的遍历如果直接运行可能误伤文件。所以我的经验是从DeepSeek生成的任何代码运行前都要过三道检查看有没有文件删除、目录遍历、系统命令调用等高危操作看有没有硬编码路径尤其是系统盘路径先在隔离目录或测试数据集上跑一遍确认输出符合预期再对正式数据执行。这不算是对模型的“不信任”而是工程习惯。就算换成在线大模型我也一样建议这么做。写在最后整套流程落地之后我最大的体会是本地部署DeepSeek连接MATLAB这件事难度并不高真正的门槛在于“怎么把它嵌入你的日常工作流”。部署只占三分之一的功夫剩下三分之二是工程化和使用习惯。我现在打开MATLAB的第一件事不是写代码而是先问一句本地模型“我这个数据预处理逻辑有没有更简洁的写法”然后再动手。很多重复性的框架代码直接让它生成雏形我来改关键逻辑调试效率高了不少。最爽的场景其实是调试时把报错信息原样贴给DeepSeek让它分析堆栈几轮下来就像身边坐了个有经验的老工程师。最后再分享一个小技巧如果你后面想升级模型不需要重新配置MATLAB代码只需要把Ollama里的模型换成更大的版本然后在调用函数里改一行模型名就行。这套架构的好处就在这里模型是插拔的前面的线路不用动。祝大家都能把本地AI用起来少加班多睡觉。
返回列表