#Setting second agent

1 messages · Page 1 of 1 (latest)

little stratus
#

help me setting second agent for discord bot

#

ช่วยฉันสร้าง agent ตัวที่ 2 เพื่อใช้งานเฉพาะสำหรับการควบคุมและสื่อสารบนดิสคอร์ด

#

@trim cove ช่วยฉันสร้าง agent ตัวที่ 2 เพื่อใช้งานเฉพาะสำหรับการควบคุมและสื่อสารบนดิสคอร์ด

trim coveBOT
#

ขอเช็ก docs ให้ตรงก่อนนะ เดี๋ยวผมหา flow ที่ถูกสำหรับ agent ตัวที่ 2 บน Discord ให้เลย 🦐

#

ได้ครับ, ถ้าต้องการ agent ตัวที่ 2 สำหรับ Discord โดยเฉพาะ ผมแนะนำแบบนี้เลย, clean สุดคือ 1 agent = 1 Discord bot account เพราะ workspace, auth, และ session จะไม่ปนกัน

ก่อนเริ่ม ถ้าสะดวกส่ง openclaw --version มาด้วยนะ, flow multi-agent เปลี่ยนค่อนข้างเร็ว

1) สร้าง agent ใหม่

openclaw agents add discord-control --workspace ~/.openclaw/workspace-discord-control --non-interactive

(ถ้ารันจาก source ใช้ pnpm openclaw ...)

2) สร้าง Discord bot ตัวใหม่

  • เปิด Message Content Intent
  • invite bot เข้า server
  • อย่าส่ง token ลงแชต

3) ปรับ ~/.openclaw/openclaw.json แบบนี้

#
{
  agents: {
    list: [
      { id: "main", default: true, workspace: "~/.openclaw/workspace-main" },
      { id: "discord-control", workspace: "~/.openclaw/workspace-discord-control" },
    ],
  },
  bindings: [
    { agentId: "main", match: { channel: "discord", accountId: "default" } },
    { agentId: "discord-control", match: { channel: "discord", accountId: "control" } },
  ],
  channels: {
    discord: {
      enabled: true,
      groupPolicy: "allowlist",
#
      accounts: {
        default: {
          token: { source: "env", provider: "default", id: "DISCORD_BOT_TOKEN" },
        },
        control: {
          token: { source: "env", provider: "default", id: "DISCORD_BOT_TOKEN_CONTROL" },
          guilds: {
            "YOUR_GUILD_ID": {
              channels: {
                "YOUR_CHANNEL_ID": { allow: true, requireMention: false },
              },
            },
          },
        },
      },
#
    },
  },
}

4) set token แล้ว restart

export DISCORD_BOT_TOKEN_CONTROL="YOUR_NEW_BOT_TOKEN"
openclaw gateway restart
openclaw agents list --bindings
openclaw channels status --probe

5) ถ้าใช้ DM pairing กับ account ใหม่

#
openclaw pairing list discord --account control
openclaw pairing approve discord --account control <CODE>

ถ้าอยากใช้ bot ตัวเดิมตัวเดียว ก็ทำได้เหมือนกัน, โดย bind ตาม guildId / channelId ไปที่ agent ตัวที่ 2 แทน, แต่ identity ของ bot จะยังเป็นตัวเดิม

Docs ที่ตรงเรื่องนี้:

ถ้าคุณแปะ agents กับ channels.discord block แบบ redacted มาได้, ผมเขียน config final ให้ตรงกับ setup ของคุณเลย 🦐

little stratus
#

openclaw 2026.3.28 ประเด็นคือเชื่อมต่อ dsicord bot ไว้แล้วกับ agent หลักต้องการเพิ่ม agent ที่สองแยก cloude api ที่ใช้งาน
ตัวหลักใช้ gemmar4:e2b ต้องการเพิ่ม agent ตัวที่สองที่ความสามารถ tool calling มากกว่า อย่าง groq/llama3.1:8b เพื่อทำหน้าที่รับส่งข้อความควบคุมการทำงานต่างๆบนดิสคอร์ด

trim coveBOT
#

เดี๋ยวผมเช็ก key ของ per-agent model override ให้ตรงก่อนนะ, เพราะจุดนี้เดาง่ายแล้วพังง่ายมาก 🦐

#

เข้าใจเคสแล้วครับ, แบบนี้ ทำได้ และสำหรับ setup ของคุณผมแนะนำ ไม่ต้องเพิ่ม Discord bot ตัวที่ 2 ก่อน แต่ให้ใช้ bot เดิม + เพิ่ม agent ที่ 2 + bind เฉพาะ channel คุมงานบน Discord ไปหา agent ใหม่นั้น จะง่ายสุด

เหตุผลคือคุณมี Discord bot ผูกกับ agent หลักอยู่แล้ว, ถ้าต้องการแค่แยก “สมอง” กับ API/provider ก็ใช้ multi-agent routing ได้เลย

แบบที่แนะนำสำหรับเคสนี้

1) เพิ่ม agent ตัวใหม่

openclaw agents add discord-control --workspace ~/.openclaw/workspace-discord-control --non-interactive

2) ตั้ง model แยกให้ agent ตัวใหม่

ใช้ agents.list[].model ได้เลย

{
#
  agents: {
    list: [
      {
        id: "main",
        default: true,
        workspace: "~/.openclaw/workspace",
        model: "YOUR_MAIN_MODEL",
      },
      {
        id: "discord-control",
        workspace: "~/.openclaw/workspace-discord-control",
        model: "YOUR_CONTROL_MODEL",
      },
    ],
  },
#
}

ถ้าคุณมี agents.defaults.models เป็น allowlist อยู่แล้ว, อย่าลืมเพิ่ม model ของ agent ตัวใหม่เข้าไปด้วย ไม่งั้นจะเจอแนว ๆ model is not allowed

3) bind channel คุมงานบน Discord ไปหา agent ตัวใหม่

เอา binding ที่ specific กว่าไว้ ก่อน binding ทั่วไป

{
  bindings: [
    {
      agentId: "discord-control",
      match: {
        channel: "discord",
#
        accountId: "default",
        peer: { kind: "channel", id: "CONTROL_CHANNEL_ID" },
      },
    },
    {
      agentId: "main",
      match: {
        channel: "discord",
        accountId: "default",
      },
    },
  ],
}

