ذیل میں Alexa اسکل میں Claude شامل کرنے کا مختصر، عملی طریقہ کار دیا گیا ہے۔ آپ دو راستوں میں سے ایک اختیار کریں: - AWS Bedrock کے ذریعے (سفارش کردہ: AWS IAM، نیٹ ورکنگ اور لیٹنسی کے لحاظ سے ہموار) - Anthropic Messages API براہِ راست 1) بنیادی سیٹ اپ - Alexa Developer Console میں اسکل بنائیں (انٹینٹس/نمونے جملے طے کریں)۔ - بیک اینڈ کے لیے AWS Lambda منتخب کریں (Node.js یا Python) اور اسے اسکل سے لنک کریں۔ - لیٹنسی دھیان: Alexa کو 8 سیکنڈ کے اندر جواب درکار ہوتا ہے؛ طویل جنریشن کی صورت میں Progressive Response استعمال کریں۔ 2) Bedrock کے ذریعے Claude (سفارش کردہ) - AWS Console > Bedrock میں Anthropic ماڈلز ایکٹیویٹ کریں (مثلاً us-east-1)۔ - Lambda کے رول میں اجازتیں شامل کریں: - bedrock:InvokeModel - bedrock:InvokeModelWithResponseStream (اگر سٹریمنگ چاہیے) - ماحول کے متغیرات: REGION، MODEL_ID وغیرہ (کوڈ میں ہارڈ کوڈ نہ کریں)۔ مثال (Node.js Lambda + Bedrock): - پیکیجز: ask-sdk-core، @aws-sdk/client-bedrock-runtime const Alexa = require('ask-sdk-core'); const { BedrockRuntimeClient, InvokeModelCommand } = require('@aws-sdk/client-bedrock-runtime'); const bedrock = new BedrockRuntimeClient({ region: process.env.AWS_REGION || 'us-east-1' }); const MODEL_ID = process.env.MODEL_ID || 'anthropic.claude-3-5-sonnet-20241022-v1:0'; async function askClaude(userText, history = []) { const messages = [ ...history, { role: 'user', content: [{ type: 'text', text: userText }] } ]; const body = JSON.stringify({ anthropic_version: 'bedrock-2023-05-31', max_tokens: 400, temperature: 0.5, messages }); const cmd = new InvokeModelCommand({ modelId: MODEL_ID, contentType: 'application/json', accept: 'application/json', body }); const res = await bedrock.send(cmd); const parsed = JSON.parse(new TextDecoder().decode(res.body)); const text = parsed?.content?.[0]?.text || ''; return text; } const LaunchRequestHandler = { canHandle(h) { return Alexa.getRequestType(h.requestEnvelope) === 'LaunchRequest'; }, async handle(h) { const speak = 'آپ مجھ سے کوئی بھی سوال پوچھ سکتے ہیں۔'; return h.responseBuilder.speak(speak).reprompt(speak).getResponse(); } }; const AskIntentHandler = { canHandle(h) { return Alexa.getRequestType(h.requestEnvelope) === 'IntentRequest' && Alexa.getIntentName(h.requestEnvelope) === 'AskIntent'; }, async handle(h) { const slots = h.requestEnvelope.request.intent.slots || {}; const userText = slots.question?.value || 'Hello'; const attrs = h.attributesManager.getSessionAttributes() || {}; attrs.history = attrs.history || []; // مثال: آخری 2 تبادلے رکھیں // لیٹنسی کم کرنے کو Progressive Response try { const ds = h.serviceClientFactory.getDirectiveService(); await ds.enqueue({ header: { requestId: h.requestEnvelope.request.requestId }, directive: { type: 'VoicePlayer.Speak', speech: 'ایک لمحہ، میں دیکھ رہا ہوں.' } }); } catch (e) { /* optional */ } const reply = await askClaude(userText, attrs.history.slice(-4)); // حد سے لمبا متن ہو تو مختصر کریں const speak = reply.length > 7500 ? reply.slice(0, 7400) + '...' : reply; // تاریخچہ اپڈیٹ attrs.history.push({ role: 'user', content: [{ type: 'text', text: userText }] }); attrs.history.push({ role: 'assistant', content: [{ type: 'text', text: reply }] }); attrs.history = attrs.history.slice(-6); h.attributesManager.setSessionAttributes(attrs); return h.responseBuilder .speak(speak) .reprompt('کیا آپ مزید جاننا چاہیں گے؟') .getResponse(); } }; exports.handler = Alexa.SkillBuilders.custom() .withApiClient(new Alexa.DefaultApiClient()) .addRequestHandlers(LaunchRequestHandler, AskIntentHandler) .lambda(); اہم نوٹس (Bedrock): - MODEL_ID علاقائی طور پر بدل سکتا ہے (مثلاً anthropic.claude-3-haiku-20240307-v1:0)، کنسول میں دستیاب شناخت چیک کریں۔ - جواب لمبا ہو تو تلخیص/کلیمپ کریں تاکہ Alexa کے 8000 حروف کے قریب حدود نہ ٹوٹیں۔ - CloudWatch لاگز سے ٹربل شوٹ کریں۔ 3) Anthropic API براہِ راست (متبادل) - API Key کو AWS Secrets Manager میں محفوظ رکھیں؛ Lambda میں سیکرٹ حاصل کریں۔ - HTTPS کال: https://api.anthropic.com/v1/messages - ہیڈرز: x-api-key: YOUR_KEY، anthropic-version: 2023-06-01، content-type: application/json - باڈی (مثال): { "model": "claude-3-5-sonnet-20241022", "max_tokens": 400, "temperature": 0.5, "messages": [{ "role": "user", "content": "Hello Claude" }] } - جواب سے content[0].text نکالیں اور Alexa کی اسپیچ میں استعمال کریں۔ - لیٹنسی کم رکھنے کے لیے Progressive Response ضرور بھیجیں؛ ٹائم آؤٹ ہینڈلنگ شامل کریں۔ 4) گفتگو کا سیاق و سباق (Memory) - sessionAttributes میں آخری چند میسیجز رکھیں؛ ہر راؤنڈ میں Claude کو مختصر تاریخچہ دیں۔ - ذاتی معلومات کم سے کم بھیجیں؛ PII سے پرہیز کریں۔ 5) ٹیسٹنگ اور تعیناتی - Alexa Developer Console کے Test ٹیب میں آزمائیں۔ - مختلف سوالات/طویل جوابات/خاموشی کے کیسز ہینڈل کریں۔ - اسکل پرمیشنز، CloudWatch میٹرکس، اور خرچ (Bedrock/Anthropic) مانیٹر کریں۔ 6) عام مسائل اور حل - Timeout/8s: Progressive Response + max_tokens کم + جواب مختصر۔ - ریجن/ماڈل ایررز: Bedrock ریجن اور MODEL_ID درست رکھیں۔ - لمبا جواب/SSML ایررز: مخصوص حروف ہٹائیں، SSML ویلیڈ رکھیں، حروف حد کے اندر رکھیں۔ یہ ورک فلو آپ کو Alexa اسکل میں Claude کو محفوظ، کم لیٹنسی اور پروڈکشن کے قابل طریقے سے ضم کرنے میں مدد دے گا۔

CometAPI
AnnaDec 29, 2025
ذیل میں Alexa اسکل میں Claude شامل کرنے کا مختصر، عملی طریقہ کار دیا گیا ہے۔ آپ دو راستوں میں سے ایک اختیار کریں:
- AWS Bedrock کے ذریعے (سفارش کردہ: AWS IAM، نیٹ ورکنگ اور لیٹنسی کے لحاظ سے ہموار)
- Anthropic Messages API براہِ راست

1) بنیادی سیٹ اپ
- Alexa Developer Console میں اسکل بنائیں (انٹینٹس/نمونے جملے طے کریں)۔
- بیک اینڈ کے لیے AWS Lambda منتخب کریں (Node.js یا Python) اور اسے اسکل سے لنک کریں۔
- لیٹنسی دھیان: Alexa کو 8 سیکنڈ کے اندر جواب درکار ہوتا ہے؛ طویل جنریشن کی صورت میں Progressive Response استعمال کریں۔

2) Bedrock کے ذریعے Claude (سفارش کردہ)
- AWS Console > Bedrock میں Anthropic ماڈلز ایکٹیویٹ کریں (مثلاً us-east-1)۔
- Lambda کے رول میں اجازتیں شامل کریں:
  - bedrock:InvokeModel
  - bedrock:InvokeModelWithResponseStream (اگر سٹریمنگ چاہیے)
