Configuration

กลุ่มการกระจายข้อความ

Status: experimental

ภาพรวม

กลุ่มบรอดแคสต์เรียกใช้ เอเจนต์หลายตัว กับข้อความขาเข้าเดียวกัน เอเจนต์แต่ละตัวประมวลผลข้อความในเซสชันที่แยกจากกันและโพสต์คำตอบของตนเอง ดังนั้นหมายเลข WhatsApp หนึ่งหมายเลขจึงสามารถรองรับทีมเอเจนต์เฉพาะทางในแชตกลุ่มหรือข้อความส่วนตัวเดียวกันได้

ระบบจะประเมินกลุ่มบรอดแคสต์หลังจากรายการอนุญาตของช่องทางและกฎการเปิดใช้งานกลุ่มแล้ว ในกลุ่ม WhatsApp การบรอดแคสต์จะเกิดขึ้นเมื่อโดยปกติ OpenClaw จะตอบกลับ (ตัวอย่างเช่น เมื่อมีการกล่าวถึง ทั้งนี้ขึ้นอยู่กับการตั้งค่ากลุ่มของคุณ) กลุ่มบรอดแคสต์เปลี่ยนเฉพาะว่า เอเจนต์ใดทำงาน เท่านั้น ไม่ได้เปลี่ยนว่าข้อความมีสิทธิ์ได้รับการประมวลผลหรือไม่

เลน QA ของ WhatsApp แบบใช้งานจริงประกอบด้วย whatsapp-broadcast-group-fanout ซึ่งตรวจสอบว่าข้อความในกลุ่มหนึ่งข้อความที่มีการกล่าวถึงสามารถสร้างคำตอบที่มองเห็นได้และแตกต่างกันจากเอเจนต์ที่กำหนดค่าไว้สองตัว

การกำหนดค่า

การตั้งค่าพื้นฐาน

เพิ่มส่วน broadcast ที่ระดับบนสุด (ถัดจาก bindings) คีย์คือ ID ของคู่สนทนา WhatsApp และค่าคืออาร์เรย์ของ ID เอเจนต์:

  • แชตกลุ่ม: JID ของกลุ่ม (เช่น 120363403215116621@g.us)
  • ข้อความส่วนตัว: หมายเลขโทรศัพท์ E.164 ของผู้ส่ง (เช่น +15551234567)
json
{  "broadcast": {    "120363403215116621@g.us": ["alfred", "baerbel", "assistant3"]  }}

ผลลัพธ์: เมื่อ OpenClaw จะตอบกลับในแชตนี้ ระบบจะเรียกใช้เอเจนต์ทั้งสามตัว

ID เอเจนต์ทุกรายการต้องมีอยู่ใน agents.list: การตรวจสอบความถูกต้องของการกำหนดค่าจะรายงาน ID ที่ไม่รู้จัก และรันไทม์จะข้าม ID เหล่านั้นพร้อมคำเตือน Broadcast agent <id> not found in agents.list; skipping

กลยุทธ์การประมวลผล

broadcast.strategy กำหนดวิธีที่เอเจนต์ประมวลผลข้อความ:

กลยุทธ์ ลักษณะการทำงาน
parallel (ค่าเริ่มต้น) เอเจนต์ทั้งหมดประมวลผลพร้อมกัน คำตอบอาจมาถึงในลำดับใดก็ได้
sequential เอเจนต์ประมวลผลตามลำดับในอาร์เรย์ โดยแต่ละตัวรอให้ตัวก่อนหน้าทำงานเสร็จ
json
{  "broadcast": {    "strategy": "sequential",    "120363403215116621@g.us": ["alfred", "baerbel"]  }}

ตัวอย่างฉบับสมบูรณ์

json
{  "agents": {    "list": [      {        "id": "code-reviewer",        "name": "Code Reviewer",        "workspace": "/path/to/code-reviewer",        "sandbox": { "mode": "all" }      },      {        "id": "security-auditor",        "name": "Security Auditor",        "workspace": "/path/to/security-auditor",        "sandbox": { "mode": "all" }      },      {        "id": "docs-generator",        "name": "Documentation Generator",        "workspace": "/path/to/docs-generator",        "sandbox": { "mode": "all" }      }    ]  },  "broadcast": {    "strategy": "parallel",    "120363403215116621@g.us": ["code-reviewer", "security-auditor", "docs-generator"],    "120363424282127706@g.us": ["support-en", "support-de"],    "+15555550123": ["assistant", "logger"]  }}

