Skip to main content
Docsبدأتيدك الأولى
15 دقيقة

Hands-on: Build a Daily Summary Workflow from Scratch

اتبع سيناريو أعمال محدداً لتجميع جميع المفاهيم الأساسية: سحب البيانات → تصنيف . ملخص التنفيذ.

تتناول هذه المقالة سيناريو عمل محددًا من البداية إلى النهاية، مما يسمح لجميع المفاهيم التي تم تعلمها مسبقًا (سير العمل/الخطوة/الوكيل/المتغيرات/المصنف/سير العمل الفرعي/بيانات الاعتماد) بالتوافق مع عملية حقيقية. بعد 15 دقيقة، سيكون لديك شعور "أستطيع القيام بسير العمل بشكل مستقل".

قبل البدء
  • لقد قمت بالفعل بتسجيل حساب Braidrun وقمت بتسجيل الدخول. إذا كنت لا تعرف، فابحث أولاً التسجيل والتسجيل.
  • يوجد مفتاح API لأي من OpenAI / Anthropic / DeepSeek. لا يزال بإمكانك اتخاذ الخطوات القليلة الأولى بدونها على الإطلاق، ولكنك ستتخطى خطوة LLM عند التشغيل فعليًا.
  • (Optional) A Slack Incoming Webhook URL - مطلوب إذا كنت تريد تجربة عملية التسليم.

سيناريو الأعمال: ملخص أخبار التكنولوجيا اليومية

متطلبات:

  • تشغيل تلقائيا في الساعة 8:00 كل صباح؛
  • احصل على 10 أخبار تقنية جديدة من Hacker News / 36Kr / The Verge RSS؛
  • صنف كل عنصر إلى ثلاث فئات: "الذكاء الاصطناعي/الأجهزة/أخرى"؛
  • إنشاء ملخصات صينية مكونة من 60 كلمة فقط لتلك العناصر المصنفة على أنها ذكاء اصطناعي؛
  • قم بتلخيصها في Markdown وتسليمه إلى قناة Slack؛
  • اطلب مني النقر فوق "تأكيد" قبل الإرسال - لتجنب تسليم البيانات القذرة.

خطوات التفكيك إلى Braidrun

  1. fetchcode الخطوات: استخدم Node لالتقاط RSS وتحليله إلى JSON.
  2. classifyclassifier الخطوات: قم بتسمية كل خبر بتسمية فئة.
  3. summarizesingle الخطوات: قم بإنشاء ملخصات باللغة الصينية لفصول الذكاء الاصطناعي فقط.
  4. compilecode الخطوات: قم بتجميع تخفيض السعر بالكامل.
  5. reviewmanual_approval: توقف مؤقتًا للسماح لي بإلقاء نظرة قبل الإرسال.
  6. deliversub_workflow:تم إصداره بواسطة Slack.

الخطوة 1 · إنشاء سير عمل جديد

  1. نقطة التنقل الرئيسية على اليسار هي "سير العمل" ← "سير العمل الجديد" في الزاوية اليمنى العليا.
  2. اسم: daily-tech-digest، وصف: 每天早 8 点的科技新闻摘要.
  3. انقر فوق "إنشاء". انتقل إلى المحرر على الفور.

يفتح المحرر بعمودين: اللوحة القماشية (تصور DAG) على اليسار وYAML على اليمين. ستتم مزامنة التغييرات على أي من الجانبين مع الجانب الآخر في الوقت الفعلي.

الخطوة 2 · إعلان الوكيل

قم بالتبديل إلى عمود YAML وأضف قسمًا من الوكلاء في الأعلى (بعد المتغيرات):

yaml
agents:
  writer:
    preset: writer
    overrides:
      max_iterations: 3
      provider: openai_api_key    # 引用凭据中心里的 Key

الوصف: تم تحسين الإعداد المسبق للكاتب خصيصًا للكتابة الصينية. التجاوزات تحدد الحد الأقصى للتكرارات بـ 3 بحيث لا يفكر الوكيل كثيرًا في الملخص (الملخص نفسه بسيط جدًا).

للحصول على شرح مفصل للإعداد المسبق، راجع دليل المفاوضة.

الخطوة 3 · الجلب: خطوة الكود للحصول على RSS

للاستمرار في YAML، أضف جلبًا ضمن الخطوات:

yaml
steps:
  - id: fetch
    type: code
    language: node
    idempotent: true
    code: |
      const parser = new (await import('rss-parser')).default();
      const feeds = [
        'https://hnrss.org/frontpage',
        'https://36kr.com/feed'
      ];
      const articles = [];
      for (const url of feeds) {
        const feed = await parser.parseURL(url);
        feed.items.slice(0, 5).forEach(item => {
          articles.push({ title: item.title, url: item.link });
        });
      }
      return { articles };
    extract:
      articles: $.articles

بعض النقاط الرئيسية:

  • language: node — يعد Node 20 أحد أوقات التشغيل التي تتمتع بدعم مدمج.
  • extract — اختر حقل المقالات من stdout JSON الخاص بالبرنامج النصي وقم بالرجوع إليه في اتجاه مجرى النهر باستخدام Steps.fetch.data.articles.
  • idempotent: true — "من المرجح أن يؤدي نشر الأخبار في نفس اليوم إلى نفس النتيجة" - يمكن تخطي هذا عند إعادة تشغيل الخدمة واستئنافها.
وضع الحماية لخطوات التعليمات البرمجية

السيناريو الخاص بك سوف تشغيل في صندوق رمل منعزلة يمكن التخلص منه مع تخلف 512MB من الذاكرة، 0.5 من وحدة العناية المركزة، و 300 مرة ثانية. ولا تسمح الشبكة إلا بطلبات خارجية. يمكنك جلب البيانات الخارجية بأمان، ولكن لا يمكنك الاستماع إلى الميناء؛ فقط /tmp متاح لكتابة الأقراص.

الخطوة 4 · التصنيف: قم بتسمية كل خبر

yaml
  - id: classify
    type: classifier
    agent: writer
    task: |
      给下面这条新闻标题分一个类别:
      标题: {{steps.fetch.data.articles[0].title}}
    categories:
      - name: ai
        description: AI / LLM / 机器学习相关
      - name: hardware
        description: 硬件 / 芯片 / 设备
      - name: other
        description: 其它科技话题
    output_variable: category

يمكن تمرير إخراج المصنف {{classifier.category}} اقتباس - هو نتيجة تصنيف الأخبار السابقة. سنستخدمه لإجراء التفرع الشرطي في الخطوة التالية.

للحصول على الصيغة الكاملة للمراجع المتغيرة، راجع الاختلافات والتعبيرات.

الخطوة 5 · التلخيص: اكتب ملخصًا لفصل الذكاء الاصطناعي فقط

yaml
  - id: summarize
    type: single
    agent: writer
    idempotent: true
    condition: "{{classifier.category}} == 'ai'"
    task: |
      用一段中文(不超过 60 字)概括下面这条 AI 新闻:
      {{steps.fetch.data.articles[0].title}}

وصف:

  • condition دع هذه الخطوة يتم تنفيذها فقط عندما تكون نتيجة التصنيف هي ai، ويتم تخطي الفئات الأخرى (تم تخطي الحالة، ولا يتم احتسابها كفشل).
  • idempotent: true —— الملخصات النقية غير فعالة، نفس المدخلات → نفس المخرجات.

الخطوة 6 · التجميع: قم بتهجئة Markdown بالكامل

yaml
  - id: compile
    type: code
    language: node
    depends_on: [summarize]
    code: |
      const summaries = JSON.parse(process.env.STEP_OUTPUT_SUMMARIZE || '[]');
      const md = [
        '# 📰 今日科技 AI 摘要',
        '',
        ...summaries.map((s, i) => `${i + 1}. ${s}`)
      ].join('\n');
      return { markdown: md };
    extract:
      markdown: $.markdown

تقوم هذه الخطوة بتجميع كافة النتائج الملخصة الأولية في تخفيض السعر الذي يمكن إرساله مباشرة. يعرضه الاستخراج كخطوات.compile.data.markdown، مما يجعل المراجع النهائية أكثر نظافة.

الخطوة 7 · المراجعة: التأكيد اليدوي قبل الإرسال

yaml
  - id: review
    type: manual_approval
    title: "请审阅今日 AI 摘要"
    body: "{{steps.compile.data.markdown}}"
    approvers: []           # 空 = 团队所有 Admin 都可审批
    notify: [in_app]        # 也可以 slack / email / feishu

هذا هو أبسط شكل من أشكال الموافقة اليدوية - سيتم إيقاف العملية مؤقتًا هنا وستظهر الموافقة المعلقة في صفحة إدارة الموافقة. انقر فوق "موافقة" لمتابعة سير العمل؛ انقر على "رفض" وتتغير حالة التنفيذ إلى "فشل"، ويتم إلغاء جميع الخطوات اللاحقة.