- ماحول کے متغیرات: REGION، MODEL_ID وغیرہ (کوڈ میں ہارڈ کوڈ نہ کریں)۔

مثال (Node.js Lambda + Bedrock):
- پیکیجز: ask-sdk-core، @aws-sdk/client-bedrock-runtime

const Alexa = require('ask-sdk-core');
const { BedrockRuntimeClient, InvokeModelCommand } = require('@aws-sdk/client-bedrock-runtime');

const bedrock = new BedrockRuntimeClient({ region: process.env.AWS_REGION || 'us-east-1' });
const MODEL_ID = process.env.MODEL_ID || 'anthropic.claude-3-5-sonnet-20241022-v1:0';

async function askClaude(userText, history = []) {
  const messages = [
    ...history,
    { role: 'user', content: [{ type: 'text', text: userText }] }
  ];
  const body = JSON.stringify({
    anthropic_version: 'bedrock-2023-05-31',
    max_tokens: 400,
    temperature: 0.5,
    messages
  });
  const cmd = new InvokeModelCommand({
    modelId: MODEL_ID,
    contentType: 'application/json',
    accept: 'application/json',
    body
  });
  const res = await bedrock.send(cmd);
  const parsed = JSON.parse(new TextDecoder().decode(res.body));
  const text = parsed?.content?.[0]?.text || '';
  return text;
}

const LaunchRequestHandler = {
  canHandle(h) { return Alexa.getRequestType(h.requestEnvelope) === 'LaunchRequest'; },
  async handle(h) {
    const speak = 'آپ مجھ سے کوئی بھی سوال پوچھ سکتے ہیں۔';
    return h.responseBuilder.speak(speak).reprompt(speak).getResponse();
  }
};

const AskIntentHandler = {
  canHandle(h) { return Alexa.getRequestType(h.requestEnvelope) === 'IntentRequest'
    && Alexa.getIntentName(h.requestEnvelope) === 'AskIntent'; },
  async handle(h) {
    const slots = h.requestEnvelope.request.intent.slots || {};
    const userText = slots.question?.value || 'Hello';
    const attrs = h.attributesManager.getSessionAttributes() || {};
    attrs.history = attrs.history || []; // مثال: آخری 2 تبادلے رکھیں
    // لیٹنسی کم کرنے کو Progressive Response
    try {
      const ds = h.serviceClientFactory.getDirectiveService();
      await ds.enqueue({
        header: { requestId: h.requestEnvelope.request.requestId },
        directive: {
          type: 'VoicePlayer.Speak',
          speech: 'ایک لمحہ، میں دیکھ رہا ہوں.'
        }
      });
    } catch (e) { /* optional */ }

    const reply = await askClaude(userText, attrs.history.slice(-4));
    // حد سے لمبا متن ہو تو مختصر کریں
    const speak = reply.length > 7500 ? reply.slice(0, 7400) + '...' : reply;

    // تاریخچہ اپڈیٹ
    attrs.history.push({ role: 'user', content: [{ type: 'text', text: userText }] });
    attrs.history.push({ role: 'assistant', content: [{ type: 'text', text: reply }] });
    attrs.history = attrs.history.slice(-6);
    h.attributesManager.setSessionAttributes(attrs);

    return h.responseBuilder
      .speak(speak)
      .reprompt('کیا آپ مزید جاننا چاہیں گے؟')
      .getResponse();
  }
};

exports.handler = Alexa.SkillBuilders.custom()
  .withApiClient(new Alexa.DefaultApiClient())
  .addRequestHandlers(LaunchRequestHandler, AskIntentHandler)
  .lambda();

