> Discover all available pages from the documentation index: https://mastra.zisheng.pro/llms.txt # 在 Electron 项目中集成 Mastra 本指南将介绍如何使用 Mastra 构建一个可调用 Tool 的 AI Agent,然后直接从 Mastra 服务器调用该 Agent,将其连接到 Electron 桌面应用。 你将使用 [AI SDK UI](https://ai-sdk.dev/docs/ai-sdk-ui/overview) 创建美观的交互式聊天体验。 ## 开始之前 - 你需要受支持的[模型 Provider](https://mastra.zisheng.pro/models)所提供的 API 密钥。如果没有偏好,请使用 [OpenAI](https://mastra.zisheng.pro/models/providers/openai)。 - 安装 Node.js `v22.13.0` 或更高版本 ## 创建新的 Electron 应用(可选) 如果已有 Electron 应用,请跳到下一步。 使用 [electron-vite](https://electron-vite.org/) 搭建新的 Electron 应用: **npm**: ```bash npm create @quick-start/electron@latest electron-chat -- --template react-ts --skip ``` **pnpm**: ```bash pnpm create @quick-start/electron electron-chat --template react-ts --skip ``` **Yarn**: ```bash yarn create @quick-start/electron electron-chat --template react-ts --skip ``` **Bun**: ```bash bunx @quick-start/create-electron@latest electron-chat --template react-ts --skip ``` 这会创建名为 `electron-chat`、使用 React 和 TypeScript 的新 Electron 应用。进入项目目录: ```bash cd electron-chat ``` ### 编辑 CSP 设置 要让 Electron 应用调用 Mastra 服务器,需要调整内容安全策略(CSP)设置。 打开 `src/renderer/index.html`,更新 `` 标签,在 `connect-src` 指令中加入 `http://localhost:4111`: ```html ``` > **信息:** 在生产部署中,需要调整该设置以匹配实际服务器 URL。 ### 编辑 `main.css` 打开 `src/renderer/src/assets/main.css` 并将其内容改为: ```css @import './base.css'; body { background: var(--ev-c-white); color: var(--ev-c-black); } ``` ## 初始化 Mastra 运行 [`mastra init`](https://mastra.zisheng.pro/reference/cli/mastra)。出现提示时,选择 Provider(例如 OpenAI)并输入密钥: **npm**: ```bash npx mastra@latest init ``` **pnpm**: ```bash pnpm dlx mastra@latest init ``` **Yarn**: ```bash yarn dlx mastra@latest init ``` **Bun**: ```bash bun x mastra@latest init ``` 这会创建一个 `src/mastra` 文件夹,其中包含示例天气 Agent 和以下文件: - `index.ts` - Mastra 配置,包括 memory - `tools/weather-tool.ts` - 获取指定位置天气的 Tool - `agents/weather-agent.ts`- 使用该 Tool 的天气 Agent 及其提示词 接下来,你会从聊天 UI 调用 `weather-agent.ts`。 ## 安装 AI SDK UI 和 AI Elements 安装 AI SDK UI 和 Mastra adapter: **npm**: ```bash npm install @mastra/ai-sdk@latest @ai-sdk/react ai ``` **pnpm**: ```bash pnpm add @mastra/ai-sdk@latest @ai-sdk/react ai ``` **Yarn**: ```bash yarn add @mastra/ai-sdk@latest @ai-sdk/react ai ``` **Bun**: ```bash bun add @mastra/ai-sdk@latest @ai-sdk/react ai ``` ## 创建聊天路由 打开 `src/mastra/index.ts`,在配置中添加 [`chatRoute()`](https://mastra.zisheng.pro/reference/ai-sdk/chat-route)。这会创建一个 Electron 前端可调用的 API 路由,用于返回兼容 AI SDK 的聊天响应;下一步会将它与 `useChat()` 配合使用。 ```ts import { Mastra } from '@mastra/core/mastra' // Existing imports... import { chatRoute } from '@mastra/ai-sdk' export const mastra = new Mastra({ // Existing config... server: { cors: { origin: '*', // Restrict this to your app's origin in production allowMethods: ['*'], allowHeaders: ['*'], }, apiRoutes: [ chatRoute({ path: '/chat/:agentId', }), ], }, }) ``` > **信息:** Electron renderer 与 Mastra 服务器从不同源加载,因此必须配置 CORS。在生产部署中,请将 origin 限制为应用的实际来源。 ## 添加聊天 UI 打开 `src/renderer/src/App.tsx`,将其内容替换为聊天组件: ```tsx import { useState } from 'react' import { useChat } from '@ai-sdk/react' import { DefaultChatTransport, type ToolUIPart } from 'ai' const STATE_TO_LABEL_MAP: Record = { 'input-streaming': 'Streaming input...', 'input-available': 'Input ready', 'approval-requested': 'Approval requested', 'approval-responded': 'Approval responded', 'output-available': 'Complete', 'output-error': 'Error', } export default function App(): React.JSX.Element { const [input, setInput] = useState('') const { messages, sendMessage } = useChat({ transport: new DefaultChatTransport({ api: `http://localhost:4111/chat/weather-agent`, }), }) const handleSubmit = (e: React.FormEvent): void => { e.preventDefault() if (!input.trim()) return sendMessage({ text: input }) setInput('') } return (
{messages.map((message, messageIndex) => (
{message.parts.map((part, partIndex) => { if (part.type === 'text') { return (
{part.text}
) } if (part.type.startsWith('tool-')) { const toolPart = part as unknown as ToolUIPart return (
{toolPart.type.split('-').slice(1).join('-')} -{' '} {STATE_TO_LABEL_MAP[toolPart.state ?? 'output-available']}
Parameters
                                {JSON.stringify(toolPart.input, null, 2)}
                              
{toolPart.errorText ? 'Error' : 'Result'}
                                {JSON.stringify(toolPart.output, null, 2)}
                              
{toolPart.errorText && (
{toolPart.errorText}
)}
) } return null })}
))}
setInput(e.target.value)} />
) } ``` 这会将 [`useChat()`](https://ai-sdk.dev/docs/reference/ai-sdk-ui/use-chat) 连接到 `/chat/weather-agent` 端点,把提示词发送到该端点,并分块流式返回响应。 ## 测试 Agent 要通过聊天界面测试 Agent,请同时运行 Mastra 服务器和 Electron 应用。 1. 启动 Mastra 开发服务器: **npm**: ```bash npx mastra dev ``` **pnpm**: ```bash pnpm dlx mastra dev ``` **Yarn**: ```bash yarn dlx mastra dev ``` **Bun**: ```bash bun x mastra dev ``` 2. 在另一个终端中启动 Electron 应用: **npm**: ```bash npm run dev ``` **pnpm**: ```bash pnpm run dev ``` **Yarn**: ```bash yarn dev ``` **Bun**: ```bash bun run dev ``` 3. Electron 窗口会打开并显示聊天界面 4. 尝试询问天气。如果 API 密钥配置正确,你会收到响应 ## 后续步骤 恭喜你使用 Electron 构建了 Mastra Agent!🎉 接下来,你可以使用自己的 Tool 和逻辑扩展项目: - 进一步了解 [Agent](https://mastra.zisheng.pro/docs/agents/overview) - 为 Agent 添加自己的 [Tool](https://mastra.zisheng.pro/docs/agents/using-tools) - 为 Agent 添加类似人类的 [memory](https://mastra.zisheng.pro/docs/memory/overview) 准备就绪后,可进一步了解 Mastra 与 AI SDK UI 和 React 的集成方式,以及如何将 Agent 部署到任意位置: - 将 Mastra 与 [AI SDK UI](https://mastra.zisheng.pro/guides/build-your-ui/ai-sdk-ui) 集成 - 将 Agent [部署到任意位置](https://mastra.zisheng.pro/docs/deployment/overview)