开一家餐厅,最理想的起步不是从毛坯房开始砌墙,而是租下一间“拎包入住”的后厨:灶台、冷藏柜、传菜梯、洗碗机全都装好了,你只需要招主厨、写菜单,就能开门接客。今天要聊的 Mastra,正是 AI 应用世界的这间后厨——一个 TypeScript 原生的 AI Agent 开发框架。 跟我们熟悉的“请人写代码、自己拼模块”的笨办法不同,Mastra 把接单、备菜、出餐这些环节都整理成了模块:主厨(Agent)、记事本(Memory)、传菜动线(Workflow)、厨具柜(Tools)、菜谱库(RAG)。你只需用 TypeScript 像搭积木一样把它们拼在一起,就能得到一个会说话、会查资料、会调用系统工具、还能记住用户口味的 AI 应用。 这篇文章会用一间后厨的视角,把 Mastra 的架构、核心 API、工作流、记忆、工具调用与 RAG、与 LangGraph 的对比以及部署上线,逐一讲清楚。哪怕你之前没写过一行 AI 代码,读完后也能自信地动手搭出第一个 Agent。

岗位关联

对 AI 从业者来说,Mastra 给你一条用 TypeScript 生态快速交付 Agent 应用的捷径:内置工作流、记忆、工具与 RAG,让前端和全栈同学也能在一天内从零做出可上线的 AI 产品。

目录
  1. 可视化演示
  2. 框架概览——即开即用的AI后厨
  3. 架构设计——后厨的三层动线
  4. 核心API——主厨的任务清单
  5. 工作流编排——传菜动线
  6. 记忆管理——主厨的记事本
  7. 工具调用与RAG——厨具与菜谱库
  8. 对比LangGraph——两套厨房的选择
  9. 部署上线——开业大吉
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示Mastra TypeScript框架的Agent架构、执行时间线与技术栈分层,包含工具组合与工作流。

本节配有交互动效(进入视口后自动加载,约 3KB)。

Mastra Agent架构 Agent核心连接6大工具:搜索/计算/代码/DB/API/记忆 Agent = LLM + Tools + Workflow Mastra以Agent为中心,工具组合驱动工作流执行

框架概览——即开即用的AI后厨

假设你要开一家餐厅,最理想的状态是租下一间“拎包入住”的后厨:灶台、冰箱、传菜梯、洗碗机全部就位,你只需要招一个主厨,把菜谱写清楚,就能开门营业。Mastra 就是 AI 应用世界的这间后厨——它把 Agent 开发中常用的底座能力预装好了,让熟悉 TypeScript 的开发者能快速把想法变成可运行的 AI 应用。

在 Mastra 里,你的 AI 应用由一个或多个 Agent 组成。Agent 就像餐厅里的主厨,负责理解客人需求、指挥备菜、最终出餐。主厨需要工具,比如下单系统、菜品库存查询——这对应 Mastra 的 Tools;主厨需要记住熟客口味——对应 Memory;主厨还要按固定流程走菜——对应 Workflow;遇到不会的菜则翻菜谱——对应 RAG。这五个模块被 Mastra 打包成统一的框架,正是它给出的解决之道。

更关键的是:Mastra 是 TypeScript 原生的。类型安全不是锦上添花,而是在你写错配置、传错参数时,在编译期就把你拦住。比如你在 new Agent({ model, tools, memory }) 里少传了一个工具,IDE 会立刻标红;而传统 Python 项目往往要运行后才会报错。对于已经在用 TS/JS 技术栈的团队,Mastra 的学习成本被降到很低,不需要为了 AI 额外引入一整套 Python 数据科学体系。

你可以把 Mastra 想象成一间“精装后厨”:设备齐全、动线清晰,你要做的就是写清楚菜单(Agent 指令),然后点亮这家餐厅。这正是它与其他“从零拼装”的原生方案最大的不同——不是能不能做,而是能不能做到又快又稳。

