إطار عمل Mastra للذكاء الاصطناعي: بناء وكلاء وسير عمل ذكية بـ TypeScript

ابنِ وكلاء ذكاء اصطناعي تفعل أشياء حقيقية. Mastra هو إطار عمل TypeScript-first من الفريق الذي بنى Gatsby — يمنحك الوكلاء وسير العمل والأدوات و RAG والتقييمات في حزمة واحدة بدون أي كود لاصق. في هذا الدليل، ستبني وكيل مساعد بحثي يبحث في الويب ويلخص النتائج ويكتب تقارير منظمة.
ما ستتعلمه
بنهاية هذا الدليل، ستكون قادرًا على:
- إعداد مشروع Mastra من الصفر باستخدام TypeScript
- إنشاء وكلاء ذكاء اصطناعي مع تعليمات وإعدادات نموذج وصلاحيات أدوات
- بناء أدوات مخصصة مع التحقق من المدخلات باستخدام مخططات Zod
- تصميم سير عمل متعدد الخطوات كرسوم بيانية موجهة (DAGs)
- تنفيذ أنبوب RAG أساسي للوكلاء المدركين للمستندات
- اختبار وتقييم مخرجات الوكلاء
- نشر تطبيق Mastra الخاص بك في بيئة الإنتاج
المتطلبات المسبقة
قبل البدء، تأكد من توفر:
- Node.js 20+ مثبت (
node --version) - خبرة في TypeScript (الأنواع، الأنواع العامة، async/await)
- مفتاح OpenAI API (أو Anthropic أو Google أو غيرها)
- فهم أساسي لـ نماذج اللغة الكبيرة وهندسة المطالبات
- محرر أكواد — VS Code أو Cursor موصى به
ما هو Mastra؟
Mastra هو إطار عمل TypeScript مفتوح المصدر لبناء تطبيقات مدعومة بالذكاء الاصطناعي. أنشأه الفريق الذي بنى Gatsby (مدعوم من Y Combinator)، ويقدم نهجًا متكاملًا لبناء تطبيقات وكلاء الذكاء الاصطناعي مع:
- الوكلاء (Agents) — كيانات مستقلة مدعومة بنماذج اللغة تفكر وتستخدم الأدوات
- الأدوات (Tools) — دوال TypeScript محددة الأنواع يمكن للوكيل استدعاؤها
- سير العمل (Workflows) — رسوم بيانية موجهة للعمليات متعددة الخطوات
- RAG — التوليد المعزز بالاسترجاع مع مخازن المتجهات
- التقييمات (Evals) — تقييم جودة مخرجات الوكيل
- الذاكرة (Memory) — سجل المحادثات والذاكرة الدلالية
على عكس الأطر الأخرى التي تتطلب إعدادات YAML أو كود Python لاصق، Mastra هو TypeScript صافي — تعرّف كل شيء في الكود مع أمان أنواع كامل.
الخطوة 1: إنشاء مشروع Mastra جديد
أسرع طريقة للبدء هي باستخدام واجهة سطر الأوامر الرسمية:
npm create mastra@latestاتبع المطالبات:
- اسم المشروع:
research-assistant - المكونات: اختر Agents و Tools و Workflows
- مزود النموذج الافتراضي: OpenAI (أو مزودك المفضل)
- تضمين كود مثال: نعم
هذا ينشئ هيكل مشروع كامل:
research-assistant/
├── src/
│ └── mastra/
│ ├── agents/
│ │ └── index.ts
│ ├── tools/
│ │ └── index.ts
│ ├── workflows/
│ │ └── index.ts
│ └── index.ts
├── .env
├── package.json
└── tsconfig.json
الآن ثبّت التبعيات وأعد بيئتك:
cd research-assistant
npm installأنشئ ملف .env:
OPENAI_API_KEY=sk-your-key-hereالخطوة 2: فهم نقطة الدخول في Mastra
الإعداد الرئيسي موجود في src/mastra/index.ts. هنا تسجل الوكلاء والأدوات وسير العمل:
import { Mastra } from "@mastra/core";
import { researchAgent } from "./agents";
import { searchTool, summarizeTool } from "./tools";
import { researchWorkflow } from "./workflows";
export const mastra = new Mastra({
agents: { researchAgent },
workflows: { researchWorkflow },
});كائن Mastra هو المنسق المركزي. يربط جميع مكوناتك ويكشف تلقائيًا عن واجهة REST API آمنة الأنواع.
الخطوة 3: بناء وكيلك الأول
الوكيل هو كيان مدعوم بنموذج لغة كبير مع تعليمات وإعدادات نموذج وصلاحية وصول إلى الأدوات. لننشئ وكيل مساعد بحثي.
عدّل src/mastra/agents/index.ts:
import { Agent } from "@mastra/core/agent";
import { openai } from "@ai-sdk/openai";
import { searchTool, summarizeTool, reportTool } from "../tools";
export const researchAgent = new Agent({
name: "Research Assistant",
instructions: `You are a thorough research assistant. When given a topic:
1. Search for relevant, up-to-date information
2. Summarize key findings into concise points
3. Generate a structured report with sections and citations
Always verify information from multiple sources when possible.
Be factual and cite your sources. If unsure, say so.`,
model: openai("gpt-4o"),
tools: {
searchTool,
summarizeTool,
reportTool,
},
});خصائص الوكيل الرئيسية
| الخاصية | الوصف |
|---|---|
name | اسم العرض للوكيل |
instructions | مطالبة النظام التي توجه سلوك الوكيل |
model | نموذج اللغة المستخدم (يدعم OpenAI و Anthropic و Google وغيرها) |
tools | كائن الأدوات التي يمكن للوكيل استدعاؤها |
سيقوم الوكيل تلقائيًا بالتفكير في الأدوات التي يجب استخدامها بناءً على مدخلات المستخدم وأوصاف الأدوات.
الخطوة 4: إنشاء أدوات مخصصة
الأدوات هي دوال TypeScript توسع قدرات وكيلك. كل أداة لها وصف (حتى يعرف النموذج متى يستخدمها)، ومخطط إدخال (يتم التحقق منه بـ Zod)، ودالة تنفيذ.
عدّل src/mastra/tools/index.ts:
import { createTool } from "@mastra/core/tools";
import { z } from "zod";
// الأداة 1: البحث في الويب
export const searchTool = createTool({
id: "web-search",
description: "Search the web for information on a given query. Returns relevant results with titles, snippets, and URLs.",
inputSchema: z.object({
query: z.string().describe("The search query"),
maxResults: z.number().default(5).describe("Maximum number of results to return"),
}),
execute: async ({ context }) => {
const { query, maxResults } = context;
// في الإنتاج، استخدم واجهة بحث حقيقية (Serper، Tavily، إلخ.)
const response = await fetch(
`https://api.tavily.com/search`,
{
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
api_key: process.env.TAVILY_API_KEY,
query,
max_results: maxResults,
}),
}
);
const data = await response.json();
return {
results: data.results.map((r: any) => ({
title: r.title,
url: r.url,
snippet: r.content,
})),
};
},
});
// الأداة 2: تلخيص النص
export const summarizeTool = createTool({
id: "summarize-text",
description: "Summarize a long piece of text into key bullet points.",
inputSchema: z.object({
text: z.string().describe("The text to summarize"),
maxPoints: z.number().default(5).describe("Maximum number of bullet points"),
}),
execute: async ({ context }) => {
const { text, maxPoints } = context;
// تلخيص استخراجي بسيط — في الإنتاج، استخدم استدعاء نموذج لغة
const sentences = text.split(". ").filter((s) => s.length > 20);
const summary = sentences.slice(0, maxPoints).map((s) => s.trim());
return { summary };
},
});
// الأداة 3: توليد تقرير
export const reportTool = createTool({
id: "generate-report",
description: "Generate a structured markdown report from research findings.",
inputSchema: z.object({
title: z.string().describe("Report title"),
sections: z.array(
z.object({
heading: z.string(),
content: z.string(),
sources: z.array(z.string()).optional(),
})
).describe("Report sections with headings, content, and optional source URLs"),
}),
execute: async ({ context }) => {
const { title, sections } = context;
let markdown = `# ${title}\n\n`;
markdown += `*Generated on ${new Date().toISOString().split("T")[0]}*\n\n`;
for (const section of sections) {
markdown += `## ${section.heading}\n\n`;
markdown += `${section.content}\n\n`;
if (section.sources?.length) {
markdown += `**Sources:**\n`;
for (const source of section.sources) {
markdown += `- ${source}\n`;
}
markdown += "\n";
}
}
return { report: markdown };
},
});أفضل ممارسات تصميم الأدوات
- اكتب أوصافًا واضحة — يقرأها النموذج لتحديد متى يستخدم كل أداة
- استخدم Zod
.describe()في كل حقل — هذا يخبر النموذج بمعنى كل معامل - اجعل الأدوات مركزة — أداة واحدة، مسؤولية واحدة
- تعامل مع الأخطاء بأناقة — أعد رسائل خطأ يمكن للوكيل التفكير فيها
- أضف قيمًا افتراضية معقولة — استخدم
.default()للمعاملات الاختيارية
الخطوة 5: تصميم سير عمل متعدد الخطوات
سير العمل يتيح لك تعريف أنابيب حتمية كرسوم بيانية موجهة. على عكس قرارات الوكيل (غير الحتمية)، يضمن سير العمل ترتيب التنفيذ.
أنشئ src/mastra/workflows/index.ts:
import { Workflow, Step } from "@mastra/core/workflows";
import { z } from "zod";
import { researchAgent } from "../agents";
// الخطوة 1: البحث عن موضوع
const researchStep = new Step({
id: "research",
inputSchema: z.object({
topic: z.string(),
depth: z.enum(["shallow", "deep"]).default("deep"),
}),
execute: async ({ context }) => {
const agent = researchAgent;
const response = await agent.generate(
`Research the following topic thoroughly: ${context.topic}.
Depth level: ${context.depth}.
Use the search tool to find current information.`
);
return { findings: response.text };
},
});
// الخطوة 2: استخراج الرؤى الرئيسية
const analyzeStep = new Step({
id: "analyze",
inputSchema: z.object({
findings: z.string(),
}),
execute: async ({ context }) => {
const agent = researchAgent;
const response = await agent.generate(
`Analyze these research findings and extract 5-7 key insights:
${context.findings}
Format as a JSON array of objects with "insight" and "confidence" fields.`
);
return { insights: response.text };
},
});
// الخطوة 3: توليد التقرير النهائي
const reportStep = new Step({
id: "report",
inputSchema: z.object({
topic: z.string(),
insights: z.string(),
}),
execute: async ({ context }) => {
const agent = researchAgent;
const response = await agent.generate(
`Create a comprehensive research report on "${context.topic}"
using these insights: ${context.insights}.
Use the report tool to generate a structured markdown document.`
);
return { report: response.text };
},
});
// بناء رسم سير العمل
export const researchWorkflow = new Workflow({
name: "research-pipeline",
triggerSchema: z.object({
topic: z.string().describe("The topic to research"),
depth: z.enum(["shallow", "deep"]).default("deep"),
}),
});
researchWorkflow
.step(researchStep)
.then(analyzeStep)
.then(reportStep)
.commit();ميزات سير العمل
- تدفق بيانات آمن الأنواع — مخرجات خطوة تغذي الخطوة التالية مع استنتاج TypeScript كامل
- تنفيذ متوازي — استخدم
.parallel()لتشغيل خطوات مستقلة بالتزامن - تفرع شرطي — أضف
.if()/.else()لمسارات ديناميكية - معالجة الأخطاء — كل خطوة يمكنها تعريف منطق إعادة المحاولة والبدائل
- التعليق — يمكن لسير العمل التوقف والانتظار لمدخلات بشرية
الخطوة 6: تشغيل وكيلك
لنختبر الوكيل بشكل تفاعلي. أنشئ سكريبت اختبار src/test.ts:
import { mastra } from "./mastra";
async function main() {
// احصل على الوكيل
const agent = mastra.getAgent("researchAgent");
// توليد نص بسيط
const response = await agent.generate(
"What are the latest developments in quantum computing in 2026?"
);
console.log(response.text);
// استجابة متدفقة
const stream = await agent.stream(
"Compare the top 3 TypeScript AI frameworks in 2026"
);
for await (const chunk of stream.textStream) {
process.stdout.write(chunk);
}
}
main().catch(console.error);شغّله:
npx tsx src/test.tsيجب أن ترى الوكيل يفكر في طلبك، يستدعي الأدوات حسب الحاجة، وينتج استجابة منظمة.
الخطوة 7: تنفيذ سير العمل
اختبر أنبوب البحث الكامل:
import { mastra } from "./mastra";
async function runWorkflow() {
const workflow = mastra.getWorkflow("researchWorkflow");
const result = await workflow.execute({
triggerData: {
topic: "The state of WebAssembly in 2026",
depth: "deep",
},
});
// الوصول إلى نتائج كل خطوة
console.log("Research:", result.results.research);
console.log("Analysis:", result.results.analyze);
console.log("Report:", result.results.report);
}
runWorkflow().catch(console.error);الخطوة 8: إضافة RAG للوكلاء المدركين للمستندات
RAG (التوليد المعزز بالاسترجاع) يتيح لوكيلك الإجابة على الأسئلة بناءً على مستنداتك الخاصة. Mastra يتكامل مع مخازن المتجهات مثل pgvector و Pinecone و Qdrant.
ثبّت تبعيات RAG:
npm install @mastra/rag @ai-sdk/openaiأنشئ أنبوب RAG:
import { embed, embedMany } from "ai";
import { openai } from "@ai-sdk/openai";
import { PgVector } from "@mastra/rag";
// 1. تهيئة مخزن المتجهات
const vectorStore = new PgVector({
connectionString: process.env.DATABASE_URL!,
});
// 2. إنشاء تضمينات من مستنداتك
const documents = [
"Mastra is a TypeScript framework for building AI agents...",
"Workflows in Mastra are directed acyclic graphs...",
"Tools extend agent capabilities with custom functions...",
];
const { embeddings } = await embedMany({
model: openai.embedding("text-embedding-3-small"),
values: documents,
});
// 3. تخزين التضمينات في قاعدة بيانات المتجهات
await vectorStore.upsert({
indexName: "docs",
vectors: embeddings.map((embedding, i) => ({
id: `doc-${i}`,
values: embedding,
metadata: { text: documents[i] },
})),
});
// 4. الاستعلام عن المستندات المشابهة
const { embedding: queryEmbedding } = await embed({
model: openai.embedding("text-embedding-3-small"),
value: "How do Mastra workflows work?",
});
const results = await vectorStore.query({
indexName: "docs",
queryVector: queryEmbedding,
topK: 3,
});ثم أنشئ أداة RAG لوكيلك:
import { createTool } from "@mastra/core/tools";
import { z } from "zod";
import { embed } from "ai";
import { openai } from "@ai-sdk/openai";
export const ragSearchTool = createTool({
id: "search-knowledge-base",
description: "Search the internal knowledge base for relevant information.",
inputSchema: z.object({
query: z.string().describe("What to search for in the knowledge base"),
}),
execute: async ({ context }) => {
const { embedding } = await embed({
model: openai.embedding("text-embedding-3-small"),
value: context.query,
});
const results = await vectorStore.query({
indexName: "docs",
queryVector: embedding,
topK: 5,
});
return {
documents: results.map((r) => ({
text: r.metadata?.text,
score: r.score,
})),
};
},
});الخطوة 9: إضافة ذاكرة الوكيل
الذاكرة تمنح وكيلك سياقًا عبر المحادثات. يدعم Mastra كلاً من سجل المحادثات والذاكرة الدلالية:
import { Agent } from "@mastra/core/agent";
import { Memory } from "@mastra/memory";
import { openai } from "@ai-sdk/openai";
const memory = new Memory({
// يخزن رسائل المحادثة الأخيرة
options: {
lastMessages: 20,
semanticRecall: {
topK: 3,
messageRange: 50,
},
},
});
export const assistantAgent = new Agent({
name: "Assistant",
instructions: "You are a helpful assistant with memory of past conversations.",
model: openai("gpt-4o"),
memory,
});عند استخدام الذاكرة، مرر threadId للحفاظ على سياق المحادثة:
// الرسالة الأولى
const res1 = await assistantAgent.generate("My name is Sarah", {
threadId: "user-123",
});
// رسالة لاحقة — الوكيل يتذكر
const res2 = await assistantAgent.generate("What's my name?", {
threadId: "user-123",
});
// المخرج: "Your name is Sarah"الخطوة 10: تقييم جودة الوكيل
يتضمن Mastra أدوات تقييم مدمجة لقياس جودة مخرجات الوكيل:
import { Agent } from "@mastra/core/agent";
import { openai } from "@ai-sdk/openai";
const agent = new Agent({
name: "Evaluated Agent",
instructions: "Answer questions accurately and concisely.",
model: openai("gpt-4o"),
evals: {
completeness: {
type: "model-graded",
prompt: "Rate if the response fully addresses the question (0-1):",
},
conciseness: {
type: "model-graded",
prompt: "Rate the conciseness of the response (0-1):",
},
hallucination: {
type: "model-graded",
prompt: "Rate if the response contains made-up information (0=hallucinated, 1=factual):",
},
},
});الخطوة 11: النشر باستخدام خادم Mastra
ينشئ Mastra تلقائيًا واجهة REST API لوكلائك وسير عملك. شغّل خادم التطوير:
npx mastra devهذا يكشف عن نقاط نهاية مثل:
POST /api/agents/researchAgent/generate
POST /api/agents/researchAgent/stream
POST /api/workflows/researchWorkflow/execute
للإنتاج، ابنِ وانشر:
npx mastra build
npx mastra deployيدعم Mastra النشر على:
- خوادم Node.js (Express، Fastify)
- Cloudflare Workers
- Vercel / Netlify بدون خادم
- حاويات Docker
استخدام مزودي نماذج متعددين
يعمل Mastra مع أي مزود نماذج متوافق مع AI SDK. يمكنك المزج والمطابقة:
import { openai } from "@ai-sdk/openai";
import { anthropic } from "@ai-sdk/anthropic";
import { google } from "@ai-sdk/google";
// استخدم نماذج مختلفة لوكلاء مختلفين
const fastAgent = new Agent({
name: "Fast Responder",
instructions: "Quick, concise answers.",
model: openai("gpt-4o-mini"),
tools: { searchTool },
});
const deepAgent = new Agent({
name: "Deep Analyst",
instructions: "Thorough, detailed analysis.",
model: anthropic("claude-sonnet-4-20250514"),
tools: { searchTool, summarizeTool },
});
const visionAgent = new Agent({
name: "Image Analyzer",
instructions: "Analyze and describe images.",
model: google("gemini-2.0-flash"),
tools: {},
});أفضل ممارسات هيكل المشروع
لتطبيقات الإنتاج، نظّم كودك هكذا:
src/mastra/
├── agents/
│ ├── research-agent.ts
│ ├── writing-agent.ts
│ └── index.ts # يعيد تصدير جميع الوكلاء
├── tools/
│ ├── search.ts
│ ├── summarize.ts
│ ├── report.ts
│ └── index.ts # يعيد تصدير جميع الأدوات
├── workflows/
│ ├── research-pipeline.ts
│ ├── content-pipeline.ts
│ └── index.ts # يعيد تصدير جميع سير العمل
└── index.ts # كائن Mastra
استكشاف الأخطاء وإصلاحها
المشاكل الشائعة
أخطاء "Tool not found":
تأكد من تمرير الأدوات إلى كائن tools الخاص بالوكيل، وليس مجرد استيرادها. الوكيل لديه صلاحية الوصول فقط للأدوات المدرجة صراحة في إعداداته.
خطوات سير العمل لا تستقبل البيانات:
تحقق من أن مخطط المخرجات لخطوة يطابق مخطط المدخلات للخطوة التالية. استخدم .parse() في Zod لتصحيح أخطاء عدم تطابق الأنواع.
الذاكرة لا تستمر:
تأكد من تمرير نفس threadId عبر الرسائل المرتبطة. كل سلسلة محادثة تحتفظ بسجل محادثاتها الخاص.
حدود المعدل مع مزودي النماذج: أضف منطق إعادة المحاولة لأدواتك وفكّر في استخدام نماذج مختلفة لمهام مختلفة (مثلاً GPT-4o-mini لاستدعاءات الأدوات البسيطة، Claude للتحليل العميق).
الخطوات التالية
الآن بعد أن أصبح لديك تطبيق Mastra يعمل، فكّر في استكشاف:
- توثيق Mastra — مرجع API كامل وأدلة
- أنظمة متعددة الوكلاء — أنشئ وكلاء يفوضون المهام لوكلاء آخرين
- تكاملات مخصصة — اتصل بقواعد البيانات وواجهات API وخدمات الطرف الثالث
- مراقبة الإنتاج — أضف تتبعًا باستخدام OpenTelemetry لتصحيح الأخطاء
- وكلاء صوتيين — أضف قدرات تحويل الكلام إلى نص والنص إلى كلام
الخلاصة
يجلب Mastra البنية وأمان الأنواع لتطوير تطبيقات الذكاء الاصطناعي. بدلاً من ربط أدوات متباينة بكود لاصق، تحصل على إطار عمل موحد حيث تعمل الوكلاء والأدوات وسير العمل و RAG والتقييمات معًا بسلاسة في TypeScript.
النقاط الرئيسية من هذا الدليل:
- الوكلاء هم الوحدة الأساسية — يفكرون في الأهداف ويستخدمون الأدوات
- الأدوات توسع قدرات الوكيل بدوال محددة الأنواع ومتحقق منها
- سير العمل يوفر أنابيب حتمية متعددة الخطوات
- RAG يثبت استجابات الوكيل في بياناتك الخاصة
- الذاكرة تحافظ على السياق عبر المحادثات
- التقييمات تضمن بقاء جودة المخرجات عالية
مع Mastra، يمكنك الانتقال من النموذج الأولي إلى تطبيق ذكاء اصطناعي جاهز للإنتاج بدون مغادرة بيئة TypeScript. ابدأ ببساطة بوكيل واحد وأداة واحدة، ثم توسّع إلى سير عمل متعدد الوكلاء مع نمو متطلباتك.
ناقش مشروعك معنا
نحن هنا للمساعدة في احتياجات تطوير الويب الخاصة بك. حدد موعدًا لمناقشة مشروعك وكيف يمكننا مساعدتك.
دعنا نجد أفضل الحلول لاحتياجاتك.
مقالات ذات صلة

بناء وكيل ذكاء اصطناعي مستقل باستخدام Agentic RAG و Next.js
تعلم كيف تبني وكيل ذكاء اصطناعي يقرر بشكل مستقل متى وكيف يسترجع المعلومات من قواعد البيانات المتجهية. دليل عملي شامل باستخدام Vercel AI SDK و Next.js مع أمثلة قابلة للتنفيذ.

بناء وكلاء الذكاء الاصطناعي من الصفر باستخدام TypeScript: إتقان نمط ReAct مع Vercel AI SDK
تعلّم كيفية بناء وكلاء الذكاء الاصطناعي من الأساس باستخدام TypeScript. يغطي هذا الدليل التعليمي نمط ReAct، واستدعاء الأدوات، والاستدلال متعدد الخطوات، وحلقات الوكلاء الجاهزة للإنتاج مع Vercel AI SDK.

بناء وكلاء ذكاء اصطناعي باستخدام Google ADK و TypeScript: دليل شامل من الصفر
تعلم كيف تبني وكلاء ذكاء اصطناعي احترافيين باستخدام Google Agent Development Kit (ADK) و TypeScript. دليل عملي شامل يغطي إنشاء الأدوات، تنسيق الوكلاء المتعددين، وأنماط الإنتاج.