แบบนี้คือ:

#
  • ห้อง CONTROL_CHANNEL_ID → ไป agent discord-control
  • ห้อง Discord อื่น ๆ → ยังไป main

4) เช็ก allowlist ของ Discord channel นั้นด้วย

ถ้าคุณใช้ groupPolicy: "allowlist" อยู่, ต้องมี channel นี้ใน channels.discord.guilds...channels...allow: true ด้วย


เรื่อง “แยก cloud API / provider” สำคัญมาก

อันนี้หลายคนพลาด, auth เป็น per-agent

agent ใหม่จะใช้ auth ของตัวเองที่:

~/.openclaw/agents/discord-control/agent/auth-profiles.json

แปลว่า:

#
  • ถ้าคุณอยากให้ agent 2 ใช้คนละ provider / คนละ API key, ต้องใส่ auth ให้ agent นี้แยก
  • อย่า reuse agentDir เดิม เด็ดขาด, session/auth จะชนกัน

ถ้าตอนนี้คุณพึ่ง env vars อย่างเดียว, ทั้งสอง agent อาจยังเห็น credential ชุดเดียวกันได้
ถ้าต้องการแยกจริง ๆ ให้ย้ายไปใช้ auth profile แยกต่อ agent จะชัดสุด


ข้อควรระวังเรื่อง model

พูดตรง ๆ นะ, ถ้า agent ตัวนี้จะทำงานแนว tool calling / คุมงาน / รับคำสั่งจาก Discord ผมไม่ค่อยไว้ใจ model เล็กระดับ 8B เท่าไร
docs ก็เตือนเหมือนกันว่า small models ไม่ค่อยเหมาะกับ tool-enabled bots และเสี่ยงเรื่อง tool call เพี้ยน / หลุด / มั่วได้

ถ้าจะให้มันเป็น agent คุมงานจริง ๆ ผมแนะนำใช้ model ที่แข็งกว่านั้นหน่อย และถ้าต้องการคำแนะนำ model ล่าสุด ให้ถามในห้อง #models ด้วย เพราะตรงนั้นข้อมูลสดกว่า docs เสมอ


ถ้าคุณอยากใช้ “Discord bot ตัวที่ 2” จริง ๆ

#

อันนั้นก็ทำได้, แต่ค่อยไปขั้นต่อไป:

  • เพิ่ม channels.discord.accounts.control
  • bind accountId: "control" ไป discord-control

อันนี้เหมาะเมื่อคุณอยากได้ bot identity แยก ไม่ใช่แค่ agent แยก


Docs ที่ตรง:

ถ้าคุณแปะ agents, bindings, และ channels.discord block แบบ ปิด token ออก มาได้, ผม rewrite เป็น config ที่ใช้กับเคสคุณตรง ๆ ให้เลยครับ 🦐

little stratus
#

เราสามารถทำทั้งหมดที่กล่าวมาผ่าน Web Ui ได้หรือไม่

trim coveBOT
#

ขอเช็กให้ชัวร์ก่อนนะว่า Web UI ตอนนี้ครอบคลุมถึง multi-agent routing แค่ไหน จะได้ไม่พาคุณไปหลงเมนูผิด 🦐

#

ได้ เกือบทั้งหมด ครับ, แต่ ไม่ทั้งหมดแบบเนียน 100% โดยเฉพาะบน 2026.3.28

ทำผ่าน Web UI ได้

ใน Control UI -> Config คุณสามารถแก้พวกนี้ได้:

  • agents.list[]
  • bindings[]
  • channels.discord...
  • agents.list[].model

ถ้าจะทำแบบที่คุยกันเมื่อกี้, ใช้ Config -> Raw JSON จะง่ายสุด แล้วกด apply/restart ได้เลย

ส่วนที่ยังไม่ค่อยใช่ Web UI

2 จุดนี้ผมยังแนะนำ CLI/ไฟล์มากกว่า:

  1. สร้าง agent แบบ wizard
  • Web UI เป็นแนว config editor มากกว่า
  • ไม่มี flow ที่สวยเท่า openclaw agents add ...
#
  1. แยก credential / provider ต่อ agent
  • อันนี้อยู่ที่ per-agent auth-profiles.json
  • ปกติผมจะแนะนำทำผ่าน CLI เช่น openclaw secrets configure --agent <id>
  • หรือแก้ไฟล์ auth ของ agent นั้นโดยตรง

สรุปสั้น ๆ

  • ถ้าแค่ เพิ่ม agent + bind ห้อง Discord + ตั้ง model แยกทำผ่าน Web UI ได้
  • ถ้าจะ แยก API key / provider auth คนละชุดจริง ๆ → ยังควรใช้ CLI/ไฟล์ ร่วมด้วย

ถ้าจะให้ผมตอบแบบ practical เลย:

  • Config routing/model = ทำใน Web UI
  • Agent bootstrap + auth แยก = ทำใน CLI

Docs:

#

ถ้าคุณอยาก ผมช่วยสรุปเป็น “คลิกตรงไหนใน Web UI ทีละจุด” ให้ต่อได้เลยครับ 🦐

little stratus
#

งั้นเราจะทำผ่าน CLI/ไฟล์ ขอรายละเอียดการดำเนินการทั้งหมดอีกครั้งอย่างละเอียด

trim coveBOT
#

ขอเช็ก auth/profile path กับ flow ที่ safest สำหรับ agent ใหม่อีกนิดนะ จะได้ให้ step แบบไม่เดา key ผิด 🦐

#

ได้เลยครับ, เอาแบบ CLI/ไฟล์ และยึดตามเคสของคุณโดยตรง:

เป้าหมาย

  • ใช้ Discord bot เดิมตัวเดียว
  • เพิ่ม agent ตัวที่ 2 ชื่อเช่น discord-control
  • ให้ ห้อง Discord สำหรับคุมงาน วิ่งเข้า agent ตัวใหม่
  • ห้องอื่นยังไป agent หลัก
  • agent ใหม่ใช้ model / provider / API key คนละชุด ได้

ผมแนะนำ flow นี้ครับ


0) ก่อนเริ่ม, backup config ไว้ก่อน

