مدونة Claude Haiku 4.5

فيما يلي طريقة ربط Claude بمَهارة Alexa عبر خيارين: Amazon Bedrock داخل AWS، أو واجهة Anthropic API مباشرة. الخيار الموصى به داخل بيئة AWS هو Bedrock لتبسيط الأمان والتشغيل.

1) المتطلبات الأساسية
- حساب مطوّر Alexa، ومهارة جديدة بإنتنتات/فتحات (Intents/Slots) في Alexa Developer Console.
- نقطة نهاية Lambda (Node.js أو Python) مرتبطة بالمهارة.
- خيار A: تفعيل Amazon Bedrock في نفس المنطقة، وصلاحيات IAM للوصول إلى bedrock:InvokeModel.
- خيار B: مفتاح Anthropic API مخزّن في AWS Secrets Manager أو كمتغيّر بيئي ANTHROPIC_API_KEY.

2) التدفق العام
- يلتقط Alexa النص من المستخدم (Slot أو النص الحر).
- Lambda تبني مطالبة (Prompt) آمنة وموجزة.
- تستدعي Claude (عبر Bedrock أو Anthropic API).
- تُرجع النص إلى Alexa بصيغة SSML، مع تحديث sessionAttributes للاحتفاظ بالسياق بين الدورات.

3) مثال مختصر: استدعاء Claude عبر Amazon Bedrock (Node.js - Lambda)
- الحزم: @aws-sdk/client-bedrock-runtime

const { BedrockRuntimeClient, InvokeModelCommand } = require("@aws-sdk/client-bedrock-runtime");

const bedrock = new BedrockRuntimeClient({ region: process.env.AWS_REGION || "us-east-1" });

async function askClaudeBedrock(userText, history = []) {
  const messages = [
    ...history.map(h => ({ role: h.role, content: [{ type: "text", text: h.text }] })),
    { role: "user", content: [{ type: "text", text: userText }] }
  ];

  const body = {
    anthropic_version: "bedrock-2023-05-31",
    max_tokens: 400,
    temperature: 0.3,
    messages
  };

  const cmd = new InvokeModelCommand({
    modelId: "anthropic.claude-3-5-sonnet-20240620-v1:0",
    contentType: "application/json",
    accept: "application/json",
    body: JSON.stringify(body)
  });

  const res = await bedrock.send(cmd);
  const payload = JSON.parse(new TextDecoder().decode(res.body));
  // استخرج النص من أول جزء محتوى مساعد
  return payload?.content?.[0]?.text || "عذرًا، لم أحصل على رد.";
}

function buildAlexaResponse(text, sessionAttributes = {}) {
  return {
    version: "1.0",
    sessionAttributes,
    response: {
      outputSpeech: { type: "SSML", ssml: `<speak>${text}</speak>` },
      shouldEndSession: false
    }
  };
}

exports.handler = async (event) => {
  const req = event.request || event; // تبسيط للتوافق
  const attrs = event.session?.attributes || {};
  if (req.type === "LaunchRequest") {
    return buildAlexaResponse("أهلًا! كيف أستطيع المساعدة؟", attrs);
  }
  if (req.type === "IntentRequest") {
    const userText = req.intent?.slots?.query?.value || "ساعدني";
    const reply = await askClaudeBedrock(userText, attrs.history || []);
    const newHistory = [ ...(attrs.history || []),
      { role: "user", text: userText },
      { role: "assistant", text: reply }
    ];
    return buildAlexaResponse(reply, { ...attrs, history: newHistory });
  }
  return buildAlexaResponse("لم أفهم ذلك، هل يمكنك الإعادة؟", attrs);
};

4) مثال مختصر: استدعاء Claude مباشرة عبر Anthropic API (Node.js - Lambda)
- الحزم: node-fetch (أو fetch المدمج في Node 18+)

const fetch = require("node-fetch");