วิธีการทำงาน

ลำดับการไหลของข้อความ

  • ข้อความขาเข้ามาถึง

    ข้อความจากกลุ่ม WhatsApp หรือข้อความส่วนตัวมาถึง

  • การกำหนดเส้นทางและการรับเข้า

    OpenClaw ใช้รายการอนุญาตของช่องทาง กฎการเปิดใช้งานกลุ่ม และความเป็นเจ้าของการเชื่อมโยง ACP ที่กำหนดค่าไว้

  • การตรวจสอบบรอดแคสต์

    หากไม่มีการเชื่อมโยง ACP ที่กำหนดค่าไว้เป็นเจ้าของเส้นทาง OpenClaw จะตรวจสอบว่า ID ของคู่สนทนาอยู่ใน broadcast หรือไม่

  • หากใช้บรอดแคสต์

    • เอเจนต์ทุกรายการประมวลผลข้อความ
    • เอเจนต์แต่ละตัวมีคีย์เซสชันและบริบทที่แยกจากกัน
    • เอเจนต์ประมวลผลแบบขนาน (ค่าเริ่มต้น) หรือแบบตามลำดับ
    • ไฟล์แนบเสียงจะถูกถอดเสียงหนึ่งครั้งก่อนกระจายงาน เพื่อให้เอเจนต์ใช้บทถอดเสียงเดียวกันแทนการเรียก STT แยกกัน
  • หากไม่ใช้บรอดแคสต์

    OpenClaw ส่งต่อไปยังเส้นทางปกติหรือเส้นทางเซสชัน ACP ที่กำหนดค่าไว้ซึ่งถูกเลือกระหว่างการกำหนดเส้นทาง

  • การแยกเซสชัน

    เอเจนต์แต่ละตัวในกลุ่มบรอดแคสต์จะแยกสิ่งต่อไปนี้ออกจากกันโดยสมบูรณ์:

    • คีย์เซสชัน (agent:alfred:whatsapp:group:120363... เทียบกับ agent:baerbel:whatsapp:group:120363...)
    • ประวัติการสนทนา (เอเจนต์จะไม่เห็นคำตอบของเอเจนต์ตัวอื่น)
    • พื้นที่ทำงาน (แซนด์บ็อกซ์แยกกันหากกำหนดค่าไว้)
    • การเข้าถึงเครื่องมือ (รายการอนุญาต/ปฏิเสธที่แตกต่างกัน)
    • หน่วยความจำ/บริบท (IDENTITY.md, SOUL.md ฯลฯ แยกจากกัน)

    มีข้อยกเว้นหนึ่งอย่างที่ตั้งใจให้ใช้ร่วมกัน: บัฟเฟอร์บริบทของกลุ่ม (ข้อความล่าสุดในกลุ่มที่ใช้เป็นบริบท) จะใช้ร่วมกันสำหรับคู่สนทนาแต่ละราย ดังนั้นเอเจนต์บรอดแคสต์ทั้งหมดจะเห็นบริบทเดียวกันเมื่อถูกเรียกใช้ ระบบจะล้างบัฟเฟอร์หนึ่งครั้งหลังจากการกระจายงานเสร็จสิ้น

    วิธีนี้ทำให้เอเจนต์แต่ละตัวมีบุคลิก โมเดล ทักษะ และสิทธิ์เข้าถึงเครื่องมือที่แตกต่างกันได้ (ตัวอย่างเช่น อ่านอย่างเดียวเทียบกับอ่านและเขียน)

    ตัวอย่าง: เซสชันที่แยกจากกัน

    ในกลุ่ม 120363403215116621@g.us ที่มีเอเจนต์ ["alfred", "baerbel"]:

    บริบทของ Alfred

    text
    Session: agent:alfred:whatsapp:group:120363403215116621@g.usHistory: [user message, alfred's previous responses]Workspace: ~/openclaw-alfred/Tools: read, write, exec

    บริบทของ Baerbel

    text
    Session: agent:baerbel:whatsapp:group:120363403215116621@g.usHistory: [user message, baerbel's previous responses]Workspace: ~/openclaw-baerbel/Tools: read only

    กรณีการใช้งาน

    • ทีมเอเจนต์เฉพาะทาง: กลุ่มนักพัฒนาที่ code-reviewer, security-auditor, test-generator และ docs-checker ต่างตอบข้อความเดียวกันจากมุมมองของตนเอง
    • การรองรับหลายภาษา: แชตสนับสนุนหนึ่งห้องที่มี support-en, support-de, support-es ตอบกลับเป็นภาษาของตนเอง
    • การประกันคุณภาพ: support-agent ตอบคำถาม ขณะที่ qa-agent ตรวจสอบและตอบเฉพาะเมื่อพบปัญหา
    • งานอัตโนมัติ: task-tracker, time-logger และ report-generator รับข้อมูลอัปเดตสถานะเดียวกันทั้งหมด

    แนวทางปฏิบัติที่แนะนำ

    1. ให้งานของเอเจนต์มีขอบเขตชัดเจน

    กำหนดหน้าที่เดียวที่ชัดเจนให้เอเจนต์แต่ละตัว (formatter, linter, tester) แทนการใช้เอเจนต์ "dev-helper" แบบทั่วไปหนึ่งตัว

    2. ใช้ ID และชื่อที่สื่อความหมาย
    json
    {  "agents": {    "list": [      { "id": "security-scanner", "name": "Security Scanner" },      { "id": "code-formatter", "name": "Code Formatter" },      { "id": "test-generator", "name": "Test Generator" }    ]  }}
    3. กำหนดค่าการเข้าถึงเครื่องมือให้แตกต่างกัน
    json
    {  "agents": {    "list": [      { "id": "reviewer", "tools": { "allow": ["read", "exec"] } },      { "id": "fixer", "tools": { "allow": ["read", "write", "edit", "exec"] } }    ]  }}

    reviewer อ่านได้อย่างเดียว fixer อ่านและเขียนได้

    4. ตรวจสอบประสิทธิภาพ

    เมื่อมีเอเจนต์จำนวนมาก ให้เลือกใช้ "strategy": "parallel" (ค่าเริ่มต้น) จำกัดกลุ่มบรอดแคสต์ไว้เพียงไม่กี่เอเจนต์ และใช้โมเดลที่เร็วขึ้นสำหรับเอเจนต์ที่ทำงานง่ายกว่า

    5. ความล้มเหลวถูกแยกออกจากกัน

    เอเจนต์ล้มเหลวแยกจากกัน ข้อผิดพลาดของเอเจนต์หนึ่งตัวจะถูกบันทึก (Broadcast agent <id> failed: ...) และไม่ขัดขวางเอเจนต์ตัวอื่น

    ความเข้ากันได้

    ผู้ให้บริการ

    ปัจจุบันกลุ่มบรอดแคสต์ใช้งานได้เฉพาะกับ WhatsApp (ช่องทางเว็บ) ช่องทางอื่นจะละเว้นการกำหนดค่า broadcast

    การกำหนดเส้นทาง

    กลุ่มบรอดแคสต์ทำงานร่วมกับการกำหนดเส้นทางที่มีอยู่:

    json
    {  "bindings": [    {      "match": { "channel": "whatsapp", "peer": { "kind": "group", "id": "GROUP_A" } },      "agentId": "alfred"    }  ],  "broadcast": {    "GROUP_B": ["agent1", "agent2"]  }}
    • GROUP_A: มีเพียง alfred ที่ตอบกลับ (การกำหนดเส้นทางปกติ)
    • GROUP_B: agent1 และ agent2 ตอบกลับ (บรอดแคสต์)

    การแก้ไขปัญหา

    เอเจนต์ไม่ตอบกลับ

    ตรวจสอบ:

    1. ID เอเจนต์มีอยู่ใน agents.list (การตรวจสอบความถูกต้องของการกำหนดค่าจะปฏิเสธ ID ที่ไม่รู้จัก)
    2. รูปแบบ ID ของคู่สนทนาถูกต้อง (JID ของกลุ่ม เช่น 120363403215116621@g.us หรือ E.164 เช่น +15551234567 สำหรับข้อความส่วนตัว)
    3. ข้อความผ่านการคัดกรองตามปกติ (กฎการกล่าวถึง/การเปิดใช้งานยังคงมีผล)

    แก้จุดบกพร่อง:

    bash
    openclaw logs --follow | grep -i broadcast

    การกระจายงานที่สำเร็จจะบันทึก Broadcasting message to <n> agents (<strategy>)

    มีเอเจนต์เพียงตัวเดียวตอบกลับ

    สาเหตุ: ID ของคู่สนทนาอาจอยู่ในการเชื่อมโยงเส้นทางปกติแต่ไม่อยู่ใน broadcast หรืออาจตรงกับการเชื่อมโยง ACP แบบเฉพาะสิทธิ์ที่กำหนดค่าไว้

    วิธีแก้: เพิ่มคู่สนทนาที่ผูกกับเส้นทางปกติลงในการกำหนดค่าบรอดแคสต์ หรือลบ/เปลี่ยนการเชื่อมโยง ACP ที่กำหนดค่าไว้ หากต้องการการกระจายงานแบบบรอดแคสต์

    ปัญหาด้านประสิทธิภาพ

    หากทำงานช้าเมื่อมีเอเจนต์จำนวนมาก: ลดจำนวนเอเจนต์ต่อกลุ่ม ใช้โมเดลที่เบากว่า และตรวจสอบเวลาเริ่มต้นของแซนด์บ็อกซ์

    ตัวอย่าง

    ตัวอย่างที่ 1: ทีมตรวจสอบโค้ด
    json
    {  "broadcast": {    "strategy": "parallel",    "120363403215116621@g.us": [      "code-formatter",      "security-scanner",      "test-coverage",      "docs-checker"    ]  },  "agents": {    "list": [      {        "id": "code-formatter",        "workspace": "~/agents/formatter",        "tools": { "allow": ["read", "write"] }      },      {        "id": "security-scanner",        "workspace": "~/agents/security",        "tools": { "allow": ["read", "exec"] }      },      {        "id": "test-coverage",        "workspace": "~/agents/testing",        "tools": { "allow": ["read", "exec"] }      },      { "id": "docs-checker", "workspace": "~/agents/docs", "tools": { "allow": ["read"] } }    ]  }}

    ข้อมูลโค้ดหนึ่งชุดในกลุ่มจะสร้างคำตอบสี่รายการ ได้แก่ การแก้ไขรูปแบบ ข้อค้นพบด้านความปลอดภัย ช่องว่างของความครอบคลุมการทดสอบ และข้อสังเกตเล็กน้อยเกี่ยวกับเอกสาร

    ตัวอย่างที่ 2: ไปป์ไลน์หลายภาษา
    json
    {  "broadcast": {    "strategy": "sequential",    "+15555550123": ["detect-language", "translator-en", "translator-de"]  },  "agents": {    "list": [      { "id": "detect-language", "workspace": "~/agents/lang-detect" },      { "id": "translator-en", "workspace": "~/agents/translate-en" },      { "id": "translator-de", "workspace": "~/agents/translate-de" }    ]  }}

    ข้อมูลอ้างอิง API

    สคีมาการกำหนดค่า

    typescript
    interface OpenClawConfig {  broadcast?: {    strategy?: "parallel" | "sequential";    [peerId: string]: string[];  };}

    ฟิลด์

    strategy"parallel" | "sequential"default: "parallel"

    วิธีกำหนดการประมวลผลของเอเจนต์ parallel เรียกใช้เอเจนต์ทั้งหมดพร้อมกัน ส่วน sequential เรียกใช้ตามลำดับในอาร์เรย์

    [peerId]string[]

    JID ของกลุ่ม WhatsApp หรือหมายเลขโทรศัพท์ E.164 ค่าคืออาร์เรย์ของ ID เอเจนต์ที่ต้องประมวลผลข้อความทั้งหมดจากคู่สนทนารายนั้น

    ข้อจำกัด

    1. จำนวนเอเจนต์สูงสุด: ไม่มีขีดจำกัดตายตัว แต่เอเจนต์จำนวนมาก (10 ตัวขึ้นไป) อาจทำงานช้า
    2. บริบทที่ใช้ร่วมกัน: เอเจนต์จะไม่เห็นคำตอบของกันและกัน (เป็นไปตามการออกแบบ)
    3. ลำดับข้อความ: คำตอบแบบขนานอาจมาถึงในลำดับใดก็ได้
    4. ขีดจำกัดอัตราการใช้งาน: คำตอบทั้งหมดมาจากบัญชี WhatsApp เดียว ดังนั้นคำตอบของเอเจนต์ทุกตัวจะนับรวมในขีดจำกัดอัตราการใช้งาน WhatsApp เดียวกัน

    เนื้อหาที่เกี่ยวข้อง

    Was this useful?
    On this page

    On this page