للحصول على تكوين موافقة أكثر مرونة (تعيين الموافقين، وإخطار القنوات، وانتهاء الصلاحية)، راجع الموافقة على الدليل.

الخطوة 8 · التسليم: يستدعي sub_workflow الوحدة المدمجة في النظام الأساسي

yaml
  - id: deliver
    type: sub_workflow
    module: dingyue-module-slack-deliver
    depends_on: [review]
    inputs:
      slack_webhook_url: "{{var:slack_webhook_url}}"
      message_text: "{{steps.compile.data.markdown}}"

وصف:

  • dingyue-module-slack-deliver إنها واحدة من وحدات التوصيل المدمجة التي تأتي بالمنصة، تلخص الروتين الكامل لـ "حمولة التجميل".
  • slack_webhook_url الإشارة إلى أن موقع (سليك) الجديد (ويهوك) قد تم تشكيله في المتغير.

الخطوة 9 · معاينة اللوحة القماشية

قم بالتبديل مرة أخرى إلى شريط القماش الأيسر، وسترى 6 عقد متصلة في سطر عن طريق الجلب → التصنيف → التلخيص → التجميع → المراجعة → التسليم. انقر نقرًا مزدوجًا فوق أي عقدة لتوسيع جزء YAML الخاص بها؛ اسحب العقدة لضبط موضعها - تكون تغييرات التخطيط مرئية فقط ولا تؤثر على YAML.

الخطوة 10 · أكمل بيانات الاعتماد

قبل تشغيل سير العمل هذا، يجب أن يكون لديك:

  1. openai_api_key (مفتاح LLM يستخدمه الوكيل)
    • حدد api_key كنوع، ثم الصق sk-... الذي حصلت عليه من OpenAI كقيمة.
  2. slack_webhook_url (Slack Incoming Webhook URL for delivery)
    • "اختاروا "بي-كى" أو السر "تيكست" كنوع من واقية الـ "سليك" القادم "ويهوك" كقيمة.

بعد الحفظ، تتوافق أسماء بيانات الاعتماد المشار إليها في سير العمل مع هذا الاسم الفردي ويمكن تحليلها في وقت التشغيل.

الخطوة 11 · التحقق من الصحة والتشغيل الجاف

11.1 التحقق

انقر على "التحقق" في الأعلى. تستخدم المنصة محلل الوكيل الكامل للقيام برحلة ذهابًا وإيابًا؛ إذا كان هناك خطأ في بناء الجملة/المرجع، فسيتم تقديم رقم السطر المحدد + السبب. احصل على جميع الخطوط الحمراء قبل اتخاذ الخطوة التالية.

11.2 الجفاف

انقر فوق "تنفيذ"، وحدد التشغيل الجاف في مربع الحوار، ثم انقر فوق "بدء التنفيذ". هذه المرة:

  • سيتم تشغيل الجلب فعليًا - من الصعب الحكم على الآثار الجانبية لخطوة التعليمات البرمجية، لذلك نتركه يعمل افتراضيًا (لكن وضع حماية الشبكة محدود)؛
  • التصنيف/التلخيص/الترجمة - لأنه LLM، يتم إرجاع القيم المحاكاة أثناء التشغيل الجاف؛
  • المراجعة - الموافقة التلقائية أثناء التشغيل الجاف (لا توجد موافقة حقيقية على الذخيرة)؛
  • التسليم - تعرف الوحدة وضع التشغيل الجاف ولن ترسل رسائل Telegram فعليًا.

إذا نجحت، فستكون جميع الخطوات باللون الأخضر مكتملة أو رمادية اللون تم تخطيها. انتقل إلى المنطقة اليمنى السفلية لعرض "لقطة الإدخال/الإخراج/المتغير" لكل خطوة وتأكد من توصيل جميع المتغيرات بشكل صحيح.

الخطوة 12 · قم بجولة حقيقية

  1. انقر فوق "تنفيذ"، إلغاء تحقق من التشغيل الجاف لبدء التنفيذ.
  2. يبدأ تدفق الأحداث في الوقت الفعلي على اليمين في الوميض. تحقق لمعرفة ما إذا كان قد تم جلب 10 عناصر بعد تشغيل الجلب؛ قم بتسمية كل عنصر يتم تشغيله حسب التصنيف؛ يتم تنفيذ التلخيص فقط على عناصر الذكاء الاصطناعي.
  3. عند التشغيل للمراجعة، سيتم تعليق التنفيذ بالكامل وستتغير الحالة إلى PENDING_APPROVAL. قم بالتبديل إلى "إدارة الموافقة" وسترى عنصرًا في انتظار الموافقة. انقر على "عرض" لقراءة مسودة تخفيض السعر.
  4. إضغطي "إقبلي" عندما ترضى The work flow automatically continues to deliver and the Slack message is sent.
  5. بعد التشغيل، ارجع إلى صفحة تفاصيل سير العمل لرؤية إحصائيات الرمز المميز/التكلفة لهذا التنفيذ.