Mastra=Agent+Workflow+Memory+Tools+RAG\textstyle \text{Mastra} = \text{Agent} + \text{Workflow} + \text{Memory} + \text{Tools} + \text{RAG}
整座后厨的能力,等于主厨、传菜动线、记事本、厨具柜、菜谱库这五件套的总和。
  1. Agent(主厨)AI 应用的核心决策单元,负责理解用户请求并调度资源。
    Agent\text{Agent}
  2. Workflow(传菜动线)定义各步骤的执行顺序和分支。
    Workflow\text{Workflow}
  3. Memory(记事本)保存短期与长期的对话记忆。
    Memory\text{Memory}
  4. Tools(厨具柜)把外部函数封装成 LLM 可调用的工具。
    Tools\text{Tools}
  5. RAG(菜谱库)通过检索增强生成,补足私有知识。
    RAG\text{RAG}

架构设计——后厨的三层动线

后厨不是一间大平层,而是分层的:前厅负责接待与传达客人需求,后厨负责烹饪出品,库房负责供货。Mastra 的架构也分了清晰的层次:最上层是“应用层”,由你自己写的代码构成;中间是“核心引擎层”,负责调度、路由、记忆读写;最底层是“Provider 层”,负责对接各个大模型服务商。

应用层就是你写的 Agent 定义、Workflow 配置等业务代码,这也是你唯一需要关心的部分。中间层,核心引擎会读取你的 Agent 配置,决定何时调用模型、何时执行工具、何时读写记忆,并把结果拼装成回复。最底层的 Provider 层把 OpenAI、Anthropic、Google 等厂商的 API 统一成一套接口。换模型时,只要改一行配置,而不是把业务代码重写一遍。

三层之间的解耦带来直接好处:业务代码不依赖任何一家模型厂商。今天用 GPT-4o,明天想换 Claude,只需要改 Provider 配置。同时,核心引擎提供大量可扩展的钩子(hooks),允许你插入自定义 Memory 存储(文件、Redis、数据库)、自定义检索器,像给后厨加装多层货架一样灵活。

三层布局让整个后厨保持运转流畅:前厅只管点餐,后厨只管做菜,仓库只管供货,互不干扰。等你要把餐厅开成连锁店(扩展多个 Agent),也不需要推翻重建——只要在对应层增加配置即可。这种职责边界,正是架构设计的核心价值。

应用层→核心引擎→Provider层→LLM\textstyle \text{应用层} \rightarrow \text{核心引擎} \rightarrow \text{Provider层} \rightarrow \text{LLM}
数据流从前厅点单,经过后厨加工,再到供应商供货:业务与应用层解耦。
  1. 应用层(前厅点单)开发者编写业务逻辑和 Agent 定义的地方。
    应用层\text{应用层}
  2. 核心引擎(后厨调度)负责任务路由、模块调度与状态管理。
    核心引擎\text{核心引擎}
  3. Provider层(供应商仓库)统一封装不同模型厂商 API 的抽象接口。
    Provider层\text{Provider层}
  4. LLM(大模型供应商)最终执行文本生成能力的模型服务。
    LLM\text{LLM}

核心API——主厨的任务清单

主厨开工前需要一张“任务清单”:掌勺做什么菜、用什么锅、放什么调料。Mastra 给了你同样的清单——Agent 对象、Tool 对象、Workflow 对象。学会这几个对象,你就掌握了整套 API 的 80%。

最常用的是 new Agent():传入 instructions(系统提示词)、model(LLM 选择)、tools(工具注册表)、memory(记忆存储)。然后调用 agent.generate() 或 agent.stream()。Generate 是“一次性出餐”:等全部结果生成完再给你;Stream 是“边做边传菜”:可以一个 token 一个 token 地流式返回,让用户看到“正在写”的过程。

Tools 的注册也很直观:你定义函数的参数 schema(可以用 zod 做类型校验),Mastra 会自动将这个 schema 发给 LLM,让模型在合适时机“请求调用工具”;执行完成后,结果再回到 Agent 的流程中。所有这些都是声明式的——你描述数据结构,框架替你完成与模型的中间协商。

这几样东西,就是主厨开工前的全部准备。你给 Agent 配好大脑、厨具和记事本,它就能独立应对一整桌复杂的客人需求。越是复杂的 AI 应用,越需要这种结构化配置来避免混乱——否则十几个 prompt 散落在各处,最终无人能维护。