اہم نوٹس (Bedrock):
- MODEL_ID علاقائی طور پر بدل سکتا ہے (مثلاً anthropic.claude-3-haiku-20240307-v1:0)، کنسول میں دستیاب شناخت چیک کریں۔
- جواب لمبا ہو تو تلخیص/کلیمپ کریں تاکہ Alexa کے 8000 حروف کے قریب حدود نہ ٹوٹیں۔
- CloudWatch لاگز سے ٹربل شوٹ کریں۔

3) Anthropic API براہِ راست (متبادل)
- API Key کو AWS Secrets Manager میں محفوظ رکھیں؛ Lambda میں سیکرٹ حاصل کریں۔
- HTTPS کال: https://api.anthropic.com/v1/messages
- ہیڈرز: x-api-key: YOUR_KEY، anthropic-version: 2023-06-01، content-type: application/json
- باڈی (مثال):
{
  "model": "claude-3-5-sonnet-20241022",
  "max_tokens": 400,
  "temperature": 0.5,
  "messages": [{ "role": "user", "content": "Hello Claude" }]
}
- جواب سے content[0].text نکالیں اور Alexa کی اسپیچ میں استعمال کریں۔
- لیٹنسی کم رکھنے کے لیے Progressive Response ضرور بھیجیں؛ ٹائم آؤٹ ہینڈلنگ شامل کریں۔

4) گفتگو کا سیاق و سباق (Memory)
- sessionAttributes میں آخری چند میسیجز رکھیں؛ ہر راؤنڈ میں Claude کو مختصر تاریخچہ دیں۔
- ذاتی معلومات کم سے کم بھیجیں؛ PII سے پرہیز کریں۔

5) ٹیسٹنگ اور تعیناتی
- Alexa Developer Console کے Test ٹیب میں آزمائیں۔
- مختلف سوالات/طویل جوابات/خاموشی کے کیسز ہینڈل کریں۔
- اسکل پرمیشنز، CloudWatch میٹرکس، اور خرچ (Bedrock/Anthropic) مانیٹر کریں۔

6) عام مسائل اور حل
- Timeout/8s: Progressive Response + max_tokens کم + جواب مختصر۔
- ریجن/ماڈل ایررز: Bedrock ریجن اور MODEL_ID درست رکھیں۔
- لمبا جواب/SSML ایررز: مخصوص حروف ہٹائیں، SSML ویلیڈ رکھیں، حروف حد کے اندر رکھیں۔

یہ ورک فلو آپ کو Alexa اسکل میں Claude کو محفوظ، کم لیٹنسی اور پروڈکشن کے قابل طریقے سے ضم کرنے میں مدد دے گا۔

وائس اسسٹنٹس اب تیزی سے بڑے لینگویج ماڈلز سے پاور ہو رہے ہیں۔ اگر آپ Anthropic کے Claude API کو اس Alexa اسکل میں لانا چاہتے ہیں جسے آپ برقرار رکھتے ہیں یا بناتے ہیں، تو یہ گائیڈ عملی آرکیٹیکچر، ٹھوس کوڈ پیٹرنز، اور آپریشنل غوروفکر تک آپ کی رہنمائی کرے گا — تیز پروف آف کانسیپٹ سے پروڈکشن گریڈ اسکل تک۔

CometAPI ایک API-ایگریگیشن گیٹ وے ہے جو سیکڑوں بڑے لینگویج ماڈلز (LLMs) کے لیے متحد، OpenAI-کمپیٹیبل انٹرفیس فراہم کرتا ہے، جن میں Anthropic کی Claude فیملی (Sonnet، Opus، اور متعلقہ ویریئنٹس) شامل ہیں۔ Anthropic کے API کو براہِ راست کال کرنے کے بجائے، صارفین CometAPI کے اینڈپوائنٹس کو کال کرکے نام سے Claude ماڈل منتخب کر سکتے ہیں؛ CometAPI ماڈل روٹنگ، بلنگ ایگریگیشن، اور بہت سے کیسز میں سادہ آتھنٹیکیشن اور پیرامیٹر سرفیس ہینڈل کرتا ہے۔

Alexa اسکل کے نقطۂ نظر سے، CometAPI کے ذریعے Claude ماڈل شامل کرنے کے تین عملی فائدے ہیں: (1) تازہ ترین Claude ریلیزز (Sonnet / Opus ویریئنٹس) تک تیز رسائی، بغیر کلائنٹ کوڈ دوبارہ لکھے جب ماڈل نام بدلیں؛ (2) ایک مستقل، OpenAI-اسٹائل REST سرفیس جسے بہت سے SDKs پہلے سے سپورٹ کرتے ہیں؛ اور (3) مرکوز یوزج اینالیٹکس، تھروٹلنگ، اور پرائسنگ پلانز جو متعدد براہِ راست وینڈر کانٹریکٹس کے مقابلے میں آسانی سے منظم ہو سکتے ہیں۔

Claude کیا ہے اور آپ اسے Alexa اسکل میں کیوں شامل کریں؟

Claude، Anthropic کے بڑے لینگویج ماڈلز اور گفتگوائی APIs (Messages API) کا خاندان ہے جسے ڈویلپرز اپنی ایپلی کیشنز سے کال کر سکتے ہیں۔ Claude ماڈلز (حالیہ طور پر Opus/Sonnet/Haiku سیریز میں اپڈیٹ، Claude Opus 4.5، Claude Sonnet 4.5، Claude Haiku 4.5) اعلی معیار کی نیچرل لینگویج جنریشن، ریزننگ، اور خاص ایجنٹ صلاحیتیں فراہم کرتے ہیں۔ Claude کو Alexa اسکل میں ضم کرنے سے آپ رول بیسڈ ریسپانسز کو LLM-ڈرائیون گفتگوائی برین سے بدل یا بہتر کر سکتے ہیں جو خلاصہ بنا سکے، استدلال کرے، شخصی بنائے، یا پیچیدہ کاموں کے لیے “ایجنٹ” کے طور پر کام کرے۔