توقعاتي لأول جولة حقيقية لي

يستغرق الأمر حوالي 1-3 دقائق (اعتمادًا على الشبكة) ويكلف حوالي 5000-15000 رمزًا (حوالي 0.01-0.03 دولارًا وفقًا لـ openai gpt-4.1-mini). تحت هذا النطاق قد يكون هناك فشل في سحب الأخبار، وفوق هذا النطاق قد يكون هناك انعكاس على التلخيص.

الخطوة 13: قم بتثبيت cron ليتم تشغيله تلقائيًا كل يوم

  1. "إدارة الجدولة" على اليسار → "جدول جديد".
  2. سير العمل المستهدف: ملخص التكنولوجيا اليومي؛ النوع: كرون؛ تعبير: 0 0 8 * * ?; المنطقة الزمنية: آسيا/شنغهاي.
  3. يمكن أن تكون "افتراضيات المعلمات" فارغة - جميع المتغيرات لدينا لها قيم افتراضية معقولة.
  4. يحفظ. "وقت التشغيل التالي" سيُظهر الساعة 8:00 غدًا.

سير العمل YAML النسخة الكاملة

قم بالتوسيع لرؤية YAML كاملة
yaml
name: daily-tech-digest
version: "1.0.0"
description: 每天早 8 点的科技新闻摘要

recovery:
  autoResumeOnRestart: true
  policy: RESUME_FROM_LAST_INCOMPLETE

agents:
  writer:
    preset: writer
    overrides:
      max_iterations: 3
      provider: openai_api_key

steps:
  - id: fetch
    type: code
    language: node
    idempotent: true
    code: |
      const parser = new (await import('rss-parser')).default();
      const feeds = [
        'https://hnrss.org/frontpage',
        'https://36kr.com/feed'
      ];
      const articles = [];
      for (const url of feeds) {
        const feed = await parser.parseURL(url);
        feed.items.slice(0, 5).forEach(item => {
          articles.push({ title: item.title, url: item.link });
        });
      }
      return { articles };
    extract:
      articles: $.articles

  - id: classify
    type: classifier
    agent: writer
    task: |
      给下面这条新闻标题分一个类别:
      标题: {{steps.fetch.data.articles[0].title}}
    categories:
      - name: ai
      - name: hardware
      - name: other
    output_variable: category

  - id: summarize
    type: single
    agent: writer
    idempotent: true
    condition: "{{classifier.category}} == 'ai'"
    task: |
      用一段中文(不超过 60 字)概括下面这条 AI 新闻:
      {{steps.fetch.data.articles[0].title}}

  - id: compile
    type: code
    language: node
    depends_on: [summarize]
    code: |
      const summaries = JSON.parse(process.env.STEP_OUTPUT_SUMMARIZE || '[]');
      const md = [
        '# 📰 今日科技 AI 摘要',
        '',
        ...summaries.map((s, i) => `${i + 1}. ${s}`)
      ].join('\n');
      return { markdown: md };
    extract:
      markdown: $.markdown

  - id: review
    type: manual_approval
    title: "请审阅今日 AI 摘要"
    body: "{{steps.compile.data.markdown}}"
    notify: [in_app]

  - id: deliver
    type: sub_workflow
    module: dingyue-module-slack-deliver
    depends_on: [review]
    inputs:
      slack_webhook_url: "{{var:slack_webhook_url}}"
      message_text: "{{steps.compile.data.markdown}}"

ستعرف بالفعل كيفية القيام بذلك بعد القيام بذلك

  • قم بتحرير سير العمل بالكامل باستخدام الأعمدة المزدوجة YAML + Canvas
  • طرق الكتابة الفعلية للأنماط الخمسة الرئيسية لخطوات التعليمات البرمجية، والمصنف، والمفرد، والموافقة اليدوية، وسير العمل الفرعي
  • الاستخدامات المختلفة للمراجع المتغيرة (var/steps/classifier/credentials)
  • التحقق من صحة / التشغيل الجاف / التشغيل الحقيقي / دورة كرون الكاملة عبر الإنترنت
  • كيفية التعاون بين مركز الاعتماد وسير العمل YAML

التالي