Agent=(model,tools,memory,instructions)\textstyle \text{Agent} = (\text{model}, \text{tools}, \text{memory}, \text{instructions})
一个 Agent 的四要素:大脑、工具、记忆、指令。齐了就开工,缺了就报警。
  1. model(大脑)指定要调用的大模型型号与参数。
    model\text{model}
  2. tools(厨具清单)可被 Agent 调用的工具集合。
    tools={t1,t2,…,tn}\text{tools} = \{t_1, t_2, \dots, t_n\}
  3. memory(记事本)Agent 引用的会话与长期记忆存储配置。
    memory\text{memory}
  4. instructions(菜谱指令)告诉 Agent 身份、目标和行为准则的系统提示。
    instructions\text{instructions}

工作流编排——传菜动线

一家高效的餐厅,传菜动线是精心设计的:凉菜先出,热菜按灶台能力排队,甜品最后。Mastra 的 Workflow 就是把 AI 业务拆成一连串步骤(Step),并规定它们之间的先后顺序与分支。每个 Step 可以是调用一个 LLM、执行一个工具、或跑一段逻辑。

Workflow 的核心概念是 Step 和 Route。Step 是工作流中的一个节点;Route 决定下一步去哪个 Step。比如“判断用户意图”这个 Step,如果结果 travel,就进入查询航班步骤;否则进入推荐酒店步骤。这是典型的条件路由——像后厨根据订单类型决定走哪条加工线。

步骤之间通过状态(state)传递数据。前一步的输出会成为后一步的输入。因为你可以在 Steps 中做异步调用(比如等外部 API 返回),Mastra 会像传菜一样自动等待每一步完成,然后根据路由决定下一步。相对于“一段 prompt 写完所有事”,Workflow 让流程天然可观测、可调试、可回放。

这一设计让“出餐流程”不再是一团浆糊。以前你可能把好几十个决策全塞进一个 prompt;现在你把它拆成明确的传菜路线,每一个环节都能单独测试、单独上线——这正是工程化 AI 应用的关键:把不可解释的“黑盒对话”变成可审计的“流水线”。

G=(V,E),v′=route(v,s)\textstyle G = (V, E), \quad v' = \text{route}(v, s)
工作流就是一张有向图:节点是步骤,边是流程方向,路由函数决定下一步。
  1. V(节点集合)工作流里全部 Step 节点的集合。
    V={v1,v2,…,vn}V = \{v_1, v_2, \dots, v_n\}
  2. E(边集合)Step 之间的有向连接关系。
    E={(vi,vj)}E = \{(v_i, v_j)\}
  3. route(路由函数)根据当前状态 s,从当前节点 v 决定下一节点 v'。
    v′=route(v,s)v' = \text{route}(v, s)

记忆管理——主厨的记事本

好的主厨会记得熟客忌口:张先生不吃香菜、李小姐喜欢微辣。AI Agent 也一样,如果每次对话都“失忆”,体验会像跟一个陌生服务员打交道。Mastra 内置了记忆系统,帮你把“见过的人”和“说过的话”随时带在身边。

Mastra 的记忆分为短期记忆、长期记忆和工作记忆。短期记忆保存当前会话的上下文窗口,通常用于维持对话连贯性;长期记忆把重要信息(用户偏好、历史事实)写入向量数据库,即使重启服务也不会丢;工作记忆则用于 Agent 执行任务时临时保留中间结果,相当于主厨桌上的“出餐备忘卡”。

实现上,Mastra 的长期记忆通常对接向量存储(如 PostgreSQL + pgvector、Pinecone 等),通过嵌入(embedding)把文本向量化后保存。当新对话到来,系统会从向量库中检索与该用户相关的历史片段,把它们塞进上下文,让 Agent“想起来”。这个过程对业务代码几乎透明——你只需要配置一个 Memory 存储,剩下的由框架代劳。

有了记事本,AI 应用就不再是“每次从零开始”的服务员,而是一个能记住老客人喜好的熟手主厨。用户在跟你的 Agent 打交道时,也会明显感到“这个人好像记得我之前说过的话”——这是 AI 应用体验升级的重要分水岭。

