Fundamentals
รันไทม์ของเอเจนต์
รันไทม์เอเจนต์ คือคอมโพเนนต์ที่เป็นเจ้าของลูปโมเดลที่เตรียมไว้หนึ่งลูป: รับพรอมป์ ขับเคลื่อนเอาต์พุตของโมเดล จัดการการเรียกใช้เครื่องมือแบบเนทีฟ และส่งคืนเทิร์นที่เสร็จสิ้นแล้วให้ OpenClaw.
รันไทม์สับสนกับผู้ให้บริการได้ง่าย เพราะทั้งคู่ปรากฏใกล้กับการกำหนดค่าโมเดล ทั้งสองเป็นคนละเลเยอร์กัน:
| เลเยอร์ | ตัวอย่าง | ความหมาย |
|---|---|---|
| ผู้ให้บริการ | openai, anthropic, github-copilot |
วิธีที่ OpenClaw ยืนยันตัวตน ค้นพบโมเดล และตั้งชื่ออ้างอิงโมเดล |
| โมเดล | gpt-5.5, claude-opus-4-6 |
โมเดลที่เลือกสำหรับเทิร์นของเอเจนต์ |
| รันไทม์เอเจนต์ | openclaw, codex, copilot, claude-cli |
ลูประดับต่ำหรือแบ็กเอนด์ที่ดำเนินการเทิร์นที่เตรียมไว้ |
| ช่องทาง | Telegram, Discord, Slack, WhatsApp | ที่ที่ข้อความเข้าและออกจาก OpenClaw |
คุณจะเห็นคำว่า harness ในโค้ดด้วย harness คืออิมพลีเมนเทชันที่ให้รันไทม์เอเจนต์ ตัวอย่างเช่น Codex harness ที่รวมมาให้จะอิมพลีเมนต์รันไทม์ codex การกำหนดค่าสาธารณะใช้ agentRuntime.id บนรายการผู้ให้บริการหรือโมเดล ส่วนคีย์รันไทม์ทั้งเอเจนต์เป็นแบบเดิมและจะถูกละเว้น openclaw doctor --fix จะลบการปักหมุดรันไทม์ทั้งเอเจนต์แบบเก่า และเขียนอ้างอิงโมเดลรันไทม์เดิมใหม่เป็นอ้างอิงผู้ให้บริการ/โมเดลแบบบัญญัติ พร้อมนโยบายรันไทม์ระดับโมเดลเมื่อจำเป็น
มีรันไทม์สองตระกูล:
- Embedded harnesses ทำงานภายในลูปเอเจนต์ที่เตรียมไว้ของ OpenClaw ปัจจุบันคือรันไทม์
openclawในตัว รวมถึง Plugin harness ที่ลงทะเบียนไว้ เช่นcodexและcopilot - แบ็กเอนด์ CLI เรียกใช้โปรเซส CLI ในเครื่องโดยยังคงอ้างอิงโมเดลแบบบัญญัติไว้ ตัวอย่างเช่น
anthropic/claude-opus-4-8พร้อมagentRuntime.id: "claude-cli"ระดับโมเดล หมายถึง "เลือกโมเดล Anthropic แล้วดำเนินการผ่าน Claude CLI"claude-cliไม่ใช่รหัส embedded harness และต้องไม่ส่งต่อไปยังการเลือก AgentHarness
copilot harness เป็น Plugin harness ภายนอกแบบแยกต่างหากและเลือกใช้เองสำหรับ GitHub Copilot CLI; ดู รันไทม์เอเจนต์ GitHub Copilot สำหรับการตัดสินใจฝั่งผู้ใช้ระหว่าง PI, Codex และรันไทม์เอเจนต์ GitHub Copilot
พื้นผิว Codex
ความสับสนส่วนใหญ่มาจากหลายพื้นผิวที่ใช้ชื่อ Codex ร่วมกัน:
| พื้นผิว | ชื่อ/การกำหนดค่าใน OpenClaw | สิ่งที่ทำ |
|---|---|---|
| รันไทม์แอปเซิร์ฟเวอร์ Codex แบบเนทีฟ | อ้างอิงโมเดล openai/* |
เรียกใช้เทิร์นเอเจนต์ฝังตัวของ OpenAI ผ่านแอปเซิร์ฟเวอร์ Codex นี่คือการตั้งค่าการสมัครใช้งาน ChatGPT/Codex ปกติ |
| โปรไฟล์ยืนยันตัวตน Codex OAuth | โปรไฟล์ OAuth ของ openai |
จัดเก็บการยืนยันตัวตนการสมัครใช้งาน ChatGPT/Codex ที่ Codex app-server harness ใช้ |
| อะแดปเตอร์ Codex ACP | runtime: "acp", agentId: "codex" |
เรียกใช้ Codex ผ่าน control plane ACP/acpx ภายนอก ใช้เฉพาะเมื่อมีการขอ ACP/acpx อย่างชัดเจน |
| ชุดคำสั่งควบคุมแชต Codex แบบเนทีฟ | /codex ... |
ผูก ดำเนินต่อ ควบคุมทิศทาง หยุด และตรวจสอบเธรดแอปเซิร์ฟเวอร์ Codex จากแชต |
| เส้นทาง OpenAI Platform API สำหรับพื้นผิวที่ไม่ใช่เอเจนต์ | openai/* พร้อมการยืนยันตัวตนด้วยคีย์ API |
ใช้สำหรับ OpenAI API โดยตรง เช่น รูปภาพ embeddings เสียง และ realtime |
พื้นผิวเหล่านั้นแยกจากกันโดยตั้งใจ การเปิดใช้งาน Plugin codex ทำให้ฟีเจอร์แอปเซิร์ฟเวอร์แบบเนทีฟพร้อมใช้งาน; openclaw doctor --fix เป็นเจ้าของการซ่อมแซมเส้นทาง Codex เดิมซ้ำซ้อนและการล้างการปักหมุดเซสชันที่ค้างอยู่ การเลือก openai/* สำหรับโมเดลเอเจนต์ตอนนี้หมายถึง "เรียกใช้นี่ผ่าน Codex" เว้นแต่กำลังใช้พื้นผิว OpenAI API ที่ไม่ใช่เอเจนต์
การตั้งค่าการสมัครใช้งาน ChatGPT/Codex ทั่วไปใช้ Codex OAuth สำหรับการยืนยันตัวตน แต่คงอ้างอิงโมเดลเป็น openai/* และเลือกรันไทม์ codex:
{ agents: { defaults: { model: "openai/gpt-5.5", }, },}นั่นหมายความว่า OpenClaw เลือกอ้างอิงโมเดล OpenAI แล้วขอให้รันไทม์แอปเซิร์ฟเวอร์ Codex เรียกใช้เทิร์นเอเจนต์ฝังตัว ไม่ได้หมายความว่า "ใช้การคิดค่าบริการ API" และไม่ได้หมายความว่าช่องทาง แค็ตตาล็อกผู้ให้บริการโมเดล หรือที่เก็บเซสชัน OpenClaw กลายเป็น Codex
เมื่อเปิดใช้ Plugin codex ที่รวมมาให้ การควบคุม Codex ด้วยภาษาธรรมชาติควรใช้พื้นผิวคำสั่ง /codex แบบเนทีฟ (/codex bind, /codex threads, /codex resume, /codex steer, /codex stop) แทน ACP ใช้ ACP สำหรับ Codex เฉพาะเมื่อผู้ใช้ขอ ACP/acpx อย่างชัดเจน หรือกำลังทดสอบเส้นทางอะแดปเตอร์ ACP Claude Code, Gemini CLI, OpenCode, Cursor และ harness ภายนอกที่คล้ายกันยังคงใช้ ACP
นี่คือผังการตัดสินใจสำหรับเอเจนต์:
- หากผู้ใช้ขอ Codex bind/control/thread/resume/steer/stop ให้ใช้พื้นผิวคำสั่ง
/codexแบบเนทีฟเมื่อเปิดใช้ Plugincodexที่รวมมาให้ - หากผู้ใช้ขอ Codex เป็นรันไทม์ฝังตัว หรือต้องการประสบการณ์เอเจนต์ Codex ปกติที่รองรับด้วยการสมัครใช้งาน ให้ใช้
openai/<model> - หากผู้ใช้เลือก OpenClaw สำหรับโมเดล OpenAI อย่างชัดเจน ให้คงอ้างอิงโมเดลเป็น
openai/<model>และตั้งค่านโยบายรันไทม์ผู้ให้บริการ/โมเดลเป็นagentRuntime.id: "openclaw"โปรไฟล์ OAuth ของopenaiที่เลือกจะถูกกำหนดเส้นทางภายในผ่านทรานสปอร์ตยืนยันตัวตน Codex ของ OpenClaw - หากการกำหนดค่าเดิมยังมี อ้างอิงโมเดล Codex แบบเดิม ให้ซ่อมเป็น
openai/<model>ด้วยopenclaw doctor --fix; doctor จะคงเส้นทางยืนยันตัวตน Codex โดยเพิ่มagentRuntime.id: "codex"ระดับผู้ให้บริการ/โมเดลในจุดที่อ้างอิงโมเดลเก่าสื่อความหมายนั้นไว้ อ้างอิงโมเดลcodex-cli/*แบบเดิม จะซ่อมไปยังเส้นทางแอปเซิร์ฟเวอร์ Codexopenai/<model>เดียวกัน; OpenClaw ไม่คงแบ็กเอนด์ Codex CLI ที่รวมมาให้อีกต่อไป - หากผู้ใช้พูดว่า ACP, acpx หรือ อะแดปเตอร์ Codex ACP อย่างชัดเจน ให้ใช้ ACP พร้อม
runtime: "acp"และagentId: "codex" - หากคำขอเป็น Claude Code, Gemini CLI, OpenCode, Cursor, Droid หรือ harness ภายนอกอื่น ให้ใช้ ACP/acpx ไม่ใช่รันไทม์ซับเอเจนต์แบบเนทีฟ
| คุณหมายถึง... | ใช้... |
|---|---|
| การควบคุมแชต/เธรดแอปเซิร์ฟเวอร์ Codex | /codex ... จาก Plugin codex ที่รวมมาให้ |
| รันไทม์เอเจนต์ฝังตัวของแอปเซิร์ฟเวอร์ Codex | อ้างอิงโมเดลเอเจนต์ openai/* |
| OpenAI Codex OAuth | โปรไฟล์ OAuth ของ openai |
| Claude Code หรือ harness ภายนอกอื่น | ACP/acpx |
สำหรับการแยกคำนำหน้าตระกูล OpenAI ดู OpenAI และ ผู้ให้บริการโมเดล สำหรับสัญญารองรับรันไทม์ Codex ดู รันไทม์ Codex harness
ความเป็นเจ้าของรันไทม์
รันไทม์ต่างกันเป็นเจ้าของส่วนต่าง ๆ ของลูปไม่เท่ากัน
| พื้นผิว | OpenClaw ฝังตัว | แอปเซิร์ฟเวอร์ Codex |
|---|---|---|
| เจ้าของลูปโมเดล | OpenClaw ผ่านตัวเรียกใช้ฝังตัวของ OpenClaw | แอปเซิร์ฟเวอร์ Codex |
| สถานะเธรดแบบบัญญัติ | ทรานสคริปต์ OpenClaw | เธรด Codex พร้อมมิเรอร์ทรานสคริปต์ OpenClaw |
| เครื่องมือไดนามิกของ OpenClaw | ลูปเครื่องมือ OpenClaw แบบเนทีฟ | เชื่อมผ่านอะแดปเตอร์ Codex |
| เครื่องมือเชลล์และไฟล์แบบเนทีฟ | เส้นทาง OpenClaw | เครื่องมือเนทีฟของ Codex เชื่อมผ่าน native hooks เมื่อรองรับ |
| เอนจินบริบท | การประกอบบริบท OpenClaw แบบเนทีฟ | OpenClaw โปรเจกต์บริบทที่ประกอบแล้วเข้าไปในเทิร์น Codex |
| Compaction | OpenClaw หรือเอนจินบริบทที่เลือก | Compaction แบบเนทีฟของ Codex พร้อมการแจ้งเตือน OpenClaw และการบำรุงรักษามิเรอร์ |
| การส่งมอบช่องทาง | OpenClaw | OpenClaw |
การแบ่งความเป็นเจ้าของนี้คือกฎการออกแบบหลัก:
- หาก OpenClaw เป็นเจ้าของพื้นผิว OpenClaw สามารถให้พฤติกรรม hook ของ Plugin ตามปกติได้
- หากรันไทม์เนทีฟเป็นเจ้าของพื้นผิว OpenClaw ต้องใช้เหตุการณ์รันไทม์หรือ native hooks
- หากรันไทม์เนทีฟเป็นเจ้าของสถานะเธรดแบบบัญญัติ OpenClaw ควรมิเรอร์และฉายบริบท ไม่ใช่เขียน internals ที่ไม่รองรับใหม่
การเลือกรันไทม์
OpenClaw เลือกรันไทม์ฝังตัวหลังจากการแก้ไขผู้ให้บริการและโมเดล:
- นโยบายรันไทม์ระดับโมเดลชนะก่อน สิ่งนี้อยู่ได้ในรายการโมเดลผู้ให้บริการที่กำหนดค่าไว้ หรือใน
agents.defaults.models["provider/model"].agentRuntime/agents.list[].models["provider/model"].agentRuntimeไวลด์การ์ดผู้ให้บริการ เช่นagents.defaults.models["vllm/*"].agentRuntimeจะมีผลหลังนโยบายโมเดลแบบตรงตัว เพื่อให้โมเดลผู้ให้บริการที่ค้นพบแบบไดนามิกใช้รันไทม์เดียวกันได้โดยไม่ทับข้อยกเว้นรายโมเดลแบบตรงตัว - นโยบายรันไทม์ระดับผู้ให้บริการตามมาที่
models.providers.<provider>.agentRuntime - ในโหมด
autoรันไทม์ Plugin ที่ลงทะเบียนไว้สามารถอ้างสิทธิ์คู่ผู้ให้บริการ/โมเดลที่รองรับได้ - หากไม่มีรันไทม์ใดอ้างสิทธิ์เทิร์นในโหมด
autoOpenClaw จะใช้openclawเป็นรันไทม์ความเข้ากันได้ ใช้รหัสรันไทม์แบบชัดเจนเมื่อการรันต้องเคร่งครัด
การปักหมุดรันไทม์ทั้งเซสชันและทั้งเอเจนต์จะถูกละเว้น ซึ่งรวมถึง OPENCLAW_AGENT_RUNTIME, สถานะเซสชัน agentHarnessId/agentRuntimeOverride, agents.defaults.agentRuntime และ agents.list[].agentRuntime เรียกใช้ openclaw doctor --fix เพื่อลบการกำหนดค่ารันไทม์ทั้งเอเจนต์ที่ค้างอยู่ และแปลงอ้างอิงโมเดลรันไทม์เดิมในจุดที่ OpenClaw สามารถรักษาเจตนาไว้ได้
รันไทม์ Plugin ระดับผู้ให้บริการ/โมเดลแบบชัดเจนจะล้มเหลวแบบปิด ตัวอย่างเช่น agentRuntime.id: "codex" บนผู้ให้บริการหรือโมเดลหมายถึง Codex หรือข้อผิดพลาดการเลือก/รันไทม์ที่ชัดเจน; จะไม่ถูกกำหนดเส้นทางกลับไปยัง OpenClaw อย่างเงียบ ๆ
นามแฝงแบ็กเอนด์ CLI ต่างจากรหัส embedded harness รูปแบบ Claude CLI ที่แนะนำคือ:
{ agents: { defaults: { model: "anthropic/claude-opus-4-8", models: { "anthropic/claude-opus-4-8": { agentRuntime: { id: "claude-cli" }, }, }, }, },}อ้างอิงแบบเดิม เช่น claude-cli/claude-opus-4-7 ยังคงรองรับเพื่อความเข้ากันได้ แต่การกำหนดค่าใหม่ควรคงผู้ให้บริการ/โมเดลให้เป็นแบบบัญญัติ และใส่แบ็กเอนด์การดำเนินการไว้ในนโยบายรันไทม์ระดับผู้ให้บริการ/โมเดล
อ้างอิง codex-cli/* แบบเดิมนั้นต่างออกไป: doctor จะย้ายไปเป็น openai/* เพื่อให้รันผ่าน Codex app-server harness แทนการคงแบ็กเอนด์ Codex CLI ไว้
โหมด auto ตั้งใจให้อนุรักษนิยมสำหรับผู้ให้บริการส่วนใหญ่ โมเดลเอเจนต์ OpenAI เป็นข้อยกเว้น: ทั้งรันไทม์ที่ไม่ได้ตั้งค่าและ auto จะแก้ไขไปยัง Codex harness การกำหนดค่ารันไทม์ OpenClaw แบบชัดเจนยังคงเป็นเส้นทางความเข้ากันได้แบบเลือกใช้เองสำหรับเทิร์นเอเจนต์ openai/*; เมื่อจับคู่กับโปรไฟล์ OAuth ของ openai ที่เลือก OpenClaw จะกำหนดเส้นทางนั้นภายในผ่านทรานสปอร์ตยืนยันตัวตน Codex โดยคงอ้างอิงโมเดลสาธารณะเป็น openai/* การปักหมุดเซสชันรันไทม์ OpenAI ที่ค้างอยู่จะถูกละเว้นโดยการเลือกรันไทม์ และสามารถล้างได้ด้วย openclaw doctor --fix
หาก openclaw doctor เตือนว่า Plugin codex เปิดใช้งานอยู่ขณะที่
การอ้างอิงโมเดล Codex แบบเก่ายังคงอยู่ในการกำหนดค่า ให้ถือว่านั่นเป็นสถานะเส้นทางแบบเก่า ให้รัน
openclaw doctor --fix เพื่อเขียนใหม่เป็น openai/* พร้อมรันไทม์ Codex
รันไทม์เอเจนต์ GitHub Copilot
Plugin ภายนอก @openclaw/copilot ลงทะเบียนรันไทม์ copilot แบบเลือกใช้
ซึ่งขับเคลื่อนโดย GitHub Copilot CLI (@github/copilot-sdk) โดยอ้างสิทธิ์ผู้ให้บริการ
การสมัครใช้งานมาตรฐาน github-copilot และจะ ไม่ถูกเลือก โดย
auto เลือกใช้ต่อโมเดลหรือต่อผู้ให้บริการผ่าน agentRuntime.id:
{ agents: { defaults: { model: "github-copilot/gpt-5.5", models: { "github-copilot/gpt-5.5": { agentRuntime: { id: "copilot" }, }, }, }, },}ฮาร์เนสอ้างสิทธิ์ผู้ให้บริการ รันไทม์ คีย์เซสชัน CLI และคำนำหน้าโปรไฟล์การยืนยันตัวตน
ใน extensions/copilot/doctor-contract-api.ts ซึ่ง
openclaw doctor โหลดโดยอัตโนมัติ สำหรับการกำหนดค่า การยืนยันตัวตน การสะท้อนบันทึกบทสนทนา
Compaction สัญญา doctor แบบประกาศ และการตัดสินใจที่กว้างขึ้นระหว่าง PI กับ Codex กับ
Copilot SDK โปรดดู รันไทม์เอเจนต์ GitHub Copilot
สัญญาความเข้ากันได้
เมื่อรันไทม์ไม่ใช่ OpenClaw ควรจัดทำเอกสารว่ารองรับพื้นผิวใดของ OpenClaw บ้าง ใช้รูปแบบนี้สำหรับเอกสารรันไทม์:
| คำถาม | เหตุผลที่สำคัญ |
|---|---|
| ใครเป็นเจ้าของลูปโมเดล? | กำหนดว่าการลองใหม่ การทำงานต่อของเครื่องมือ และการตัดสินใจคำตอบสุดท้ายเกิดขึ้นที่ใด |
| ใครเป็นเจ้าของประวัติเธรดมาตรฐาน? | กำหนดว่า OpenClaw สามารถแก้ไขประวัติได้ หรือทำได้เพียงสะท้อนประวัติเท่านั้น |
| เครื่องมือไดนามิกของ OpenClaw ทำงานหรือไม่? | การส่งข้อความ เซสชัน Cron และเครื่องมือที่ OpenClaw เป็นเจ้าของพึ่งพาสิ่งนี้ |
| ฮุกเครื่องมือไดนามิกทำงานหรือไม่? | Plugins คาดหวัง before_tool_call, after_tool_call และมิดเดิลแวร์รอบเครื่องมือที่ OpenClaw เป็นเจ้าของ |
| ฮุกเครื่องมือเนทีฟทำงานหรือไม่? | เชลล์ แพตช์ และเครื่องมือที่รันไทม์เป็นเจ้าของต้องการการรองรับฮุกเนทีฟสำหรับนโยบายและการสังเกต |
| วงจรชีวิตของเอนจินบริบททำงานหรือไม่? | Plugin หน่วยความจำและบริบทขึ้นอยู่กับวงจรชีวิตการประกอบ การนำเข้า หลังเทิร์น และ Compaction |
| เปิดเผยข้อมูล Compaction ใดบ้าง? | บาง Plugins ต้องการเพียงการแจ้งเตือน ขณะที่ Plugins อื่นต้องการเมตาดาต้าที่เก็บไว้/ทิ้งไป |
| อะไรที่จงใจไม่รองรับ? | ผู้ใช้ไม่ควรสมมติว่าเทียบเท่ากับ OpenClaw ในจุดที่รันไทม์เนทีฟเป็นเจ้าของสถานะมากกว่า |
สัญญาการรองรับรันไทม์ Codex มีบันทึกไว้ใน รันไทม์ฮาร์เนส Codex
ป้ายกำกับสถานะ
ผลลัพธ์สถานะอาจแสดงทั้งป้ายกำกับ Execution และ Runtime ให้อ่านสิ่งเหล่านี้เป็น
ข้อมูลวินิจฉัย ไม่ใช่ชื่อผู้ให้บริการ
- การอ้างอิงโมเดล เช่น
openai/gpt-5.5บอกผู้ให้บริการ/โมเดลที่เลือก - รหัสรันไทม์ เช่น
codexบอกว่าลูปใดกำลังดำเนินการเทิร์น - ป้ายกำกับช่องทาง เช่น Telegram หรือ Discord บอกว่าการสนทนากำลังเกิดขึ้นที่ใด
หากการรันยังคงแสดงรันไทม์ที่ไม่คาดคิด ให้ตรวจสอบนโยบายรันไทม์ของผู้ให้บริการ/โมเดล ที่เลือกก่อน หมุดรันไทม์เซสชันแบบเก่าไม่ใช้ตัดสินการกำหนดเส้นทางอีกต่อไป