ไฟล์หลักคือ ~/.openclaw/openclaw.json

#
cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.bak-$(date +%F-%H%M%S)

ถ้าคุณรันจาก source, ใช้ pnpm openclaw ... แทน openclaw ...


1) สร้าง agent ใหม่

openclaw agents add discord-control --workspace ~/.openclaw/workspace-discord-control --non-interactive

คำสั่งนี้จะช่วยเพิ่ม agents.list[] ให้ และเตรียม workspace / agentDir ของ agent ใหม่

หลังรันเสร็จ เช็กได้ด้วย:

#
openclaw agents list --bindings

2) แก้ ~/.openclaw/openclaw.json

สำคัญ: ไฟล์นี้เป็น JSON5 ไม่ใช่ YAML

สำหรับเคสของคุณ, ถ้าใช้ Discord bot เดิม อยู่แล้ว, ปกติ ยังไม่ต้องยุ่งกับ channels.discord.accounts
ให้เพิ่มแค่:

  • agents.list[] ของ agent ใหม่
  • bindings[] เพื่อ route ห้อง control ไป agent ใหม่
  • model ของ agent ใหม่

โครงสร้างสุดท้ายควรใกล้เคียงแบบนี้

#
{
  agents: {
    list: [
      {
        id: "main",
        default: true,
        workspace: "~/.openclaw/workspace",
        model: "YOUR_MAIN_MODEL",
      },
      {
        id: "discord-control",
        workspace: "~/.openclaw/workspace-discord-control",
        model: "YOUR_CONTROL_MODEL",
      },
    ],
#
  },

  bindings: [
    // ห้อง control นี้ให้ไป agent ตัวใหม่
    {
      agentId: "discord-control",
      match: {
        channel: "discord",
        peer: { kind: "channel", id: "CONTROL_CHANNEL_ID" },
      },
    },

    // Discord อื่น ๆ ที่เหลือ ให้ไป main
    {
      agentId: "main",
#
      match: {
        channel: "discord",
      },
    },
  ],

  channels: {
    discord: {
      enabled: true,
      groupPolicy: "allowlist",
      guilds: {
        "YOUR_GUILD_ID": {
          channels: {
            "CONTROL_CHANNEL_ID": {
              allow: true,
#
              requireMention: false,
            },

            "OTHER_CHANNEL_ID": {
              allow: true,
              requireMention: false,
            },
          },
        },
      },
    },
  },
}

จุดที่ต้องระวัง

#
  1. binding ห้อง control ต้องอยู่ก่อน binding กว้าง ๆ ของ main
  2. ถ้า channels.discord.guilds.<guild>.channels ถูกใช้แล้ว, ห้องที่ไม่ได้ใส่ไว้จะโดน deny
  3. ถ้าคุณมี agents.defaults.models เป็น allowlist อยู่แล้ว, ต้องเพิ่ม model ของ agent ใหม่เข้าไปด้วย ไม่งั้นจะโดน model is not allowed

3) ถ้าต้องการ persona / prompt ของ agent ใหม่ ให้แก้ workspace ของมัน

agent ใหม่จะมี workspace แยกของตัวเองที่:

~/.openclaw/workspace-discord-control

ไฟล์ที่น่าแก้คือ:

  • AGENTS.md
  • SOUL.md
  • USER.md
#
  • IDENTITY.md

อย่างน้อยผมแนะนำใส่ AGENTS.md ของ agent ใหม่นิดนึง เช่น:

You are the Discord control agent.
Focus on command handling, message routing, and safe tool use.
Prefer short operational replies.
Do not act outside Discord-control tasks unless explicitly asked.

แบบนี้จะช่วยให้ agent ใหม่ “รู้หน้าที่ตัวเอง” ชัดขึ้น


4) ตั้ง auth / API key แยกให้ agent ใหม่

อันนี้สำคัญมาก

#

auth ของแต่ละ agent อยู่แยกกันที่:

~/.openclaw/agents/<agentId>/agent/auth-profiles.json

สำหรับ agent ใหม่คือ:

~/.openclaw/agents/discord-control/agent/auth-profiles.json

ถ้าคุณต้องการ “คนละ provider / คนละ API key” จริง

แนะนำวิธี CLI นี้:

#
openclaw secrets configure --agent discord-control

อันนี้จะพาคุณไปตั้งค่า credential ของ agent ใหม่นั้นโดยเฉพาะ

ถ้าคุณแค่อยาก “ใช้ auth ชุดเดียวกับ main” ชั่วคราว

ค่อย copy มาก่อนได้:

cp ~/.openclaw/agents/main/agent/auth-profiles.json \
   ~/.openclaw/agents/discord-control/agent/auth-profiles.json

แล้วค่อยแก้ทีหลัง

ห้ามทำ

#
  • ห้าม reuse agentDir เดิม
  • ห้ามชี้ main กับ discord-control ไป agentDir เดียวกัน

เพราะ auth/session จะชนกัน


5) restart gateway

แก้ config และ auth เสร็จแล้ว:

openclaw gateway restart

6) ตรวจสอบหลัง restart

#

รันพวกนี้:

openclaw status
openclaw agents list --bindings
openclaw models status

สิ่งที่อยากเห็น:

  • มี main และ discord-control
  • มี binding ของห้อง control ไป discord-control
  • model/auth ของ agent ใหม่ไม่มี error

7) ทดสอบจริงบน Discord

ทดสอบ 2 แบบ

#

ห้อง control

ส่งข้อความใน CONTROL_CHANNEL_ID

  • ควรไป discord-control

ห้องปกติ

ส่งข้อความในห้องอื่น

  • ควรยังไป main

ถ้ายัง route ผิด, มักเกิดจาก 3 อย่างนี้:

  1. bindings[] เรียงลำดับผิด
  2. channel ไม่ได้ allow ใน channels.discord.guilds...channels
  3. มี binding เก่าที่ broad กว่าทับอยู่

8) ถ้า model ใหม่ไม่ขึ้นหรือใช้งานไม่ได้

เช็ก 2 เรื่องนี้ก่อน

#

A. model ไม่อยู่ใน allowlist

ถ้าคุณมี agents.defaults.models, ต้องเพิ่ม model ใหม่นั้นเข้าไป

B. agent ใหม่ไม่มี auth