Mt+1=Mt∪{(ut,at)}\textstyle M_{t+1} = M_t \cup \{(u_t, a_t)\}
新记忆等于旧记忆并上新的一轮问答对:记忆在每一轮对话后自动累积。
  1. M_t(当前记忆)第 t 轮对话前 Agent 已经积累的记忆集合。
    MtM_t
  2. (u_t, a_t)(新对话对)第 t 轮的用户提问与 AI 回答。
    (ut,at)(u_t, a_t)
  3. ∪(取并集)把新对话合并进旧记忆,形成新的记忆状态。
    Mt∪{(ut,at)}M_t \cup \{(u_t, a_t)\}

工具调用与RAG——厨具与菜谱库

再厉害的主厨也不能徒手变出食材,他需要厨具来切菜、搅拌、控温。AI Agent 也一样:如果你要做一个可以查实时天气、下订单的助手,就必须让它在合适时使用外部 API——这就是 Mastra 的工具调用能力。

在 Mastra 里,你可以用 tool 函数把一段代码包装成一个“可被 AI 调用的工具”。它需要声明名称、描述、输入参数 schema。当用户问“帮我查一下天气”,LLM 看到工具描述后,会生成一次工具调用,Mastra 在本地执行该函数,再把结果继续交给 LLM 生成最终回复。这个循环是 Agent 理解并操作系统世界的基础。

RAG(检索增强生成)则是“菜谱库”:你有很多外部文档(产品手册、FAQ、内部知识库),它们太大,不能全部塞进 prompt。Mastra 先对文档做切分并向量化存入向量库;用户提问时,它把问题转为向量,检索最相似 K 个片段,将这些片段作为上下文交给 LLM 生成答案。这相当于主厨做一道不熟悉的菜时,先翻到菜谱对应页再动手。

工具让 Agent 有了“手”,RAG 让 Agent 有了“知识库”。两者结合时,一个 Agent 既能查实时数据,又能基于私有文档回答,已经逼近一个“有经验的老员工”的水平。Mastra 把这两条能力做成内置接口,你不用自己去拼接 OpenAI 的 function calling 和向量查询,整个流程在框架里自动完成。

Ans=LLM(q,TopK(Embed(q),D))\textstyle Ans = \text{LLM}\big(q, \text{TopK}(\text{Embed}(q), D)\big)
答案 = 大模型在“问题 + 检索回来的相关文档片段”的共同作用下生成。
  1. Embed(q)(问题向量化)把用户的查询文本 q 转成高维向量。
    Embed(q)\text{Embed}(q)
  2. TopK(检索取前K)在文档库 D 中找出与查询向量最相似的 K 个片段。
    TopK(⋅,D)\text{TopK}(\cdot, D)
  3. LLM(q, Context)(生成答案)把原始问题和检索片段作为上下文交给大模型。
    LLM(q,Context)\text{LLM}(q, \text{Context})

对比LangGraph——两套厨房的选择

后厨的装修方案不止一种。LangGraph 是 Python 生态里成熟的后厨装修队,而 Mastra 是 TypeScript 生态里的新式精装方案。这两套方案各有拥趸。关键是你自己的后厨(团队技术栈)用哪种更方便。

比较几个维度。语言生态:LangGraph 以 Python 为核心,有非常丰富的 Python ML 生态;Mastra 原生 TypeScript,能直接复用 npm 生态、与前端代码共享类型。内置能力:Mastra 把 Memory、RAG、Workflow 等打包在框架内,开箱即用;LangGraph 更偏“编排引擎”哲学,记忆、向量库往往要通过 LangChain / LangSmith 等组合出来。开发体验:TS 有编译期类型检查,重构时能更早发现错误;Python 上手门槛更低,适合以研究探索为核心的团队。

选型建议是:如果你的团队已经深度依赖 TypeScript / JavaScript(Node 服务端、全栈一体化),Mastra 可以把 Agent 开发接入现有代码库,几乎零额外学习成本;如果你的团队主要是 Python 数据工程出身,并且已经用 LangChain 做过大量开发,那 LangGraph 的生态延续性更合适。两者都是从“节点式编排”起步的架构,不存在绝对优劣。

所以无论选 Mastra 还是 LangGraph,本质上不是“谁更好”,而是“哪个更像为你这支团队量身定做的后厨”。看别人家的菜谱评价只是参考,合不合口味只有自己试过才知道。选完就扎进去做,比反复纠结“站队”更有价值。

