Tools
ล็อบสเตอร์
Lobster รันไปป์ไลน์เครื่องมือหลายขั้นตอนเป็นการเรียกเครื่องมือแบบกำหนดแน่นอนเพียงครั้งเดียว พร้อม
จุดตรวจสอบการอนุมัติที่ระบุชัดเจนและโทเค็นสำหรับดำเนินการต่อ โดยอยู่เหนือ
งานเบื้องหลังแบบแยกออกมาหนึ่งระดับ: สำหรับการประสานโฟลว์ที่ครอบคลุมงานแบบแยกออกมาหลายงาน
โปรดดู Task Flow (openclaw tasks flow); สำหรับบัญชีแยกประเภท
กิจกรรมของงาน โปรดดู งานเบื้องหลัง
เหตุผล
หากไม่มี Lobster งานหลายขั้นตอนจะต้องเรียกเครื่องมือไปกลับหลายครั้ง โดยมี โมเดลคอยประสานทุกขั้นตอน Lobster ย้ายการประสานนั้นเข้าสู่รันไทม์ที่มีชนิดข้อมูลกำกับ:
- เรียกครั้งเดียวแทนหลายครั้ง: การเรียกเครื่องมือ Lobster เพียงครั้งเดียวจะส่งคืนผลลัพธ์ แบบมีโครงสร้างสำหรับทั้งไปป์ไลน์
- มีการอนุมัติในตัว: ผลข้างเคียง (ส่ง, โพสต์, ลบ) จะหยุดเวิร์กโฟลว์ จนกว่าจะได้รับการอนุมัติอย่างชัดเจน
- ดำเนินการต่อได้: เวิร์กโฟลว์ที่หยุดจะส่งคืนโทเค็น ให้อนุมัติและดำเนินการต่อได้โดยไม่ต้อง รันขั้นตอนก่อนหน้าใหม่
Lobster เป็น DSL ขนาดเล็กที่มีข้อจำกัด ไม่ใช่ภาษาสคริปต์อเนกประสงค์:
การอนุมัติ/ดำเนินการต่อเป็นองค์ประกอบพื้นฐานที่คงทนและมีมาในตัว; ไปป์ไลน์เป็นข้อมูล (จึงง่ายต่อการ
บันทึก เปรียบเทียบความแตกต่าง เล่นซ้ำ และตรวจทาน); ไวยากรณ์ขนาดเล็กจำกัดเส้นทางโค้ดแบบ "สร้างสรรค์" เพื่อให้
การตรวจสอบความถูกต้องยังคงสมจริง; การหมดเวลา ขีดจำกัดเอาต์พุต การตรวจสอบแซนด์บ็อกซ์ และ
รายการอนุญาตถูกบังคับใช้โดยรันไทม์ ไม่ใช่โดยแต่ละสคริปต์ แต่ละขั้นตอนยังคง
เรียก CLI หรือสคริปต์ใดก็ได้—คุณสามารถสร้างไฟล์ .lobster จากเครื่องมืออื่นได้ หาก
ต้องการภาษาสำหรับเขียนเวิร์กโฟลว์ที่มีความสามารถมากขึ้น
หากไม่มี Lobster การคัดแยกอีเมลที่ทำซ้ำเป็นประจำจะมีลักษณะดังนี้:
ผู้ใช้: "ตรวจสอบอีเมลของฉันและร่างคำตอบ"→ openclaw เรียก gmail.list→ LLM สรุป→ ผู้ใช้: "ร่างคำตอบสำหรับ #2 และ #5"→ LLM ร่างคำตอบ→ ผู้ใช้: "ส่ง #2"→ openclaw เรียก gmail.send(ทำซ้ำทุกวัน โดยไม่มีหน่วยความจำว่าได้คัดแยกอะไรไปแล้ว)เมื่อใช้ Lobster งานเดียวกันจะเป็นการเรียกเพียงครั้งเดียวที่หยุดเพื่อรอการอนุมัติและดำเนินการต่อได้:
{ "action": "run", "pipeline": "email.triage --limit 20", "timeoutMs": 30000 }{ "ok": true, "status": "needs_approval", "output": [{ "summary": "5 need replies, 2 need action" }], "requiresApproval": { "type": "approval_request", "prompt": "Send 2 draft replies?", "items": [], "resumeToken": "..." }}วิธีการทำงาน
OpenClaw รันเวิร์กโฟลว์ Lobster ภายในโพรเซส โดยใช้แพ็กเกจ
@clawdbot/lobster ที่รวมมาให้เป็นตัวรันแบบฝังตัว ไม่มีการสร้างซับโพรเซส lobster
ภายนอก; การเรียกเครื่องมือจะส่งคืนเอนเวโลป JSON โดยตรง หาก
ไปป์ไลน์หยุดเพื่อรอการอนุมัติ เอนเวโลปจะมีโทเค็นสำหรับดำเนินการต่อ (หรือรหัส
การอนุมัติแบบสั้น) เพื่อให้ดำเนินการต่อภายหลังได้
การเปิดใช้งาน
Lobster เป็นเครื่องมือ Plugin เสริม ซึ่งไม่ได้เปิดใช้งานโดยค่าเริ่มต้น และจัดส่ง รวมมาให้แล้ว จึงไม่ต้องติดตั้งแยก—เพียงอนุญาตเครื่องมือ:
{ "tools": { "alsoAllow": ["lobster"] }}หรือกำหนดต่อเอเจนต์:
{ "agents": { "list": [ { "id": "main", "tools": { "alsoAllow": ["lobster"] } } ] }}เครื่องมือนี้จะถูกปิดใช้งานทั้งหมดสำหรับบริบทเครื่องมือที่อยู่ในแซนด์บ็อกซ์
หากต้องการ Lobster CLI แบบสแตนด์อโลนสำหรับการพัฒนาหรือไปป์ไลน์ภายนอก
(นอกตัวรัน Gateway แบบฝังตัว) ให้ติดตั้งจาก
ที่เก็บ Lobster และเพิ่ม lobster ไว้ใน
PATH
รูปแบบ: CLI ขนาดเล็ก + ไปป์ JSON + การอนุมัติ
สร้างคำสั่งขนาดเล็กที่สื่อสารด้วย JSON แล้วเชื่อมต่อเข้าด้วยกันเป็นการเรียก Lobster ครั้งเดียว (ชื่อคำสั่งด้านล่างเป็นเพียงตัวอย่าง—เปลี่ยนเป็นคำสั่งของคุณเอง)
inbox list --jsoninbox categorize --jsoninbox apply --json{ "action": "run", "pipeline": "exec --json --shell 'inbox list --json' | exec --stdin json --shell 'inbox categorize --json' | exec --stdin json --shell 'inbox apply --json' | approve --preview-from-stdin --limit 5 --prompt 'Apply changes?'", "timeoutMs": 30000}หากไปป์ไลน์ร้องขอการอนุมัติ ให้ดำเนินการต่อด้วยโทเค็น:
{ "action": "resume", "token": "<resumeToken>", "approve": true}ตัวอย่าง: แมปรายการอินพุตไปยังการเรียกเครื่องมือ:
gog.gmail.search --query 'newer_than:1d' \ | openclaw.invoke --tool message --action send --each --item-key message --args-json '{"provider":"telegram","to":"..."}'ขั้นตอน LLM ที่ใช้เฉพาะ JSON (llm-task)
สำหรับ ขั้นตอน LLM แบบมีโครงสร้าง ภายในเวิร์กโฟลว์ ให้เปิดใช้งานเครื่องมือ Plugin เสริม
llm-task และเรียกใช้จาก Lobster:
{ "plugins": { "entries": { "llm-task": { "enabled": true } } }, "agents": { "list": [ { "id": "main", "tools": { "alsoAllow": ["llm-task"] } } ] }}ข้อจำกัดสำคัญ: Lobster แบบฝังตัวเทียบกับ openclaw.invoke
Plugin Lobster ที่รวมมาให้จะรันเวิร์กโฟลว์ ภายในโพรเซส ภายใน Gateway
ในโหมดฝังตัวนั้น openclaw.invoke จะ ไม่ สืบทอด
บริบท URL/การยืนยันตัวตนของ Gateway โดยอัตโนมัติสำหรับการเรียกเครื่องมือ OpenClaw CLI แบบซ้อน
ซึ่งหมายความว่ารูปแบบนี้ ยังไม่น่าเชื่อถือในตัวรันแบบฝังตัวในขณะนี้:
openclaw.invoke --tool llm-task --action json --args-json '{ ... }'ใช้ตัวอย่างด้านล่างเฉพาะเมื่อรัน Lobster CLI แบบสแตนด์อโลน ใน
สภาพแวดล้อมที่กำหนดค่า openclaw.invoke ด้วยบริบท
Gateway/การยืนยันตัวตนที่ถูกต้องไว้แล้ว
openclaw.invoke --tool llm-task --action json --args-json '{ "prompt": "Given the input email, return intent and draft.", "thinking": "low", "input": { "subject": "Hello", "body": "Can you help?" }, "schema": { "type": "object", "properties": { "intent": { "type": "string" }, "draft": { "type": "string" } }, "required": ["intent", "draft"], "additionalProperties": false }}'หากคุณใช้ Plugin Lobster แบบฝังตัวในปัจจุบัน ให้เลือกอย่างใดอย่างหนึ่งต่อไปนี้:
- เรียกเครื่องมือ
llm-taskโดยตรงภายนอก Lobster หรือ - ใช้ขั้นตอนที่ไม่ใช่
openclaw.invokeภายในไปป์ไลน์ Lobster จนกว่าจะมีการเพิ่ม บริดจ์แบบฝังตัวที่รองรับ
โปรดดูรายละเอียดและตัวเลือกการกำหนดค่าที่ งาน LLM
ไฟล์เวิร์กโฟลว์ (.lobster)
Lobster สามารถรันไฟล์เวิร์กโฟลว์ YAML/JSON ที่มีฟิลด์ name, args, steps, env,
condition และ approval ได้ โดยตั้งค่า pipeline เป็นเส้นทางไฟล์ในการเรียก
เครื่องมือ
name: inbox-triageargs: tag: default: "family"steps: - id: collect command: inbox list --json - id: categorize command: inbox categorize --json stdin: $collect.stdout - id: approve command: inbox apply --approve stdin: $categorize.stdout approval: required - id: execute command: inbox apply --execute stdin: $categorize.stdout condition: $approve.approvedหมายเหตุ:
stdin: $step.stdoutและstdin: $step.jsonส่งเอาต์พุตจากขั้นตอนก่อนหน้าcondition(หรือwhen) สามารถควบคุมการรันขั้นตอนตาม$step.approved
พารามิเตอร์เครื่องมือ
run
{ "action": "run", "pipeline": "gog.gmail.search --query 'newer_than:1d' | email.triage", "cwd": "workspace", "timeoutMs": 30000, "maxStdoutBytes": 512000}รันไฟล์เวิร์กโฟลว์พร้อมอาร์กิวเมนต์:
{ "action": "run", "pipeline": "/path/to/inbox-triage.lobster", "argsJson": "{\"tag\":\"family\"}"}| ฟิลด์ | ค่าเริ่มต้น | หมายเหตุ |
|---|---|---|
pipeline |
จำเป็น | สตริงไปป์ไลน์แบบอินไลน์ หรือเส้นทางที่ลงท้ายด้วย .lobster/.yaml/.yml/.json สำหรับไฟล์เวิร์กโฟลว์ |
cwd |
cwd ของ Gateway | ไดเรกทอรีทำงานแบบสัมพัทธ์; ต้องแปลงเป็นเส้นทางภายในไดเรกทอรีทำงานของ Gateway (เส้นทางสัมบูรณ์จะถูกปฏิเสธ) |
timeoutMs |
20000 |
ยกเลิกการรันหากเกินเวลานี้ |
maxStdoutBytes |
512000 |
ยกเลิกการรันหาก stdout หรือ stderr ที่บันทึกไว้มีขนาดเกินค่านี้ |
argsJson |
- | สตริง JSON ของอาร์กิวเมนต์สำหรับไฟล์เวิร์กโฟลว์ (ไม่ใช้กับไปป์ไลน์แบบอินไลน์) |
resume
{ "action": "resume", "token": "<resumeToken>", "approve": true}resume รับได้ทั้ง token (โทเค็นสำหรับดำเนินการต่อแบบเต็มจาก requiresApproval)
หรือ approvalId (รหัสแบบสั้นจากออบเจ็กต์เดียวกัน)—ให้ใช้ค่าที่การรันซึ่งหยุดไว้
ส่งคืนมา ต้องระบุ approve
โหมด Task Flow ที่มีการจัดการ
การส่ง flowControllerId และ flowGoal ใน run (หรือ flowId และ
flowExpectedRevision ใน resume) จะส่งการเรียกผ่าน API
Task Flow แบบมีการจัดการของรันไทม์ Plugin แทนการส่งคืน
เอนเวโลปเปล่า: OpenClaw จะสร้างหรือดำเนินการต่อระเบียนโฟลว์แบบคงทน นำ
เอนเวโลป Lobster ไปใช้กับระเบียนนั้น (waiting เมื่อรอการอนุมัติ, succeeded/failed เมื่อ
เสร็จสิ้น) และส่งคืน { ok, envelope, flow, mutation } โหมดนี้จำเป็นต้องมี
รันไทม์ Task Flow ที่ผูกไว้ และมีไว้สำหรับโค้ด Plugin/ตัวควบคุมที่ต้องการ
สถานะโฟลว์แบบคงทนข้ามการรีสตาร์ต Gateway ไม่ใช่สำหรับการใช้งานเฉพาะกิจทั่วไปของเอเจนต์
เอนเวโลปเอาต์พุต
Lobster ส่งคืนเอนเวโลป JSON ที่มีสถานะอย่างใดอย่างหนึ่งจากสามสถานะ:
ok- เสร็จสมบูรณ์สำเร็จneeds_approval- หยุดชั่วคราว;requiresApprovalมีresumeTokenและapprovalIdแบบสั้น ซึ่งใช้ค่าใดค่าหนึ่งเพื่อดำเนินการรันต่อได้cancelled- ถูกปฏิเสธหรือยกเลิกอย่างชัดเจน
เครื่องมือแสดงเอนเวโลปทั้งใน content (JSON ที่จัดรูปแบบให้อ่านง่าย) และ details
(ออบเจ็กต์ดิบ)
การอนุมัติ
หากมี requiresApproval ให้ตรวจสอบข้อความแจ้งและตัดสินใจ:
approve: true- ดำเนินการต่อและทำผลข้างเคียงต่อไปapprove: false- ยกเลิกและสิ้นสุดเวิร์กโฟลว์
ใช้ approve --preview-from-stdin --limit N เพื่อแนบตัวอย่าง JSON ไปกับ
คำขออนุมัติ โดยไม่ต้องใช้โค้ดเชื่อม jq/heredoc ที่กำหนดเอง สถานะสำหรับดำเนินการต่อจะถูกจัดเก็บเป็น
ไฟล์ JSON ขนาดเล็กภายใต้ไดเรกทอรีสถานะของ Lobster (ค่าเริ่มต้นคือ ~/.lobster/state
และเขียนทับได้ด้วย LOBSTER_STATE_DIR); ตัวโทเค็นเข้ารหัสเพียงตัวชี้ไปยัง
สถานะนั้น ไม่ใช่สถานะทั้งหมดของไปป์ไลน์
OpenProse
OpenProse ทำงานร่วมกับ Lobster ได้ดี: ใช้ /prose เพื่อประสาน
การเตรียมงานแบบหลายเอเจนต์ แล้วรันไปป์ไลน์ Lobster เพื่อการอนุมัติแบบกำหนดแน่นอน หากโปรแกรม Prose
ต้องใช้ Lobster ให้อนุญาตเครื่องมือ lobster สำหรับเอเจนต์ย่อยผ่าน
tools.subagents.tools โปรดดู OpenProse
ความปลอดภัย
- เฉพาะภายในโพรเซสในเครื่อง - เวิร์กโฟลว์ทำงานภายในโพรเซส Gateway; ไม่มี การเรียกเครือข่ายจากตัว Plugin เอง
- ไม่มีข้อมูลลับ - Lobster ไม่ได้จัดการ OAuth; แต่จะเรียกเครื่องมือ OpenClaw ที่ จัดการแทน
- รับรู้แซนด์บ็อกซ์ - ปิดใช้งานเมื่อบริบทเครื่องมืออยู่ในแซนด์บ็อกซ์
- เสริมความแข็งแกร่ง - ตัวรันแบบฝังตัวบังคับใช้การหมดเวลาและขีดจำกัดเอาต์พุต
การแก้ไขปัญหา
| ข้อผิดพลาด | สาเหตุ / วิธีแก้ไข |
|---|---|
lobster runtime timed out |
ไปป์ไลน์ใช้เวลาเกิน timeoutMs ให้เพิ่มค่า หรือแบ่งไปป์ไลน์ |
lobster stdout exceeded maxStdoutBytes (หรือ stderr) |
เอาต์พุตที่บันทึกไว้เกินขีดจำกัด ให้เพิ่ม maxStdoutBytes หรือลดเอาต์พุต |
run --args-json must be valid JSON |
แยกวิเคราะห์ argsJson (สำหรับการรันไฟล์เวิร์กโฟลว์) ไม่สำเร็จ ให้แก้ไขสตริง JSON |
lobster runtime failed (หรือข้อความ runtime_error อื่น) |
รันไทม์แบบฝังตัวส่งคืนเอนเวโลปข้อผิดพลาด ให้ตรวจสอบบันทึก Gateway เพื่อดูรายละเอียด |
เรียนรู้เพิ่มเติม
กรณีศึกษา: เวิร์กโฟลว์ของชุมชน
ตัวอย่างสาธารณะหนึ่งรายการ: CLI สำหรับ "สมองที่สอง" + ไปป์ไลน์ Lobster ที่จัดการคลัง Markdown สามคลัง (ส่วนตัว คู่ชีวิต ใช้ร่วมกัน) CLI ส่งออก JSON สำหรับสถิติ รายการกล่องขาเข้า และการสแกนข้อมูลที่ล้าสมัย ส่วน Lobster เชื่อมคำสั่งเหล่านั้นเป็นเวิร์กโฟลว์ เช่น weekly-review, inbox-triage, memory-consolidation และ shared-task-sync โดยแต่ละเวิร์กโฟลว์มีจุดตรวจสอบเพื่อขออนุมัติ AI จะจัดการงานที่ต้องใช้วิจารณญาณ (การจัดหมวดหมู่) เมื่อพร้อมใช้งาน และจะเปลี่ยนไปใช้กฎแบบกำหนดผลลัพธ์แน่นอนเมื่อไม่พร้อมใช้งาน
- เธรด: https://x.com/plattenschieber/status/2014508656335770033
- ที่เก็บโค้ด: https://github.com/bloomedai/brain-cli
เนื้อหาที่เกี่ยวข้อง
- ระบบอัตโนมัติ - กลไกการทำงานอัตโนมัติทั้งหมด
- ภาพรวมเครื่องมือ - เครื่องมือทั้งหมดที่เอเจนต์สามารถใช้ได้