อาการคลาสสิกคือประมาณ:

  • No API key found for provider ...

ถ้าเจอแบบนี้, กลับไปทำข้อ 4


9) ข้อแนะนำตรง ๆ เรื่อง model สำหรับ agent คุมงาน

สำหรับ agent ที่ต้อง tool calling / คุมงาน / รับคำสั่งจาก Discord ผมไม่ค่อยแนะนำ model เล็กมาก
docs ก็เตือนเหมือนกันว่า small models ไม่ค่อยเหมาะกับ tool-enabled bots

ดังนั้น:

  • main จะใช้ local/เบากว่าได้
#
  • แต่ discord-control ควรเป็น model ที่เชื่อถือเรื่อง tool calling มากกว่า

ถ้าจะเอาคำแนะนำ model ล่าสุดจริง ๆ ให้ถามห้อง #models เพิ่มด้วย เพราะตรงนั้นข้อมูลสดสุด


10) ถ้าภายหลังอยากแยกเป็น “Discord bot คนละตัว” ด้วย

อันนั้นค่อยขยับต่อได้ โดย:

  • เพิ่ม channels.discord.accounts.control
  • เอา token ของ bot ตัวใหม่ไปไว้ใน account นั้น
  • bind accountId: "control" ไป discord-control

แต่สำหรับตอนนี้ ไม่ต้องทำขั้นนั้นก่อน
ใช้ bot เดิม + bind ตาม channel ง่ายกว่าเยอะ


#

สรุปสั้นที่สุด

ลำดับทำงานคือ:

  1. backup openclaw.json
  2. openclaw agents add discord-control --workspace ...
  3. แก้ openclaw.json เพิ่ม:
    • agents.list[].model
    • bindings[]
    • allow ห้อง control ใน channels.discord.guilds
  4. ตั้ง auth แยกด้วย openclaw secrets configure --agent discord-control
  5. openclaw gateway restart
  6. เช็ก openclaw status, openclaw agents list --bindings, openclaw models status
  7. ทดสอบใน Discord

Docs ที่ตรง:

little stratus
#

เอาใหม่ตอนนี้ข้อมูลสับสน เดิมทีมี agent main ที่ทำหน้าที่ตั้งค่า openclaw และ ทำหน้าที่เป้น agent หลัก ส่วน agent ที่สองที่ต้องการมีไว้ทำหน้าที่ บริหารจัดการ ดิสคอร์ดเท่านั้น เดิมทีเชื่อมต่อ agent main กับ ดิสอคร์ดแล้ว สามารถส่งข้อความได้ แต่ติดปัญหาที่ agent ตัวนี้ใช้ gemma4 e2b ไม่สามารถเรียก tool callingได้เลย จึงทำให้มีปัญหาในการสั่งลบข้อความ สร้างห้องพูดคุย หรือ บริหารจัดการ ดิสคอร์ด จึงต้องการ สร้าง agent ตัวที่สองที่ผูกกับ api ของ groq llama3.1:8b ที่มีความสามารถในการเรียกใช้ tool calling มากกว่ามาควบคุมบริหารจัดการดิสคอร์ดเท่านั้น ฉันควรทำอย่างไร

trim coveBOT
#

เดี๋ยวผมเช็ก key ของ per-agent tool allow/deny ให้ตรงก่อนครับ เพราะเคสนี้ “agent ดูแล Discord อย่างเดียว” ควรล็อก tool ให้แคบไว้ด้วย 🦐

#

ตอนนี้ภาพชัดแล้วครับ, และคำตอบสั้นที่สุดคือ:

สิ่งที่คุณควรทำ

สร้าง agent ตัวที่ 2 สำหรับ Discord โดยเฉพาะ แล้ว route Discord ทั้งหมดไปหา agent นั้น
ส่วน main ให้คงไว้เป็น agent หลักสำหรับ setup / งานทั่วไปเหมือนเดิม

ไม่จำเป็นต้องสร้าง Discord bot ตัวใหม่ทันที
ใช้ bot เดิม ได้, แค่เปลี่ยน routing ให้ Discord ไป discord-admin แทน main


ทำไมต้องทำแบบนี้

ปัญหาจริงของคุณไม่ใช่ “Discord ต่อไม่ได้”
แต่คือ agent ที่รับงาน Discord อยู่ตอนนี้ model อ่อนเกินไปสำหรับ tool calling

ดังนั้นแนวที่ถูกคือ:

  • main = agent หลัก / setup / งานทั่วไป
#
  • discord-admin = agent สำหรับจัดการ Discord เท่านั้น
  • Discord inbound ทั้งหมด → discord-admin

แบบนี้ main ไม่ต้องแบกงาน Discord admin แล้ว


Step ที่แนะนำ

1) สร้าง agent ใหม่

openclaw agents add discord-admin --workspace ~/.openclaw/workspace-discord-admin --non-interactive

2) ตั้ง model ให้ agent ใหม่

#

ใน ~/.openclaw/openclaw.json ให้ final shape ใกล้ ๆ แบบนี้:

{
  agents: {
    list: [
      {
        id: "main",
        default: true,
        workspace: "~/.openclaw/workspace",
        model: "YOUR_MAIN_MODEL",
      },
      {
        id: "discord-admin",
        workspace: "~/.openclaw/workspace-discord-admin",
        model: "YOUR_DISCORD_ADMIN_MODEL",
#
      },
    ],
  },

  bindings: [
    {
      agentId: "discord-admin",
      match: {
        channel: "discord",
      },
    },
  ],

  channels: {
    discord: {
#
      enabled: true,
      groupPolicy: "allowlist",
      guilds: {
        "YOUR_GUILD_ID": {
          channels: {
            "YOUR_DISCORD_CHANNEL_ID": {
              allow: true,
              requireMention: false,
            },
          },
        },
      },
    },
  },
}
#

จุดสำคัญ

  • binding นี้หมายถึง Discord ทั้งหมด จะไป discord-admin
  • main ยังเป็น default agent อยู่, แต่จะไม่รับ Discord ถ้ามี binding นี้
  • ถ้าคุณมี binding เก่าที่ชี้ Discord ไป main, เอาออก

3) ตั้ง auth / API key แยกให้ agent ใหม่