评分=w1×开发体验+w2×生态成熟+w3×内置能力\textstyle 评分 = w_1 \times \text{开发体验} + w_2 \times \text{生态成熟} + w_3 \times \text{内置能力}
框架选型不是比谁名气大,而是按团队自身情况给三个维度加权打分。
  1. w_1(体验权重)团队对开发体验和类型安全的看重程度。
    w1w_1
  2. w_2(生态权重)对语言生态延续性的看重程度。
    w2w_2
  3. w_3(能力权重)对内置一体化能力的看重程度。
    w3w_3
  4. 加权求和(综合评分)三个维度按权重相加得到最终评分。
    ∑iwi×xi\sum_i w_i \times x_i

部署上线——开业大吉

后厨装修好、试菜完成,最终还是要把餐厅开起来营业。Agent 应用也一样,写完流程、接好工具,下一步就是部署上线。Mastra 的部署方式和普通 Node.js 服务没有本质区别:打包、启动、对外暴露 API——因为它本质就是一个服务端应用。

Mastra 可以本地通过 npx mastra dev 或 Docker 运行,也可以部署到各类云平台。由于框架底层就是 TS/Node,你可以将它接入现有的 Node 部署管道(PM2、Docker Compose、Kubernetes)或 Serverless(如 Vercel、Netlify、AWS Lambda)。部署时要注意 Worker 的启动时长、内存,以及对 OpenAI 等外部 API 的网络出站规则。

上线之后更重要的是监控与降级策略。Agent 依赖外部大模型的稳定性,一旦模型服务抖动,你的应用会直接表现为“变慢”或“报错”。所以你需要:记录每次调用的日志(延迟、token 数、错误码)、对重要流程加超时重试、在模型不可用时给用户一个兜底回复(比如“稍后再试”)。这就是把 Agent 当系统而不是当脚本对待的成熟心态。

开业只是开始,稳定的经营才是目标。用 Mastra 快速上线只是第一步,真正的功力体现在后续的监控、调优、降级设计上。把每一道菜(请求)都做得稳定,这家 AI 餐厅才能长久红火,客人(用户)才会愿意再来。

A=TupTtotal×100%\textstyle A = \frac{T_{\text{up}}}{T_{\text{total}}} \times 100\%
系统的可用率 = 正常运行时间 ÷ 总时间。监控的目的就是让这个比值尽量高。
  1. T_up(可用时间)服务正常运行、能正确响应用户的累计时长。
    TupT_{\text{up}}
  2. T_total(总时间)一个统计周期内的总时长。
    TtotalT_{\text{total}}
  3. 求比值(可用比例)可用时间除以总时间。
    TupTtotal\frac{T_{\text{up}}}{T_{\text{total}}}
  4. 转百分比(可用率)乘以 100 得到百分比形式的可用率。
    ×100%\times 100\%

AI 应用场景

智能客服工单助手

阶段:Agent 自动处理 + 工具调用 + RAG 检索增强

解决的问题:传统客服需要人工翻阅 FAQ、查询订单系统,响应慢且重复劳动多。用 Mastra 构建的客服 Agent,自动判断用户意图、检索私有知识库、调用订单查询 API,把大部分常见问题挡在人工之前。

具体案例:某 SaaS 公司用 Mastra 接入产品文档作为 RAG 知识库,注册“查订单状态”“修改备注”“计算退款金额”三个工具。用户提问后,Agent 自动走“意图识别 → 搜索文档 → 调用工具 → 生成回复”的工作流,一线客服只需要处理 AI 转交的少数复杂工单。

数据分析 Copilot

阶段:工作流编排 + 工具调用

解决的问题:业务人员每天写 SQL 报表、做数据跑批,门槛高且容易出错。Mastra 工作流把“自然语言转 SQL”拆成多步骤流水线,每一步可单独测试和调整,显著提升数据分析的自动化程度。

具体案例:数据团队用 Mastra 构建四步工作流:第一步识别用户意图是查询还是可视化;第二步调用 schema 工具获取库表结构;第三步让 LLM 生成 SQL;第四步执行查询并把结果转成摘要文本。出现错误时,路由会把它送到“改写 SQL”步骤重试,而不是直接失败。

内部知识库问答助手

阶段:RAG + 记忆管理