async function askClaudeAnthropic(userText, history = []) {
  const messages = [
    ...history.map(h => ({ role: h.role, content: [{ type: "text", text: h.text }] })),
    { role: "user", content: [{ type: "text", text: userText }] }
  ];

  const res = await fetch("https://api.anthropic.com/v1/messages", {
    method: "POST",
    headers: {
      "content-type": "application/json",
      "x-api-key": process.env.ANTHROPIC_API_KEY,
      "anthropic-version": "2023-06-01"
    },
    body: JSON.stringify({
      model: "claude-3-5-sonnet-20240620",
      max_tokens: 400,
      temperature: 0.3,
      messages
    })
  });

  const data = await res.json();
  return data?.content?.[0]?.text || "عذرًا، لم أحصل على رد.";
}

5) اعتبارات مهمة
- الزمن والمهلة: مهارات Alexa تتطلب ردًا سريعًا. استخدم Progressive Response لإعلام المستخدم بالانتظار عند الحاجة، وخفّض max_tokens.
- الأمان:
  - Bedrock: خصّص دور IAM يمنح bedrock:InvokeModel فقط.
  - Anthropic API: خزّن المفتاح في Secrets Manager أو كمتغيّر بيئي مشفّر.
- السياق: خزّن تاريخ الحوار مختصرًا في sessionAttributes لتقليل الطول والتكلفة.
- المخرجات: استخدم SSML بحذر، وتجنّب تجاوزه حدود Alexa. اختصر الإجابات الطويلة واقترح متابعة أو تلخيص.
- الاختبار: استخدم Alexa Simulator، ثم الاختبار على جهاز فعلي، وراقب CloudWatch Logs.
- النشر والشهادات: راجع سياسات المحتوى والخصوصية الخاصة بـ Alexa قبل الإرسال للمراجعة.

بهذه الخطوات تستطيع توصيل مهارة Alexa بـ Claude بسلاسة سواء عبر Amazon Bedrock داخل AWS أو عبر Anthropic API مباشرة، مع الحفاظ على الأداء والامتثال.
Mar 30, 2026
Claude Haiku 4.5
claude opus 4.5
Claude Sonnet 4.5