เพราะ auth เป็น per-agent

openclaw secrets configure --agent discord-admin

ไฟล์ auth ของ agent ใหม่จะอยู่ที่:

#
~/.openclaw/agents/discord-admin/agent/auth-profiles.json

ถ้าคุณต้องการให้ discord-admin ใช้ provider/API key คนละชุดกับ main, ตรงนี้คือจุดที่ต้องตั้ง


4) restart

openclaw gateway restart

5) verify

#
openclaw status
openclaw agents list --bindings
openclaw models status

คุณควรเห็นว่า:

  • มี agent discord-admin
  • มี binding channel: discord -> discord-admin
  • model/auth ของ discord-admin ไม่มี error

6) ทดสอบบน Discord

ลองสั่งงานที่เกี่ยวกับ Discord เช่น:

  • ส่งข้อความ
  • สร้าง thread / ห้อง
#
  • ลบข้อความ

ถ้ายังทำไม่ได้ ให้เช็ก 3 เรื่องนี้ก่อน:

  1. model ของ discord-admin ยัง tool-call ไม่พอ
  2. bot บน Discord ไม่มี permission พอ
  3. ใน config มีการปิด Discord actions บางอย่างไว้ (channels.discord.actions)

คำเตือนตรง ๆ เรื่อง model ที่คุณเล็งไว้

ผมพูดตรง ๆ นะ, model เล็กระดับ 8B อาจจะ “ดีกว่าเดิม” แต่ยัง ไม่น่าไว้ใจพอ สำหรับงาน admin แบบ:

  • ลบข้อความ
  • สร้าง/ลบห้อง
  • จัดการ Discord เชิงปฏิบัติการ

ถ้าจะใช้จริง:

  • จำกัดหน้าที่มันให้แคบ
#
  • ทดสอบในเซิร์ฟเวอร์/ห้องทดลองก่อน
  • อย่าเพิ่งให้สิทธิ์กว้างมากเกินไป

สำหรับงานที่มีผลกระทบจริง ผมแนะนำใช้ model ที่เชื่อถือเรื่อง tool calling มากกว่านี้ ถ้าต้องการคำแนะนำ model ล่าสุด ให้ถามห้อง #models เพิ่มด้วย


ถ้าคุณอยากให้ discord-admin ดูแล “เฉพาะบางห้อง” ไม่ใช่ทั้ง Discord

เปลี่ยน binding เป็นแบบนี้:

{
  bindings: [
    {
      agentId: "discord-admin",
      match: {
#
        channel: "discord",
        peer: { kind: "channel", id: "CONTROL_CHANNEL_ID" },
      },
    },
    {
      agentId: "main",
      match: {
        channel: "discord",
      },
    },
  ],
}

แต่จากที่คุณอธิบายล่าสุด, ผมว่า route Discord ทั้งหมดไป discord-admin ง่ายและตรงเป้ากว่าครับ

#

ข้อสรุปสุดท้าย

สำหรับเคสคุณ ผมแนะนำแบบนี้เลย:

  • เก็บ main ไว้เป็น agent หลัก
  • สร้าง discord-admin
  • ตั้ง model แยกให้ discord-admin
  • ตั้ง auth แยกด้วย openclaw secrets configure --agent discord-admin
  • bind Discord ทั้งหมดไป discord-admin
  • restart และทดสอบ

Docs:

#

ถ้าคุณต้องการ, ผมช่วยเขียน ตัวอย่าง openclaw.json ฉบับเต็ม ให้จาก config ปัจจุบันของคุณได้เลย แค่แปะส่วน agents, bindings, channels.discord แบบปิด token มา 🦐

little stratus
#

ปัญหาเก่ากลับมา สาเหตุที่ย้ายให้ agent ที่สอง รับหน้าที่ ดิสคอร์ดอย่างเดียวนั้น เพราะว่า ต้องการลดขนาดการโทเคนด้วยเพราะ
ที่นี้จะตั้งค่ายังไงให้ agent ตัวนี้รันโทเคนคำสั่งเล็กที่สุดเพราะ error ที่ได้มาหลังจาก binding สำเร็จแล้วคือ api rate limit นี้คือ error จาก log web api ต้นทาง
{
"request_id": "req_01kpcawm8sefdvd1b14acpd2am",
"created_at": "2026-04-16T23:44:14.105Z",
"error": {
"message": "Request too large for model llama-3.1-8b-instant in organization org_01kn75gb2hfp3sxqcd13zh042w service tier on_demand on tokens per minute (TPM): Limit 6000, Requested 24484, please reduce your message size and try again. Need more tokens? Upgrade to Dev Tier today at https://console.groq.com/settings/billing",
"type": "tokens",
"param": "",
"code": "rate_limit_exceeded"
}
}

trim coveBOT
#

ขอเช็ก key ที่ช่วย “ลด token ต่อรอบ” แบบ per-agent ให้ตรงก่อนนะครับ จุดนี้มีหลายตัวและเลือกผิดตัวแล้วไม่ช่วยเท่าไร 🦐

#

อันนี้ชัดเลยครับ, ตอนนี้ปัญหาไม่ใช่ binding แล้ว แต่เป็น prompt ใหญ่เกิน quota TPM ของ provider

จาก error นี้:

  • limit = 6000 TPM
  • request = 24484 tokens

แปลว่า request ต่อรอบของ discord-admin ใหญ่มากเกินไปสำหรับ tier/model นี้
ดังนั้นต้องทำ 2 อย่างพร้อมกัน:

  1. ลด prompt/token ต่อรอบให้สั้นที่สุด
  2. ยอมรับว่า model/tier นี้ค่อนข้างแคบมากสำหรับงาน agent + tool calling

สิ่งที่ควรตั้งค่า “เพื่อลด token” สำหรับ discord-admin

#

1) ลด Discord history ก่อน, อันนี้แรงสุด

สำหรับ agent จัดการ Discord ถ้าคำสั่งส่วนใหญ่เป็นคำสั่งสั้น ๆ ให้ลด:

{
  channels: {
    discord: {
      historyLimit: 3
    }
  }
}

ถ้าจะบีบสุด:

{
#
  channels: {
    discord: {
      historyLimit: 0
    }
  }
}

