生成式人工智能改变了我们与计算机的交互方式,但想要比聊天更进一步,构建能够自主推理、采取行动和执行 MATLAB® 代码的人工智能系统,则需要一种全新的方法。如今,要求大型语言模型解决工程问题,往往意味着反复复制代码、手动修正错误,并寄希望于 AI 了解您的专业领域。智能体 AI 改变了这一点。
本指南将向您展示如何构建不仅提出解决方案,而且能够执行解决方案的 AI 系统。通过将 LLM 使用模型上下文协议 (MCP) 连接到 MATLAB,您可以创建能够编写代码、运行仿真、分析结果并反复迭代直至完成任务的智能体。
如果您使用过 ChatGPT 或 Claude 来协助编写 MATLAB 代码,您一定很熟悉这个流程:提出问题,获得代码,将其粘贴到 MATLAB 中,遇到错误,返回聊天界面,解释错误,获取新代码,如此往复。它能正常工作,但速度缓慢且令人沮丧。
智能体 AI 闭合了这一循环。不再是由您手动操作的文本生成器,AI 智能体能够:
- 编写代码并直接执行。
- 查找错误并将其自动修正。
- 访问您的工作区和数据
- 反复执行直到任务完成
- 提供经过验证的有效结果
与此形成对比的是生成式 AI,其特点为:
- 根据请求生成代码片段
- 需要您手动复制、粘贴并运行代码。
- 依赖您来解释错误并提出后续问题。
- 无法访问您的文件或数据
- 无法验证代码是否实际有效
将聊天机器人变为伙伴的四项能力
生成式 AI 就像拥有一位撰写报告的顾问。具备智能体能力的 AI 就像有一位能够完成工作的伙伴。这类 AI 不仅告诉您如何解决问题,它还会解决问题,展示结果,并询问您是否需要更改。
| 能力 | 含义 | MATLAB 示例 |
|---|---|---|
| 推理 | 将复杂问题分解为若干步骤 | “为了优化该控制器,我将首先分析被控对象,然后设计一个 PID 控制器,最后进行调试。” |
| 规划 | 达成目标的序列行动 | “步骤 1:加载数据。步骤 2:训练模型。步骤 3:验证。步骤 4:导出。” |
| 工具使用 | 调用外部函数和 API | 调用 trainnet、sim 或自定义 MATLAB 函数 |
| 自适应 | 从反馈和错误中学习 | “出现了错误。让我检查一下尺寸,然后再试一次。” |
为何将 MATLAB 与智能体 AI 结合使用?
MATLAB 可为工程和科学领域的智能体 AI 提供独特的价值,因为它具备:
- 可靠计算:大型语言模型会产生数学幻觉,而 MATLAB 能正确计算。
- 领域专业知识:提供了超过 100 个用于信号处理、控制、深度学习等的工具箱。
- 仿真能力:连接到 Simulink® 进行系统级测试和验证。
- 专业工具:内置代码分析、可视化和部署功能。
LLM 想使用 MATLAB 就必须具备发现可用工具、以正确参数调用这些工具并接收结果的能力。这正是模型上下文协议所提供的:一个使 AI 与工具交互成为可能的通用框架。我们可将 MCP 想做 AI 的 USB-C 端口:正如 USB-C 允许任何设备连接任何外设,MCP 也让任何 AI 模型能够连接任何工具,包括 MATLAB。
MCP 服务器负责在 AI 请求与 MATLAB 执行之间进行转译。智能体决定做什么;MATLAB 负责计算。
| 方法 | 用例 | 您需要 |
|---|---|---|
| 将 MATLAB 用作工具 (MCP Core Server) | 允许外部 AI 应用(Claude Desktop、GitHub Copilot、VS Code)执行 MATLAB 代码 | MATLAB + MCP Core Server + 自选 AI 客户端 |
| 将 MATLAB 用作主机(MCP 客户端) | 在 MATLAB 中构建调用外部工具和 API 的智能体 | MATLAB + MCP 客户端插件 + 使用 MATLAB 调用 LLMs |
MATLAB MCP Core Server 让所有兼容 MCP 的 AI 应用均可使用 MATLAB。安装完成后,诸如 Claude Desktop、GitHub Copilot 或 Gemini CLI 等 AI 助手可以在您的控制下替您编写并执行 MATLAB 代码。
在幕后,MCP Core Server 提供了五项基础能力,使智能体能够自主地与 MATLAB 协作。您无需直接调用这些功能;智能体会根据您的指令自动使用它们:
| 当您让 AI... | MCP Core Server 会负责... |
|---|---|
| “编写一个函数以过滤此信号。” | 代码生成 — 创建并保存 .m 文件到您的工作区 |
| “运行此脚本并向我展示结果。” | 代码执行 — 运行 MATLAB 代码并捕获输出、图表和错误 |
| “请检查我的代码是否存在问题。” | 代码分析 — 使用 MATLAB 内置的代码检查工具评估代码样式和正确性 |
| “请修正该错误后重试。” | 迭代改进 - AI 识别错误,修改代码并重新运行 |
| (自动) | 会话管理 — 透明地启动并维护 MATLAB 连接 |
智能体工作流的实际应用
典型的互动如下所示:您请求:“为此噪声信号创建一个巴特沃斯滤波器。”AI 编写代码,在 MATLAB 中运行,检查是否存在错误或意外结果,优化方法,并提供带图的可运行代码,整个过程无需您进行任何复制或粘贴操作。
安装
从 GitHub 获取 MATLAB MCP Core Server:
# 克隆仓库 git clone https://github.com/mathworks/matlab-mcp-core-server # 遵循您的 AI 客户端的设置说明 # (Claude 桌面版、带 Copilot 的 VS Code、Gemini 命令行工具等)
配置示例(Claude 桌面版)
将以下内容添加到您的 claude_desktop_config.json 中:
{
"mcpServers": {
"matlab": {
"command": "/path/to/matlab-mcp-server",
"args": []
}
}
}
了解您托付给 AI 的内容
具备智能体功能的 AI 工具能够在您的计算机上编写和执行代码,并访问您的文件。此能力强大但需要信任。在批准重大操作之前,尤其是在产品级环境中,请审查 AI 所提出的建议。
如果您想构建一个在 MATLAB 内运行并能够调用外部工具和 API 的智能体,该怎么办?MATLAB MCP 客户端使这一切成为可能,从而将 MATLAB 转变为智能体 AI 开发的平台。
MATLAB 作为 AI 智能体主机的关键能力
- 发现工具:查询 MCP 服务器以列出可用工具及其输入架构。
- 调用工具:使用
callTool调用外部工具,就像调用本地 MATLAB 函数一样简便。 - LLM 集成将工具架构转换为
openAIFunction对象,以实现无缝的函数调用。
接下来,让我们来看一个在 MATLAB 中构建智能体工作流的示例:
% 连接到 MCP 服务器
client = mcpClient("path/to/mcp-server");
% 列出服务器可用工具
tools = listTools(client);
disp(tools);
% 将工具转换为适用于 LLM 的 OpenAI 函数格式
functions = openAIFunction(tools);
% 创建一个启用函数调用的聊天
chat = openAIChat("你是个能干的助手。", ...
Tools=functions);
% 发送用户查询 - LLM 决定是否需要使用工具
response = generate(chat, "第十个质数是多少?");
% 如果大型语言模型请求调用工具,请执行该操作
if isfield(response, 'tool_calls')
toolRequest = response.tool_calls;
result = callTool(client, toolRequest);
% 将结果反馈给大型语言模型以获得最终响应
finalResponse = generate(chat, result);
end
您可以连接到什么?
任何 MCP 服务器均可与 MATLAB MCP 客户端配合使用。这包括用于数据库、Web API、文件系统、其他 AI 服务以及您构建的自定义工具的服务器。此生态系统正在迅速发展。
工具调用是智能体 AI 的核心机制。LLM 不直接执行函数,而是输出一个结构化请求,描述应使用哪些参量调用哪个函数。您的代码随后执行该函数并将结果返回给 LLM。
LLM 推理计算内容。MATLAB 负责将其正确计算。当用户提交查询时,LLM 会解读其意图,并决定调用哪个工具以及使用哪些参数。然后,MATLAB 执行该函数并返回结果。LLM 生成自然语言形式的回答。用户无需自行编写或运行代码。
在 MATLAB 中定义工具
% 定义一个函数,供大型语言模型调用
function result = addTwoNumbers(x1, x2)
result = x1 + x2;
end
% 为 LLM 创建工具定义
addTool = openAIFunction("addTwoNumbers", ...
"将两个数字相加");
addTool = addParameter(addTool, "x1", "数字", ...
"要相加数字中的第一个", Required=true);
addTool = addParameter(addTool, "x2", "数字", ...
"要相加数字中的第二个", Required=true);
构建一个简单的智能体
function aiAgent(userQuery)
% 初始化具有工具的聊天
chat = ollamaChat("mistral-nemo", Tools=addTool);
% 获取大型语言模型响应
response = generate(chat, userQuery);
% 检查大型语言模型是否想调用工具
if isfield(response, 'tool_calls')
% 提取函数调用细节
funcName = response.tool_calls.function.name;
args = response.tool_calls.function.arguments;
fprintf("AI 请求: %s(%f, %f)\n", ...
funcName,args.x1,args.x2);
% 执行该函数
result = addTwoNumbers(args.x1, args.x2);
fprintf("结果:%f\n", result);
else
% 无需调用工具 - 直接显示响应
disp(response.content);
end
end
使用 MATLAB 附加功能,多个 LLM 提供商支持工具调用。这些提供商包括:
- OpenAI:最新的 GPT 模型(通过 API)
- Azure OpenAI:企业部署
- Ollama:本地模型,如 Mistral、GPT-OSS、DeepSeek 和 Qwen
从演示走向生产,需要采用能使智能体变得可靠、可观测且安全的模式。这些方法已在现实世界的智能体系统中经过实战检验。
模式 1:ReAct(推理 + 行动)
最常见的智能体模式是在思考与行动之间交替进行。LLM 推理下一步该做什么,采取行动,观察结果,并重复此过程。
% ReAct 循环模式
while ~taskComplete
% 思考:LLM 推理下一步行动
thought = generate(chat, [context, "接下来我应该做什么?"]);
% 行动:如有需要,执行工具。
if needsTool(thought)
result = executeTool(thought.tool_call);
context = [context; result];
end
% 观察:根据结果更新状态
taskComplete = checkCompletion(context);
end
模式 2:工具链
复杂任务需要按顺序调用多个工具。一个的输出成为下一个的输入。例如:
| 阶跃 | 行动 | 目的 |
|---|---|---|
| 1 | 生成代码 | AI 根据您的需求编写 MATLAB 代码。 |
| 2 | 分析代码 | 检查错误、样式问题及潜在的 Bug。 |
| 3 | 执行代码 | 在 MATLAB 中运行并捕获输出。 |
| 4 | 评估结果 | AI 审查输出;修正错误或确认成功。 |
模式 3:人员在环
对于功能安全关键型的应用,在智能体采取行动之前添加批准步骤:
% 人员在环模式
proposedAction = generate(chat, query);
% 显示建议的行动以供批准
fprintf("建议:%s\n", proposedAction.description);
approval = input("批准吗?(是/否):", "s");
if strcmp(approval, "y")
result = executeAction(proposedAction);
else
disp("操作已取消。");
end
实用指南
有几条指南是确保智能体可靠性的关键:
- 从简单开始:在构建复杂调用链之前,先让单个工具能够正常运行。
- 增加可观测性:记录每一次 LLM 调用和工具执行情况,因为调试时会需要这些数据。
- 优雅地处理错误:LLM 会犯错;请构建带有指数退避机制的重试逻辑。
- 设定边界:限制迭代次数、词元预算以及智能体可以访问的工具。
- 进行对抗性测试:在智能体触达用户之前,故意测试边缘情况以尝试使其崩溃。
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)