کون سے حصے آپس میں بات کرتے ہیں؟

اعلی سطح پر انٹیگریشن پیٹرن سیدھا ہے: Alexa ڈیوائس (Echo) وائس ان پٹ Alexa Skills بیک اینڈ (آپ کا اسکل) کو بھیجتا ہے۔ آپ کا بیک اینڈ — عموماً AWS Lambda فنکشن یا ایک HTTPS سروس — صارف کے ارادے کو ٹیکسٹ پرامپٹ میں بدلتا ہے اور Claude API کو کال کرتا ہے۔ Claude کا ریسپانس پھر اسپیچ (SSML) میں بدلا جاتا ہے اور پلے بیک کے لیے Alexa کو واپس بھیجا جاتا ہے۔ اختیاری طور پر، آپ اس تجربے کو زیادہ ریسپانسو اور طاقتور بنانے کے لیے اسٹریمنگ، پروگریسیو ریسپانسز، یا Agent/Tool پیٹرنز استعمال کر سکتے ہیں۔

Claude کیوں منتخب کریں؟

Claude جدید Messages API (REST + SDKs) فراہم کرتا ہے اور اسٹریمنگ ریسپانسز (SSE)، ٹولز/ایجنٹ سپورٹ (Agent Skills & Model Context Protocol)، اور کارکردگی/لاگت پروفائلز کے حامل ٹئیرڈ ماڈلز سپورٹ کرتا ہے — جو اسے پیچیدہ گفتگوائی یا ایجنٹک وائس تجربات کے لیے موزوں بناتا ہے۔ اگر آپ محفوظ طرزِ عمل پر مرکوز ماڈل چاہتے ہیں جس میں بیرونی ڈیٹا سے جڑنے کے لیے ٹولنگ اور کم محسوس شدہ لیٹنسی کے لیے اسٹریمنگ کا برتاؤ ہو، تو Claude استعمال کریں۔

آپ CometAPI کے Claude کے ساتھ Alexa اسکل کو کیسے آرکیٹیکٹ کریں؟

کون سی ہائی لیول آرکیٹیکچرز قابلِ عمل ہیں؟

1. براہِ راست Lambda → CometAPI
ایک Alexa اسکل (جو عموماً AWS Lambda فنکشن سے بیکڈ ہوتا ہے) ہر یوزر ٹرن کے لیے ہم وقت (synchronous) طریقے سے CometAPI کا REST اینڈپوائنٹ کال کرتا ہے۔ Lambda چیٹ کمپلیشن / میسیجز پے لوڈ بناتا ہے، اسے CometAPI کو فارورڈ کرتا ہے، اور ماڈل کا ٹیکسٹ Alexa کو TTS/SSML کے لیے واپس کرتا ہے۔ یہ پیٹرن سادہ ہے اور کم سے معتدل ٹریفک اور پروف آف کانسیپٹ کے لیے موزوں ہے۔ یہ کم کمپوننٹس رکھتا ہے لہٰذا خرابی کے مقامات کم ہوتے ہیں، مگر یہ ریٹ لمٹ اور ریٹرائز لاجک کو Lambda میں رکھتا ہے۔

2. اسکل → بیک اینڈ سروس → CometAPI (پروڈکشن کے لیے تجویز کردہ)
Alexa اسکل درخواستوں کو ایک مخصوص بیک اینڈ مائیکرو سروس (Fargate/ECS، EKS، یا آٹو اسکیلنگ EC2 فلیٹ) کی طرف فارورڈ کرتا ہے۔ وہ سروس ذمہ دار ہے:

  • گفتگو کی حالت، کانٹیکسٹ ونڈوز، اور سمریزیشن؛
  • ٹوکن/لاگت اکاؤنٹنگ اور کیشنگ؛
  • ریٹرائیز، بیک آف اور سرکٹ بریکنگ؛
  • ان پٹ/آؤٹ پٹ سیفٹی فلٹرنگ اور PII ریڈیکشن؛
  • اسٹریمنگ/جزوی ریسپانسز (اگر سپورٹ ہوں) اور Alexa کو پروگریسیو اپڈیٹس۔

یہ پیٹرن کراس کٹنگ کنسرنز کو سینٹرلائز کرتا ہے اور ماڈل روٹنگ لاجک کو ممکن بناتا ہے (مثلاً، پیچیدہ ریزننگ کے لیے Claude Opus، مختصر جوابات کے لیے Sonnet منتخب کریں)۔ یہ ان ٹیموں کے لیے تجویز کیا جاتا ہے جنہیں نمو، ریگولیٹری ضروریات، یا پیچیدہ ٹیلیمٹری کی ضرورت ہو۔

Alexa کا وائس لائف سائیکل CometAPI Claude کال سے کیسے میپ ہوتا ہے؟

  1. صارف بولتا ہے → Alexa ڈیوائس ASR انجام دیتا ہے اور آپ کے اسکل (Lambda یا ویب ہُک) کو ایک IntentRequest بھیجتا ہے۔
  2. آپ کا اسکل ٹیکسٹ اور سیشن کانٹیکسٹ (لوکیل، ڈیوائس کی اہلیتیں، یوزر آپٹ اِنز) نکالتا ہے۔
  3. آپ کا کوڈ ایک پرامپٹ تیار کرتا ہے (سسٹم + گفتگو کے ٹرنز + یوزر ٹرن)۔ وائس کے لیے، طوالت گھٹانے والی مختصر سسٹم انسٹرکشن کو ترجیح دیں۔
  4. آپ کی سروس CometAPI کو کال کرتی ہے — یا تو OpenAI-کمپیٹیبل chat/completions اینڈپوائنٹ یا CometAPI-اسپیسیفک messages اینڈپوائنٹ — اور ہدف Claude ماڈل منتخب کرتی ہے۔ بیک اینڈ کو ٹیکسٹ یا اسٹرکچرڈ ریسپانس موصول ہوتا ہے۔
  5. آپ کا اسکل ٹیکسٹ کو SSML / کارڈز میں بدلتا ہے اور Alexa ریسپانس واپس کرتا ہے۔ لمبے جوابات کے لیے، بولنے میں مختصر خلاصہ دیں اور مکمل متن Alexa کمپینین ایپ میں کارڈ کے طور پر بھیجیں۔
  6. مانیٹرنگ اور لاگت اکاؤنٹنگ: Alexa ریکویسٹ آئی ڈی کو CometAPI ریکویسٹ آئی ڈیز اور ماڈل ٹوکن یوزج میٹرکس کے ساتھ ملا کر آبزرویبیلٹی کے لیے کورلیٹ کریں۔

