Gateway
โมเดลภายในเครื่อง
โมเดลภายในเครื่องใช้งานได้ แต่ต้องการฮาร์ดแวร์ ขนาดบริบท และการป้องกันการแทรกพรอมป์ที่สูงขึ้น โมเดลขนาดเล็กหรือที่ถูกควอนไทซ์อย่างมากจะตัดบริบทและข้ามตัวกรองความปลอดภัยฝั่งผู้ให้บริการ หน้านี้ครอบคลุมสแต็กภายในเครื่องระดับสูงและเซิร์ฟเวอร์แบบกำหนดเองที่เข้ากันได้กับ OpenAI หากต้องการเส้นทางที่ยุ่งยากน้อยที่สุด ให้เริ่มด้วย LM Studio หรือ Ollama และ openclaw onboard
สำหรับเซิร์ฟเวอร์ภายในเครื่องที่ควรเริ่มทำงานเฉพาะเมื่อโมเดลที่เลือกต้องใช้งาน โปรดดู บริการโมเดลภายในเครื่อง
ข้อกำหนดฮาร์ดแวร์ขั้นต่ำ
เพื่อให้ลูปเอเจนต์ทำงานได้อย่างราบรื่น ควรใช้ Mac Studio ที่ติดตั้งสเปกสูงสุดอย่างน้อย 2 เครื่อง หรือชุด GPU ที่เทียบเท่า (~$30k+) GPU 24 GB เพียงตัวเดียวรองรับได้เฉพาะพรอมป์ที่เบากว่าโดยมีเวลาแฝงสูงขึ้น ควรเรียกใช้ รุ่นที่ใหญ่ที่สุด / ขนาดเต็มที่ระบบของคุณรองรับได้ เสมอ จุดตรวจสอบโมเดลขนาดเล็กหรือที่ถูกควอนไทซ์อย่างหนักจะเพิ่มความเสี่ยงจากการแทรกพรอมป์ (ดู ความปลอดภัย)
เลือกแบ็กเอนด์
| แบ็กเอนด์ | ใช้เมื่อ |
|---|---|
| ds4 | ใช้ DeepSeek V4 Flash ภายในเครื่องบน macOS Metal พร้อมการเรียกเครื่องมือที่เข้ากันได้กับ OpenAI |
| LM Studio | ตั้งค่าภายในเครื่องครั้งแรก ใช้ตัวโหลดแบบ GUI และ Responses API แบบเนทีฟ |
| LiteLLM / OAI-proxy / พร็อกซีแบบกำหนดเองที่เข้ากันได้กับ OpenAI | คุณใช้พร็อกซีครอบ API ของโมเดลอื่นและต้องการให้ OpenClaw ปฏิบัติต่อโมเดลนั้นเสมือน OpenAI |
| MLX / vLLM / SGLang | ให้บริการแบบโฮสต์เองที่มีปริมาณงานสูงผ่านปลายทาง HTTP ที่เข้ากันได้กับ OpenAI |
| Ollama | เวิร์กโฟลว์ CLI คลังโมเดล และบริการ systemd ที่ไม่ต้องดูแลเอง |
ใช้ api: "openai-responses" เมื่อแบ็กเอนด์รองรับ (LM Studio รองรับ) มิฉะนั้นให้ใช้ api: "openai-completions" หากละเว้น api ในผู้ให้บริการแบบกำหนดเองที่มี baseUrl OpenClaw จะใช้ค่าเริ่มต้นเป็น openai-completions
LM Studio + โมเดลภายในเครื่องขนาดใหญ่ (Responses API)
นี่คือสแต็กภายในเครื่องที่ดีที่สุดในปัจจุบัน โหลดโมเดลขนาดใหญ่ใน LM Studio (รุ่น Qwen, DeepSeek หรือ Llama ขนาดเต็ม) เปิดใช้เซิร์ฟเวอร์ภายในเครื่อง (ค่าเริ่มต้น http://127.0.0.1:1234) และใช้ Responses API เพื่อแยกการให้เหตุผลออกจากข้อความสุดท้าย
{ agents: { defaults: { model: { primary: "lmstudio/my-local-model" }, models: { "anthropic/claude-opus-4-6": { alias: "Opus" }, "lmstudio/my-local-model": { alias: "Local" }, }, }, }, models: { mode: "merge", providers: { lmstudio: { baseUrl: "http://127.0.0.1:1234/v1", apiKey: "lmstudio", api: "openai-responses", models: [ { id: "my-local-model", name: "Local Model", reasoning: false, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 196608, maxTokens: 8192, }, ], }, }, },}รายการตรวจสอบการตั้งค่า:
- ติดตั้ง LM Studio: https://lmstudio.ai
- ดาวน์โหลด รุ่นโมเดลที่ใหญ่ที่สุดที่มี (หลีกเลี่ยงรุ่น "small"/ที่ถูกควอนไทซ์อย่างหนัก) เริ่มเซิร์ฟเวอร์ และยืนยันว่า
http://127.0.0.1:1234/v1/modelsแสดงโมเดลดังกล่าว - แทนที่
my-local-modelด้วยรหัสโมเดลจริงที่แสดงใน LM Studio - โหลดโมเดลค้างไว้ การโหลดแบบเย็นจะเพิ่มเวลาแฝงขณะเริ่มต้น
- ปรับ
contextWindow/maxTokensหากรุ่น LM Studio ของคุณแตกต่างออกไป - สำหรับ WhatsApp ให้ใช้ Responses API เพื่อส่งเฉพาะข้อความสุดท้าย
- คง
models.mode: "merge"ไว้ เพื่อให้โมเดลที่โฮสต์ยังพร้อมใช้เป็นตัวสำรอง
การกำหนดค่าแบบไฮบริด: โมเดลที่โฮสต์เป็นโมเดลหลัก โมเดลภายในเครื่องเป็นตัวสำรอง
{ agents: { defaults: { model: { primary: "anthropic/claude-sonnet-4-6", fallbacks: ["lmstudio/my-local-model", "anthropic/claude-opus-4-6"], }, models: { "anthropic/claude-sonnet-4-6": { alias: "Sonnet" }, "lmstudio/my-local-model": { alias: "Local" }, "anthropic/claude-opus-4-6": { alias: "Opus" }, }, }, }, models: { mode: "merge", providers: { lmstudio: { baseUrl: "http://127.0.0.1:1234/v1", apiKey: "lmstudio", api: "openai-responses", models: [ { id: "my-local-model", name: "Local Model", reasoning: false, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 196608, maxTokens: 8192, }, ], }, }, },}หากต้องการใช้โมเดลภายในเครื่องเป็นหลักและมีโมเดลที่โฮสต์เป็นระบบสำรองเพื่อความปลอดภัย ให้สลับลำดับ primary/fallbacks และคงบล็อก providers เดิมกับ models.mode: "merge" ไว้
การโฮสต์ตามภูมิภาค / การกำหนดเส้นทางข้อมูล
โมเดลย่อย MiniMax/Kimi/GLM ที่โฮสต์ยังมีให้ใช้งานบน OpenRouter พร้อมปลายทางที่ตรึงตามภูมิภาค (เช่น โฮสต์ในสหรัฐฯ) เลือกรุ่นตามภูมิภาคเพื่อให้การรับส่งข้อมูลอยู่ภายในเขตอำนาจศาลที่คุณเลือก พร้อมคง models.mode: "merge" สำหรับตัวสำรอง Anthropic/OpenAI การใช้ภายในเครื่องเท่านั้นยังคงเป็นแนวทางที่ให้ความเป็นส่วนตัวสูงสุด ส่วนการกำหนดเส้นทางไปยังบริการที่โฮสต์ตามภูมิภาคเป็นทางเลือกกึ่งกลางเมื่อคุณต้องการคุณสมบัติของผู้ให้บริการ แต่ยังต้องการควบคุมการไหลของข้อมูล
พร็อกซีภายในเครื่องอื่น ๆ ที่เข้ากันได้กับ OpenAI
MLX (mlx_lm.server), vLLM, SGLang, LiteLLM, OAI-proxy หรือ Gateway แบบกำหนดเองใด ๆ ใช้งานได้หากเปิดเผยปลายทาง /v1/chat/completions ในรูปแบบ OpenAI ใช้ openai-completions เว้นแต่เอกสารของแบ็กเอนด์จะระบุอย่างชัดเจนว่ารองรับ /v1/responses
{ agents: { defaults: { model: { primary: "local/my-local-model" }, }, }, models: { mode: "merge", providers: { local: { baseUrl: "http://127.0.0.1:8000/v1", apiKey: "sk-local", api: "openai-completions", timeoutSeconds: 300, models: [ { id: "my-local-model", name: "Local Model", reasoning: false, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 120000, maxTokens: 8192, }, ], }, }, },}รายการผู้ให้บริการแบบกำหนดเอง/ภายในเครื่องจะเชื่อถือต้นทาง baseUrl ที่กำหนดค่าไว้อย่างตรงกันทุกประการสำหรับคำขอโมเดลที่มีการป้องกัน รวมถึงโฮสต์แบบลูปแบ็ก, LAN, tailnet และ DNS ส่วนตัว ต้นทางเมทาดาทา/ลิงก์โลคัลจะถูกบล็อกเสมอไม่ว่ากรณีใด คำขอไปยังต้นทางส่วนตัวอื่นยังคงต้องใช้ models.providers.<id>.request.allowPrivateNetwork: true ตั้งค่าสถานะความเชื่อถือเป็น false หากไม่ต้องการใช้ความเชื่อถือต้นทางที่ตรงกันทุกประการ
models.providers.<id>.models[].id เป็นค่าเฉพาะภายในผู้ให้บริการ อย่าใส่คำนำหน้าผู้ให้บริการ สำหรับเซิร์ฟเวอร์ MLX ที่เริ่มด้วย mlx_lm.server --model mlx-community/Qwen3-30B-A3B-6bit:
models.providers.mlx.models[].id: "mlx-community/Qwen3-30B-A3B-6bit"agents.defaults.model.primary: "mlx/mlx-community/Qwen3-30B-A3B-6bit"
ตั้งค่า input: ["text", "image"] ในโมเดลวิชันภายในเครื่องหรือที่ผ่านพร็อกซี เพื่อให้ไฟล์แนบรูปภาพถูกแทรกลงในรอบการทำงานของเอเจนต์ การเริ่มต้นใช้งานผู้ให้บริการแบบกำหนดเองเชิงโต้ตอบจะอนุมานรหัสโมเดลวิชันทั่วไป และจะถามเฉพาะชื่อที่ไม่รู้จัก การเริ่มต้นใช้งานแบบไม่โต้ตอบใช้การอนุมานเดียวกัน โดยสามารถใช้ --custom-image-input / --custom-text-input เพื่อแทนที่ค่าได้
ใช้ models.providers.<id>.timeoutSeconds สำหรับเซิร์ฟเวอร์โมเดลภายในเครื่อง/ระยะไกลที่ทำงานช้า ก่อนเพิ่ม agents.defaults.timeoutSeconds ระยะหมดเวลาของผู้ให้บริการครอบคลุมการเชื่อมต่อ ส่วนหัว การสตรีมเนื้อหา และการยกเลิกการดึงข้อมูลแบบมีการป้องกันทั้งหมดสำหรับคำขอ HTTP ของโมเดลเท่านั้น หากระยะหมดเวลาของเอเจนต์/การทำงานต่ำกว่า ให้เพิ่มค่านั้นด้วย เนื่องจากระยะหมดเวลาของผู้ให้บริการไม่สามารถขยายเวลาการทำงานทั้งหมดได้
หมายเหตุเกี่ยวกับลักษณะการทำงานของแบ็กเอนด์ /v1 ภายในเครื่อง/ผ่านพร็อกซี:
- OpenClaw ปฏิบัติต่อเส้นทางเหล่านี้เป็นเส้นทางที่เข้ากันได้กับ OpenAI ในรูปแบบพร็อกซี ไม่ใช่ปลายทาง OpenAI แบบเนทีฟ
- การปรับรูปแบบคำขอที่ใช้เฉพาะกับ OpenAI แบบเนทีฟจะไม่ถูกนำมาใช้: ไม่มี
service_tier, ไม่มีstoreของ Responses, ไม่มีการปรับเพย์โหลดเพื่อความเข้ากันได้ด้านการให้เหตุผลของ OpenAI และไม่มีคำแนะนำแคชพรอมป์ - ส่วนหัวการระบุแหล่งที่มาของ OpenClaw ที่ซ่อนอยู่ (
originator,version,User-Agent) จะไม่ถูกแทรกใน URL พร็อกซีแบบกำหนดเอง
การแทนที่ค่าความเข้ากันได้สำหรับแบ็กเอนด์ที่เข้ากันได้กับ OpenAI และเข้มงวดกว่า:
-
เนื้อหาเป็นสตริงเท่านั้น: เซิร์ฟเวอร์บางตัวรับเฉพาะ
messages[].contentแบบสตริง ไม่รับอาร์เรย์ส่วนเนื้อหาแบบมีโครงสร้าง ตั้งค่าmodels.providers.<provider>.models[].compat.requiresStringContent: true -
คีย์ข้อความแบบเข้มงวด: หากเซิร์ฟเวอร์ปฏิเสธรายการข้อความที่มีคีย์มากกว่า
role/contentให้ตั้งค่าcompat.strictMessageKeys: true -
ข้อความเครื่องมือในวงเล็บเหลี่ยม: โมเดลภายในเครื่องบางรุ่นส่งคำขอเครื่องมือแบบเดี่ยวในรูปข้อความ เช่น
[tool_name]ตามด้วย JSON และ[END_TOOL_REQUEST]OpenClaw จะยกระดับข้อความเหล่านั้นเป็นการเรียกเครื่องมือจริงเฉพาะเมื่อชื่อตรงกับเครื่องมือที่ลงทะเบียนไว้สำหรับรอบนั้นทุกประการ มิฉะนั้นข้อความจะยังคงเป็นข้อความที่ซ่อนอยู่และไม่รองรับ -
ข้อความไร้โครงสร้างที่ดูคล้ายการเรียกเครื่องมือ: หากโมเดลส่งข้อความรูปแบบ JSON/XML/ReAct ที่ดูเหมือนการเรียกเครื่องมือแต่ไม่ได้เป็นการเรียกแบบมีโครงสร้าง OpenClaw จะปล่อยไว้เป็นข้อความและบันทึกคำเตือนพร้อมรหัสการทำงาน ผู้ให้บริการ/โมเดล รูปแบบที่ตรวจพบ และชื่อเครื่องมือเมื่อมี นั่นคือความไม่เข้ากันของผู้ให้บริการ/โมเดล ไม่ใช่การเรียกใช้เครื่องมือที่เสร็จสมบูรณ์
-
การบังคับใช้เครื่องมือ: หากเครื่องมือปรากฏเป็นข้อความของผู้ช่วย (JSON/XML/ReAct ดิบ หรืออาร์เรย์
tool_callsว่าง) ให้ตรวจสอบก่อนว่าเทมเพลต/ตัวแยกวิเคราะห์แชตของเซิร์ฟเวอร์รองรับการเรียกเครื่องมือ หากตัวแยกวิเคราะห์ทำงานเฉพาะเมื่อบังคับใช้เครื่องมือ ให้แทนที่ค่าพร็อกซีเริ่มต้นของtool_choice: "auto"แยกตามโมเดล:json5 { agents: { defaults: { models: { "local/my-local-model": { params: { extra_body: { tool_choice: "required", }, }, }, }, }, },}ใช้ค่านี้เฉพาะเมื่อทุกรอบการทำงานปกติควรเรียกเครื่องมือ แทนที่
local/my-local-modelด้วยข้อมูลอ้างอิงที่ตรงกันทุกประการจากopenclaw models listหรือตั้งค่าผ่าน CLI:bash openclaw config set agents.defaults.models '{"local/my-local-model":{"params":{"extra_body":{"tool_choice":"required"}}}}' --strict-json --merge -
ระดับความเข้มข้นในการให้เหตุผลเพิ่มเติม: หากโมเดลแบบกำหนดเองที่เข้ากันได้กับ OpenAI รองรับระดับความเข้มข้นในการให้เหตุผลของ OpenAI นอกเหนือจากโปรไฟล์ในตัว ให้ประกาศค่าเหล่านั้นในบล็อกความเข้ากันได้ของโมเดล การเพิ่ม
"xhigh"จะทำให้ค่านี้พร้อมใช้งานสำหรับข้อมูลอ้างอิงโมเดลดังกล่าวใน/think xhighตัวเลือกเซสชัน การตรวจสอบความถูกต้องของ Gateway และการตรวจสอบความถูกต้องของllm-task:json5 { models: { providers: { local: { baseUrl: "http://127.0.0.1:8000/v1", apiKey: "sk-local", api: "openai-responses", models: [ { id: "gpt-5.4", name: "GPT 5.4 via local proxy", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 196608, maxTokens: 8192, compat: { supportedReasoningEfforts: ["low", "medium", "high", "xhigh"], reasoningEffortMap: { xhigh: "xhigh" }, }, }, ], }, }, },}
แบ็กเอนด์ที่เล็กกว่าหรือเข้มงวดกว่า
หากโหลดโมเดลได้อย่างสมบูรณ์ แต่การทำงานเต็มรูปแบบของเอเจนต์มีปัญหา ให้ตรวจสอบจากบนลงล่าง โดยยืนยันการรับส่งข้อมูลก่อน แล้วจึงจำกัดขอบเขตให้แคบลง
-
ยืนยันว่าโมเดลภายในเครื่องตอบสนอง - ไม่มีเครื่องมือ ไม่มีบริบทของเอเจนต์
bash openclaw infer model run --local --model <provider/model> --prompt "Reply with exactly: pong" --json -
ยืนยันการกำหนดเส้นทางของ Gateway - ส่งเฉพาะพรอมต์ โดยข้ามทรานสคริปต์ การบูตสแตรป AGENTS การประกอบกลไกบริบท เครื่องมือ และเซิร์ฟเวอร์ MCP ที่รวมมาให้ แต่ยังคงทดสอบการกำหนดเส้นทางของ Gateway การยืนยันตัวตน และการเลือกผู้ให้บริการ:
bash openclaw infer model run --gateway --model <provider/model> --prompt "Reply with exactly: pong" --json -
ลองใช้โหมดประหยัด หากโพรบทั้งสองผ่าน แต่การทำงานจริงของเอเจนต์ล้มเหลวเนื่องจากการเรียกใช้เครื่องมือผิดรูปแบบหรือพรอมต์มีขนาดใหญ่เกินไป: ตั้งค่า
agents.defaults.experimental.localModelLean: trueโหมดนี้จะตัดเครื่องมือขนาดใหญ่สำหรับเบราว์เซอร์ Cron ข้อความ การสร้างสื่อ เสียง และ PDF ออก เว้นแต่จะกำหนดให้ใช้อย่างชัดเจน และโดยค่าเริ่มต้นจะจัดแค็ตตาล็อกเครื่องมือขนาดใหญ่ไว้ภายใต้การควบคุมการค้นหาเครื่องมือแบบมีโครงสร้าง ขณะที่ยังคงแสดงexecโดยตรง ดูรายละเอียดและวิธียืนยันว่าเปิดใช้งานแล้วได้ที่ ฟีเจอร์ทดลอง -> โหมดประหยัดสำหรับโมเดลภายในเครื่อง -
ปิดใช้งานเครื่องมือทั้งหมดเป็นทางเลือกสุดท้าย โดยตั้งค่า
models.providers.<provider>.models[].compat.supportsTools: falseสำหรับโมเดลนั้น จากนั้นเอเจนต์จะทำงานโดยไม่มีการเรียกใช้เครื่องมือ -
หากยังเกินกว่านั้น คอขวดอยู่ที่ระบบต้นทาง หากแบ็กเอนด์ยังคงล้มเหลวเฉพาะเมื่อ OpenClaw ทำงานในขนาดใหญ่ขึ้น หลังจากใช้โหมดประหยัดและ
supportsTools: falseแล้ว ปัญหาที่เหลือมักเกิดจากตัวโมเดลหรือเซิร์ฟเวอร์เอง เช่น หน้าต่างบริบท หน่วยความจำ GPU การขับข้อมูลออกจาก kv-cache หรือข้อบกพร่องของแบ็กเอนด์ ไม่ใช่เลเยอร์การรับส่งข้อมูลของ OpenClaw
การแก้ไขปัญหา
- Gateway เข้าถึงพร็อกซีไม่ได้ใช่หรือไม่
curl http://127.0.0.1:1234/v1/models - โมเดล LM Studio ถูกถอนออกจากหน่วยความจำใช่หรือไม่ โหลดใหม่ การเริ่มต้นแบบเย็นเป็นสาเหตุทั่วไปที่ทำให้ดูเหมือนระบบ "ค้าง"
- เซิร์ฟเวอร์ภายในเครื่องแจ้ง
terminated,ECONNRESETหรือปิดสตรีมระหว่างรอบใช่หรือไม่ OpenClaw บันทึกmodel.call.error.failureKindที่มีจำนวนค่าจำกัด พร้อมสแนปช็อต RSS/ฮีปของกระบวนการ OpenClaw ไว้ในการวินิจฉัย สำหรับแรงกดดันด้านหน่วยความจำของ LM Studio/Ollama ให้เทียบเวลาประทับนั้นกับบันทึกของเซิร์ฟเวอร์หรือบันทึกการขัดข้อง/jetsam ของ macOS เพื่อยืนยันว่าเซิร์ฟเวอร์โมเดลถูกยุติหรือไม่ - เกิดข้อผิดพลาดเกี่ยวกับบริบทใช่หรือไม่ OpenClaw คำนวณเกณฑ์ตรวจสอบล่วงหน้าของหน้าต่างบริบทจากขนาดหน้าต่างโมเดลที่ตรวจพบ (หรือขนาดหน้าต่างที่ถูกจำกัดเมื่อ
agents.defaults.contextTokensลดค่าลง) โดยจะแจ้งเตือนเมื่อต่ำกว่า 20% พร้อมค่าขั้นต่ำ 8k และบล็อกเด็ดขาดเมื่อต่ำกว่า 10% พร้อมค่าขั้นต่ำ 4k (จำกัดไม่ให้เกินหน้าต่างบริบทที่มีผล เพื่อไม่ให้ข้อมูลเมตาของโมเดลที่ระบุขนาดใหญ่เกินจริงปฏิเสธขีดจำกัดของผู้ใช้ที่ถูกต้อง) ลดcontextWindowหรือเพิ่มขีดจำกัดบริบทของเซิร์ฟเวอร์/โมเดล - พบ
messages[].content ... expected a stringใช่หรือไม่ เพิ่มcompat.requiresStringContent: trueในรายการของโมเดลนั้น - พบ
validation.keysหรือ "message entries only allowroleandcontent" ใช่หรือไม่ เพิ่มcompat.strictMessageKeys: trueในรายการของโมเดลนั้น - การเรียก
/v1/chat/completionsโดยตรงทำงานได้ แต่openclaw infer model run --localล้มเหลวกับ Gemma หรือโมเดลภายในเครื่องอื่นใช่หรือไม่ ตรวจสอบ URL ของผู้ให้บริการ การอ้างอิงโมเดล เครื่องหมายการยืนยันตัวตน และบันทึกของเซิร์ฟเวอร์ก่อน เพราะmodel runจะข้ามเครื่องมือของเอเจนต์ทั้งหมด หากmodel runสำเร็จ แต่การทำงานของเอเจนต์ที่มีขนาดใหญ่กว่าล้มเหลว ให้ลดขอบเขตเครื่องมือด้วยlocalModelLeanหรือcompat.supportsTools: false - การเรียกใช้เครื่องมือปรากฏเป็นข้อความ JSON/XML/ReAct ดิบ หรือผู้ให้บริการส่งคืนอาร์เรย์
tool_callsว่างใช่หรือไม่ อย่าเพิ่มพร็อกซีที่แปลงข้อความของผู้ช่วยเป็นการเรียกใช้เครื่องมือโดยไม่ตรวจสอบ ให้แก้เทมเพลต/ตัวแยกวิเคราะห์แชตของเซิร์ฟเวอร์ก่อน หากโมเดลทำงานได้เฉพาะเมื่อบังคับให้ใช้เครื่องมือ ให้เพิ่มการกำหนดทับparams.extra_body.tool_choice: "required"ข้างต้น และใช้รายการโมเดลนั้นเฉพาะกับเซสชันที่คาดว่าจะมีการเรียกใช้เครื่องมือในทุกรอบ - ความปลอดภัย: โมเดลภายในเครื่องจะข้ามตัวกรองฝั่งผู้ให้บริการ จำกัดขอบเขตของเอเจนต์ให้แคบและเปิดใช้ Compaction เพื่อจำกัดขอบเขตผลกระทบจากการแทรกคำสั่งในพรอมต์