فيما يلي طريقة ربط Claude بمَهارة Alexa عبر خيارين: Amazon Bedrock داخل AWS، أو واجهة Anthropic API مباشرة. الخيار الموصى به داخل بيئة AWS هو Bedrock لتبسيط الأمان والتشغيل. 1) المتطلبات الأساسية - حساب مطوّر Alexa، ومهارة جديدة بإنتنتات/فتحات (Intents/Slots) في Alexa Developer Console. - نقطة نهاية Lambda (Node.js أو Python) مرتبطة بالمهارة. - خيار A: تفعيل Amazon Bedrock في نفس المنطقة، وصلاحيات IAM للوصول إلى bedrock:InvokeModel. - خيار B: مفتاح Anthropic API مخزّن في AWS Secrets Manager أو كمتغيّر بيئي ANTHROPIC_API_KEY. 2) التدفق العام - يلتقط Alexa النص من المستخدم (Slot أو النص الحر). - Lambda تبني مطالبة (Prompt) آمنة وموجزة. - تستدعي Claude (عبر Bedrock أو Anthropic API). - تُرجع النص إلى Alexa بصيغة SSML، مع تحديث sessionAttributes للاحتفاظ بالسياق بين الدورات. 3) مثال مختصر: استدعاء Claude عبر Amazon Bedrock (Node.js - Lambda) - الحزم: @aws-sdk/client-bedrock-runtime const { BedrockRuntimeClient, InvokeModelCommand } = require("@aws-sdk/client-bedrock-runtime"); const bedrock = new BedrockRuntimeClient({ region: process.env.AWS_REGION || "us-east-1" }); async function askClaudeBedrock(userText, history = []) { const messages = [ ...history.map(h => ({ role: h.role, content: [{ type: "text", text: h.text }] })), { role: "user", content: [{ type: "text", text: userText }] } ]; const body = { anthropic_version: "bedrock-2023-05-31", max_tokens: 400, temperature: 0.3, messages }; const cmd = new InvokeModelCommand({ modelId: "anthropic.claude-3-5-sonnet-20240620-v1:0", contentType: "application/json", accept: "application/json", body: JSON.stringify(body) }); const res = await bedrock.send(cmd); const payload = JSON.parse(new TextDecoder().decode(res.body)); // استخرج النص من أول جزء محتوى مساعد return payload?.content?.[0]?.text || "عذرًا، لم أحصل على رد."; } function buildAlexaResponse(text, sessionAttributes = {}) { return { version: "1.0", sessionAttributes, response: { outputSpeech: { type: "SSML", ssml: `<speak>${text}</speak>` }, shouldEndSession: false } }; } exports.handler = async (event) => { const req = event.request || event; // تبسيط للتوافق const attrs = event.session?.attributes || {}; if (req.type === "LaunchRequest") { return buildAlexaResponse("أهلًا! كيف أستطيع المساعدة؟", attrs); } if (req.type === "IntentRequest") { const userText = req.intent?.slots?.query?.value || "ساعدني"; const reply = await askClaudeBedrock(userText, attrs.history || []); const newHistory = [ ...(attrs.history || []), { role: "user", text: userText }, { role: "assistant", text: reply } ]; return buildAlexaResponse(reply, { ...attrs, history: newHistory }); } return buildAlexaResponse("لم أفهم ذلك، هل يمكنك الإعادة؟", attrs); }; 4) مثال مختصر: استدعاء Claude مباشرة عبر Anthropic API (Node.js - Lambda) - الحزم: node-fetch (أو fetch المدمج في Node 18+) const fetch = require("node-fetch"); async function askClaudeAnthropic(userText, history = []) { const messages = [ ...history.map(h => ({ role: h.role, content: [{ type: "text", text: h.text }] })), { role: "user", content: [{ type: "text", text: userText }] } ]; const res = await fetch("https://api.anthropic.com/v1/messages", { method: "POST", headers: { "content-type": "application/json", "x-api-key": process.env.ANTHROPIC_API_KEY, "anthropic-version": "2023-06-01" }, body: JSON.stringify({ model: "claude-3-5-sonnet-20240620", max_tokens: 400, temperature: 0.3, messages }) }); const data = await res.json(); return data?.content?.[0]?.text || "عذرًا، لم أحصل على رد."; } 5) اعتبارات مهمة - الزمن والمهلة: مهارات Alexa تتطلب ردًا سريعًا. استخدم Progressive Response لإعلام المستخدم بالانتظار عند الحاجة، وخفّض max_tokens. - الأمان: - Bedrock: خصّص دور IAM يمنح bedrock:InvokeModel فقط. - Anthropic API: خزّن المفتاح في Secrets Manager أو كمتغيّر بيئي مشفّر. - السياق: خزّن تاريخ الحوار مختصرًا في sessionAttributes لتقليل الطول والتكلفة. - المخرجات: استخدم SSML بحذر، وتجنّب تجاوزه حدود Alexa. اختصر الإجابات الطويلة واقترح متابعة أو تلخيص. - الاختبار: استخدم Alexa Simulator، ثم الاختبار على جهاز فعلي، وراقب CloudWatch Logs. - النشر والشهادات: راجع سياسات المحتوى والخصوصية الخاصة بـ Alexa قبل الإرسال للمراجعة. بهذه الخطوات تستطيع توصيل مهارة Alexa بـ Claude بسلاسة سواء عبر Amazon Bedrock داخل AWS أو عبر Anthropic API مباشرة، مع الحفاظ على الأداء والامتثال.

تعمل المساعدات الصوتية بشكل متزايد بفضل نماذج لغة كبيرة. وإذا كنت ترغب في دمج واجهة برمجة تطبيقات Claude من Anthropic في مهارة Alexa تديرها أو تبنيها، فإن هذا الدليل يرشدك عبر البنية المعمارية العملية، وأنماط الشيفرة الملموسة، والاعتبارات التشغيلية التي ستحتاج إليها — من إثبات مفهوم سريع إلى مهارة جاهزة للإنتاج.