Claude کو Alexa اسکل میں (اینڈ ٹو اینڈ) نافذ کرنے کے ٹھوس مراحل کیا ہیں؟

ذیل میں عملی مرحلہ وار گائیڈ اور ایک نمونہ Node.js Lambda ہینڈلر دیا گیا ہے تاکہ آپ آغاز کر سکیں۔

مرحلہ 1 — Alexa اسکل اور انٹرایکشن ماڈل بنائیں

  1. Alexa Developer Console میں: ایک Custom اسکل بنائیں۔

Intents

ڈیفائن کریں (مثلاً 
OpenChatIntent

،

FollowUpIntent

،

StopIntent

) اور سیمپل اٹرنسز۔ مثال کے طور پر:

  • OpenChatIntent اٹرنسز: “start a chat”، “ask Claude”، “chat with AI”.
  1. Endpoint کو اپنے AWS Lambda ARN (یا HTTPS اینڈپوائنٹ) پر سیٹ کریں۔ ماڈل سیو اور بلڈ کریں۔ مکمل رہنمائی کے لیے Alexa REST APIs اور ڈاکس دیکھیں۔

مرحلہ 2 — Lambda بیک اینڈ نافذ کریں

Lambda کے اندر ہائی لیول فلو:

  1. Alexa ریکویسٹ (JSON) وصول کریں۔
  2. یوزر اٹرنس اور سیشن ڈیٹا نکالیں۔
  3. اختیاری طور پر Alexa کو پروگریسیو ریسپانس بھیجیں (تاکہ صارف “Thinking…” سن سکے) جب آپ Claude کو کال کرتے ہیں۔
  4. Claude کو کال کریں (Anthropic REST API یا Bedrock کے ذریعے)۔ جزوی جوابات کے لیے اسٹریمنگ استعمال کریں۔
  5. Claude ریسپانس کو Alexa آؤٹ پٹ فارمیٹ (SSML تجویز کردہ) میں بدلیں۔
  6. alexa ریسپانس آبجیکٹ ریٹرن کریں۔

ذیل میں ایک مختصر Node.js مثال ہے (قابلِ مطالعہ رکھنے کے لیے ہم ایک طریقہ دکھاتے ہیں — براہِ راست Claude REST کو fetch؛ پروڈکشن میں سیکرٹس کو Secrets Manager میں منتقل کریں اور ایرر ہینڈلنگ/کیشنگ شامل کریں)۔ یہ node-fetch-اسٹائل سنتیکس (Node 18+ رن ٹائمز میں دستیاب) اور CometAPI کی Claude API استعمال کرتا ہے۔

// index.js (AWS Lambda - Node 18+)
import { Handler } from 'aws-lambda';
import fetch from 'node-fetch'; // or global fetch in Node 18+

const CLAUDE_API_URL = process.env.CLAUDE_API_URL || 'https://api.cometapi.com/v1/messages'; // example
const CLAUDE_API_KEY = process.env.CLAUDE_API_KEY; // store in Secrets Manager or Lambda env vars

export const handler = async (event) => {
  // 1. Parse Alexa request
  const alexaRequest = JSON.parse(event.body || JSON.stringify(event));
  const intentName = alexaRequest.request?.intent?.name;
  const userUtterance = alexaRequest.request?.intent?.slots?.userQuery?.value || alexaRequest.request?.intent?.slots?.query?.value;

  // 2. Optional: send progressive response to Alexa (so user gets immediate feedback)
  // (Implementation omitted for brevity; use Alexa Progressive Response API with directive endpoint)

  // 3. Build Claude payload
  const claudePayload = {
    model: "claude-4-opus", // choose model appropriate to your subscription
    messages: [
      { role: "system", content: "You are a helpful assistant for an Alexa skill. Keep responses brief and spoken-friendly." },
      { role: "user", content: userUtterance }
    ],
    max_tokens_to_sample: 800
  };

  // 4. Call Claude (simple non-streaming call example)
  const resp = await fetch(CLAUDE_API_URL, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'x-api-key': CLAUDE_API_KEY
    },
    body: JSON.stringify(claudePayload),
    timeout: 20000 // be mindful of latency; Alexa has timeouts
  });

  if (!resp.ok) {
    console.error('Claude API error', await resp.text());
    return buildAlexaResponse("Sorry, I'm having trouble reaching the assistant right now. Please try again later.");
  }

  const claudeJson = await resp.json();
  // The JSON structure depends on the API or Bedrock wrapper you're using
  const assistantText = claudeJson?.completion || claudeJson?.output?.[0]?.content || extractTextFromClaude(claudeJson);

  // 5. Convert to SSML (shorten if needed)
  const ssml = `<speak>${sanitizeForSSML(assistantText)}</speak>`;

  // 6. Return Alexa response
  return {
    statusCode: 200,
    body: JSON.stringify({
      version: "1.0",
      response: {
        outputSpeech: {
          type: "SSML",
          ssml
        },
        shouldEndSession: false
      }
    })
  };
};

function buildAlexaResponse(text) {
  return {
    statusCode: 200,
    body: JSON.stringify({
      version: "1.0",
      response: {
        outputSpeech: { type: "PlainText", text },
        shouldEndSession: true
      }
    })
  };
}

function sanitizeForSSML(text) {
  return text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
}

function extractTextFromClaude(json) {
  // implement mapping from Claude API response to string
  if (json?.output && Array.isArray(json.output)) {
    return json.output.map(o => o.content).join("\n");
  }
  return (json?.completion || '') + '';
}

