---
read_when:
    - คุณต้องการให้เอเจนต์ถามคำถามแบบมีโครงสร้างแก่ผู้ใช้
    - คุณกำลังตอบหรือแก้ไขข้อบกพร่องของพรอมต์ ask_user
    - คุณต้องการสคีมา การหมดเวลา หรือลักษณะการทำงานของช่องทางสำหรับ ask_user
summary: วิธีที่ ask_user หยุดรอบการทำงานของเอเจนต์ชั่วคราวเพื่อรอการตัดสินใจแบบมีโครงสร้างจากมนุษย์
title: ถามผู้ใช้
x-i18n:
    generated_at: "2026-07-20T06:11:26Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 32
    provider: openai
    source_hash: 32556314a34c26054c3aabfdd8ecc474cf85196e5cc71adb833face596edbd24
    source_path: tools/ask-user.md
    workflow: 16
---

`ask_user` ช่วยให้เอเจนต์ถามคำถามแบบมีโครงสร้างแก่ผู้ใช้จำนวนหนึ่งถึงสามข้อและ
รอคำตอบ เครื่องมือนี้ใช้สำหรับการตัดสินใจที่เป็นหน้าที่ของผู้ใช้อย่างแท้จริง
ไม่ใช่การยืนยันตามปกติหรือข้อมูลที่เอเจนต์สามารถอนุมานได้จากคำขอ
โค้ด หรือค่าเริ่มต้นที่สมเหตุสมผล

เครื่องมือนี้ใช้ได้เฉพาะในเซสชันหลักเท่านั้น เอเจนต์ย่อยและการทำงานอื่นที่ไม่ใช่การทำงานหลัก
จะไม่ได้รับเครื่องมือนี้

## ตอบคำถาม

สามารถตอบได้จากทุกช่องทางการสนทนาที่รองรับ:

- Control UI บนเว็บจะตรึงแผงคำถามไว้เหนือช่องเขียนข้อความโดยตรง สำหรับ
  พรอมต์ที่มีหลายคำถาม แผงจะแสดงครั้งละหนึ่งคำถามและเลื่อนไปตาม
  ตัวบอกขั้นตอนแบบสั้น หลังจากตอบเสร็จ แผงจะปิดลงและแชต
  จะแสดงไว้เพียงสรุปคำตอบแบบย่อ
- Telegram, Discord และ Slack จะแสดงปุ่มแบบเนทีฟสำหรับพรอมต์
  ที่มีคำถามเดียวและเลือกได้เพียงตัวเลือกเดียว
- การตอบด้วยข้อความธรรมดาใช้ได้ในทุกช่องทาง ให้ตอบด้วยหมายเลข ป้ายกำกับตัวเลือก
  หรือคำตอบที่เขียนเอง

OpenClaw เปิดให้ตอบเป็นข้อความอิสระด้วยตัวเลือก **อื่นๆ** เสมอ เอเจนต์ต้องไม่เพิ่มตัวเลือก
`Other` ลงในรายการตัวเลือกที่กำหนดไว้

## ลักษณะการทำงานของแพลตฟอร์ม

การตอบคำถามใช้ได้ในทุกช่องทางการสนทนาที่รองรับ Control UI บนเว็บใช้
ตัวบอกขั้นตอนแบบตรึงซึ่งจะแทนที่ช่องเขียนข้อความเมื่อขยายอยู่ การยุบจะนำ
ช่องเขียนข้อความแบบเต็มกลับมาใต้แถบคำถามขนาดเล็ก iOS, macOS และ Android แสดง
การ์ดในบรรทัด โดยตั้งใจให้หลายคำถามเรียงซ้อนกันเพื่อให้เหมาะกับการใช้งานแบบสัมผัส
ทุกแพลตฟอร์มเก็บสรุปคำถามและคำตอบไว้ในไทม์ไลน์ของแชตที่ใช้งานอยู่
โดยไม่มีการนำออกตามเวลา และมี **ข้าม** ให้ใช้ทุกแห่ง

พรอมต์ที่ไม่สามารถใช้ปุ่มแบบเนทีฟได้ รวมถึงพรอมต์ที่มีหลายคำถามและ
พรอมต์แบบเลือกได้หลายตัวเลือก จะแสดงเป็นข้อความที่อ่านง่ายในช่องทางต่างๆ ส่วน Control UI
จะคงตัวบอกขั้นตอนแบบมีโครงสร้างไว้อย่างครบถ้วน

## หมดเวลาและไม่มีคำตอบ

ระยะหมดเวลาเริ่มต้นคือ 900 วินาที `timeoutSeconds` จะถูกจำกัดให้อยู่ในช่วง
30 ถึง 3600 วินาที

หากคำถามหมดอายุหรือถูกยกเลิกก่อนจะได้รับคำตอบ เครื่องมือจะ
ส่งคืน `status: "no_answer"` จากนั้นเอเจนต์จะดำเนินการต่อตามวิจารณญาณที่ดีที่สุด
การยุติการทำงานของเอเจนต์จะยกเลิกคำถามของ Gateway ที่กำลังรอคำตอบ

## สคีมาของเครื่องมือ

```ts
{
  questions: Array<{
    id: string; // คีย์คำตอบ snake_case ที่ไม่ซ้ำกัน
    header: string; // ป้ายกำกับสั้น ตัดให้เหลือ 12 อักขระ
    question: string; // หนึ่งประโยค
    options: Array<{
      label: string;
      description?: string;
    }>; // 2-4 ตัวเลือก
    multiSelect?: boolean;
  }>; // 1-3 คำถาม
  timeoutSeconds?: number; // จำนวนเต็ม ค่าเริ่มต้น 900 จำกัดให้อยู่ในช่วง 30-3600
}
```

เมื่อใช้ `multiSelect: true` ผู้ใช้สามารถเลือกได้มากกว่าหนึ่งตัวเลือก
ค่าคำตอบของทุกคำถามจะถูกส่งคืนเป็นอาร์เรย์

ตัวอย่างผลลัพธ์ที่ตอบแล้ว:

```json
{
  "status": "answered",
  "answers": {
    "answers": {
      "deploy_target": ["Staging (Recommended)"]
    }
  }
}
```

## แนวทางสำหรับโมเดล

สัญญาที่แสดงต่อโมเดลกำหนดให้เอเจนต์:

- ถามเฉพาะเมื่อไม่สามารถดำเนินการต่อได้หากขาดการตัดสินใจที่เป็นหน้าที่ของผู้ใช้อย่างแท้จริง;
- ควรถามเพียงหนึ่งคำถามและไม่เกินสามคำถาม;
- วางตัวเลือกที่แนะนำไว้ก่อนและเติม `(Recommended)` ต่อท้ายป้ายกำกับ;
- ไม่ต้องกำหนดตัวเลือก `Other` เนื่องจากระบบจะเพิ่มช่องข้อความอิสระโดยอัตโนมัติ;
- ดำเนินการต่อตามวิจารณญาณที่ดีที่สุดหลังจาก `no_answer`

เอเจนต์ไม่ควรใช้ `ask_user` เพื่อถามว่าสามารถดำเนินการต่อได้หรือไม่ หรือเพื่อยืนยัน
แผนของตนเอง