解决的问题:企业内部知识分散在 Notion、Wiki、飞书文档中,员工查资料费时费力。Mastra 通过 RAG 把多个来源统一接入,再用长期记忆记住不同团队关注的领域,让回答既有依据又有个性。

具体案例:某互联网公司把员工手册、技术规范、运维文档导入向量库,部署一个 Mastra 驱动的问答机器人。员工问“数据库连接串怎么申请”,机器人从文档中检索相关段落并附上原文链接,同时记住该员工所属团队,后续推荐内容更精准。

Python 演示

python101 行
"""用 Python 模拟 Mastra 风格 Agent 的最小运行时,演示记忆、工具与工作流的协作。""" import json  class Tool:    def __init__(self, name, handler, description=""):        self.name = name        self.handler = handler        self.description = description     def run(self, args):        return self.handler(**args)  class Memory:    def __init__(self, limit=6):        self.messages = []        self.limit = limit     def add(self, role, content):        self.messages.append({"role": role, "content": content})        self.messages = self.messages[-self.limit:]     def context(self):        return "\n".join(m["content"] for m in self.messages)  class WorkflowStep:    def __init__(self, name, handler):        self.name = name        self.handler = handler  class MastraLikeAgent:    def __init__(self, instructions, memory=None):        self.instructions = instructions        self.memory = memory or Memory()        self.tools = {}        self.steps = []        self.routes = {}     def register_tool(self, tool):        self.tools[tool.name] = tool     def add_step(self, step, routes=None):        self.steps.append(step)        if routes:            self.routes[step.name] = routes     def run_workflow(self, initial_data):        state = dict(initial_data)        current = self.steps[0] if self.steps else None        while current:            out = current.handler(state)            state[current.name] = out            route_map = self.routes.get(current.name, {})            next_name = route_map.get(out, None)            current = next(                (s for s in self.steps if s.name == next_name),                None            )        return state     def chat(self, user_input):        self.memory.add("user", user_input)        context = self.memory.context()        tool_names = "、".join(self.tools.keys())        prompt = (            f"{self.instructions}\n用户说:{user_input}\n"            f"上下文:{context}\n可用工具:{tool_names}"        )        reply = f"[Agent 模拟回复] 已接收“{user_input}”,将结合上下文与工具结果生成答复。"        self.memory.add("assistant", reply)        return reply  def main():    agent = MastraLikeAgent(instructions="你是一个擅长调用工具的客服助手。")    agent.register_tool(Tool("查询订单", lambda order_id: {"status": "已发货"}, "按订单号查询状态"))    agent.register_tool(Tool("修改备注", lambda order_id, note: {"ok": True}, "修改订单备注"))     def first_step(state):        state["intent"] = "query"        return "query"     def second_step(state):        ret = agent.tools["查询订单"].run({"order_id": "A123"})        state["order_status"] = ret["status"]        return "done"     agent.add_step(WorkflowStep("parse", first_step), routes={"query": "fetch"})    agent.add_step(WorkflowStep("fetch", second_step), routes={"done": None})     state = agent.run_workflow({"order_id": "A123"})    print(json.dumps(state, ensure_ascii=False, indent=2))    print(agent.chat("我的订单到哪了?"))  if __name__ == "__main__":    main()
目的:用 Python 模拟 Mastra 的 Agent 运行时,演示工作流步骤、记忆和工具调用如何协作。
  1. class MastraLikeAgent:模拟 Mastra 的 Agent 核心类,同时持有工具、记忆和工作流。
  2. def register_tool(self, tool):把工具挂到 Agent 上,相当于把厨具挂上工具墙。
  3. def add_step(self, step, routes=None):把一个工作流步骤加入执行序列,并声明它的路由表。
  4. def run_workflow(self, initial_data):模拟 Mastra 工作流引擎,循环执行直到没有下一步。
  5. out = current.handler(state)调用当前步骤的处理函数,得到输出结果。
  6. next_name = route_map.get(out, None)根据步骤输出查路由表,决定下一步走哪个节点。
  7. current = next((s for s in self.steps if s.name == next_name), None)找到下一个 Step 对象,找不到就结束。
  8. self.memory.add("user", user_input)把用户问题写入短期记忆,形成上下文。
  9. agent.register_tool(Tool("查询订单", lambda order_id: {"status": "已发货"}, "按订单号查询状态"))注册一个带描述的工具,LLM 可据此决定何时调用。
  10. agent.add_step(WorkflowStep("parse", first_step), routes={"query": "fetch"})声明路由:如果第一步返回 query,则进入 fetch 步骤。
  11. state = agent.run_workflow({"order_id": "A123"})启动工作流并传入初始状态。

