Tools
ค้นหาเครื่องมือ
การค้นหาเครื่องมือเป็นฟีเจอร์ทดลองของรันไทม์เอเจนต์ OpenClaw ฟีเจอร์นี้ให้วิธีที่กระชับหนึ่งเดียวแก่เอเจนต์ในการค้นพบและเรียกใช้แค็ตตาล็อกเครื่องมือขนาดใหญ่ มีประโยชน์เมื่อการรันมีเครื่องมือที่พร้อมใช้งานจำนวนมาก แต่โมเดลมีแนวโน้มจะต้องใช้เพียงไม่กี่รายการเท่านั้น
หน้านี้จัดทำเอกสารเกี่ยวกับการค้นหาเครื่องมือของ OpenClaw ไม่ใช่พื้นผิวการค้นหาเครื่องมือหรือเครื่องมือแบบไดนามิกที่เป็นของ Codex โดยตรง โหมดโค้ดแบบเนทีฟของ Codex, การค้นหาเครื่องมือ, เครื่องมือแบบไดนามิกที่เลื่อนการโหลดไว้, และการเรียกเครื่องมือแบบซ้อน เป็นพื้นผิว Codex harness ที่เสถียร และไม่ขึ้นกับ tools.toolSearch
เมื่อเปิดใช้สำหรับการรัน OpenClaw โมเดลจะได้รับเครื่องมือ tool_search_code หนึ่งรายการเป็นค่าเริ่มต้น เครื่องมือนั้นรันเนื้อหา JavaScript สั้น ๆ ใน subprocess ของ Node ที่แยกโดดเดี่ยวพร้อมบริดจ์ openclaw.tools:
const hits = await openclaw.tools.search("create a GitHub issue");const tool = await openclaw.tools.describe(hits[0].id);return await openclaw.tools.call(tool.id, { title: "Crash on startup", body: "Steps to reproduce...",});แค็ตตาล็อกสามารถรวมเครื่องมือ OpenClaw, เครื่องมือ Plugin, เครื่องมือ MCP, และเครื่องมือที่ไคลเอนต์จัดเตรียมให้ โมเดลจะไม่เห็นสคีมาแบบเต็มทั้งหมดตั้งแต่ต้น แต่จะค้นหาตัวอธิบายแบบกระชับ อธิบายเครื่องมือที่เลือกหนึ่งรายการเมื่อต้องใช้สคีมาที่แน่นอน และเรียกเครื่องมือนั้นผ่าน OpenClaw
การรัน Codex harness จะไม่ได้รับคอนโทรลการค้นหาเครื่องมือ OpenClaw แบบทดลองเหล่านี้ OpenClaw ส่งความสามารถของผลิตภัณฑ์ไปยัง Codex ในรูปแบบเครื่องมือแบบไดนามิก และ Codex เป็นเจ้าของโหมดโค้ดแบบเนทีฟที่เสถียร, การค้นหาเครื่องมือแบบเนทีฟ, เครื่องมือแบบไดนามิกที่เลื่อนการโหลดไว้, และการเรียกเครื่องมือแบบซ้อน
วิธีการรันหนึ่งเทิร์น
ในช่วงวางแผน ตัวรันแบบฝังของ OpenClaw จะสร้างแค็ตตาล็อกที่มีผลสำหรับการรัน:
- แก้ไขนโยบายเครื่องมือที่ใช้งานอยู่สำหรับเอเจนต์ โปรไฟล์ แซนด์บ็อกซ์ และเซสชัน
- แสดงรายการเครื่องมือ OpenClaw และ Plugin ที่มีสิทธิ์
- แสดงรายการเครื่องมือ MCP ที่มีสิทธิ์ผ่านรันไทม์ MCP ของเซสชัน
- เพิ่มเครื่องมือไคลเอนต์ที่มีสิทธิ์ซึ่งจัดเตรียมให้สำหรับการรันปัจจุบัน
- ทำดัชนีตัวอธิบายแบบกระชับสำหรับการค้นหา
- เปิดเผยบริดจ์โค้ด OpenClaw, เครื่องมือสำรองแบบมีโครงสร้าง, หรือพื้นผิวไดเรกทอรีแบบกระชับให้กับโมเดล
ในช่วงดำเนินการ การเรียกเครื่องมือจริงทุกครั้งจะกลับมาที่ OpenClaw รันไทม์ Node ที่แยกโดดเดี่ยวไม่ได้ถือการใช้งาน Plugin, อ็อบเจกต์ไคลเอนต์ MCP, หรือความลับไว้ openclaw.tools.call(...) ข้ามบริดจ์กลับเข้า Gateway ซึ่งนโยบาย การอนุมัติ hook การบันทึก และการจัดการผลลัพธ์ตามปกติยังคงมีผล
โหมด
tools.toolSearch มีโหมดที่แสดงต่อโมเดลสามแบบ:
code: เปิดเผยtool_search_codeซึ่งเป็นบริดจ์ JavaScript แบบกระชับตามค่าเริ่มต้นtools: เปิดเผยtool_search,tool_describe, และtool_callเป็นเครื่องมือแบบมีโครงสร้างธรรมดาสำหรับผู้ให้บริการที่ไม่ควรได้รับโค้ดdirectory: เปิดเผยtool_search,tool_describe, และtool_callพร้อมไดเรกทอรีพรอมป์แบบมีขอบเขตของชื่อและคำอธิบายเครื่องมือที่พร้อมใช้งาน สำหรับผู้ให้บริการที่ควรเห็นชื่อเครื่องมือโดยไม่ต้องเห็นสคีมาแบบเต็มทุกรายการ OpenClaw ยังสามารถเปิดเผยชุดสคีมาของเครื่องมือขนาดเล็กแบบมีขอบเขตที่มีแนวโน้มต้องใช้หรือจำเป็นโดยตรงสำหรับเทิร์นปัจจุบัน
ทุกโหมดใช้แค็ตตาล็อกเดียวกันที่ผ่านการกรองตามนโยบาย และเส้นทางการดำเนินการ OpenClaw ตามปกติ หากรันไทม์ปัจจุบันไม่สามารถเปิด subprocess ลูกของ Node สำหรับโหมดโค้ดที่แยกโดดเดี่ยวได้ โหมด code ตามค่าเริ่มต้นจะถอยกลับไปเป็น tools ก่อนการบีบอัดแค็ตตาล็อก ในโหมด directory เครื่องมือที่ไคลเอนต์จัดเตรียมให้จะยังคงมองเห็นได้โดยตรงสำหรับการรันปัจจุบัน ขณะที่เครื่องมือ OpenClaw, เครื่องมือ Plugin, และเครื่องมือ MCP สามารถถูกบีบอัดไว้หลังแค็ตตาล็อกไดเรกทอรีได้ การเรียกโดยตรงไปยังชื่อไดเรกทอรีที่ซ่อนไว้อย่างแน่นอนจะถูกเติมข้อมูลจากแค็ตตาล็อกที่ได้รับอนุญาตเดียวกันนั้นก่อนดำเนินการ
ทุกโหมดเป็นแบบทดลอง ใช้การเปิดเผยเครื่องมือโดยตรงเป็นหลักสำหรับแค็ตตาล็อกเครื่องมือ OpenClaw ขนาดเล็ก และใช้พื้นผิวเสถียรที่เป็นเนทีฟของ Codex เป็นหลักสำหรับการรัน Codex harness
ไม่มีการตั้งค่าเลือกแหล่งที่มาแยกต่างหาก เมื่อเปิดใช้การค้นหาเครื่องมือ แค็ตตาล็อกจะรวมเครื่องมือ OpenClaw, MCP, และไคลเอนต์ที่มีสิทธิ์หลังการกรองตามนโยบายปกติ
เหตุผลที่มีฟีเจอร์นี้
แค็ตตาล็อกขนาดใหญ่มีประโยชน์แต่มีต้นทุนสูง การส่งสคีมาของเครื่องมือทุกตัวให้โมเดลทำให้คำขอใหญ่ขึ้น ทำให้การวางแผนช้าลง และเพิ่มโอกาสเลือกเครื่องมือโดยไม่ตั้งใจ
การค้นหาเครื่องมือเปลี่ยนรูปแบบดังนี้:
- เครื่องมือโดยตรง: โมเดลเห็นทุกสคีมาที่เลือกก่อนโทเคนแรก
- โหมดโค้ดของการค้นหาเครื่องมือ: โมเดลเห็นเครื่องมือโค้ดแบบกระชับหนึ่งรายการและสัญญา API สั้น ๆ
- โหมดเครื่องมือของการค้นหาเครื่องมือ: โมเดลเห็นเครื่องมือสำรองแบบมีโครงสร้างที่กระชับสามรายการ
- โหมดไดเรกทอรีของการค้นหาเครื่องมือ: โมเดลเห็นไดเรกทอรีแบบมีขอบเขต พร้อมคอนโทรล search/describe/call และชุดสคีมาที่มีแนวโน้มต้องใช้หรือจำเป็นขนาดเล็กแบบมีขอบเขต
- ระหว่างเทิร์น: โมเดลสามารถโหลดสคีมาที่เหลือได้ตามต้องการ
การเปิดเผยเครื่องมือโดยตรงยังคงเป็นค่าเริ่มต้นที่เหมาะสมสำหรับแค็ตตาล็อกขนาดเล็ก การค้นหาเครื่องมือเหมาะที่สุดเมื่อการรันหนึ่งครั้งสามารถเห็นเครื่องมือจำนวนมาก โดยเฉพาะจากเซิร์ฟเวอร์ MCP หรือเครื่องมือแอปที่ไคลเอนต์จัดเตรียมให้
API
openclaw.tools.search(query, options?)
ค้นหาแค็ตตาล็อกที่มีผลสำหรับการรันปัจจุบัน ผลลัพธ์มีขนาดกระชับและปลอดภัยสำหรับใส่กลับเข้าไปในบริบทพรอมป์
const hits = await openclaw.tools.search("calendar event", { limit: 5 });openclaw.tools.describe(id)
โหลดเมตาดาทาแบบเต็มสำหรับผลการค้นหาหนึ่งรายการ รวมถึงสคีมาอินพุตที่แน่นอน
const calendarCreate = await openclaw.tools.describe("mcp:calendar:create_event");openclaw.tools.call(id, args)
เรียกเครื่องมือที่เลือกผ่าน OpenClaw
await openclaw.tools.call(calendarCreate.id, { summary: "Planning", start: "2026-05-09T14:00:00Z",});โหมดสำรองแบบมีโครงสร้างเปิดเผยการดำเนินการเดียวกันเป็นเครื่องมือ:
tool_searchtool_describetool_call
โหมดไดเรกทอรีเปิดเผย:
tool_searchtool_describetool_call
นอกจากนี้ยังคงให้เครื่องมือที่ไคลเอนต์จัดเตรียมให้มองเห็นได้โดยตรง และอาจเปิดเผยชุดสคีมาของเครื่องมือในแค็ตตาล็อกที่มีแนวโน้มต้องใช้หรือจำเป็นขนาดเล็กแบบมีขอบเขตโดยตรงสำหรับเทิร์นปัจจุบัน หากไดเรกทอรีแบบมีขอบเขตละเว้นรายการไว้ ให้ใช้ tool_search เพื่อค้นหา หากโมเดลร้องขอชื่อเครื่องมือในไดเรกทอรีที่ซ่อนไว้อย่างแน่นอนโดยตรง OpenClaw จะเติมข้อมูลจากแค็ตตาล็อกที่ได้รับอนุญาตก่อนการดำเนินการปกติ
ชื่อเครื่องมือไคลเอนต์ในโหมดไดเรกทอรีต้องไม่ชนกับชื่อเครื่องมือ OpenClaw, Plugin, หรือ MCP เพราะการส่งต่อแบบเลื่อนการทำงานที่แน่นอนใช้ชื่อเหล่านั้น
ขอบเขตรันไทม์
บริดจ์โค้ดรันใน subprocess ของ Node ที่มีอายุสั้น subprocess เริ่มต้นโดยเปิดใช้โหมดสิทธิ์ของ Node พร้อมสภาพแวดล้อมว่าง ไม่มีสิทธิ์ filesystem หรือเครือข่าย และไม่มีสิทธิ์ child-process หรือ worker OpenClaw บังคับใช้ timeout ตามเวลาจริงของโปรเซสแม่ และฆ่า subprocess เมื่อ timeout รวมถึงหลัง continuation แบบ async
รันไทม์เปิดเผยเฉพาะ:
console.log,console.warn, และconsole.erroropenclaw.tools.searchopenclaw.tools.describeopenclaw.tools.call
พฤติกรรม OpenClaw ตามปกติยังคงใช้กับการเรียกขั้นสุดท้าย:
- นโยบายอนุญาตและปฏิเสธเครื่องมือ
- ข้อจำกัดเครื่องมือต่อเอเจนต์และต่อแซนด์บ็อกซ์
- นโยบายเครื่องมือของช่องทาง/รันไทม์
- hook การอนุมัติ
- hook
before_tool_callของ Plugin - ตัวตนเซสชัน บันทึก และ telemetry
การกำหนดค่า
เปิดใช้การค้นหาเครื่องมือสำหรับการรัน OpenClaw ด้วยบริดจ์โค้ดตามค่าเริ่มต้น:
openclaw config set tools.toolSearch trueJSON ที่เทียบเท่า:
{ tools: { toolSearch: true, },}ใช้เครื่องมือสำรองแบบมีโครงสร้างแทนสำหรับการรัน OpenClaw:
{ tools: { toolSearch: { mode: "tools", }, },}ใช้พื้นผิวไดเรกทอรีแบบกระชับแทนสำหรับการรัน OpenClaw:
{ tools: { toolSearch: { mode: "directory", }, },}ปรับ timeout ของโหมดโค้ดและขีดจำกัดผลลัพธ์การค้นหา:
{ tools: { toolSearch: { mode: "code", codeTimeoutMs: 10000, searchDefaultLimit: 8, maxSearchLimit: 20, }, },}ปิดใช้งาน:
{ tools: { toolSearch: false, },}พรอมป์และ telemetry
การค้นหาเครื่องมือบันทึก telemetry เพียงพอเพื่อเปรียบเทียบกับการเปิดเผยเครื่องมือโดยตรง:
- จำนวนไบต์เครื่องมือและพรอมป์ที่ซีเรียลไลซ์ทั้งหมดซึ่งส่งไปยัง harness
- ขนาดแค็ตตาล็อกและการแจกแจงตามแหล่งที่มา
- จำนวนการค้นหา การอธิบาย และการเรียก
- การเรียกเครื่องมือขั้นสุดท้ายที่ดำเนินการผ่าน OpenClaw
- ids และแหล่งที่มาของเครื่องมือที่เลือก
บันทึกเซสชันควรทำให้ตอบคำถามต่อไปนี้ได้:
- โมเดลเห็นสคีมาของเครื่องมือกี่รายการตั้งแต่ต้น
- โมเดลดำเนินการค้นหาและอธิบายกี่ครั้ง
- เครื่องมือขั้นสุดท้ายใดถูกเรียก
- ผลลัพธ์มาจาก OpenClaw, MCP, หรือเครื่องมือไคลเอนต์
การตรวจสอบ E2E
ตัวรัน E2E ของ Gateway พิสูจน์ทั้งสองเส้นทางด้วยรันไทม์ OpenClaw:
node --import tsx scripts/tool-search-gateway-e2e.tsตัวรันสร้าง Plugin ปลอมชั่วคราวที่มีแค็ตตาล็อกเครื่องมือขนาดใหญ่ เริ่มผู้ให้บริการ OpenAI จำลอง เริ่ม Gateway หนึ่งครั้งในโหมดโดยตรงและอีกครั้งโดยเปิดใช้การค้นหาเครื่องมือ จากนั้นเปรียบเทียบเพย์โหลดคำขอของผู้ให้บริการและบันทึกเซสชัน
รีเกรสชันพิสูจน์ว่า:
- โหมดโดยตรงสามารถเรียกเครื่องมือ Plugin ปลอมได้
- การค้นหาเครื่องมือสามารถเรียกเครื่องมือ Plugin ปลอมเดียวกันได้
- โหมดโดยตรงเปิดเผยสคีมาของเครื่องมือ Plugin ปลอมให้ผู้ให้บริการโดยตรง
- การค้นหาเครื่องมือเปิดเผยเฉพาะบริดจ์แบบกระชับ
- เพย์โหลดคำขอของการค้นหาเครื่องมือมีขนาดเล็กกว่าสำหรับแค็ตตาล็อกปลอมขนาดใหญ่
- บันทึกเซสชันแสดงจำนวนการเรียกเครื่องมือที่คาดไว้และ telemetry ของการเรียกผ่านบริดจ์
พฤติกรรมเมื่อเกิดความล้มเหลว
การค้นหาเครื่องมือควรล้มเหลวแบบปิด:
- หากเครื่องมือไม่อยู่ในนโยบายที่มีผล การค้นหาไม่ควรส่งคืนเครื่องมือนั้น
- หากเครื่องมือที่เลือกไม่พร้อมใช้งาน
tool_callควรล้มเหลว - หากนโยบายหรือการอนุมัติบล็อกการดำเนินการ ผลลัพธ์การเรียกควรรายงานการบล็อกนั้นแทนการข้ามไป
- หากบริดจ์โค้ดไม่สามารถสร้างรันไทม์ที่แยกโดดเดี่ยวได้ ให้ใช้
mode: "tools"หรือปิดใช้การค้นหาเครื่องมือสำหรับการปรับใช้นั้น