#Setting second agent
1 messages · Page 1 of 1 (latest)
ช่วยฉันสร้าง agent ตัวที่ 2 เพื่อใช้งานเฉพาะสำหรับการควบคุมและสื่อสารบนดิสคอร์ด
@trim cove ช่วยฉันสร้าง agent ตัวที่ 2 เพื่อใช้งานเฉพาะสำหรับการควบคุมและสื่อสารบนดิสคอร์ด
ขอเช็ก 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 ที่ตรงเรื่องนี้:
- https://docs.openclaw.ai/help/faq
- https://docs.openclaw.ai/concepts/multi-agent
- https://docs.openclaw.ai/channels/discord
- https://docs.openclaw.ai/cli/agents
ถ้าคุณแปะ agents กับ channels.discord block แบบ redacted มาได้, ผมเขียน config final ให้ตรงกับ setup ของคุณเลย 🦐
openclaw 2026.3.28 ประเด็นคือเชื่อมต่อ dsicord bot ไว้แล้วกับ agent หลักต้องการเพิ่ม agent ที่สองแยก cloude api ที่ใช้งาน
ตัวหลักใช้ gemmar4:e2b ต้องการเพิ่ม agent ตัวที่สองที่ความสามารถ tool calling มากกว่า อย่าง groq/llama3.1:8b เพื่อทำหน้าที่รับส่งข้อความควบคุมการทำงานต่างๆบนดิสคอร์ด
เดี๋ยวผมเช็ก 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→ ไป agentdiscord-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 ที่ตรง:
- https://docs.openclaw.ai/help/faq
- https://docs.openclaw.ai/concepts/multi-agent
- https://docs.openclaw.ai/channels/discord
- https://docs.openclaw.ai/concepts/models
ถ้าคุณแปะ agents, bindings, และ channels.discord block แบบ ปิด token ออก มาได้, ผม rewrite เป็น config ที่ใช้กับเคสคุณตรง ๆ ให้เลยครับ 🦐
เราสามารถทำทั้งหมดที่กล่าวมาผ่าน Web Ui ได้หรือไม่
ขอเช็กให้ชัวร์ก่อนนะว่า 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/ไฟล์มากกว่า:
- สร้าง agent แบบ wizard
- Web UI เป็นแนว config editor มากกว่า
- ไม่มี flow ที่สวยเท่า
openclaw agents add ...
- แยก 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 ทีละจุด” ให้ต่อได้เลยครับ 🦐
งั้นเราจะทำผ่าน CLI/ไฟล์ ขอรายละเอียดการดำเนินการทั้งหมดอีกครั้งอย่างละเอียด
ขอเช็ก 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,
},
},
},
},
},
},
}
จุดที่ต้องระวัง
- binding ห้อง control ต้องอยู่ก่อน binding กว้าง ๆ ของ
main - ถ้า
channels.discord.guilds.<guild>.channelsถูกใช้แล้ว, ห้องที่ไม่ได้ใส่ไว้จะโดน deny - ถ้าคุณมี
agents.defaults.modelsเป็น allowlist อยู่แล้ว, ต้องเพิ่ม model ของ agent ใหม่เข้าไปด้วย ไม่งั้นจะโดนmodel is not allowed
3) ถ้าต้องการ persona / prompt ของ agent ใหม่ ให้แก้ workspace ของมัน
agent ใหม่จะมี workspace แยกของตัวเองที่:
~/.openclaw/workspace-discord-control
ไฟล์ที่น่าแก้คือ:
AGENTS.mdSOUL.mdUSER.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 อย่างนี้:
bindings[]เรียงลำดับผิด- channel ไม่ได้ allow ใน
channels.discord.guilds...channels - มี 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 ง่ายกว่าเยอะ
สรุปสั้นที่สุด
ลำดับทำงานคือ:
- backup
openclaw.json openclaw agents add discord-control --workspace ...- แก้
openclaw.jsonเพิ่ม:agents.list[].modelbindings[]- allow ห้อง control ใน
channels.discord.guilds
- ตั้ง auth แยกด้วย
openclaw secrets configure --agent discord-control openclaw gateway restart- เช็ก
openclaw status,openclaw agents list --bindings,openclaw models status - ทดสอบใน Discord
Docs ที่ตรง:
- https://docs.openclaw.ai/channels/discord
- https://docs.openclaw.ai/cli/agents
- https://docs.openclaw.ai/cli/secrets
ถ้าคุณอยาก, แปะ openclaw.json เฉพาะส่วน agents, bindings, channels.discord แบบปิด token มาได้เลย เดี๋ยวผม rewrite เป็น config final ให้ตรงกับของคุณครับ 🦐
เอาใหม่ตอนนี้ข้อมูลสับสน เดิมทีมี agent main ที่ทำหน้าที่ตั้งค่า openclaw และ ทำหน้าที่เป้น agent หลัก ส่วน agent ที่สองที่ต้องการมีไว้ทำหน้าที่ บริหารจัดการ ดิสคอร์ดเท่านั้น เดิมทีเชื่อมต่อ agent main กับ ดิสอคร์ดแล้ว สามารถส่งข้อความได้ แต่ติดปัญหาที่ agent ตัวนี้ใช้ gemma4 e2b ไม่สามารถเรียก tool callingได้เลย จึงทำให้มีปัญหาในการสั่งลบข้อความ สร้างห้องพูดคุย หรือ บริหารจัดการ ดิสคอร์ด จึงต้องการ สร้าง agent ตัวที่สองที่ผูกกับ api ของ groq llama3.1:8b ที่มีความสามารถในการเรียกใช้ tool calling มากกว่ามาควบคุมบริหารจัดการดิสคอร์ดเท่านั้น ฉันควรทำอย่างไร
เดี๋ยวผมเช็ก 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 เรื่องนี้ก่อน:
- model ของ
discord-adminยัง tool-call ไม่พอ - bot บน Discord ไม่มี permission พอ
- ใน 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 มา 🦐
ปัญหาเก่ากลับมา สาเหตุที่ย้ายให้ 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"
}
}
ขอเช็ก key ที่ช่วย “ลด token ต่อรอบ” แบบ per-agent ให้ตรงก่อนนะครับ จุดนี้มีหลายตัวและเลือกผิดตัวแล้วไม่ช่วยเท่าไร 🦐
อันนี้ชัดเลยครับ, ตอนนี้ปัญหาไม่ใช่ binding แล้ว แต่เป็น prompt ใหญ่เกิน quota TPM ของ provider
จาก error นี้:
- limit = 6000 TPM
- request = 24484 tokens
แปลว่า request ต่อรอบของ discord-admin ใหญ่มากเกินไปสำหรับ tier/model นี้
ดังนั้นต้องทำ 2 อย่างพร้อมกัน:
- ลด prompt/token ต่อรอบให้สั้นที่สุด
- ยอมรับว่า 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.mdSOUL.mdUSER.mdTOOLS.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
}
}
}
ลำดับที่ผมแนะนำให้ลอง
- ตั้ง
channels.discord.historyLimit: 3 - ทำ workspace ของ
discord-adminให้สั้นมาก - ตั้ง
skills: [] - ตั้ง
thinkingDefault: "off"+verboseDefault: "off"+params.maxTokens: 300 - restart
- ทดสอบอีกครั้ง
ถ้ายังชน:
- ลด
historyLimitเป็น1หรือ0 - ลด
maxTokensเป็น200 - เปิด
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 ปัจจุบันของคุณครับ 🦐
ทั้งหมดที่ว่ามามีอะไรที่สามารถตั้งค่าผ่าน Web UI ได้บ้าง
ได้ครับ, ถ้าอิงจากทั้งหมดที่คุยกันมา สิ่งที่ตั้งผ่าน 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
- bind Discord ไป
channels.discord.*historyLimitguilds
channelsactions(ถ้าจะเปิด/ปิด action บางอย่าง)
agents.defaults.*contextInjectionbootstrapMaxCharsbootstrapTotalMaxChars
และจาก 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.mdSOUL.mdTOOLS.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 สั้น ๆ ให้ต่อได้ครับ 🦐
ฉันหมายถึงสิ่งที่จะลด token ที่ติดลิมิต 6000 TPM
มีอะไรที่เราตั้งค่าได้ผ่าน WEB UI
ได้ครับ, ถ้าพูดเฉพาะ ตัวที่ช่วยลด 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 ตอนนี้
ผมแนะนำตามนี้เลย:
channels.discord.historyLimit: 3agents.list[].params.maxTokens: 300agents.list[].skills: []
ถ้ายังชนลิมิต:
4. thinkingDefault: "off"
5. contextLimits.toolResultMaxChars: 4000
6. historyLimit: 0
ถ้าคุณอยาก ผมเขียน Raw JSON block ชุดเดียว ที่เอาไปวางใน Web UI ได้เลยสำหรับ discord-admin ให้ได้ครับ 🦐
นี้คือ 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"
}
}
โอเค, อันนี้ช่วยยืนยันเลยว่า 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 promptcontextInjection: "continuation-skip"ลด bootstrap ซ้ำ
maxTokens: 200ลด output budget ลงอีกtoolResultMaxChars/memoryGetMaxCharsกด runtime context ลง
3) ถ้ายังไม่พอ, ปัญหาจะอยู่ที่ workspace ของ agent
อันนี้ Web UI ช่วยไม่มาก ต้องไปย่อไฟล์ใน:
~/.openclaw/workspace-discord-admin
โดยเฉพาะ:
AGENTS.mdSOUL.mdTOOLS.mdUSER.md
สำหรับ agent นี้ ควรสั้นมากจริง ๆ
สรุปตรง ๆ
ตอนนี้คุณยังเกินลิมิตประมาณ 3 เท่า
ดังนั้นถ้าทำ 2 ข้อบนแล้ว ยังชนอีก, ผมว่าต้องยอมรับว่า:
TPM 6000 ของ tier/model นี้เล็กเกินไปสำหรับ Discord admin agent ที่มี tool calling
แปลว่า ณ จุดนั้นมี 2 ทาง:
- ลด context ให้สุดจริง ๆ แบบด้านบน + workspace สั้นมาก
- ขยับไป tier/model ที่รับงาน agent ได้มากกว่า
ถ้าคุณอยาก ผมช่วยทำ Raw JSON block แบบเต็ม ๆ สำหรับ paste เข้า Web UI ครั้งเดียว ให้ได้เลยครับ 🦐
"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 ผิด
ใช่ครับ, ตัวนี้ syntax ผิดหลัก ๆ 2 จุด:
- ขาด comma หลัง
"historyLimit": 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 เหมือนเดิมได้เลย 🦐