常见误区

误区很多人觉得 Mastra 就是把 OpenAI 的 API 重新封装一下,用起来跟直接调用 SDK 没什么区别,不值得学。

正解套壳只解决了“发请求”这一步。Mastra 还解决了“组合、状态、记忆、路由”这些更复杂的工程问题。相当于一个餐厅不只是有锅,还有完整的动线设计与厨房管理。直接调 SDK 更像一个人冲进厨房手忙脚乱地自己做所有事,而 Mastra 给了你一个能并行做菜的团队。

为何常见:因为对新手来说,一个 agent.generate() 看起来确实跟 SDK 请求很像,看不到背后的工作流引擎、记忆系统和工具注册机制。

误区AI 领域都是 Python 的天下,用 TS 写 Agent 显得不专业,而且很多东西做不了。

正解随着大模型通过 HTTP API 提供能力,语言本身的生态差距在缩小。TS 有类型安全、前后端统一、npm 生态的优势;尤其是在 Web 端和 SaaS 后台集成场景下,TS 往往比 Python 更高效。Mastra 正是为了这些场景而存在。

为何常见:因为 AI 训练与科研传统上确实以 Python 为主,大量教程也用 Python,让初学者误以为 TS 是“非主流”。

误区既然要记住用户,那就把所有历史对话都拼到 prompt 里,最多的时候 prompt 长到几十万字。

正解越长越会撑爆上下文窗口,费用高、延迟高,甚至因“注意力稀释”导致回答质量下降。Mastra 把记忆分层:短期对话只保留最近几轮;长期记忆提取关键信息存向量库,只在需要时检索注入。就像主厨不会把开业以来所有菜名都背下来,而是记住熟客偏好和常用菜谱。

为何常见:因为很多人用过的简单聊天机器人就是把 history 列表直接丢进去,没有体会过超长上下文带来的成本和效果问题。

误区技术人员喜欢站队,觉得框架选型决定成败,选了 Mastra 就不能用 LangGraph 的一切,选错就输。

正解框架都只是工具,核心思想都是“节点、路由、状态、记忆”。选型应该基于团队背景与维护成本。很多团队甚至可以迁移概念,在 TS 项目里学到的思想能反哺 Python 项目。重要的是掌握底层方法论,而不是锁死某个框架。

为何常见:因为技术社区迭代快,容易形成“阵营文化”,让人忽略了工程实际:框架可替换,能力才持久。

误区写完 Agent、部署到服务器就大功告成,不用再关注运行时状态。

正解Agent 应用最大的不确定性来自外部 LLM API:模型更新、限流、网络抖动都会影响表现。正式项目需要日志、监控、超时、重试、降级,是一个持续运营的系统。这就像餐厅开业只是起点,每天的食材供应、设备维护、客人反馈才是长久经营的关键。

为何常见:因为很多开发者的经验来自内部工具或原型项目,体量小、流量少,确实不容易遇到规模化的故障。

面试题

Q1. Mastra 框架原生基于哪个语言生态?

单选题 · easy

  • A.使用 Java 语言的全套体系
  • B.使用 TS 语言的全套体系← 正确答案
  • C.使用 Python 语言的全套体系
  • D.使用 Go 语言的全套体系

答案:B。Mastra 是 TypeScript 原生的 AI Agent 框架,因此正确答案是 B。其他选项虽然可以通过适配层接入 LLM,但都不是 Mastra 的原生语言基础。就像后厨的承重结构,用什么建材决定了厨房能怎么扩建,Mastra 的“建材”是 TS。

Q2. Mastra 中负责编排多个步骤并控制流向的模块是?

单选题 · mid

  • A.内置工作流引擎← 正确答案
  • B.长期记忆系统
  • C.外部工具仓库
  • D.模型配置中心

答案:A。工作流引擎(Workflow)负责把多个步骤编排成有向流程,并通过路由决定下一步;记忆、工具、模型配置虽然都是重要能力,但都不负责“步骤之间的顺序与分支”。就像后厨的传菜动线,只有它决定你先做哪道菜、再端哪道菜。

