Tools

ค้นหาเครื่องมือ

การค้นหาเครื่องมือเป็นฟีเจอร์ทดลองของรันไทม์เอเจนต์ OpenClaw ฟีเจอร์นี้ให้วิธีที่กระชับหนึ่งเดียวแก่เอเจนต์ในการค้นพบและเรียกใช้แค็ตตาล็อกเครื่องมือขนาดใหญ่ มีประโยชน์เมื่อการรันมีเครื่องมือที่พร้อมใช้งานจำนวนมาก แต่โมเดลมีแนวโน้มจะต้องใช้เพียงไม่กี่รายการเท่านั้น

หน้านี้จัดทำเอกสารเกี่ยวกับการค้นหาเครื่องมือของ OpenClaw ไม่ใช่พื้นผิวการค้นหาเครื่องมือหรือเครื่องมือแบบไดนามิกที่เป็นของ Codex โดยตรง โหมดโค้ดแบบเนทีฟของ Codex, การค้นหาเครื่องมือ, เครื่องมือแบบไดนามิกที่เลื่อนการโหลดไว้, และการเรียกเครื่องมือแบบซ้อน เป็นพื้นผิว Codex harness ที่เสถียร และไม่ขึ้นกับ tools.toolSearch

เมื่อเปิดใช้สำหรับการรัน OpenClaw โมเดลจะได้รับเครื่องมือ tool_search_code หนึ่งรายการเป็นค่าเริ่มต้น เครื่องมือนั้นรันเนื้อหา JavaScript สั้น ๆ ใน subprocess ของ Node ที่แยกโดดเดี่ยวพร้อมบริดจ์ openclaw.tools:

js
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 จะสร้างแค็ตตาล็อกที่มีผลสำหรับการรัน:

  1. แก้ไขนโยบายเครื่องมือที่ใช้งานอยู่สำหรับเอเจนต์ โปรไฟล์ แซนด์บ็อกซ์ และเซสชัน
  2. แสดงรายการเครื่องมือ OpenClaw และ Plugin ที่มีสิทธิ์
  3. แสดงรายการเครื่องมือ MCP ที่มีสิทธิ์ผ่านรันไทม์ MCP ของเซสชัน
  4. เพิ่มเครื่องมือไคลเอนต์ที่มีสิทธิ์ซึ่งจัดเตรียมให้สำหรับการรันปัจจุบัน
  5. ทำดัชนีตัวอธิบายแบบกระชับสำหรับการค้นหา
  6. เปิดเผยบริดจ์โค้ด 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?)

ค้นหาแค็ตตาล็อกที่มีผลสำหรับการรันปัจจุบัน ผลลัพธ์มีขนาดกระชับและปลอดภัยสำหรับใส่กลับเข้าไปในบริบทพรอมป์

js
const hits = await openclaw.tools.search("calendar event", { limit: 5 });

openclaw.tools.describe(id)

โหลดเมตาดาทาแบบเต็มสำหรับผลการค้นหาหนึ่งรายการ รวมถึงสคีมาอินพุตที่แน่นอน

js
const calendarCreate = await openclaw.tools.describe("mcp:calendar:create_event");

openclaw.tools.call(id, args)

เรียกเครื่องมือที่เลือกผ่าน OpenClaw

js
await openclaw.tools.call(calendarCreate.id, {  summary: "Planning",  start: "2026-05-09T14:00:00Z",});

โหมดสำรองแบบมีโครงสร้างเปิดเผยการดำเนินการเดียวกันเป็นเครื่องมือ:

  • tool_search
  • tool_describe
  • tool_call

โหมดไดเรกทอรีเปิดเผย:

  • tool_search
  • tool_describe
  • tool_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.error
  • openclaw.tools.search
  • openclaw.tools.describe
  • openclaw.tools.call

พฤติกรรม OpenClaw ตามปกติยังคงใช้กับการเรียกขั้นสุดท้าย:

  • นโยบายอนุญาตและปฏิเสธเครื่องมือ
  • ข้อจำกัดเครื่องมือต่อเอเจนต์และต่อแซนด์บ็อกซ์
  • นโยบายเครื่องมือของช่องทาง/รันไทม์
  • hook การอนุมัติ
  • hook before_tool_call ของ Plugin
  • ตัวตนเซสชัน บันทึก และ telemetry

การกำหนดค่า

เปิดใช้การค้นหาเครื่องมือสำหรับการรัน OpenClaw ด้วยบริดจ์โค้ดตามค่าเริ่มต้น:

bash
openclaw config set tools.toolSearch true

JSON ที่เทียบเท่า:

json5
{  tools: {    toolSearch: true,  },}

ใช้เครื่องมือสำรองแบบมีโครงสร้างแทนสำหรับการรัน OpenClaw:

json5
{  tools: {    toolSearch: {      mode: "tools",    },  },}

ใช้พื้นผิวไดเรกทอรีแบบกระชับแทนสำหรับการรัน OpenClaw:

json5
{  tools: {    toolSearch: {      mode: "directory",    },  },}

ปรับ timeout ของโหมดโค้ดและขีดจำกัดผลลัพธ์การค้นหา:

json5
{  tools: {    toolSearch: {      mode: "code",      codeTimeoutMs: 10000,      searchDefaultLimit: 8,      maxSearchLimit: 20,    },  },}

ปิดใช้งาน:

json5
{  tools: {    toolSearch: false,  },}

พรอมป์และ telemetry

การค้นหาเครื่องมือบันทึก telemetry เพียงพอเพื่อเปรียบเทียบกับการเปิดเผยเครื่องมือโดยตรง:

  • จำนวนไบต์เครื่องมือและพรอมป์ที่ซีเรียลไลซ์ทั้งหมดซึ่งส่งไปยัง harness
  • ขนาดแค็ตตาล็อกและการแจกแจงตามแหล่งที่มา
  • จำนวนการค้นหา การอธิบาย และการเรียก
  • การเรียกเครื่องมือขั้นสุดท้ายที่ดำเนินการผ่าน OpenClaw
  • ids และแหล่งที่มาของเครื่องมือที่เลือก

บันทึกเซสชันควรทำให้ตอบคำถามต่อไปนี้ได้:

  • โมเดลเห็นสคีมาของเครื่องมือกี่รายการตั้งแต่ต้น
  • โมเดลดำเนินการค้นหาและอธิบายกี่ครั้ง
  • เครื่องมือขั้นสุดท้ายใดถูกเรียก
  • ผลลัพธ์มาจาก OpenClaw, MCP, หรือเครื่องมือไคลเอนต์

การตรวจสอบ E2E

ตัวรัน E2E ของ Gateway พิสูจน์ทั้งสองเส้นทางด้วยรันไทม์ OpenClaw:

bash
node --import tsx scripts/tool-search-gateway-e2e.ts

ตัวรันสร้าง Plugin ปลอมชั่วคราวที่มีแค็ตตาล็อกเครื่องมือขนาดใหญ่ เริ่มผู้ให้บริการ OpenAI จำลอง เริ่ม Gateway หนึ่งครั้งในโหมดโดยตรงและอีกครั้งโดยเปิดใช้การค้นหาเครื่องมือ จากนั้นเปรียบเทียบเพย์โหลดคำขอของผู้ให้บริการและบันทึกเซสชัน

รีเกรสชันพิสูจน์ว่า:

  1. โหมดโดยตรงสามารถเรียกเครื่องมือ Plugin ปลอมได้
  2. การค้นหาเครื่องมือสามารถเรียกเครื่องมือ Plugin ปลอมเดียวกันได้
  3. โหมดโดยตรงเปิดเผยสคีมาของเครื่องมือ Plugin ปลอมให้ผู้ให้บริการโดยตรง
  4. การค้นหาเครื่องมือเปิดเผยเฉพาะบริดจ์แบบกระชับ
  5. เพย์โหลดคำขอของการค้นหาเครื่องมือมีขนาดเล็กกว่าสำหรับแค็ตตาล็อกปลอมขนาดใหญ่
  6. บันทึกเซสชันแสดงจำนวนการเรียกเครื่องมือที่คาดไว้และ telemetry ของการเรียกผ่านบริดจ์

พฤติกรรมเมื่อเกิดความล้มเหลว

การค้นหาเครื่องมือควรล้มเหลวแบบปิด:

  • หากเครื่องมือไม่อยู่ในนโยบายที่มีผล การค้นหาไม่ควรส่งคืนเครื่องมือนั้น
  • หากเครื่องมือที่เลือกไม่พร้อมใช้งาน tool_call ควรล้มเหลว
  • หากนโยบายหรือการอนุมัติบล็อกการดำเนินการ ผลลัพธ์การเรียกควรรายงานการบล็อกนั้นแทนการข้ามไป
  • หากบริดจ์โค้ดไม่สามารถสร้างรันไทม์ที่แยกโดดเดี่ยวได้ ให้ใช้ mode: "tools" หรือปิดใช้การค้นหาเครื่องมือสำหรับการปรับใช้นั้น

ที่เกี่ยวข้อง

Was this useful?
On this page

On this page