نوٹ: اصل Claude API فیلڈز اور اینڈپوائنٹ نام مختلف ہو سکتے ہیں (Anthropic کی ڈاکس messages APIs اور اسٹریمنگ موڈز دکھاتی ہیں)۔ درست پے لوڈ فیلڈز اور اسٹریمنگ سپورٹ کے لیے ہمیشہ تازہ ترین Claude ڈاکس دیکھیں۔

مرحلہ 3 — (اختیاری مگر تجویز کردہ) تیز محسوس شدہ ریسپانس کے لیے اسٹریمنگ استعمال کریں

  • اسٹریمنگ کیوں؟ اسٹریمنگ Alexa کو جزوی آؤٹ پٹ بولنا شروع کرنے دیتی ہے جب ماڈل اب بھی جنریٹ کر رہا ہو۔ یہ محسوس شدہ لیٹنسی کو کم کرتی ہے اور گفتگوائی احساس بہتر کرتی ہے۔ Claude اسٹریمنگ ریسپانسز (SSE یا ویب ساکٹ) سپورٹ کرتا ہے اور پیچیدہ آپریشنز کے لیے "فائن گرینڈ ٹول اسٹریمنگ" رکھتا ہے۔ اسٹریمنگ نافذ کرنے کے لیے ایک غیر ہم وقت چینل درکار ہے: Alexa Progressive Response + کلائنٹ تک چنکڈ اسٹریمنگ یا آپ کے Lambda تک ایک SSE ریلے؛ یا بہتر یہ کہ ایسی انٹرمیڈیئری سروس استعمال کریں جو ڈیوائس کو چنکس پُش کر سکے۔
  • احتیاط: Alexa پلیٹ فارم اپنی ٹائمنگ اور ڈائریکٹو رولز رکھتا ہے۔ عام پیٹرن یہ ہے کہ شروع میں Progressive Response ڈائریکٹو بھیجیں، پھر جب ماڈل مکمل ہو تو آخری اسپیچ آؤٹ پٹ فراہم کریں۔ Alexa ڈیوائس میں نیٹو ریئل ٹائم ٹوکن اسٹریمنگ ڈائریکٹ ممکن نہیں، لہٰذا پروگریسیو ریسپانسز کو بار بار بھیج کر اسٹریمنگ کا تاثر دیں اور آخر میں حتمی ریسپانس دیں۔

مرحلہ 4 — Claude آؤٹ پٹ کو Alexa وائس UX سے میپ کریں

  • جوابات مختصر اور وائس-فرینڈلی رکھیں: Claude طویل متن پیدا کر سکتا ہے — بولنے کے دوران بہت لمبے پیراغراف سے بچنے کے لیے ٹرانسفارم یا ٹرنکیٹ کریں۔ پروسوڈی بہتر بنانے کے لیے SSML ٹیگز (breaks، emphasis) استعمال کریں۔
  • ملٹی ٹرن کانٹیکسٹ ہینڈل کریں: چھوٹی کانٹیکسٹ ونڈوز (یوزر آئی ڈی / گفتگو کی ہسٹری) برقرار رکھیں مگر سرور سائیڈ ہر اٹرنس اسٹور کرنے سے گریز کریں جب تک ضروری نہ ہو۔ فالو اپس کے لیے سیشن اٹریبیوٹس یا شارٹ ٹرم میموری اسٹور (TTL کے ساتھ DynamoDB) استعمال کریں۔
  • ایرر اور فال بیک فلو: اگر Claude ناکام ہو یا غیر محفوظ مواد لوٹائے تو محفوظ فال بیک میسج رکھیں ("میں اس میں مدد نہیں کر سکتی") اور تجزیے کے لیے رپورٹنگ/لاگنگ پاتھ بنائیں۔

آپ اسناد کو کیسے محفوظ رکھیں اور یوزر ڈیٹا کی حفاظت کیسے کریں؟

API کیز اور سیکرٹس کہاں اسٹور کریں؟

  • AWS Secrets Manager پروڈکشن میں CometAPI کی اور دیگر تھرڈ پارٹی اسناد کے لیے تجویز کردہ اسٹور ہے۔ اپنی Lambda یا بیک اینڈ سروس کو ایسا IAM رول دیں جو صرف مطلوبہ سیکرٹ پڑھنے کی محدود اجازت رکھتا ہو۔ شیڈیول پر کیز روٹیٹ کریں اور اگر سپورٹ ہو تو خودکار روٹیشن استعمال کریں۔
  • کیز کو سورس کوڈ یا پبلک ریپوز میں ایمبیڈ نہ کریں۔ اگر آپ جلدی پروٹوٹائپ کے لیے انوائرنمنٹ ویریئبلز استعمال کرتے ہیں تو یقینی بنائیں کہ CI/CD سیکرٹ مینجمنٹ بلڈ پائپ لائنز میں ان ویلیوز کو ریپلیس کرے۔

PII اور حساس وائس ڈیٹا بھیجنے سے کیسے بچیں؟

  • کسی بھی شخصی طور پر شناخت پذیر معلومات (PII) کو CometAPI کو ٹیکسٹ بھیجنے سے پہلے ریڈیکٹ یا اینانومائز کریں۔ نام، پتے، اکاؤنٹ نمبر، اور وہ تمام ڈیٹا ہٹا دیں جو آپ ایکسپورز نہیں کرنا چاہتے۔
  • جب اسکل کو حساس ذاتی ڈیٹا پروسیس کرنا ہو یا پرسنل پروفائل فیچرز استعمال کرنا ہوں تو (Alexa پالیسی کے مطابق) رضامندی لیں۔
  • ریٹینشن اور لاگز: لاگز اور ٹریسز کو ٹیگ کریں تاکہ آڈٹ پروسیسز درخواست پر ماڈل ان پٹس کو ہٹا سکیں؛ اپنی پرائیویسی پالیسی کے مطابق ریٹینشن ونڈوز نافذ کریں۔