ความหมาย:

  • 3 = เอาข้อความย้อนหลังนิดเดียว
  • 0 = ไม่ inject history จาก Discord เลย

ผมแนะนำ

  • เริ่มที่ 3
  • ถ้ายังชน limit, ลง 1 หรือ 0
#

Docs: channels.discord.historyLimit default คือ 20, ซึ่งเยอะเกินไปสำหรับ model/tier แบบนี้


2) ทำ workspace ของ discord-admin ให้ “ผอม” มาก

เพราะ bootstrap จะอ่านไฟล์ใน workspace ของ agent นั้น

ที่:

~/.openclaw/workspace-discord-admin

ให้ไฟล์พวกนี้สั้นมาก:

  • AGENTS.md
  • SOUL.md
  • USER.md
  • TOOLS.md
#
  • IDENTITY.md

สำหรับ agent นี้

ผมแนะนำให้เหลือแทบแค่ AGENTS.md สั้น ๆ เช่น:

You manage Discord only.
Keep replies short.
Use tools only for Discord operations.
Do not do general assistant work.

ยิ่ง workspace ยาว, ยิ่งโดนกิน token ทุกครั้ง


3) ปิด skills ของ agent นี้ถ้าไม่จำเป็น

#

ถ้า discord-admin ไม่ต้องใช้ skills อื่น ๆ, ตั้งเป็นไม่มี skills ไปเลย:

{
  agents: {
    list: [
      {
        id: "discord-admin",
        skills: []
      }
    ]
  }
}

อันนี้ช่วยเยอะถ้าตอนนี้ default agent มี skills หลายตัว

#

4) ปิด thinking / verbosity และ cap output token

สำหรับ agent นี้ให้ lean ที่สุด:

{
  agents: {
    list: [
      {
        id: "discord-admin",
        thinkingDefault: "off",
        verboseDefault: "off",
        params: {
          maxTokens: 300
        }
#
      }
    ]
  }
}

ทำไมช่วย

error ของ Groq TPM มักนับ prompt + output budget ด้วย
ถ้า maxTokens สูง, request ที่ส่งไปจะบวมทันที

ค่าที่แนะนำ

  • เริ่มที่ maxTokens: 300
  • ถ้ายังชน, ลดเหลือ 200
  • ถ้าต้องตอบยาวค่อยเพิ่มทีหลัง

#

5) ลด tool result / memory context ของ agent นี้

ตั้ง per-agent context limits ให้เล็กลง:

{
  agents: {
    list: [
      {
        id: "discord-admin",
        contextLimits: {
          memoryGetMaxChars: 2000,
          toolResultMaxChars: 4000,
          postCompactionMaxChars: 800
        }
      }
    ]
#
  }
}

อันนี้ช่วยเวลา tool ส่ง output กลับมาเยอะ


6) ถ้ารับได้, เปิด global continuation-skip

อันนี้เป็น global ไม่ใช่ per-agent แต่ช่วยลด prompt ได้จริง:

{
  agents: {
    defaults: {
#
      contextInjection: "continuation-skip"
    }
  }
}

ความหมายคือ turn ต่อเนื่องจะไม่ re-inject bootstrap ซ้ำทุกครั้ง
ถ้า main ของคุณไม่ได้พึ่ง bootstrap ซ้ำหนัก ๆ อันนี้คุ้มมาก


7) ถ้ายังชน limit, กด bootstrap cap ลงอีก

อันนี้ก็ global เช่นกัน:

#
{
  agents: {
    defaults: {
      bootstrapMaxChars: 4000,
      bootstrapTotalMaxChars: 12000
    }
  }
}

แต่ผมจะทำ หลังจาก ลองข้อ 1-5 ก่อน
เพราะอันนี้กระทบทุก agent


config ที่ผมแนะนำสำหรับ discord-admin

#

ลองตั้งประมาณนี้ก่อน:

{
  agents: {
    defaults: {
      contextInjection: "continuation-skip"
    },
    list: [
      {
        id: "main",
        default: true,
        workspace: "~/.openclaw/workspace",
        model: "YOUR_MAIN_MODEL"
      },
      {
#
        id: "discord-admin",
        workspace: "~/.openclaw/workspace-discord-admin",
        model: "YOUR_DISCORD_ADMIN_MODEL",
        skills: [],
        thinkingDefault: "off",
        verboseDefault: "off",
        params: {
          maxTokens: 300
        },
        contextLimits: {
          memoryGetMaxChars: 2000,
          toolResultMaxChars: 4000,
          postCompactionMaxChars: 800
        }
      }
#
    ]
  },

  bindings: [
    {
      agentId: "discord-admin",
      match: {
        channel: "discord"
      }
    }
  ],

  channels: {
    discord: {
      historyLimit: 3
#
    }
  }
}

ลำดับที่ผมแนะนำให้ลอง

  1. ตั้ง channels.discord.historyLimit: 3
  2. ทำ workspace ของ discord-admin ให้สั้นมาก
  3. ตั้ง skills: []
  4. ตั้ง thinkingDefault: "off" + verboseDefault: "off" + params.maxTokens: 300
  5. restart
  6. ทดสอบอีกครั้ง

ถ้ายังชน:

#
  1. ลด historyLimit เป็น 1 หรือ 0
  2. ลด maxTokens เป็น 200
  3. เปิด contextInjection: "continuation-skip"

เรื่องสำคัญอีกข้อ

พูดตรง ๆ นะ, TPM 6000 สำหรับ model agent ที่ต้อง tool call ค่อนข้างตึงมาก
โดยเฉพาะถ้ามี:

  • bootstrap
  • channel history
  • tool schemas
  • tool results
  • session context

ดังนั้นถึงจะ optimize แล้ว, ถ้ายังชน limit อยู่เรื่อย ๆ แปลว่า bottleneck คือ provider tier/model นี้เล็กเกินไปสำหรับงานนี้ ไม่ใช่ config อย่างเดียว

#

สรุป

ถ้าคุณต้องการ “token เล็กที่สุด” สำหรับ discord-admin, ให้โฟกัส 4 ตัวนี้ก่อน:

  • channels.discord.historyLimit
  • workspace ของ discord-admin ให้สั้นมาก
  • skills: []
  • params.maxTokens ต่ำ ๆ

