เรียกใช้เอเจนต์ ที่แยกจากกัน หลายตัว โดยแต่ละตัวมีพื้นที่ทำงาน ไดเรกทอรีสถานะ (Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
agentDir) และประวัติเซสชันของตนเอง พร้อมกับบัญชีช่องทางหลายบัญชี (เช่น WhatsApp สองบัญชี) ใน Gateway ที่กำลังทำงานหนึ่งตัว ข้อความขาเข้าจะถูกส่งไปยังเอเจนต์ที่ถูกต้องผ่านการผูก
เอเจนต์ ในที่นี้คือขอบเขตเต็มรูปแบบต่อหนึ่ง persona: ไฟล์พื้นที่ทำงาน โปรไฟล์การยืนยันตัวตน รีจิสทรีโมเดล และที่เก็บเซสชัน agentDir คือไดเรกทอรีสถานะบนดิสก์ที่เก็บการกำหนดค่าแยกตามเอเจนต์นี้ไว้ที่ ~/.openclaw/agents/<agentId>/ การผูก จับคู่บัญชีช่องทาง (เช่น พื้นที่ทำงาน Slack หรือหมายเลข WhatsApp) กับเอเจนต์หนึ่งในนั้น
“เอเจนต์หนึ่งตัว” คืออะไร?
เอเจนต์ คือสมองที่มีขอบเขตครบถ้วนพร้อมสิ่งเหล่านี้ของตนเอง:- พื้นที่ทำงาน (ไฟล์, AGENTS.md/SOUL.md/USER.md, บันทึกภายในเครื่อง, กฎ persona)
- ไดเรกทอรีสถานะ (
agentDir) สำหรับโปรไฟล์การยืนยันตัวตน รีจิสทรีโมเดล และการกำหนดค่าแยกตามเอเจนต์ - ที่เก็บเซสชัน (ประวัติแชต + สถานะการกำหนดเส้นทาง) ภายใต้
~/.openclaw/agents/<agentId>/sessions
sessions_history เป็นเส้นทางการเรียกคืนข้ามเซสชันที่ปลอดภัยกว่าที่นี่เช่นกัน: มันคืนค่ามุมมองที่จำกัดขอบเขตและผ่านการล้างข้อมูลแล้ว ไม่ใช่การ dump transcript ดิบ การเรียกคืนของ Assistant จะตัด thinking tags, โครง <relevant-memories>, เพย์โหลด XML การเรียกเครื่องมือแบบข้อความธรรมดา (รวมถึง <tool_call>...</tool_call>, <function_call>...</function_call>, <tool_calls>...</tool_calls>, <function_calls>...</function_calls> และบล็อกการเรียกเครื่องมือที่ถูกตัดทอน), โครงการเรียกเครื่องมือที่ถูกลดระดับ, โทเคนควบคุมโมเดลแบบ ASCII/เต็มความกว้างที่รั่วไหล และ XML การเรียกเครื่องมือ MiniMax ที่ผิดรูป ก่อนการปกปิด/ตัดทอน~/.openclaw/skills จากนั้นกรองด้วยรายการอนุญาต Skills ของเอเจนต์ที่มีผลเมื่อมีการกำหนดค่า ใช้ agents.defaults.skills สำหรับ baseline ที่แชร์ และ agents.list[].skills สำหรับการแทนที่แบบต่อเอเจนต์ ดู Skills: แบบต่อเอเจนต์เทียบกับแบบแชร์ และ Skills: รายการอนุญาต Skills ของเอเจนต์
Gateway สามารถโฮสต์ เอเจนต์หนึ่งตัว (ค่าเริ่มต้น) หรือ เอเจนต์หลายตัว เคียงข้างกัน
หมายเหตุเรื่องพื้นที่ทำงาน: พื้นที่ทำงานของแต่ละเอเจนต์คือ default cwd ไม่ใช่ sandbox แบบแข็ง เส้นทางสัมพัทธ์จะ resolve ภายในพื้นที่ทำงาน แต่เส้นทางสัมบูรณ์สามารถเข้าถึงตำแหน่งอื่นบนโฮสต์ได้ เว้นแต่จะเปิดใช้ sandboxing ดู การทำแซนด์บ็อกซ์
เส้นทาง (แผนที่ย่อ)
- การกำหนดค่า:
~/.openclaw/openclaw.json(หรือOPENCLAW_CONFIG_PATH) - ไดเรกทอรีสถานะ:
~/.openclaw(หรือOPENCLAW_STATE_DIR) - พื้นที่ทำงาน:
~/.openclaw/workspace(หรือ~/.openclaw/workspace-<agentId>) - ไดเรกทอรีเอเจนต์:
~/.openclaw/agents/<agentId>/agent(หรือagents.list[].agentDir) - เซสชัน:
~/.openclaw/agents/<agentId>/sessions
โหมดเอเจนต์เดียว (ค่าเริ่มต้น)
หากคุณไม่ทำอะไร OpenClaw จะเรียกใช้เอเจนต์ตัวเดียว:agentIdมีค่าเริ่มต้นเป็นmain- เซสชันจะถูกใช้เป็นคีย์ในรูปแบบ
agent:main:<mainKey> - พื้นที่ทำงานมีค่าเริ่มต้นเป็น
~/.openclaw/workspace(หรือ~/.openclaw/workspace-<profile>เมื่อตั้งค่าOPENCLAW_PROFILE) - สถานะมีค่าเริ่มต้นเป็น
~/.openclaw/agents/main/agent
ตัวช่วยเอเจนต์
ใช้ตัวช่วยสร้างเอเจนต์เพื่อเพิ่มเอเจนต์ใหม่ที่แยกจากกัน:bindings (หรือให้ตัวช่วยสร้างทำให้) เพื่อกำหนดเส้นทางข้อความขาเข้า
ตรวจสอบด้วย:
เริ่มต้นอย่างรวดเร็ว
สร้างพื้นที่ทำงานของแต่ละเอเจนต์
ใช้ตัวช่วยสร้างหรือสร้างพื้นที่ทำงานด้วยตนเอง:แต่ละเอเจนต์จะได้พื้นที่ทำงานของตนเองพร้อม
SOUL.md, AGENTS.md และ USER.md แบบไม่บังคับ พร้อม agentDir เฉพาะและที่เก็บเซสชันภายใต้ ~/.openclaw/agents/<agentId>สร้างบัญชีช่องทาง
สร้างหนึ่งบัญชีต่อเอเจนต์บนช่องทางที่คุณต้องการ:ดูคู่มือช่องทาง: Discord, Telegram, WhatsApp
- Discord: หนึ่งบอตต่อเอเจนต์ เปิดใช้ Message Content Intent แล้วคัดลอกโทเคนแต่ละรายการ
- Telegram: หนึ่งบอตต่อเอเจนต์ผ่าน BotFather แล้วคัดลอกโทเคนแต่ละรายการ
- WhatsApp: เชื่อมโยงหมายเลขโทรศัพท์แต่ละหมายเลขต่อบัญชี
เพิ่มเอเจนต์ บัญชี และการผูก
เพิ่มเอเจนต์ภายใต้
agents.list, บัญชีช่องทางภายใต้ channels.<channel>.accounts และเชื่อมต่อกันด้วย bindings (ตัวอย่างด้านล่าง)เอเจนต์หลายตัว = หลายคน หลายบุคลิก
ด้วย เอเจนต์หลายตัว แต่ละagentId จะกลายเป็น persona ที่แยกจากกันอย่างสมบูรณ์:
- หมายเลขโทรศัพท์/บัญชีที่แตกต่างกัน (
accountIdต่อช่องทาง) - บุคลิกที่แตกต่างกัน (ไฟล์พื้นที่ทำงานแยกตามเอเจนต์ เช่น
AGENTS.mdและSOUL.md) - การยืนยันตัวตน + เซสชันที่แยกกัน (ไม่มีการปะปน เว้นแต่เปิดใช้โดยชัดเจน)
การค้นหาหน่วยความจำ QMD ข้ามเอเจนต์
หากเอเจนต์หนึ่งควรค้นหา transcript เซสชัน QMD ของเอเจนต์อื่น ให้เพิ่มคอลเลกชันเพิ่มเติมภายใต้agents.list[].memorySearch.qmd.extraCollections ใช้ agents.defaults.memorySearch.qmd.extraCollections เฉพาะเมื่อเอเจนต์ทุกตัวควรสืบทอดคอลเลกชัน transcript ที่แชร์ชุดเดียวกัน
หมายเลข WhatsApp หนึ่งหมายเลข หลายคน (แยก DM)
คุณสามารถกำหนดเส้นทาง DM ของ WhatsApp ที่แตกต่างกัน ไปยังเอเจนต์ต่างกันได้ ขณะที่ยังใช้ บัญชี WhatsApp เดียว จับคู่ตามผู้ส่ง E.164 (เช่น+15551234567) ด้วย peer.kind: "direct" การตอบกลับยังคงมาจากหมายเลข WhatsApp เดียวกัน (ไม่มีตัวตนผู้ส่งแยกตามเอเจนต์)
แชตโดยตรงจะยุบไปยัง คีย์เซสชันหลัก ของเอเจนต์ ดังนั้นการแยกอย่างแท้จริงจำเป็นต้องมี หนึ่งเอเจนต์ต่อหนึ่งคน
- การควบคุมการเข้าถึง DM เป็นแบบ สากลต่อบัญชี WhatsApp (การจับคู่/รายการอนุญาต) ไม่ใช่ต่อเอเจนต์
- สำหรับกลุ่มที่แชร์ ให้ผูกกลุ่มกับเอเจนต์หนึ่งตัวหรือใช้ กลุ่มออกอากาศ
กฎการกำหนดเส้นทาง (ข้อความเลือกเอเจนต์อย่างไร)
การผูกมีลักษณะ กำหนดแน่นอน และ รายการที่เฉพาะเจาะจงที่สุดชนะ:การตัดสินเมื่อเสมอกันและความหมายแบบ AND
การตัดสินเมื่อเสมอกันและความหมายแบบ AND
- หากมีการผูกหลายรายการที่ตรงกันใน tier เดียวกัน รายการแรกตามลำดับการกำหนดค่าจะชนะ
- หากการผูกตั้งค่าฟิลด์การจับคู่หลายฟิลด์ (เช่น
peer+guildId) ต้องมีฟิลด์ที่ระบุทั้งหมด (ANDsemantics)
รายละเอียดขอบเขตบัญชี
รายละเอียดขอบเขตบัญชี
- การผูกที่ละ
accountIdจะจับคู่เฉพาะบัญชีเริ่มต้นเท่านั้น - ใช้
accountId: "*"สำหรับ fallback ทั่วทั้งช่องทางข้ามทุกบัญชี - หากภายหลังคุณเพิ่มการผูกเดียวกันสำหรับเอเจนต์เดียวกันพร้อม id บัญชีที่ระบุชัดเจน OpenClaw จะอัปเกรดการผูกเฉพาะช่องทางที่มีอยู่ให้เป็นแบบมีขอบเขตบัญชีแทนการทำซ้ำ
หลายบัญชี / หมายเลขโทรศัพท์
ช่องทางที่รองรับ หลายบัญชี (เช่น WhatsApp) ใช้accountId เพื่อระบุการเข้าสู่ระบบแต่ละรายการ แต่ละ accountId สามารถกำหนดเส้นทางไปยังเอเจนต์ที่แตกต่างกันได้ ดังนั้นเซิร์ฟเวอร์หนึ่งตัวจึงสามารถโฮสต์หมายเลขโทรศัพท์หลายหมายเลขได้โดยไม่ผสมเซสชัน
หากคุณต้องการบัญชีเริ่มต้นทั่วทั้งช่องทางเมื่อไม่ได้ระบุ accountId ให้ตั้งค่า channels.<channel>.defaultAccount (ไม่บังคับ) เมื่อไม่ได้ตั้งค่า OpenClaw จะ fallback ไปยัง default หากมีอยู่ มิฉะนั้นจะใช้ id บัญชีแรกที่กำหนดค่าไว้ (เรียงลำดับแล้ว)
ช่องทางทั่วไปที่รองรับรูปแบบนี้ได้แก่:
whatsapp,telegram,discord,slack,signal,imessageirc,line,googlechat,mattermost,matrix,nextcloud-talkzalo,zalouser,nostr,feishu
แนวคิด
agentId: “สมอง” หนึ่งตัว (พื้นที่ทำงาน, การยืนยันตัวตนต่อเอเจนต์, ที่เก็บเซสชันต่อเอเจนต์)accountId: อินสแตนซ์บัญชีช่องทางหนึ่งรายการ (เช่น บัญชี WhatsApp"personal"เทียบกับ"biz")binding: กำหนดเส้นทางข้อความขาเข้าไปยังagentIdโดยใช้(channel, accountId, peer)และเลือกใช้ guild/team ids ได้- แชตโดยตรงจะยุบไปยัง
agent:<agentId>:<mainKey>(“main” ต่อเอเจนต์;session.mainKey)
ตัวอย่างแพลตฟอร์ม
บอต Discord ต่อเอเจนต์
บอต Discord ต่อเอเจนต์
บัญชีบอต Discord แต่ละบัญชีจับคู่กับ
accountId ที่ไม่ซ้ำกัน ผูกแต่ละบัญชีกับเอเจนต์และเก็บรายการอนุญาตแยกตามบอต- เชิญบอตแต่ละตัวเข้ากิลด์และเปิดใช้ Message Content Intent
- โทเค็นอยู่ใน
channels.discord.accounts.<id>.token(บัญชีเริ่มต้นสามารถใช้DISCORD_BOT_TOKENได้)
Telegram bots per agent
Telegram bots per agent
- สร้างบอตหนึ่งตัวต่อเอเจนต์ด้วย BotFather แล้วคัดลอกโทเค็นแต่ละรายการ
- โทเค็นอยู่ใน
channels.telegram.accounts.<id>.botToken(บัญชีเริ่มต้นสามารถใช้TELEGRAM_BOT_TOKENได้)
WhatsApp numbers per agent
WhatsApp numbers per agent
ลิงก์แต่ละบัญชีก่อนเริ่ม Gateway:
~/.openclaw/openclaw.json (JSON5):รูปแบบทั่วไป
- WhatsApp daily + Telegram deep work
- Same channel, one peer to Opus
- Family agent bound to a WhatsApp group
แยกตามช่องทาง: ส่ง WhatsApp ไปยังเอเจนต์ประจำวันแบบเร็ว และส่ง Telegram ไปยังเอเจนต์ Opusหมายเหตุ:
- หากคุณมีหลายบัญชีสำหรับช่องทางหนึ่ง ให้เพิ่ม
accountIdลงในการผูก (เช่น{ channel: "whatsapp", accountId: "personal" }) - หากต้องการส่ง DM/กลุ่มเดียวไปยัง Opus โดยให้ที่เหลืออยู่บน chat ให้เพิ่มการผูก
match.peerสำหรับเพียร์นั้น การจับคู่เพียร์จะชนะกฎทั้งช่องทางเสมอ
การกำหนดค่าแซนด์บ็อกซ์และเครื่องมือต่อเอเจนต์
แต่ละเอเจนต์สามารถมีข้อจำกัดแซนด์บ็อกซ์และเครื่องมือของตัวเองได้:setupCommand อยู่ภายใต้ sandbox.docker และทำงานหนึ่งครั้งเมื่อสร้างคอนเทนเนอร์ การเขียนทับ sandbox.docker.* ต่อเอเจนต์จะถูกละเว้นเมื่อ scope ที่แก้แล้วเป็น "shared"- การแยกความปลอดภัย: จำกัดเครื่องมือสำหรับเอเจนต์ที่ไม่น่าเชื่อถือ
- การควบคุมทรัพยากร: แซนด์บ็อกซ์เอเจนต์เฉพาะบางตัว ขณะที่ให้ตัวอื่นอยู่บนโฮสต์
- นโยบายที่ยืดหยุ่น: สิทธิ์แตกต่างกันต่อเอเจนต์
tools.elevated เป็นแบบ global และอิงตามผู้ส่ง ไม่สามารถกำหนดค่าต่อเอเจนต์ได้ หากคุณต้องการขอบเขตต่อเอเจนต์ ให้ใช้ agents.list[].tools เพื่อปฏิเสธ exec สำหรับการกำหนดเป้าหมายกลุ่ม ให้ใช้ agents.list[].groupChat.mentionPatterns เพื่อให้ @mentions แมปไปยังเอเจนต์ที่ต้องการได้ชัดเจนที่เกี่ยวข้อง
- เอเจนต์ ACP — การเรียกใช้ฮาร์เนสเขียนโค้ดภายนอก
- การกำหนดเส้นทางช่องทาง — วิธีที่ข้อความถูกส่งไปยังเอเจนต์
- Presence — Presence และความพร้อมใช้งานของเอเจนต์
- Session — การแยก Session และการกำหนดเส้นทาง
- เอเจนต์ย่อย — การเริ่มการรันเอเจนต์เบื้องหลัง