آپ لیٹنسی اور Alexa یوزر ایکسپیریئنس کو کیسے مینج کریں؟

پروگریسیو ریسپانسز اور ٹائم آؤٹس کیوں اہم ہیں؟

Alexa عموماً زیادہ تر انٹرفیسز کے لیے تقریباً 8 سیکنڈ کے اندر آپ کے اسکل سے ریسپانس توقع کرتی ہے؛ اگر آپ کا بیک اینڈ (اور ماڈل کال) اس ونڈو سے تجاوز کرے گا، تو آپ کو صارف کو انگیج رکھنے کے لیے Progressive Response API ضرور استعمال کرنا چاہیے۔ پروگریسیو ریسپانسز صارف کو بتاتے ہیں کہ اسکل کام کر رہا ہے (مثلاً، “ایک لمحہ، میں جواب لا رہی ہوں”)، جو وائس انٹریکشنز کے لیے محسوس شدہ لیٹنسی کو کافی بہتر بناتا ہے۔ ارادہ موصول ہوتے ہی اور طویل LLM کال سے پہلے فوراً پروگریسیو ریسپانس نافذ کریں۔

کیا آپ ماڈل آؤٹ پٹ Alexa تک اسٹریم کر سکتے ہیں؟

CometAPI اور بعض Claude ویریئنٹس اسٹریمنگ پرائمٹوز (ٹوکن یا ایونٹ اسٹریمنگ) سپورٹ کرتے ہیں۔ تاہم، Alexa ڈیوائسز ویب UI کی طرح مسلسل ٹوکن اسٹریمنگ قبول نہیں کرتیں۔ عملی طریقہ یہ ہے:

  • پروگریسیو ریسپانسز استعمال کریں تاکہ جنریشن کے دوران مختصر عبوری پیغامات نشر کیے جا سکیں۔
  • اگر آپ کا بیک اینڈ ماڈل سے اسٹریمنگ ٹوکنز وصول کرتا ہے تو بفر کریں اور صرف مکمل جملے یا پیراغراف باقاعدہ وقفوں (مثلاً ہر 800–1200 ملی سیکنڈ) پر پروگریسیو ریسپانسز کے طور پر سامنے لائیں، اور جب تیار ہو تو آخری جامع TTS فراہم کریں۔ اس سے ٹوٹے پھوٹے یا روبوٹک اسپیچ سے بچتے ہیں اور Alexa کے ریسپانس ماڈل کی پاسداری ہوتی ہے۔

وائس فرینڈلی پرامپٹس ڈیزائن کریں

verbosity کو پرامپٹ لیول پر محدود رکھیں۔ ایک سسٹم انسٹرکشن استعمال کریں جیسے:

"آپ ایک مختصر گو، مہذب Alexa وائس اسسٹنٹ ہیں۔ بولنے والا جواب 30 الفاظ سے زیادہ نہ دیں اور طویل خلاصہ Alexa ایپ کے کارڈ میں بھیجنے کی پیشکش کریں۔"

اسٹرکچرڈ آؤٹ پٹ کے لیے، ماڈل سے کہیں کہ وہ JSON واپس کرے جس میں speech اور card فیلڈز ہوں۔ یہ آؤٹ پٹس سرور سائیڈ پارس کریں اور speech کو SSML اور card کو Alexa کمپینین کارڈ سے میپ کریں۔ اس سے ابہام کم ہوتا ہے اور TTS کوالٹی بہتر ہوتی ہے۔

کیا میں Claude کے ریسپانسز کو Alexa تک اسٹریم کر سکتا/سکتی ہوں تاکہ صارفین ٹیکسٹ جنریشن کے ساتھ ساتھ سنیں؟

کیا Claude اسٹریمنگ سپورٹ کرتا ہے، اور Alexa اسے کیسے ہینڈل کرتی ہے؟

Claude اس وقت اسٹریمنگ (Server-Sent Events — SSE) سپورٹ کرتا ہے جب آپ Messages API پر stream:true سیٹ کریں — اس سے آپ کے بیک اینڈ کو بتدریج ٹوکنز ملتے ہیں۔ تاہم، Alexa کا ڈیوائس پلے ماڈل آپ کے بیک اینڈ سے براہِ راست ٹوکن بہ ٹوکن اسپیچ قبول نہیں کرتا۔ عملی پیٹرن یہ ہے:

  1. اپنے بیک اینڈ پر Claude اسٹریمنگ استعمال کریں تاکہ ریسپانس جنریشن کے دوران ہی وصول ہونا شروع ہو۔
  2. جب بیک اینڈ اسٹریمنگ چنکس وصول کرتا ہے تو ایک یا زیادہ Alexa پروگریسیو ریسپانسز بھیجیں تاکہ صارف "میں اس پر کام کر رہی ہوں" جیسے مختصر پیغامات سن سکے۔
  3. جب بیک اینڈ کے پاس کوئی بامعنی چنک (یا مکمل جواب) ہو تو اسے (SSML) سنسیسائز کریں اور ریسپانس دیں۔ بہت لمبے جوابات کے لیے، ریسپانس کو قابلِ ہضم حصوں میں تقسیم کرنے پر غور کریں (اور shouldEndSession اسی کے مطابق سیٹ کریں)۔

اہم پابندیاں: پروگریسیو ریسپانسز مددگار ہیں مگر زیادہ سے زیادہ پروسیسنگ ونڈو میں توسیع نہیں کرتیں؛ Alexa اب بھی مجاز وقت کے اندر مجموعی ریسپانس کی توقع کرتی ہے۔ اسٹریمنگ بیک اینڈ کے انتظار کا وقت کم کر سکتی ہے اور UX بہتر کر سکتی ہے، مگر آپ کو Alexa کے ٹائمنگ ماڈل کے مطابق ڈیزائن کرنا ہوگا۔

تجویز کردہ انجینئرنگ اور UX بہترین طریقہ کار؟