อันนี้คือชุดที่ impact สูงสุด

ถ้าคุณต้องการ, ผมช่วยเขียน diff config แบบพร้อมวาง สำหรับ discord-admin ให้ได้เลยจาก openclaw.json ปัจจุบันของคุณครับ 🦐

little stratus
#

ทั้งหมดที่ว่ามามีอะไรที่สามารถตั้งค่าผ่าน Web UI ได้บ้าง

trim coveBOT
#

ได้ครับ, ถ้าอิงจากทั้งหมดที่คุยกันมา สิ่งที่ตั้งผ่าน Web UI ได้ หลัก ๆ คือทุกอย่างที่อยู่ใน openclaw.json ครับ, โดยเข้า Control UI -> Config แล้วแก้ผ่าน Raw JSON จะง่ายสุด

ตั้งผ่าน Web UI ได้

พวกนี้ทำได้ใน Config

  • agents.list[]
    • เพิ่ม discord-admin
    • ตั้ง model
    • ตั้ง skills: []
    • ตั้ง thinkingDefault
    • ตั้ง verboseDefault
    • ตั้ง params.maxTokens
    • ตั้ง contextLimits
  • bindings[]
    • bind Discord ไป discord-admin
  • channels.discord.*
    • historyLimit
    • guilds
#
  • channels
    • actions (ถ้าจะเปิด/ปิด action บางอย่าง)
  • agents.defaults.*
    • contextInjection
    • bootstrapMaxChars
    • bootstrapTotalMaxChars

และจาก Web UI สามารถ apply config + restart ได้ด้วย


อะไรที่ยังไม่ใช่ Web UI ที่ดีนัก

พวกนี้ยังควรใช้ CLI/ไฟล์มากกว่า:

1) per-agent auth / API key

อันนี้คือ auth-profiles.json ของแต่ละ agent
เช่นของ discord-admin จะอยู่ที่:

#
~/.openclaw/agents/discord-admin/agent/auth-profiles.json

ตรงนี้ปกติผมยังแนะนำ:

openclaw secrets configure --agent discord-admin

2) แก้ workspace ของ agent

เช่นไฟล์:

  • ~/.openclaw/workspace-discord-admin/AGENTS.md
  • SOUL.md
  • TOOLS.md

อันนี้สำคัญมากสำหรับลด token แต่ไม่ใช่ flow ที่สะดวกใน Web UI

#

3) openclaw agents add

Web UI ทำแบบ “แก้ config ตรง ๆ” ได้
แต่ไม่มี flow สวยเท่า CLI สำหรับสร้าง agent ใหม่


สรุปแบบ practical

ทำใน Web UI ได้เลย

  • เพิ่ม discord-admin ใน agents.list
  • bind Discord ไปหา agent นี้
  • ลด historyLimit
  • ปิด skills
  • ลด maxTokens
  • ปิด thinking/verbose
  • ตั้ง global context reduction knobs

ยังควรทำผ่าน CLI/ไฟล์

#
  • ตั้ง API key / provider auth แยกต่อ agent
  • ทำ workspace ของ discord-admin ให้สั้น
  • ใช้ agents add ถ้าอยากให้สร้าง agent แบบ clean

ถ้าคุณอยาก ผมช่วยแปลงสิ่งที่คุยกันมาเป็น รายการว่าอันไหนกดใน Web UI ได้, อันไหนต้อง CLI แบบ checklist สั้น ๆ ให้ต่อได้ครับ 🦐

little stratus
#

ฉันหมายถึงสิ่งที่จะลด token ที่ติดลิมิต 6000 TPM
มีอะไรที่เราตั้งค่าได้ผ่าน WEB UI

trim coveBOT
#

ได้ครับ, ถ้าพูดเฉพาะ ตัวที่ช่วยลด token เพื่อไม่ชน 6000 TPM และ ตั้งผ่าน Web UI ได้ มีพวกนี้ครับ, โดยแนะนำให้เข้า Control UI -> Config -> Raw JSON

ตั้งผ่าน Web UI ได้

1) ลด Discord history

แรงสุดและคุ้มสุด

{
  channels: {
    discord: {
      historyLimit: 3
    }
  }
}

ถ้าจะบีบสุด:

#
{
  channels: {
    discord: {
      historyLimit: 0
    }
  }
}

2) ลด output budget ของ agent นี้

{
  agents: {
    list: [
      {
#
        id: "discord-admin",
        params: {
          maxTokens: 300
        }
      }
    ]
  }
}

3) ปิด skills ของ agent นี้

{
  agents: {
    list: [
#
      {
        id: "discord-admin",
        skills: []
      }
    ]
  }
}

4) ปิด thinking / verbose

{
  agents: {
    list: [
      {
#
        id: "discord-admin",
        thinkingDefault: "off",
        verboseDefault: "off"
      }
    ]
  }
}

5) ลด runtime context ของ agent นี้

{
  agents: {
    list: [
      {
#
        id: "discord-admin",
        contextLimits: {
          memoryGetMaxChars: 2000,
          toolResultMaxChars: 4000,
          postCompactionMaxChars: 800
        }
      }
    ]
  }
}

6) ลด bootstrap ซ้ำทุก turn (global)

{
#
  agents: {
    defaults: {
      contextInjection: "continuation-skip"
    }
  }
}

7) ลด bootstrap cap (global)

{
  agents: {
    defaults: {
      bootstrapMaxChars: 4000,
      bootstrapTotalMaxChars: 12000
#
    }
  }
}

อะไรที่ “ช่วยลด token” แต่ไม่ค่อยใช่ Web UI

อันนี้ช่วยเยอะเหมือนกัน แต่ปกติทำผ่านไฟล์/CLI:

  • ทำ workspace-discord-admin/AGENTS.md ให้สั้นมาก
  • ลบ/ย่อ SOUL.md, TOOLS.md, USER.md ของ agent นี้
  • จัด auth/profile ของ agent

ถ้าจะเอา “3 อย่างแรก” ที่ควรทำใน Web UI ตอนนี้

#

ผมแนะนำตามนี้เลย:

  1. channels.discord.historyLimit: 3
  2. agents.list[].params.maxTokens: 300
  3. agents.list[].skills: []

