> Discover all available pages from the documentation index: https://mastra.zisheng.pro/zh-HK/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/zh-HK/models) 的 API 金鑰。如沒有偏好,可使用 [OpenAI](https://mastra.zisheng.pro/zh-HK/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/zh-HK/reference/cli/mastra)。出現提示時,選擇一個 Provider(例如 OpenAI)並輸入 API 金鑰: **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 設定,包括記憶 - `tools/weather-tool.ts` - 用來擷取指定地點天氣的 Tool - `agents/weather-agent.ts`- 天氣 Agent,其 prompt 會使用該 Tool 在接下來的步驟中,你會從聊天 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/zh-HK/reference/ai-sdk/chat-route)。這會建立一個 API 路由,讓 Electron 前端可呼叫它並取得與 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。部署至生產環境時,請將來源限制為應用程式的實際來源。 ## 加入聊天 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` 端點,把 prompt 傳送至該端點,並以分段串流方式接收回應。 ## 測試你的 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/zh-HK/docs/agents/overview) - 為 Agent 加入專屬 [Tool](https://mastra.zisheng.pro/zh-HK/docs/agents/using-tools) - 為 Agent 加入仿如人類的[記憶](https://mastra.zisheng.pro/zh-HK/docs/memory/overview) 準備好後,你可以進一步了解 Mastra 如何與 AI SDK UI 和 React 整合,以及如何將 Agent 部署至任何地方: - 將 Mastra 與 [AI SDK UI](https://mastra.zisheng.pro/zh-HK/guides/build-your-ui/ai-sdk-ui) 整合 - 將 Agent 部署至[任何地方](https://mastra.zisheng.pro/zh-HK/docs/deployment/overview)