گفتگوائی ڈیزائن

  • بولے جانے والے جوابات مختصر رکھیں — Alexa صارفین جامع جوابات پسند کرتے ہیں۔
  • پیسنگ اور وقفوں کو کنٹرول کرنے کے لیے SSML استعمال کریں۔
  • اگر ماڈل وضاحتی سوالات پوچھ سکتا ہے، تو مکالمے کو فطری رکھنے کے لیے چند فالو اپ پرامپٹس ڈیزائن کریں۔

ناکامی کی حالتیں اور ٹائم آؤٹس

  • جب Claude سست یا دستیاب نہ ہو تو مہذب فال بیک فراہم کریں۔
  • اگر آپ کی LLM کال ناکام ہو تو تیار شدہ مواد یا مختصر معذرت اور بعد میں دوبارہ کوشش کی پیشکش کریں۔
  • غلطیوں اور صارف شکایات کو ٹریک کریں تاکہ تیزی سے بہتری لا سکیں۔

ٹیسٹنگ

  • Alexa Test Simulator اور Virtual Alexa ٹولز کے ساتھ انٹینٹس کے یونٹ ٹیسٹ کریں۔
  • اپنے بیک اینڈ کو متوقع ہم وقتی کالز اور طویل وائس سیشنز کے لیے لوڈ ٹیسٹ کریں۔

عام غلطیوں سے کیسے بچیں؟

  1. Alexa کی ٹائم ونڈو بلاک کرنا — Alexa کی ٹائمنگ حدود سے تجاوز نہ کریں؛ پروگریسیو ریسپانسز استعمال کریں اور سمجھداری سے اسٹریم کریں۔
  2. سیکرٹس لیک ہونا — کبھی API کیز لاگ نہ کریں یا انہیں کلائنٹ کوڈ میں ایمبیڈ نہ کریں؛ Secrets Manager استعمال کریں۔
  3. ضرورت سے زیادہ ٹوکن استعمال — طویل گفتگو کی ہسٹری اور verbose پرامپٹس لاگت بڑھاتے ہیں؛ prune اور summarize کریں۔
  4. پالیسی عدم مطابقت — صارف کی واضح رضامندی یا پالیسی چیکس کے بغیر حساس ڈیٹا تھرڈ پارٹی LLMs کو نہ بھیجیں۔

Alexa وائس کے لیے عملی مثال پرامپٹس اور پرامپٹ انجینئرنگ تجاویز

وائس مناسبت کے لیے مختصر سسٹم انسٹرکشن استعمال کریں

مثال: "آپ ایک مختصر، شائستہ Alexa وائس اسسٹنٹ ہیں۔ بولنے والا جواب تقریباً 30 الفاظ تک محدود رکھیں؛ Alexa ایپ کے لیے طویل خلاصہ کارڈ کی شکل میں پیش کریں۔"

SSML کے لیے verbosity اور فارمیٹ کنٹرول کریں

Claude سے کہیں کہ وہ آؤٹ پٹ چند جملوں میں دے یا JSON واپس کرے جس میں 'speech' اور 'card' فیلڈز ہوں۔ پھر سرور سائیڈ یہ آؤٹ پٹس پارس کریں اور 'speech' کو SSML اور 'card' کو Alexa ایپ کے کارڈ میں میپ کریں۔ اس سے ابہام کم ہوتا ہے۔

فالو اپس اور تجاویز کے لیے پرامپٹ کریں

Claude کو مناسب حالات میں سوال پر ختم کرنے کی ترغیب دیں: "کیا آپ چاہیں گے کہ میں یہ خلاصہ آپ کی Alexa ایپ کو بھیج دوں؟" اس سے وائس انٹریکشنز فطری اور قابلِ دریافت رہتے ہیں۔

کیا کوئی نو کوڈ یا لو کوڈ متبادل موجود ہیں؟

ہاں — Zapier اور AppyPie جیسے انٹیگریشن پلیٹ فارمز Alexa ٹرگرز کو Claude ایکشنز سے لنک کرنے کے کنیکٹرز فراہم کرتے ہیں اگر آپ بغیر سرور کوڈ کے تیز آٹومیشن یا پروٹوٹائپ چاہتے ہیں۔ یہ ٹولز سادہ ورک فلو کے لیے بہترین ہیں مگر وہ کم لیٹنسی یا سکیورٹی کنٹرول فراہم نہیں کرتے جو کسٹم بیک اینڈ دیتا ہے۔

لو کوڈ متبادل جیسے Zapier میں، CometAPI بھی ڈویلپرز کی مدد کر سکتا ہے۔

نتیجہ:

CometAPI کے ذریعے Claude کو Alexa اسکل میں ضم کرنا Anthropic کلاس LLMs تک تیزی سے رسائی کا پرکشش راستہ ہے، وہ بھی ایک واحد، OpenAI-کمپیٹیبل انٹیگریشن کے ساتھ۔ جو ٹیمیں پہلے ہی چیٹ/کمپلیشن APIs سے واقف ہیں ان کے لیے تکنیکی مائیگریشن سیدھی ہے، اور CometAPI کا ایگریگیشن ماڈل تجربات کو تیز کرتا ہے۔

ڈویلپرز CometAPI کے ذریعے Claude API تک رسائی حاصل کر سکتے ہیں۔ آغاز کے لیے، CometAPI کے ماڈل کیپبلیٹیز کو Playground میں ایکسپلور کریں اور تفصیلی ہدایات کے لیے API گائیڈ دیکھیں۔ رسائی سے پہلے، براہِ کرم یقینی بنائیں کہ آپ CometAPI میں لاگ اِن ہیں اور API کی حاصل کر چکے ہیں۔ CometAPI آپ کے انٹیگریشن میں مدد کے لیے آفیشل قیمت سے کہیں کم قیمت پیش کرتا ہے۔

تیار ہیں؟→ Claude APIs کا مفت ٹرائل!

AI ترقیاتی اخراجات 20% کم کرنے کے لیے تیار ہیں؟

منٹوں میں مفت شروع کریں۔ مفت ٹرائل کریڈٹس شامل ہیں۔ کریڈٹ کارڈ کی ضرورت نہیں۔

مزید پڑھیں