ถ้ายังชนลิมิต:
4. thinkingDefault: "off"
5. contextLimits.toolResultMaxChars: 4000
6. historyLimit: 0

ถ้าคุณอยาก ผมเขียน Raw JSON block ชุดเดียว ที่เอาไปวางใน Web UI ได้เลยสำหรับ discord-admin ให้ได้ครับ 🦐

little stratus
#

นี้คือ error หลังจาก ลด max เหลือ 300
{
"request_id": "req_01kphb61y5frdt6a8rzpzb3py3",
"created_at": "2026-04-18T22:25:35.173Z",
"error": {
"message": "Request too large for model llama-3.1-8b-instant in organization org_01kn75gb2hfp3sxqcd13zh042w service tier on_demand on tokens per minute (TPM): Limit 6000, Requested 18263, please reduce your message size and try again. Need more tokens? Upgrade to Dev Tier today at https://console.groq.com/settings/billing",
"type": "tokens",
"param": "",
"code": "rate_limit_exceeded"
}
}

trim coveBOT
#

โอเค, อันนี้ช่วยยืนยันเลยว่า maxTokens ไม่ใช่ตัวปัญหาหลัก

คุณลดแล้ว แต่ request ยังอยู่ที่ 18,263 ในขณะที่ limit คือ 6,000
แปลว่า token ส่วนใหญ่ยังมาจาก:

  • session/history
  • bootstrap/workspace files
  • skills
  • tool schemas

ไม่ใช่ output budget อย่างเดียว

ทำต่อแบบนี้เลย

1) รีเซ็ต session ก่อนทันที

ในห้อง Discord ที่ใช้คุมงาน ส่ง:

#
/new

หรือเปิด thread/channel ใหม่สำหรับทดสอบ
เพราะถ้า session เดิมยาว, มันจะพก transcript เก่าติดไปด้วย


2) ใน Web UI ตั้งแบบ aggressive ไปเลย

ใส่ประมาณนี้ใน Config -> Raw JSON

{
  agents: {
    defaults: {
#
      contextInjection: "continuation-skip"
    },
    list: [
      {
        id: "discord-admin",
        skills: [],
        thinkingDefault: "off",
        verboseDefault: "off",
        params: {
          maxTokens: 200
        },
        contextLimits: {
          memoryGetMaxChars: 1000,
          toolResultMaxChars: 2000,
          postCompactionMaxChars: 400
#
        }
      }
    ]
  },
  channels: {
    discord: {
      historyLimit: 0
    }
  }
}

ทำไมชุดนี้สำคัญ

  • historyLimit: 0 ตัด Discord history ออกหมด
  • skills: [] ตัด skill prompt
  • contextInjection: "continuation-skip" ลด bootstrap ซ้ำ
#
  • maxTokens: 200 ลด output budget ลงอีก
  • toolResultMaxChars / memoryGetMaxChars กด runtime context ลง

3) ถ้ายังไม่พอ, ปัญหาจะอยู่ที่ workspace ของ agent

อันนี้ Web UI ช่วยไม่มาก ต้องไปย่อไฟล์ใน:

~/.openclaw/workspace-discord-admin

โดยเฉพาะ:

  • AGENTS.md
  • SOUL.md
  • TOOLS.md
  • USER.md
#

สำหรับ agent นี้ ควรสั้นมากจริง ๆ


สรุปตรง ๆ

ตอนนี้คุณยังเกินลิมิตประมาณ 3 เท่า
ดังนั้นถ้าทำ 2 ข้อบนแล้ว ยังชนอีก, ผมว่าต้องยอมรับว่า:

TPM 6000 ของ tier/model นี้เล็กเกินไปสำหรับ Discord admin agent ที่มี tool calling

แปลว่า ณ จุดนั้นมี 2 ทาง:

  1. ลด context ให้สุดจริง ๆ แบบด้านบน + workspace สั้นมาก
  2. ขยับไป tier/model ที่รับงาน agent ได้มากกว่า

ถ้าคุณอยาก ผมช่วยทำ Raw JSON block แบบเต็ม ๆ สำหรับ paste เข้า Web UI ครั้งเดียว ให้ได้เลยครับ 🦐

little stratus
#

"channels": {
"discord": {
"historyLimit": 2
"enabled": true,
"commands": {
"native": true,
"nativeSkills": true
},
"token": "*",
"allowBots": false,
"groupPolicy": "allowlist",
"chunkMode": "newline",
"streaming": "off",
"dmPolicy": "allowlist",
"allowFrom": [
"1097940895006998569"
],
"dm": {
"enabled": true,
"groupEnabled": true,
"groupChannels": [
"1491136159990939708"
]
},
"guilds": {
"1487454900903350403": {
"requireMention": false,
"channels": {
"1491136159990939708": {
"allow": true
}
}
}
}
}
},

syntex ผิด

trim coveBOT
#

ใช่ครับ, ตัวนี้ syntax ผิดหลัก ๆ 2 จุด:

  1. ขาด comma หลัง "historyLimit": 2
  2. ปีกกา } ปิดไม่ครบตำแหน่ง

ใช้แบบนี้แทนได้เลย:

"channels": {
  "discord": {
    "historyLimit": 2,
    "enabled": true,
    "commands": {
      "native": true,
      "nativeSkills": true
    },
#
    "token": "*",
    "allowBots": false,
    "groupPolicy": "allowlist",
    "chunkMode": "newline",
    "streaming": "off",
    "dmPolicy": "allowlist",
    "allowFrom": [
      "1097940895006998569"
    ],
    "dm": {
      "enabled": true,
      "groupEnabled": true,
      "groupChannels": [
        "1491136159990939708"
      ]
#
    },
    "guilds": {
      "1487454900903350403": {
        "requireMention": false,
        "channels": {
          "1491136159990939708": {
            "allow": true
          }
        }
      }
    }
  }
}

ถ้ายัง error อีก มีโอกาสเป็นเพราะ:

#
  • บรรทัดก่อนหน้า block นี้ลืม comma
  • หรือหลัง block นี้ใน object ใหญ่ลืม comma

ถ้าคุณอยาก ผมช่วยตรวจ config ทั้งก้อน ให้ได้, แปะมาแบบปิด token เหมือนเดิมได้เลย 🦐

unborn stratusBOT