Q3. Mastra 中将用户长期偏好持久保存的机制是?

单选题 · easy

  • A.短期会话记忆
  • B.长期持久记忆← 正确答案
  • C.临时工作记忆
  • D.小规模高速缓存

答案:B。长期记忆负责把用户偏好等沉淀信息保存到持久化存储中;短期记忆只管当前对话,工作记忆只保留任务中间结果,缓存既不持久也不面向用户偏好。就像主厨会把常客口味写进随身本,而不是随手贴在案板上。

Q4. Mastra 的 RAG 能力中,匹配相关文档主要依赖什么方式?

单选题 · hard

  • A.关键词语义匹配
  • B.向量相似度检索← 正确答案
  • C.正则表达式筛选
  • D.人工标签归类

答案:B。RAG 检索文档的核心是向量相似度:查询先向量化,再到向量库中找最相近的片段。关键词、正则和规则过滤都无法应对语义层面的相似匹配。这好比主厨做菜时翻菜谱,不是靠第一个字去找,而是靠“这道菜的整体感觉”定位到对应页。

Q5. 与 LangGraph 相比,Mastra 的差异化优势主要体现在?

单选题 · mid

  • A.侧重 Python 生态
  • B.侧重 TS 原生生态← 正确答案
  • C.缺少内置记忆能力
  • D.侧重云端部署模式

答案:B。LangGraph 主要面向 Python 生态,Mastra 以 TS 为原生内核,适合 JS/TS 团队无缝接入;LangGraph 并没有缺少记忆机制,Mastra 也不只限云端运行。选框架看团队技术栈,Mastra 对前端和全栈开发者更友好。

Q6. Mastra 中注册外部函数能力的方式是?

单选题 · mid

  • A.工具注册机制← 正确答案
  • B.模型参数微调
  • C.工作流可视化
  • D.系统提示改写

答案:A。通过工具注册机制(如 createTool)把外部函数包装成 LLM 可调用的工具;参数微调是训练阶段的工作,工作流可视化只是编排视图,系统提示也不会注册函数。主厨需要把厨具挂上“工具墙”,LLM 才知道有这些工具可用。

Q7. Mastra 的架构中对接不同大模型的抽象层是?

单选题 · mid

  • A.工作流引擎层
  • B.运行时支撑层
  • C.服务提供商层← 正确答案
  • D.应用核心逻辑层

答案:C。Mastra 的 Provider 层统一封装 OpenAI、Anthropic 等不同厂商的接口,让上层业务不依赖具体某家模型供应商。这就像后厨的“供应商仓库”:今天用哪家食材,后厨的菜谱都不需要改。

Q8. Mastra 为开发者开箱提供的能力包含哪些?

多选题 · mid

  • A.多轮对话记忆← 正确答案
  • B.可视化工作流← 正确答案
  • C.外部工具调用← 正确答案
  • D.数据库性能调优

答案:ABC。Mastra 内置多轮对话记忆、工作流编排和工具调用;数据库性能调优不是框架的职责。它是一间精装后厨:灶台、冰柜、传菜梯都有了,但不会替你做财务审计。

Q9. Mastra 记忆体系的完整层次包含哪些?

多选题 · hard

  • A.短期会话记忆← 正确答案
  • B.长期持久记忆← 正确答案
  • C.临时工作记忆← 正确答案
  • D.全局事件总线

答案:ABC。Mastra 的记忆体系分为短期记忆、长期记忆和工作记忆三个层次;全局事件总线是另一种架构组件,不属于记忆体系。就像主厨的记事本分三格:眼前这单、常客档案、今日临时备忘。

Q10. Mastra 工作流中 Step 后续路由的依据可能来自哪些信息?

多选题 · extreme

  • A.步骤输出结果← 正确答案
  • B.动态条件判断← 正确答案
  • C.外部环境状态← 正确答案
  • D.本地编译时约定

答案:ABC。Step 的路由可以根据上一步的返回值、运行时动态条件以及外部环境状态来决定下一步;本地编译时约定与运行时路由无关。传菜员走到岔路口,看的是订单内容、当前客流和餐厅临时状况,而不是装修图纸。