<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Thanawat Wongchai</title>
    <description>The latest articles on DEV Community by Thanawat Wongchai (@thanawat_wonchai).</description>
    <link>https://dev.to/thanawat_wonchai</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3821627%2F91172568-3a21-4fd5-9802-0ebae2983f0a.png</url>
      <title>DEV Community: Thanawat Wongchai</title>
      <link>https://dev.to/thanawat_wonchai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thanawat_wonchai"/>
    <language>en</language>
    <item>
      <title>Gemini 3.5 Flash-Lite เทียบกับ 3.6 Flash ควรเลือกรุ่นไหนดี?</title>
      <dc:creator>Thanawat Wongchai</dc:creator>
      <pubDate>Wed, 22 Jul 2026 11:03:24 +0000</pubDate>
      <link>https://dev.to/thanawat_wonchai/gemini-35-flash-lite-ethiiybkab-36-flash-khwreluuekrunaihndii-23p3</link>
      <guid>https://dev.to/thanawat_wonchai/gemini-35-flash-lite-ethiiybkab-36-flash-khwreluuekrunaihndii-23p3</guid>
      <description>&lt;p&gt;นี่คือแนวทางเลือกโมเดลแบบใช้งานได้จริง: เลือก Gemini 3.5 Flash-Lite สำหรับงานง่ายที่ต้องรันจำนวนมากและให้ความสำคัญกับต้นทุนหรือความเร็ว เช่น การจัดหมวดหมู่ การดึงข้อมูล การตอบแชทสั้น คำตอบ RAG และการเติมข้อความอัตโนมัติ เลือก Gemini 3.6 Flash เมื่องานต้องการคุณภาพสูงกว่า เช่น เอเจนต์หลายขั้นตอน การใช้เครื่องมือ การเขียนโค้ด การใช้งานคอมพิวเตอร์ หรือคำตอบที่ผิดพลาดแล้วมีต้นทุนสูง&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;ลองใช้ Apidog วันนี้&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;ทั้งสองโมเดลเปิดตัวใน Google's Flash-tier refresh เมื่อวันที่ 21 กรกฎาคม 2026 และรองรับอินพุตสูงสุด 1 ล้านโทเค็นเหมือนกัน ความแตกต่างหลักคือจุดแลกเปลี่ยนระหว่างต้นทุน ความเร็ว และความสามารถในการให้เหตุผล&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;หมายเหตุเรื่องชื่อ: โมเดลหลักขยับเป็น 3.6 แต่รุ่น Lite ยังคงเป็น 3.5 ดังนั้น &lt;code&gt;gemini-3.5-flash-lite&lt;/code&gt; เทียบกับ &lt;code&gt;gemini-3.6-flash&lt;/code&gt; เป็นชื่อโมเดลที่ถูกต้อง ไม่ใช่การพิมพ์ผิด&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  คำตอบสั้นๆ
&lt;/h2&gt;

&lt;p&gt;ใช้ &lt;a href="https://apidog.com/th/blog/what-is-gemini-3-5-flash-lite?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Flash-Lite&lt;/a&gt; เป็นค่าเริ่มต้นสำหรับงานแคบ ๆ ที่มีปริมาณสูง และเปลี่ยนเฉพาะคำขอที่ต้องใช้การให้เหตุผล เครื่องมือ หรือโค้ดไปเป็น &lt;a href="https://apidog.com/th/blog/what-is-gemini-3-6-flash?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;3.6 Flash&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;อย่าบังคับให้ทั้งแอปใช้โมเดลเดียว ให้กำหนด routing ตามประเภทงานแทน:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;selectModel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;requiresTools&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;requiresCode&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isMultiStep&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gemini-3.6-flash&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gemini-3.5-flash-lite&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เริ่มจาก Flash-Lite แล้วเก็บผลการประเมิน คุณภาพ และความหน่วงของคำตอบ หากกลุ่มคำขอใดตอบไม่ครบหรือผิดพลาดบ่อย ค่อยยกระดับเฉพาะกลุ่มนั้นไปใช้ 3.6 Flash&lt;/p&gt;

&lt;h2&gt;
  
  
  ราคาและความเร็วแบบเปรียบเทียบ
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;คุณสมบัติ&lt;/th&gt;
&lt;th&gt;Gemini 3.5 Flash-Lite&lt;/th&gt;
&lt;th&gt;Gemini 3.6 Flash&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;รหัสโมเดล&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gemini-3.5-flash-lite&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gemini-3.6-flash&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ราคาอินพุต&lt;/td&gt;
&lt;td&gt;$0.30 / 1 ล้านโทเค็น&lt;/td&gt;
&lt;td&gt;$1.50 / 1 ล้านโทเค็น&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ราคาเอาต์พุต&lt;/td&gt;
&lt;td&gt;$2.50 / 1 ล้านโทเค็น&lt;/td&gt;
&lt;td&gt;$7.50 / 1 ล้านโทเค็น&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ปริมาณงาน&lt;/td&gt;
&lt;td&gt;~350 โทเค็นเอาต์พุต/วินาที&lt;/td&gt;
&lt;td&gt;ไม่ได้เผยแพร่แยกต่างหาก&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context window&lt;/td&gt;
&lt;td&gt;1 ล้านโทเค็น&lt;/td&gt;
&lt;td&gt;1 ล้านโทเค็น&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;รุ่นฟรี&lt;/td&gt;
&lt;td&gt;มี (จำกัดอัตรา)&lt;/td&gt;
&lt;td&gt;มี (จำกัดอัตรา)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Flash-Lite ถูกกว่า 5 เท่าสำหรับอินพุต และถูกกว่า 3 เท่าสำหรับเอาต์พุต Google เผยแพร่ปริมาณงานของ Flash-Lite ที่ประมาณ 350 โทเค็นเอาต์พุตต่อวินาที ซึ่งเหมาะกับ UX ที่ไวต่อความหน่วง เช่น แชทหรือ autocomplete&lt;/p&gt;

&lt;p&gt;Google ไม่ได้เผยแพร่ตัวเลขโทเค็นต่อวินาทีแยกต่างหากสำหรับ 3.6 Flash แต่ระบุว่า 3.6 Flash สร้างโทเค็นเอาต์พุตน้อยกว่า 3.5 Flash รุ่นก่อนหน้าประมาณ 17% ซึ่งช่วยให้งานหลายขั้นตอนจบได้เร็วขึ้นกว่าที่ดูจากราคาเพียงอย่างเดียว&lt;/p&gt;

&lt;p&gt;ตรวจสอบอัตราปัจจุบันได้จาก&lt;a href="https://ai.google.dev/gemini-api/docs/pricing" rel="noopener noreferrer"&gt;หน้าการกำหนดราคา Gemini API&lt;/a&gt; และ&lt;a href="https://apidog.com/th/blog/gemini-3-6-flash-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;รายละเอียดการกำหนดราคา Gemini 3.6 Flash&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  คุณภาพและเกณฑ์มาตรฐาน
&lt;/h2&gt;

&lt;p&gt;บน Terminal-Bench 2.1 ซึ่งวัดงานเทอร์มินัลแบบ Agentic:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Flash-Lite ได้ &lt;strong&gt;54&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;3.6 Flash ได้ &lt;strong&gt;78.0&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ช่องว่าง 24 จุดนี้สำคัญเมื่อเอเจนต์ต้องวางแผนหลายขั้นตอน เรียกใช้เครื่องมือ และตรวจสอบผลลัพธ์ระหว่างทาง&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdlwon3r7dr7ui7d1kaw8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdlwon3r7dr7ui7d1kaw8.png" alt="ผลการเปรียบเทียบเกณฑ์มาตรฐาน" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.6 Flash ยังรายงานคะแนนดังนี้:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;83.0&lt;/strong&gt; บน OSWorld-Verified สำหรับการใช้งานคอมพิวเตอร์&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;58.7%&lt;/strong&gt; บน SWE-Bench Pro&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;49%&lt;/strong&gt; บน DeepSWE v1.1&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ดังนั้น ถ้างานต้องควบคุมเบราว์เซอร์หรือเดสก์ท็อป วิเคราะห์ stack trace แก้หลายไฟล์ หรือเรียกใช้เครื่องมือต่อเนื่อง 3.6 Flash เป็นตัวเลือกที่เหมาะกว่า&lt;/p&gt;

&lt;p&gt;ในทางกลับกัน Flash-Lite ไม่ใช่โมเดลที่อ่อนแอ คะแนน Terminal-Bench 2.1 เพิ่มจาก 31 ในรุ่น Lite ก่อนหน้าเป็น 54 จุดประสงค์ของมันคือให้เหตุผลได้ดีพอในต้นทุนและความหน่วงที่เหมาะกับงานปริมาณมาก ดูแนวทางการวางตำแหน่งโมเดลได้จาก&lt;a href="https://deepmind.google/models/gemini/flash/" rel="noopener noreferrer"&gt;หน้าโมเดล Flash&lt;/a&gt; และ&lt;a href="https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-6-flash-3-5-flash-lite-3-5-flash-cyber/" rel="noopener noreferrer"&gt;ประกาศเปิดตัว&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  เลือกโมเดลตามประเภทงาน
&lt;/h2&gt;

&lt;p&gt;ใช้ตารางนี้เป็น baseline ก่อนปรับจากผลประเมินของระบบจริง&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;งาน&lt;/th&gt;
&lt;th&gt;โมเดลที่เหมาะสม&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;การจัดหมวดหมู่หรือดึงข้อมูลปริมาณมาก&lt;/td&gt;
&lt;td&gt;Flash-Lite&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ผู้ช่วยแชทและการตอบกลับสั้น&lt;/td&gt;
&lt;td&gt;Flash-Lite&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;คำตอบ RAG จากบริบทที่ดึงมา&lt;/td&gt;
&lt;td&gt;Flash-Lite&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UX ที่ต้องการความหน่วงต่ำ เช่น autocomplete&lt;/td&gt;
&lt;td&gt;Flash-Lite&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ไปป์ไลน์ระดับการค้นหาที่ต้องรันทุกคำขอ&lt;/td&gt;
&lt;td&gt;Flash-Lite&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;เอเจนต์หลายขั้นตอน&lt;/td&gt;
&lt;td&gt;3.6 Flash&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;การใช้เครื่องมือและ function calling ต่อเนื่อง&lt;/td&gt;
&lt;td&gt;3.6 Flash&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;การเขียนโค้ดและการตรวจทานโค้ด&lt;/td&gt;
&lt;td&gt;3.6 Flash&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;การใช้งานคอมพิวเตอร์ผ่านเบราว์เซอร์หรือเดสก์ท็อป&lt;/td&gt;
&lt;td&gt;3.6 Flash&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;คำตอบความเสี่ยงสูงที่ข้อผิดพลาดมีต้นทุนสูง&lt;/td&gt;
&lt;td&gt;3.6 Flash&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;ตัวอย่างเชิงปฏิบัติ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ระบบติดแท็กหมวดหมู่ให้ตั๋ว support หลายล้านรายการต่อวัน: ใช้ Flash-Lite&lt;/li&gt;
&lt;li&gt;RAG ที่สรุปข้อมูลจากเอกสารที่ดึงมา: เริ่มที่ Flash-Lite&lt;/li&gt;
&lt;li&gt;เอเจนต์ที่อ่าน stack trace แก้ไขไฟล์ และเปิด pull request: ใช้ 3.6 Flash&lt;/li&gt;
&lt;li&gt;workflow ที่เรียก API หลายตัวและต้องตัดสินใจจากผลลัพธ์แต่ละขั้น: ใช้ 3.6 Flash&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;หากคุณกำลังอัปเกรดจาก Gemini 3.5 Flash รุ่นปกติ ไม่ใช่ Flash-Lite โปรดดู&lt;a href="https://apidog.com/th/blog/gemini-3-6-flash-vs-gemini-3-5-flash?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;การเปรียบเทียบ 3.6 Flash กับ 3.5 Flash&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  คำนวณต้นทุนจากปริมาณงานจริง
&lt;/h2&gt;

&lt;p&gt;สมมติว่า workload รายวันมี:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;อินพุต 10 ล้านโทเค็น&lt;/li&gt;
&lt;li&gt;เอาต์พุต 2 ล้านโทเค็น&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;โมเดล&lt;/th&gt;
&lt;th&gt;อินพุต 10M&lt;/th&gt;
&lt;th&gt;เอาต์พุต 2M&lt;/th&gt;
&lt;th&gt;รวมรายวัน&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Flash-Lite&lt;/td&gt;
&lt;td&gt;$3.00&lt;/td&gt;
&lt;td&gt;$5.00&lt;/td&gt;
&lt;td&gt;$8.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3.6 Flash&lt;/td&gt;
&lt;td&gt;$15.00&lt;/td&gt;
&lt;td&gt;$15.00&lt;/td&gt;
&lt;td&gt;$30.00&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;ในกรณีนี้ 3.6 Flash มีค่าใช้จ่ายมากกว่า 3.75 เท่า:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Flash-Lite: ประมาณ &lt;strong&gt;$240/เดือน&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;3.6 Flash: ประมาณ &lt;strong&gt;$900/เดือน&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ตัวคูณต้นทุนจริงจะอยู่ราว 3–5 เท่า:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;งานที่เน้นอินพุต เช่น RAG context ยาว เอกสารขนาดใหญ่ หรือการจัดหมวดหมู่ข้อมูลจำนวนมาก จะใกล้ 5 เท่า&lt;/li&gt;
&lt;li&gt;งานที่เน้นการสร้างเอาต์พุตจะใกล้ 3 เท่า&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;คำถามที่ควรถามจึงไม่ใช่แค่ว่า “3.6 Flash ทำงานนี้ได้หรือไม่” แต่คือ:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;คุณภาพที่เพิ่มขึ้นคุ้มกับค่าใช้จ่ายเพิ่ม 3–4 เท่าต่อคำขอใน workload ของคุณหรือไม่?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  วิธีทำ A/B Test ทั้งคู่ใน Apidog
&lt;/h2&gt;

&lt;p&gt;อย่าเลือกจาก benchmark เพียงอย่างเดียว เพราะ prompt, context และเกณฑ์คุณภาพของแต่ละระบบต่างกัน คุณสามารถส่งคำขอเดียวกันไปยังทั้งสองโมเดล แล้วเปรียบเทียบผลลัพธ์จริงด้วย &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fih1y3prj4uxc3s4ql4u2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fih1y3prj4uxc3s4ql4u2.png" alt="ตัวอย่างการทดสอบคำขอ API ใน Apidog" width="799" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ทำตามขั้นตอนนี้:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;สร้าง &lt;code&gt;POST&lt;/code&gt; request ไปยัง Gemini API endpoint&lt;/li&gt;
&lt;li&gt;เก็บ API key เป็น environment variable ของ Apidog แทนการวางไว้ใน request body หรือ commit ลง Git&lt;/li&gt;
&lt;li&gt;สร้าง request แรกโดยใช้ model id &lt;code&gt;gemini-3.5-flash-lite&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Duplicate request แล้วเปลี่ยนเฉพาะ model id เป็น &lt;code&gt;gemini-3.6-flash&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;ใช้ prompt, parameter และ context ชุดเดิมสำหรับทั้งสอง request&lt;/li&gt;
&lt;li&gt;เปรียบเทียบคุณภาพของคำตอบ ความหน่วง และผลการตรวจสอบอัตโนมัติ&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;แนวคิดสำคัญคือให้เปลี่ยนเพียงตัวแปรเดียว:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"gemini-3.5-flash-lite"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เทียบกับ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"gemini-3.6-flash"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เพิ่ม assertion ให้ request เพื่อกำหนดคำว่า “ดีพอ” อย่างชัดเจน เช่น:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTTP status ต้องสำเร็จ&lt;/li&gt;
&lt;li&gt;response ต้องมีฟิลด์ JSON ที่คาดไว้&lt;/li&gt;
&lt;li&gt;คำตอบต้องมีข้อมูลสำคัญที่จำเป็น&lt;/li&gt;
&lt;li&gt;ความหน่วงต้องไม่เกิน threshold ของระบบ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;จากนั้นบันทึก request เป็น test scenario และรันซ้ำเป็นระยะ คุณสามารถ&lt;a href="https://apidog.com/th/blog/how-to-schedule-api-tests-apidog?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;กำหนดเวลาการทดสอบ API ใน Apidog&lt;/a&gt;เพื่อจับความเปลี่ยนแปลงของคุณภาพหรือความหน่วงหลังมีการอัปเดตโมเดล&lt;/p&gt;

&lt;p&gt;Apidog ส่งคำขอและตรวจสอบ assertion ให้คุณ แต่ไม่ได้รันโมเดล และไม่สามารถตัดสินแทนคุณได้ว่าคำตอบใด “ฉลาดกว่า” ส่วนนี้ควรกำหนดด้วย test cases และเกณฑ์ธุรกิจของระบบคุณเอง&lt;/p&gt;

&lt;p&gt;เริ่มต้นได้โดย&lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ดาวน์โหลด Apidog&lt;/a&gt; แล้วสร้าง request สำหรับ Gemini endpoint&lt;/p&gt;

&lt;h2&gt;
  
  
  คำถามที่พบบ่อย
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Flash-Lite เป็นแค่ 3.6 Flash เวอร์ชันที่แย่กว่าหรือไม่?
&lt;/h3&gt;

&lt;p&gt;ไม่ใช่ ทั้งคู่ถูกออกแบบมาสำหรับจุดที่ต่างกันบนเส้นต้นทุน คุณภาพ และความเร็ว Flash-Lite เหมาะกับงานที่แคบและมีปริมาณสูง ส่วน 3.6 Flash เหมาะกับงานที่ซับซ้อนและต้องการการให้เหตุผลมากกว่า&lt;/p&gt;

&lt;h3&gt;
  
  
  ทำไมรุ่นหนึ่งเป็น 3.5 แต่อีกรุ่นเป็น 3.6?
&lt;/h3&gt;

&lt;p&gt;ในการอัปเดตนี้ Google ย้ายโมเดล Flash หลักไปที่ 3.6 แต่ยังคงรุ่น Lite ไว้ที่ 3.5 โดยการเปิดตัวเดียวกันยังมีโมเดล 3.5 Flash Cyber security ด้วย ดังนั้นอย่าตีความว่าเลข 3.5 ของ Flash-Lite หมายถึงโมเดลเก่าหรือถูกเลิกพัฒนา&lt;/p&gt;

&lt;h3&gt;
  
  
  ทั้งสองใช้ Context Window เท่ากันหรือไม่?
&lt;/h3&gt;

&lt;p&gt;ใช่ ทั้งคู่รองรับอินพุตสูงสุด 1 ล้านโทเค็น เลือกโมเดลจากคุณภาพการให้เหตุผล ราคา และความเร็ว ไม่ใช่จากขนาด context window&lt;/p&gt;

&lt;h3&gt;
  
  
  ใช้ทั้งสองโมเดลในแอปเดียวกันได้หรือไม่?
&lt;/h3&gt;

&lt;p&gt;ได้ และเป็นรูปแบบที่แนะนำ ให้ route งานง่ายและปริมาณสูงไป Flash-Lite แล้ว route งานที่ซับซ้อน เน้นโค้ด หรือใช้เครื่องมือไป 3.6 Flash เนื่องจากโครงสร้าง API เหมือนกัน ความแตกต่างหลักคือ model id&lt;/p&gt;

&lt;h3&gt;
  
  
  ทั้งสองมีรุ่นทดลองใช้ฟรีหรือไม่?
&lt;/h3&gt;

&lt;p&gt;ทั้งคู่มีรุ่นฟรีใน &lt;a href="https://aistudio.google.com" rel="noopener noreferrer"&gt;Google AI Studio&lt;/a&gt; ซึ่งมีการจำกัดอัตรา Google อาจใช้ข้อมูลจากรุ่นฟรีเพื่อปรับปรุงผลิตภัณฑ์ จึงควรอ่านข้อกำหนดก่อนส่งข้อมูลละเอียดอ่อน&lt;/p&gt;

&lt;h2&gt;
  
  
  สรุป
&lt;/h2&gt;

&lt;p&gt;ตั้ง Flash-Lite เป็นค่าเริ่มต้นสำหรับงานที่รวดเร็ว ราคาถูก และมีปริมาณสูง แล้วส่งต่อเฉพาะคำขอที่ต้องใช้เหตุผลหลายขั้นตอน เครื่องมือ การเขียนโค้ด หรือมีความเสี่ยงสูงไปยัง 3.6 Flash&lt;/p&gt;

&lt;p&gt;อย่าเลือกโมเดลแบบนามธรรม ส่ง prompt จริงของคุณไปยังทั้งสองโมเดล วัดคุณภาพ ความหน่วง และต้นทุน แล้วตัดสินจากข้อมูลของ workload จริง &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; ช่วยทำให้การเปรียบเทียบนั้นเริ่มต้นได้ด้วย request เพียงสองรายการ&lt;/p&gt;

</description>
    </item>
    <item>
      <title>เปรียบเทียบ Gemini 3.6 Flash กับ 3.5 Flash: ต่างกันอย่างไร และควรอัปเกรดไหม</title>
      <dc:creator>Thanawat Wongchai</dc:creator>
      <pubDate>Wed, 22 Jul 2026 06:33:33 +0000</pubDate>
      <link>https://dev.to/thanawat_wonchai/epriiybethiiyb-gemini-36-flash-kab-35-flash-taangkanyaangair-aelakhwrapekrdaihm-5a7n</link>
      <guid>https://dev.to/thanawat_wonchai/epriiybethiiyb-gemini-36-flash-kab-35-flash-taangkanyaangair-aelakhwrapekrdaihm-5a7n</guid>
      <description>&lt;p&gt;Google อัปเดต Flash tier เมื่อวันที่ 21 กรกฎาคม 2026 โดยโมเดลหลักเปลี่ยนเป็น Gemini 3.6 Flash หากคุณใช้ 3.5 Flash ใน production ให้เตรียมอัปเกรด: 3.6 Flash อยู่ในตระกูลเดียวกัน ใช้ context window 1 ล้านโทเค็นและราคาอินพุตเท่าเดิม แต่ราคาเอาต์พุตต่ำลง ใช้โทเค็นเอาต์พุตน้อยลง และทำคะแนนด้านการใช้งานคอมพิวเตอร์ได้ดีกว่า ดูรายละเอียดของโมเดลได้ที่ &lt;a href="https://apidog.com/th/blog/what-is-gemini-3-6-flash?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Gemini 3.6 Flash คืออะไร&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;ลองใช้ Apidog วันนี้&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  คำตอบสั้นๆ
&lt;/h2&gt;

&lt;p&gt;อัปเกรดเป็น &lt;code&gt;gemini-3.6-flash&lt;/code&gt; หากคุณสามารถรันการประเมินและ regression test ได้&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ราคาอินพุตยังคงอยู่ที่ &lt;strong&gt;$1.50 ต่อ 1 ล้านโทเค็น&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;ราคาเอาต์พุตลดจาก &lt;strong&gt;$9.00 เป็น $7.50 ต่อ 1 ล้านโทเค็น&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;ใช้โทเค็นเอาต์พุตน้อยกว่า 3.5 Flash ประมาณ &lt;strong&gt;17%&lt;/strong&gt; สำหรับงานเดียวกัน&lt;/li&gt;
&lt;li&gt;คะแนน OSWorld-Verified เพิ่มจาก &lt;strong&gt;78.4 เป็น 83.0&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;เวิร์กโฟลว์หลายขั้นตอนอาจใช้ reasoning step และ tool call น้อยลง&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;เหตุผลหลักที่ควรรอคือ คุณได้ตรึง &lt;code&gt;gemini-3.5-flash&lt;/code&gt; และตรวจสอบผลลัพธ์ใน production แล้ว แต่ยังไม่มีเวลารันการประเมินซ้ำ&lt;/p&gt;

&lt;h2&gt;
  
  
  Gemini 3.6 Flash เทียบกับ 3.5 Flash
&lt;/h2&gt;

&lt;p&gt;ตัวเลขต่อไปนี้อ้างอิงจากข้อมูลเปิดตัวของ Google ดูรายละเอียดเพิ่มเติมได้จาก &lt;a href="https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-6-flash-3-5-flash-lite-3-5-flash-cyber/" rel="noopener noreferrer"&gt;บล็อกโพสต์ของ Google&lt;/a&gt; และ &lt;a href="https://deepmind.google/models/gemini/flash/" rel="noopener noreferrer"&gt;หน้าโมเดล DeepMind Flash&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;คุณสมบัติ&lt;/th&gt;
&lt;th&gt;Gemini 3.6 Flash&lt;/th&gt;
&lt;th&gt;Gemini 3.5 Flash&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;รหัสโมเดล&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gemini-3.6-flash&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gemini-3.5-flash&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ราคาอินพุต (ต่อ 1 ล้านโทเค็น)&lt;/td&gt;
&lt;td&gt;$1.50&lt;/td&gt;
&lt;td&gt;$1.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ราคาเอาต์พุต (ต่อ 1 ล้านโทเค็น)&lt;/td&gt;
&lt;td&gt;$7.50&lt;/td&gt;
&lt;td&gt;$9.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ประสิทธิภาพโทเค็นเอาต์พุต&lt;/td&gt;
&lt;td&gt;โทเค็นเอาต์พุตน้อยลง ~17%&lt;/td&gt;
&lt;td&gt;ค่าพื้นฐาน&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;การใช้งานคอมพิวเตอร์ (OSWorld-Verified)&lt;/td&gt;
&lt;td&gt;83.0&lt;/td&gt;
&lt;td&gt;78.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context window&lt;/td&gt;
&lt;td&gt;1 ล้านโทเค็นอินพุต&lt;/td&gt;
&lt;td&gt;1 ล้านโทเค็นอินพุต&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;สิ่งที่ไม่เปลี่ยนคือราคาอินพุตและ context window ส่วนที่เปลี่ยนคือค่าใช้จ่ายฝั่งเอาต์พุตและประสิทธิภาพในการสร้างคำตอบ&lt;/p&gt;

&lt;h2&gt;
  
  
  สิ่งที่ปรับปรุงจริง
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqkk6xy3y9la56ikmo6ij.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqkk6xy3y9la56ikmo6ij.png" alt="เปรียบเทียบ Gemini 3.6 Flash และ 3.5 Flash" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. ใช้โทเค็นเอาต์พุตน้อยลง
&lt;/h3&gt;

&lt;p&gt;Gemini 3.6 Flash สร้างโทเค็นเอาต์พุตน้อยกว่า 3.5 Flash ประมาณ 17% สำหรับงานเดียวกัน โทเค็นเอาต์พุตรวมโทเค็นที่ใช้ในการคิด ดังนั้นโมเดลที่ให้เหตุผลได้มีประสิทธิภาพขึ้นจึงสามารถใช้ข้อความน้อยลงเพื่อจบงานเดียวกันได้&lt;/p&gt;

&lt;p&gt;ผลกระทบคือค่าใช้จ่ายลดลงโดยตรง เพราะคุณจ่ายตามจำนวนโทเค็นเอาต์พุตจริง&lt;/p&gt;

&lt;h3&gt;
  
  
  2. ราคาเอาต์พุตลดลง
&lt;/h3&gt;

&lt;p&gt;ราคาเอาต์พุตลดจาก $9.00 เหลือ $7.50 ต่อ 1 ล้านโทเค็น หรือประมาณ 17% ต่อโทเค็น นี่เป็นส่วนลดเพิ่มเติมจากการที่โมเดลใช้โทเค็นเอาต์พุตน้อยลงอยู่แล้ว&lt;/p&gt;

&lt;h3&gt;
  
  
  3. การใช้งานคอมพิวเตอร์ดีขึ้น
&lt;/h3&gt;

&lt;p&gt;ใน OSWorld-Verified ซึ่งเป็น benchmark สำหรับการควบคุม UI บนคอมพิวเตอร์จริง:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gemini 3.6 Flash: &lt;strong&gt;83.0&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Gemini 3.5 Flash: &lt;strong&gt;78.4&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;หากคุณสร้าง agent ที่ต้องคลิก UI กรอกฟอร์ม หรือเรียกใช้เครื่องมือ คะแนนที่ดีขึ้นอาจหมายถึงขั้นตอนล้มเหลวน้อยลง&lt;/p&gt;

&lt;h3&gt;
  
  
  4. ใช้ reasoning step และ tool call น้อยลง
&lt;/h3&gt;

&lt;p&gt;ใน agent workflow แบบหลายขั้นตอน Gemini 3.6 Flash สามารถทำงานให้เสร็จโดยใช้ reasoning step และ tool call น้อยลง&lt;/p&gt;

&lt;p&gt;ทุก tool call ที่ลดได้ช่วยลดทั้ง:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;เวลา round trip&lt;/li&gt;
&lt;li&gt;โทเค็นสะสมในแต่ละรอบ&lt;/li&gt;
&lt;li&gt;ค่าใช้จ่ายรวมของ workflow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ความแม่นยำด้านโค้ดก็ดีขึ้น ซึ่งสำคัญสำหรับงานสร้าง diff แก้ไขไฟล์ หรือสร้างโค้ดที่โทเค็นผิดเพียงตัวเดียวอาจทำให้ build ล้มเหลวได้&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;รูปแบบ API ไม่ได้เปลี่ยน: request format, authentication, endpoint, input modality เช่น ข้อความ รูปภาพ วิดีโอ เสียง และ PDF ยังคงเหมือนเดิม&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  คำนวณผลกระทบด้านค่าใช้จ่าย
&lt;/h2&gt;

&lt;p&gt;ส่วนลดสองส่วนนี้คูณกัน:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ราคาเอาต์พุตต่อโทเค็นต่ำลง&lt;/li&gt;
&lt;li&gt;จำนวนโทเค็นเอาต์พุตที่สร้างต่ำลง&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ตัวอย่าง: สมมติ workload หนึ่งสร้างเอาต์พุต 10 ล้านโทเค็นต่อวันบน Gemini 3.5 Flash&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Gemini 3.5 Flash&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
10 ล้านโทเค็น × $9.00 ต่อ 1 ล้านโทเค็น = &lt;strong&gt;$90.00 ต่อวัน&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Gemini 3.6 Flash&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ใช้โทเค็นน้อยลง 17% เหลือประมาณ 8.3 ล้านโทเค็น&lt;br&gt;&lt;br&gt;
8.3 ล้านโทเค็น × $7.50 ต่อ 1 ล้านโทเค็น = &lt;strong&gt;$62.25 ต่อวัน&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;สำหรับส่วนเอาต์พุตของ workload นี้ ค่าใช้จ่ายลดลงประมาณ &lt;strong&gt;31%&lt;/strong&gt; โดยไม่ต้องเปลี่ยน prompt&lt;/p&gt;

&lt;p&gt;ค่าอินพุตยังคงเท่าเดิม เพราะราคาอินพุตอยู่ที่ $1.50 ต่อ 1 ล้านโทเค็นสำหรับทั้งสองโมเดล&lt;/p&gt;

&lt;p&gt;ผลประหยัดจริงขึ้นอยู่กับอัตราส่วน input/output ของคุณ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;งานอ่านข้อมูลมากแต่สร้างข้อความน้อย เช่น การจัดหมวดหมู่หรือดึงข้อมูล จะประหยัดโดยรวมน้อยกว่า&lt;/li&gt;
&lt;li&gt;งานสร้างข้อความจำนวนมาก เช่น การร่างเอกสาร การสร้างโค้ด หรือ agent trace ยาวๆ จะได้ประโยชน์มากกว่า&lt;/li&gt;
&lt;li&gt;agent ที่มี tool call จำนวนมากอาจลดค่าใช้จ่ายได้เพิ่ม หากจำนวนรอบการเรียกเครื่องมือลดลง&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ดูรายละเอียดเพิ่มเติมได้ที่ &lt;a href="https://apidog.com/th/blog/gemini-3-6-flash-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ราคา Gemini 3.6 Flash&lt;/a&gt; และ &lt;a href="https://ai.google.dev/gemini-api/docs/pricing" rel="noopener noreferrer"&gt;เอกสารราคา Gemini API&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  มีเหตุผลใดที่จะยังใช้ 3.5 Flash หรือไม่?
&lt;/h2&gt;

&lt;p&gt;มี แต่ควรเป็นข้อจำกัดด้านการตรวจสอบ ไม่ใช่เพียงเพราะยังไม่ได้เปลี่ยนรหัสโมเดล&lt;/p&gt;

&lt;p&gt;คุณควรตรึง &lt;code&gt;gemini-3.5-flash&lt;/code&gt; ชั่วคราวหาก:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;คุณมี evaluation suite ที่ผูกกับการอนุมัติด้าน compliance&lt;/li&gt;
&lt;li&gt;parser หรือบริการปลายทางพึ่งพารูปแบบเอาต์พุตเดิมอย่างเข้มงวด&lt;/li&gt;
&lt;li&gt;regression test ยังไม่พร้อมใน sprint ปัจจุบัน&lt;/li&gt;
&lt;li&gt;คุณไม่สามารถตรวจสอบคุณภาพและผลกระทบของเวอร์ชันใหม่ได้ก่อน deploy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;การเปลี่ยนโมเดลอาจทำให้ถ้อยคำหรือโครงสร้างเอาต์พุตเปลี่ยนแบบละเอียด แม้ request schema จะไม่เปลี่ยน ดังนั้นอย่าเปลี่ยนในระบบที่ยังตรวจสอบซ้ำไม่ได้&lt;/p&gt;

&lt;p&gt;Gemini 3.5 Flash ไม่ได้หายไปเมื่อ 3.6 Flash เปิดตัว และยังใช้ผ่าน API ได้ การตรึงเวอร์ชันเดิมจึงเป็นทางเลือกที่สมเหตุสมผลในระยะสั้น แต่สำหรับทีมส่วนใหญ่ที่รันการทดสอบได้ ทั้งต้นทุนและคุณภาพชี้ไปที่การอัปเกรด&lt;/p&gt;

&lt;h2&gt;
  
  
  วิธีการย้าย
&lt;/h2&gt;

&lt;p&gt;การแก้โค้ดมีเพียงหนึ่งบรรทัด:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="gd"&gt;- gemini-3.5-flash
&lt;/span&gt;&lt;span class="gi"&gt;+ gemini-3.6-flash
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ตัวอย่างแนวคิดใน request body:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"gemini-3.6-flash"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"contents"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"parts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"สรุปเอกสารนี้เป็น bullet points"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;request body, auth และ endpoint ยังคงเหมือนเดิม ดูตัวอย่างการเรียกใช้แบบละเอียดได้ที่ &lt;a href="https://apidog.com/th/blog/how-to-use-gemini-3-6-flash-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;วิธีใช้ Gemini 3.6 Flash API&lt;/a&gt; และ &lt;a href="https://ai.google.dev/gemini-api/docs" rel="noopener noreferrer"&gt;เอกสาร Gemini API&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;งานสำคัญคือการตรวจสอบก่อน deploy:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;รัน evaluation suite เดิมกับ 3.6 Flash แล้วเปรียบเทียบกับ baseline ของ 3.5 Flash&lt;/li&gt;
&lt;li&gt;รัน regression test เพราะถ้อยคำและรูปแบบเอาต์พุตอาจเปลี่ยนระหว่างเวอร์ชัน&lt;/li&gt;
&lt;li&gt;ตรวจสอบทุกจุดที่ parse เอาต์พุตแบบตายตัว เช่น JSON key, regex และ schema validation&lt;/li&gt;
&lt;li&gt;วัด latency และจำนวนโทเค็นจากตัวอย่าง traffic จริง&lt;/li&gt;
&lt;li&gt;เปิดใช้ผ่าน feature flag ก่อน แล้วค่อย rollout เต็มรูปแบบ&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;หากเอาต์พุตของโมเดลส่งต่อไปยังบริการอื่น ให้ปฏิบัติต่อการเปลี่ยนนี้เหมือนการอัปเกรด dependency: เปลี่ยนแบบควบคุมได้ เปรียบเทียบผล แล้วจึงเผยแพร่&lt;/p&gt;

&lt;h2&gt;
  
  
  ทดสอบ regression ใน Apidog
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; ใช้เป็น API client และแพลตฟอร์มทดสอบสำหรับเปรียบเทียบสองโมเดลได้ มันไม่ได้รันโมเดลเอง แต่ช่วยส่ง request ตรวจสอบ response และรัน assertions ก่อนที่คุณจะ deploy&lt;/p&gt;

&lt;p&gt;ทำ A/B test ระหว่าง Gemini 3.5 Flash และ 3.6 Flash ตามขั้นตอนนี้:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;บันทึก request Gemini เดิม&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
สร้าง &lt;code&gt;POST&lt;/code&gt; request ไปยัง Gemini API ใน Apidog เก็บ API key ใน environment variable เพื่อไม่ให้คีย์อยู่ใน request body&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ทำซ้ำ request&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
สร้าง request ชุดที่สอง แล้วเปลี่ยนเฉพาะ model ID:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;   - gemini-3.5-flash
   + gemini-3.6-flash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;อย่าเปลี่ยน prompt, parameter หรือ request body ส่วนอื่น เพื่อให้เปรียบเทียบได้ตรงกัน&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;เพิ่ม assertions ที่แอปอ่านจริง&lt;/strong&gt;
ตรวจสอบ status code และ JSON field ที่ระบบปลายทางต้องใช้ เช่น:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;   &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;สถานะต้องเป็น 200&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;have&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
   &lt;span class="p"&gt;});&lt;/span&gt;

   &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

   &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;response ต้องมี candidates&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;have&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;property&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;candidates&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
   &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;เปรียบเทียบ response, latency และ token usage&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
รัน request ทั้งสองตัวกับ input ชุดเดียวกัน ตรวจสอบว่า 3.6 Flash ผ่าน assertions เดิมทั้งหมด และบันทึกเวลาตอบกลับกับการใช้โทเค็น&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;บันทึกเป็น regression scenario&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
เก็บทั้งสอง request พร้อม assertions แล้ว&lt;a href="https://apidog.com/th/blog/how-to-schedule-api-tests-apidog?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;กำหนดเวลาให้เป็นการทดสอบ regression&lt;/a&gt; เพื่อจับความเปลี่ยนแปลงจากการแก้ prompt หรือการอัปเดตโมเดลในอนาคต&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;เวิร์กโฟลว์คือ: ทำซ้ำ request เปลี่ยนเฉพาะ model ID แล้วใช้ assertions เป็นตัวตัดสินว่าการย้ายปลอดภัยหรือไม่ &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ดาวน์โหลด Apidog&lt;/a&gt; หากต้องการทดสอบกับ Gemini request ของคุณเอง&lt;/p&gt;

&lt;h2&gt;
  
  
  คำถามที่พบบ่อย
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Gemini 3.6 Flash ใช้แทน 3.5 Flash ได้ทันทีหรือไม่?
&lt;/h3&gt;

&lt;p&gt;ในเชิง API ได้ เพียงเปลี่ยนจาก &lt;code&gt;gemini-3.5-flash&lt;/code&gt; เป็น &lt;code&gt;gemini-3.6-flash&lt;/code&gt; ส่วนอื่นของ request ยังคงเหมือนเดิม อย่างไรก็ตาม ควรรัน evaluation และ regression test ก่อนใช้ใน production เพราะถ้อยคำและโครงสร้างเอาต์พุตอาจเปลี่ยนได้&lt;/p&gt;

&lt;h3&gt;
  
  
  ราคาอินพุตเปลี่ยนหรือไม่?
&lt;/h3&gt;

&lt;p&gt;ไม่ ราคาอินพุตยังคง $1.50 ต่อ 1 ล้านโทเค็นทั้งสองโมเดล ราคาเอาต์พุตเท่านั้นที่ลดจาก $9.00 เป็น $7.50 ต่อ 1 ล้านโทเค็น&lt;/p&gt;

&lt;h3&gt;
  
  
  ทำไม Flash เป็น 3.6 แต่ Lite และ Cyber เป็น 3.5?
&lt;/h3&gt;

&lt;p&gt;ในการอัปเดตนี้ Google ปรับปรุงเฉพาะ Flash รุ่นหลักเป็น 3.6 ส่วน Flash-Lite และ Flash Cyber เปิดตัวในเวอร์ชัน 3.5 หมายเลขเวอร์ชันไม่ได้เรียงเหมือนกันทุก tier ดังนั้นให้ตรวจสอบ model ID ที่ใช้จริง&lt;/p&gt;

&lt;h3&gt;
  
  
  ค่าใช้จ่ายจะลดลง 31% เสมอหรือไม่?
&lt;/h3&gt;

&lt;p&gt;ไม่ ตัวเลข 31% เป็นตัวอย่างสำหรับ workload ที่มีเอาต์พุตสูง การประหยัดจริงขึ้นอยู่กับอัตราส่วน input/output ของคุณ งานที่สร้างเอาต์พุตจำนวนมากจะเห็นผลมากกว่า งานที่เน้นอ่านข้อมูลจะเห็นผลน้อยกว่า&lt;/p&gt;

&lt;h3&gt;
  
  
  Gemini 3.5 Flash ยังใช้งานได้หรือไม่?
&lt;/h3&gt;

&lt;p&gt;ใช่ ยังใช้ผ่าน API ได้ หากคุณตรวจสอบ 3.5 Flash ใน production แล้วแต่ยังไม่มีเวลาทดสอบซ้ำ การตรึงเวอร์ชันเดิมเป็นทางเลือกที่เหมาะสมในระยะสั้น วางแผนย้ายในช่วงทดสอบถัดไป&lt;/p&gt;

&lt;p&gt;สำหรับรุ่นก่อนหน้า ดู &lt;a href="https://apidog.com/th/blog/what-is-gemini-3-5?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Gemini 3.5 คืออะไร&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;สำหรับทีมส่วนใหญ่ ขั้นตอนที่เหมาะสมคือเปลี่ยน model ID เป็น &lt;code&gt;gemini-3.6-flash&lt;/code&gt; รัน evaluation และ regression test ใน Apidog จากนั้น rollout อย่างควบคุมได้ เก็บ 3.5 Flash ไว้เฉพาะเมื่อข้อจำกัดด้านการตรวจสอบยังไม่อนุญาตให้ย้ายเท่านั้น&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Gemini 3.5 Flash-Lite คืออะไร</title>
      <dc:creator>Thanawat Wongchai</dc:creator>
      <pubDate>Wed, 22 Jul 2026 06:32:12 +0000</pubDate>
      <link>https://dev.to/thanawat_wonchai/gemini-35-flash-lite-khuueaair-3o7l</link>
      <guid>https://dev.to/thanawat_wonchai/gemini-35-flash-lite-khuueaair-3o7l</guid>
      <description>&lt;p&gt;Google อัปเดต Flash tier เมื่อวันที่ 21 กรกฎาคม 2026 โดย &lt;strong&gt;Gemini 3.5 Flash-Lite&lt;/strong&gt; เป็นโมเดล Gemini ที่ถูกที่สุดและเร็วที่สุดในกลุ่มนี้ เหมาะกับงานปริมาณสูงและความหน่วงต่ำ เช่น classification, extraction, แชทสั้น และคำตอบแบบ retrieval ง่ายๆ หากระบบของคุณต้องประมวลผลคำขอขนาดเล็กหลายล้านรายการต่อวัน โมเดลนี้ถูกออกแบบมาสำหรับ hot path ที่เน้น throughput และต้นทุนมากกว่าการให้เหตุผลเชิงลึก&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;ลองใช้ Apidog วันนี้&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;การอัปเดตนี้มีโมเดลพร้อมกัน 3 รุ่น ได้แก่ Gemini 3.6 Flash, Gemini 3.5 Flash-Lite และ Gemini 3.5 Flash Cyber ดังนั้นก่อนนำไปใช้จริง ควรตรวจสอบทั้งชื่อโมเดล ราคา และลักษณะงานให้ตรงกัน&lt;/p&gt;

&lt;h2&gt;
  
  
  Gemini 3.5 Flash-Lite คืออะไร?
&lt;/h2&gt;

&lt;p&gt;Gemini 3.5 Flash-Lite เป็นโมเดลขนาดเล็กและราคาประหยัดในตระกูล Gemini ของ Google โดยปรับแต่งมาเพื่อความเร็วและปริมาณงานสูง ไม่ได้มุ่งเน้นงาน reasoning ที่ซับซ้อนที่สุด&lt;/p&gt;

&lt;p&gt;Google ระบุว่ารุ่นนี้สร้างเอาต์พุตได้ประมาณ &lt;strong&gt;350 โทเค็นต่อวินาที&lt;/strong&gt; และเรียกใช้งานผ่าน Gemini API ด้วยรหัสโมเดล:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gemini-3.5-flash-lite
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9mswyctqzhjt4au2464p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9mswyctqzhjt4au2464p.png" alt="Gemini 3.5 Flash-Lite" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ตัวอย่างงานที่เหมาะกับ Flash-Lite:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ติดแท็กหรือจัดหมวดหมู่ support tickets&lt;/li&gt;
&lt;li&gt;ดึงข้อมูลแบบมีโครงสร้างจากข้อความหรือเอกสาร&lt;/li&gt;
&lt;li&gt;สรุปคำตอบสั้นๆ จากข้อมูลที่ค้นคืนมา&lt;/li&gt;
&lt;li&gt;สร้างแชทวิดเจ็ตที่ต้องตอบกลับเร็ว&lt;/li&gt;
&lt;li&gt;ตรวจสอบหรือแปลงข้อความจำนวนมากใน background jobs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhggfg2nvnw3qa5cybok9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhggfg2nvnw3qa5cybok9.png" alt="ตัวอย่างการใช้งาน Gemini Flash-Lite" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;รุ่นนี้เปิดตัวพร้อมกับ Gemini 3.6 Flash ซึ่งเป็นโมเดลหลักใหม่ และ Gemini 3.5 Flash Cyber ซึ่งเป็นโมเดลความปลอดภัยแบบมีเกต ดูข้อมูลเพิ่มเติมได้จาก&lt;a href="https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-6-flash-3-5-flash-lite-3-5-flash-cyber/" rel="noopener noreferrer"&gt;บล็อกของ Google&lt;/a&gt; และ&lt;a href="https://deepmind.google/models/gemini/flash/" rel="noopener noreferrer"&gt;หน้า DeepMind Flash&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  เดี๋ยวก่อน ทำไมถึงเป็น 3.5 ไม่ใช่ 3.6?
&lt;/h2&gt;

&lt;p&gt;จุดที่ทำให้สับสนคือโมเดลหลักใช้ชื่อ &lt;strong&gt;Gemini 3.6 Flash&lt;/strong&gt; แต่ Flash-Lite และ Flash Cyber ยังคงใช้หมายเลขเวอร์ชัน 3.5&lt;/p&gt;

&lt;p&gt;นี่ไม่ใช่การพิมพ์ผิด Google กำหนดหมายเลขเวอร์ชันตามสายผลิตภัณฑ์ของแต่ละโมเดล ไม่ได้กำหนดตามวันที่เปิดตัว ดังนั้นในการเปิดตัวเดียวกันจึงมีทั้งรุ่น 3.6 และ 3.5&lt;/p&gt;

&lt;p&gt;อีกจุดที่ควรตรวจสอบคือ Gemini 3.5 Flash-Lite ไม่ใช่&lt;a href="https://apidog.com/th/blog/gemini-3-1-flash-lite?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Gemini 3.1 Flash-Lite&lt;/a&gt; รุ่นก่อนหน้า แม้ชื่อจะคล้ายกัน แต่เป็นคนละโมเดล&lt;/p&gt;

&lt;p&gt;ก่อน deploy ให้ตรวจสอบ model ID ในโค้ดเสมอ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gemini-3.5-flash-lite&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ข้อมูลจำเพาะและราคา
&lt;/h2&gt;

&lt;p&gt;ราคาต่อไปนี้คิดต่อล้านโทเค็นผ่าน Gemini API:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;คุณสมบัติ&lt;/th&gt;
&lt;th&gt;ค่า&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;รหัสโมเดล&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gemini-3.5-flash-lite&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ราคาอินพุต&lt;/td&gt;
&lt;td&gt;$0.30 / 1M tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ราคาเอาต์พุต&lt;/td&gt;
&lt;td&gt;$2.50 / 1M tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ความเร็ว&lt;/td&gt;
&lt;td&gt;~350 output tokens/second&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ระดับฟรี&lt;/td&gt;
&lt;td&gt;มีผ่าน Google AI Studio โดยมี rate limit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context Caching&lt;/td&gt;
&lt;td&gt;$0.03 / 1M tokens + $1.00 / 1M/hr storage&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Flash-Lite มีราคาอินพุต $0.30 และเอาต์พุต $2.50 ต่อหนึ่งล้านโทเค็น ขณะที่ Gemini 3.6 Flash มีราคาอินพุต $1.50 และเอาต์พุต $7.50&lt;/p&gt;

&lt;p&gt;สำหรับระบบที่ประมวลผลคำขอจำนวนมาก ความต่างนี้ส่งผลโดยตรงต่อต้นทุนรายเดือน โดยเฉพาะ workload ที่มี prompt สั้นและเรียกใช้งานบ่อย&lt;/p&gt;

&lt;p&gt;ตรวจสอบราคาปัจจุบันก่อนนำไปใช้จริงได้จาก&lt;a href="https://ai.google.dev/gemini-api/docs/pricing" rel="noopener noreferrer"&gt;เอกสารราคา Gemini API&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ใช้ Context Caching เมื่อมี prompt ซ้ำ
&lt;/h3&gt;

&lt;p&gt;หากระบบส่ง system prompt, กฎการจัดประเภท หรือเอกสารอ้างอิงชุดเดิมซ้ำๆ ให้พิจารณาใช้ Context Caching เพื่อลดต้นทุนของอินพุตที่ใช้ซ้ำ&lt;/p&gt;

&lt;p&gt;กรณีที่เหมาะกับ caching:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;system prompt ที่ใช้กับทุกคำขอ&lt;/li&gt;
&lt;li&gt;คู่มือผลิตภัณฑ์ขนาดยาว&lt;/li&gt;
&lt;li&gt;policy สำหรับตรวจสอบข้อความ&lt;/li&gt;
&lt;li&gt;schema หรือคำอธิบายฟิลด์สำหรับ extraction&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ประสิทธิภาพเป็นอย่างไร?
&lt;/h2&gt;

&lt;p&gt;Gemini 3.5 Flash-Lite ได้คะแนน &lt;strong&gt;54% ใน Terminal-Bench 2.1&lt;/strong&gt; เพิ่มขึ้นจาก 31% ของรุ่นก่อนหน้า ซึ่งเป็นการปรับปรุงที่สำคัญสำหรับโมเดลระดับ Lite&lt;/p&gt;

&lt;p&gt;งานที่เหมาะสมที่สุดคือ:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Classification&lt;/strong&gt; — เช่น แยก ticket เป็น billing, bug, feature request หรือ urgent&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extraction&lt;/strong&gt; — เช่น ดึงชื่อ อีเมล หมายเลขคำสั่งซื้อ และวันที่จากข้อความ&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Short chat responses&lt;/strong&gt; — เช่น ตอบคำถามสั้นจาก FAQ&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simple RAG&lt;/strong&gt; — เช่น ตอบคำถามจากเอกสารที่ retrieval system ดึงมาให้แล้ว&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ตัวอย่าง prompt สำหรับ extraction:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ดึงข้อมูลต่อไปนี้จากข้อความ และตอบกลับเป็น JSON เท่านั้น:
- customer_name
- order_id
- issue_type
- urgency

ข้อความ:
"คุณสมชายแจ้งว่าคำสั่งซื้อ ORD-10482 ยังไม่ได้รับสินค้า และต้องการคำตอบภายในวันนี้"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ตัวอย่างผลลัพธ์ที่ควรตรวจสอบในแอปพลิเคชัน:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"customer_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"คุณสมชาย"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"order_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ORD-10482"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"issue_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"delivery_delay"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"urgency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"high"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ข้อจำกัดสำคัญคือ Flash-Lite แลกคุณภาพ reasoning กับราคาและความเร็ว จึงไม่ใช่ตัวเลือกหลักสำหรับ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;งาน agentic coding ที่ซับซ้อน&lt;/li&gt;
&lt;li&gt;tool calling หลายขั้นตอน&lt;/li&gt;
&lt;li&gt;การวางแผนที่ต้องมีเหตุผลต่อเนื่อง&lt;/li&gt;
&lt;li&gt;การวิเคราะห์ codebase ขนาดใหญ่&lt;/li&gt;
&lt;li&gt;งานที่คำตอบผิดมีต้นทุนสูง&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;สำหรับงานประเภทนี้ ให้พิจารณาใช้&lt;a href="https://apidog.com/th/blog/what-is-gemini-3-6-flash?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Gemini 3.6 Flash&lt;/a&gt; หรือโมเดลที่ใหญ่กว่าแทน&lt;/p&gt;

&lt;h2&gt;
  
  
  Google ใช้ Flash-Lite ที่ไหนบ้าง
&lt;/h2&gt;

&lt;p&gt;Google นำ Flash-Lite ไปใช้กับ Google Search ด้วย ซึ่งเป็นสัญญาณว่าโมเดลนี้ถูกออกแบบมาให้รองรับการประมวลผลจำนวนมากได้จริง&lt;/p&gt;

&lt;p&gt;สำหรับนักพัฒนา สิ่งที่ควรนำไปใช้คือแนวคิดเดียวกัน:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ใช้โมเดลราคาต่ำกับคำขอที่เกิดบ่อย&lt;/li&gt;
&lt;li&gt;จำกัดขนาด prompt และ output ให้เหมาะกับงาน&lt;/li&gt;
&lt;li&gt;แยกงานง่ายออกจากงาน reasoning หนัก&lt;/li&gt;
&lt;li&gt;ตรวจสอบคุณภาพด้วยชุดทดสอบจริงของระบบ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;หากโมเดลรองรับ workload ระดับ search ได้ ก็เหมาะกับ pipeline เช่น ticket classification, document extraction และ lightweight RAG เช่นกัน&lt;/p&gt;

&lt;h2&gt;
  
  
  Flash-Lite vs Gemini 3.6 Flash: คุณควรเลือกโมเดลไหนดี?
&lt;/h2&gt;

&lt;p&gt;เลือก &lt;strong&gt;Gemini 3.5 Flash-Lite&lt;/strong&gt; เมื่อ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;งานมีรูปแบบชัดเจน&lt;/li&gt;
&lt;li&gt;ต้องประมวลผลจำนวนมาก&lt;/li&gt;
&lt;li&gt;ต้องการ latency ต่ำ&lt;/li&gt;
&lt;li&gt;ต้องควบคุมต้นทุนต่อคำขอ&lt;/li&gt;
&lt;li&gt;งานเป็น classification, extraction หรือ short-form response&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;เลือก &lt;strong&gt;Gemini 3.6 Flash&lt;/strong&gt; เมื่อ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;งานต้อง reasoning หลายขั้นตอน&lt;/li&gt;
&lt;li&gt;ต้องเขียนหรือแก้ไขโค้ด&lt;/li&gt;
&lt;li&gt;ต้องเรียกใช้ tools เป็นลำดับ&lt;/li&gt;
&lt;li&gt;input มีความคลุมเครือสูง&lt;/li&gt;
&lt;li&gt;ความถูกต้องสำคัญกว่าต้นทุนต่อคำขอ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;แนวทางที่ใช้งานได้จริงคือ &lt;strong&gt;routing ตามความยากของงาน&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;คำขอทั่วไป / ปริมาณสูง
        ↓
Gemini 3.5 Flash-Lite

คำขอซับซ้อน / ต้อง reasoning หรือ coding
        ↓
Gemini 3.6 Flash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ตัวอย่างเช่น ระบบ support อาจส่ง ticket ทั่วไปไปยัง Flash-Lite ก่อน แล้วส่งต่อเฉพาะเคสที่มีความเสี่ยงสูงหรืออธิบายไม่ชัดเจนไปยัง 3.6 Flash&lt;/p&gt;

&lt;p&gt;ดูรายละเอียดราคาเพิ่มเติมได้ที่&lt;a href="https://apidog.com/th/blog/gemini-3-6-flash-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ราคาของ 3.6 Flash&lt;/a&gt; และเปรียบเทียบเชิงลึกได้ที่&lt;a href="https://apidog.com/th/blog/gemini-3-5-flash-lite-vs-3-6-flash?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Gemini 3.5 Flash-Lite vs 3.6 Flash&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  วิธีเข้าถึงและทดสอบ
&lt;/h2&gt;

&lt;p&gt;Flash-Lite ใช้งานผ่าน Gemini API เริ่มต้นได้เร็วที่สุดผ่าน&lt;a href="https://aistudio.google.com" rel="noopener noreferrer"&gt;Google AI Studio&lt;/a&gt; เพื่อสร้าง API key และทดลองใช้ใน free tier&lt;/p&gt;

&lt;p&gt;ตั้งค่า model เป็น:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gemini-3.5-flash-lite
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ตัวอย่างคำขอ &lt;code&gt;POST&lt;/code&gt; ด้วย cURL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s2"&gt;"https://generativelanguage.googleapis.com/v1beta/models/gemini-3.5-flash-lite:generateContent?key=&lt;/span&gt;&lt;span class="nv"&gt;$GEMINI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "contents": [
      {
        "parts": [
          {
            "text": "จัดหมวดหมู่ข้อความนี้เป็น billing, technical หรือ general: ฉันถูกเรียกเก็บเงินซ้ำ"
          }
        ]
      }
    ]
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;อย่า hardcode API key ลงใน source code ให้เก็บไว้ใน environment variable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;GEMINI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your-api-key"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ระดับฟรีเหมาะกับการทดสอบเบื้องต้น แต่มีการจำกัดอัตรา และ Google อาจใช้ข้อมูลจากระดับฟรีเพื่อปรับปรุงผลิตภัณฑ์ ดังนั้นไม่ควรส่งข้อมูลละเอียดอ่อนผ่านคีย์ระดับฟรี&lt;/p&gt;

&lt;p&gt;อ่านรูปแบบ request และ response เพิ่มเติมได้จาก&lt;a href="https://ai.google.dev/gemini-api/docs" rel="noopener noreferrer"&gt;เอกสาร Gemini API&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  สร้าง regression test สำหรับ endpoint
&lt;/h3&gt;

&lt;p&gt;หลังจากคำขอทำงานแล้ว ให้บันทึกเป็น regression test เพื่อตรวจจับปัญหาจากการเปลี่ยนแปลงของ API, rate limit หรือรูปแบบ response&lt;/p&gt;

&lt;p&gt;ด้วย&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; คุณสามารถ:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;สร้างคำขอ &lt;code&gt;POST&lt;/code&gt; ไปยัง Gemini API&lt;/li&gt;
&lt;li&gt;เก็บ API key เป็น environment variable&lt;/li&gt;
&lt;li&gt;ตรวจสอบ status code เช่น &lt;code&gt;200&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;ตรวจสอบว่า response มีฟิลด์ JSON ที่แอปต้องใช้&lt;/li&gt;
&lt;li&gt;บันทึกคำขอเป็น regression test&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://apidog.com/th/blog/how-to-schedule-api-tests-apidog?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ตั้งเวลาให้รัน&lt;/a&gt; เพื่อพบปัญหาก่อนผู้ใช้&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ตัวอย่าง assertions ที่ควรมี:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Status code ต้องเป็น 200
Response ต้องมี candidates
Response ต้องมีข้อความตอบกลับ
Response ต้องไม่ว่างเปล่า
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Apidog ไม่ได้รันโมเดลแทน Gemini API แต่ช่วยให้คุณเรียกใช้งาน ตรวจสอบ และทดสอบ endpoint &lt;code&gt;gemini-3.5-flash-lite&lt;/code&gt; ร่วมกับ API อื่นใน stack ได้&lt;/p&gt;

&lt;h2&gt;
  
  
  คำถามที่พบบ่อย
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Gemini 3.5 Flash-Lite เหมือนกับ Gemini 3.6 Flash หรือไม่?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ไม่เหมือน ทั้งสองเป็นคนละโมเดลจากการอัปเดตวันที่ 21 กรกฎาคม 2026 Flash-Lite เน้นงานง่าย ปริมาณมาก และราคาต่ำ ส่วน 3.6 Flash เหมาะกับ reasoning, coding และงาน agent ที่ซับซ้อนกว่า&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ทำไม Flash-Lite ใช้เวอร์ชัน 3.5 ไม่ใช่ 3.6?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Google กำหนดหมายเลขเวอร์ชันตามสายผลิตภัณฑ์ของโมเดล ไม่ได้กำหนดจากวันที่เปิดตัว รุ่น Flash หลักจึงเป็น 3.6 ขณะที่ Flash-Lite และ Flash Cyber ยังคงอยู่ที่ 3.5&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gemini 3.5 Flash-Lite คือ Gemini 3.1 Flash-Lite รุ่นเก่าหรือไม่?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ไม่ใช่ เป็นโมเดลใหม่คนละเวอร์ชัน ตรวจสอบ model ID ให้แน่ใจว่าใช้:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gemini-3.5-flash-lite
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Gemini 3.5 Flash-Lite ฟรีหรือไม่?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;มี free tier ผ่าน Google AI Studio พร้อม rate limit เหมาะสำหรับการทดลองและพัฒนาเบื้องต้น สำหรับ workload ระดับ production ที่มีปริมาณสูง ควรใช้ API key แบบชำระเงิน&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flash-Lite เหมาะกับงานใดมากที่สุด?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;เหมาะกับ classification, extraction, แชทสั้น และ retrieval-augmented answers แบบง่ายที่ต้องประมวลผลจำนวนมากและตอบกลับเร็ว ไม่เหมาะกับงาน coding ซับซ้อนหรือ reasoning หลายขั้นตอนยาวๆ&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Gemini 3.6 Flash ราคาปี 2026: ค่าใช้จ่ายจริงเท่าไร</title>
      <dc:creator>Thanawat Wongchai</dc:creator>
      <pubDate>Wed, 22 Jul 2026 05:21:34 +0000</pubDate>
      <link>https://dev.to/thanawat_wonchai/gemini-36-flash-raakhaapii-2026-khaaaichcchaaycchringethaaair-2jgj</link>
      <guid>https://dev.to/thanawat_wonchai/gemini-36-flash-raakhaapii-2026-khaaaichcchaaycchringethaaair-2jgj</guid>
      <description>&lt;p&gt;Gemini 3.6 Flash มีค่าใช้จ่าย 1.50 ดอลลาร์ต่อโทเค็นนำเข้า 1 ล้านโทเค็น และ 7.50 ดอลลาร์ต่อโทเค็นส่งออก 1 ล้านโทเค็น ซึ่งถูกกว่าโมเดลที่เข้ามาแทนที่ Google เปิดตัวเวอร์ชันปรับปรุงเมื่อวันที่ 21 กรกฎาคม 2026 สำหรับทีมที่ต้องติดตามบิล API นี่คือข่าวดี: Flash ระดับเรือธงทำงานเร็วขึ้นและมีราคาถูกลงพร้อมกัน&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;ลองใช้ Apidog วันนี้&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;คู่มือนี้สรุปตัวเลขสำหรับวางแผนงบประมาณ ได้แก่ อัตราต่อโทเค็น, ค่าใช้จ่ายของ context caching, ขอบเขตแพ็กเกจฟรี และตัวอย่างคำนวณค่าใช้จ่ายรายเดือนก่อนเริ่มเขียนโค้ด ตัวเลขทั้งหมดอ้างอิงจาก&lt;a href="https://ai.google.dev/gemini-api/docs/pricing" rel="noopener noreferrer"&gt;เอกสารราคา Gemini API&lt;/a&gt; ของ Google และ&lt;a href="https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-6-flash-3-5-flash-lite-3-5-flash-cyber/" rel="noopener noreferrer"&gt;ประกาศเปิดตัว&lt;/a&gt; หากต้องการดูภาพรวมโมเดลก่อน อ่าน&lt;a href="https://apidog.com/th/blog/what-is-gemini-3-6-flash?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Gemini 3.6 Flash คืออะไร&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;หมายเหตุเรื่องเวอร์ชัน:&lt;/strong&gt; โมเดลหลักข้ามมาเป็น 3.6 แต่ Flash-Lite ระดับราคาต่ำกว่ายังอยู่ที่ 3.5 แม้เปิดตัวพร้อมกัน จึงต้องระวังชื่อโมเดลเมื่อกำหนด routing และคำนวณต้นทุน&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  ราคา Gemini 3.6 Flash โดยสรุป
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;รายการ&lt;/th&gt;
&lt;th&gt;ค่าใช้จ่าย&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;อินพุต&lt;/td&gt;
&lt;td&gt;1.50 ดอลลาร์ต่อ 1 ล้านโทเค็น&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;เอาต์พุต (รวม thinking tokens)&lt;/td&gt;
&lt;td&gt;7.50 ดอลลาร์ต่อ 1 ล้านโทเค็น&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context cache: อ่านอินพุตที่แคชไว้&lt;/td&gt;
&lt;td&gt;0.15 ดอลลาร์ต่อ 1 ล้านโทเค็น&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context cache: จัดเก็บ&lt;/td&gt;
&lt;td&gt;1.00 ดอลลาร์ต่อ 1 ล้านโทเค็นต่อชั่วโมง&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;แพ็กเกจฟรี&lt;/td&gt;
&lt;td&gt;มี ผ่าน Google AI Studio และมีการจำกัดอัตรา&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;มีรายละเอียดสำคัญ 2 ข้อที่ต้องนำไปคิดในระบบ:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;เอาต์พุตรวม thinking tokens แล้ว&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
โทเค็นที่โมเดลใช้ให้เหตุผลก่อนตอบจะถูกคิดที่อัตราเอาต์พุต 7.50 ดอลลาร์ต่อ 1 ล้านโทเค็น ไม่มีค่าใช้จ่ายแยกต่างหาก&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Context caching ไม่ได้ฟรี&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
คุณจ่ายทั้งค่าอ่านข้อมูลที่แคชไว้ในอัตราที่ต่ำกว่า และค่าจัดเก็บรายชั่วโมง ดังนั้น cache จะคุ้มเมื่อมีการใช้ prompt prefix หรือเอกสารอ้างอิงชุดเดิมซ้ำหลายครั้งภายในช่วงเวลาสั้น ๆ&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  เปรียบเทียบกับ Gemini 3.5 Flash
&lt;/h2&gt;

&lt;p&gt;อัตราเอาต์พุตลดจาก 9.00 ดอลลาร์ต่อ 1 ล้านโทเค็นใน Gemini 3.5 Flash เหลือ 7.50 ดอลลาร์ใน Gemini 3.6 Flash หรือถูกลงประมาณ 17% ต่อโทเค็นเอาต์พุต&lt;/p&gt;

&lt;p&gt;แต่ผลประหยัดไม่ได้มาจากราคาเพียงอย่างเดียว &lt;a href="https://deepmind.google/models/gemini/flash/" rel="noopener noreferrer"&gt;หน้าโมเดล DeepMind Flash&lt;/a&gt; รายงานว่า Gemini 3.6 Flash สร้างโทเค็นเอาต์พุตน้อยลงประมาณ 17% สำหรับงานเดียวกัน เนื่องจากใช้ขั้นตอนการให้เหตุผลและการเรียกใช้เครื่องมือน้อยลงในงานหลายขั้นตอน&lt;/p&gt;

&lt;p&gt;ผลลัพธ์คือคุณได้ทั้ง:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ราคาเอาต์พุตต่อโทเค็นที่ต่ำลง&lt;/li&gt;
&lt;li&gt;จำนวนโทเค็นเอาต์พุตที่ลดลง&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;หากกำลังย้ายระบบจากโมเดลเดิม ให้ดู&lt;a href="https://apidog.com/th/blog/gemini-3-5-flash-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ราคา Gemini 3.5 Flash&lt;/a&gt;ควบคู่กัน และอ่าน&lt;a href="https://apidog.com/th/blog/gemini-3-6-flash-vs-gemini-3-5-flash?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Gemini 3.6 Flash vs 3.5 Flash&lt;/a&gt;เพื่อเปรียบเทียบความสามารถและประสิทธิภาพ&lt;/p&gt;

&lt;h2&gt;
  
  
  แพ็กเกจฟรีให้อะไรบ้าง
&lt;/h2&gt;

&lt;p&gt;Gemini 3.6 Flash มีแพ็กเกจฟรีผ่าน&lt;a href="https://aistudio.google.com" rel="noopener noreferrer"&gt;Google AI Studio&lt;/a&gt; คุณสามารถเรียกใช้โมเดลเพื่อสร้างต้นแบบและทดสอบได้โดยไม่ต้องใช้บัตรเครดิต&lt;/p&gt;

&lt;p&gt;อย่างไรก็ตาม ให้แยกการใช้งานเป็น 2 ระยะชัดเจน:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ระยะ&lt;/th&gt;
&lt;th&gt;ควรใช้แพ็กเกจฟรีหรือไม่&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ทดลอง prompt และสร้าง prototype&lt;/td&gt;
&lt;td&gt;ควรใช้&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ทดสอบ integration ปริมาณน้อย&lt;/td&gt;
&lt;td&gt;ใช้ได้&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Production traffic&lt;/td&gt;
&lt;td&gt;ไม่ควรใช้&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ข้อมูลลูกค้า ข้อมูลลับ หรือข้อมูลกรรมสิทธิ์&lt;/td&gt;
&lt;td&gt;ไม่ควรใช้&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;แพ็กเกจฟรีมีการจำกัดอัตราการใช้งาน และ Google อาจใช้ข้อมูลจากแพ็กเกจฟรีเพื่อปรับปรุงผลิตภัณฑ์ เมื่อเตรียมขึ้น production ให้ย้ายไปใช้คีย์แบบชำระเงิน&lt;/p&gt;

&lt;p&gt;ดูขั้นตอนเริ่มต้นใช้งานได้ที่&lt;a href="https://apidog.com/th/blog/how-to-use-gemini-3-6-flash-for-free?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;วิธีใช้ Gemini 3.6 Flash ฟรี&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  คำนวณค่าใช้จ่ายจริง
&lt;/h2&gt;

&lt;p&gt;สมมติว่าคุณมีเอเจนต์สำหรับค้นคืนข้อมูล ที่ใช้:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;อินพุต 2 ล้านโทเค็นต่อวัน&lt;/li&gt;
&lt;li&gt;เอาต์พุต 500,000 โทเค็นต่อวัน&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;คำนวณต้นทุน Gemini 3.6 Flash ได้ดังนี้:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ค่าอินพุต  = 2,000,000 / 1,000,000 × $1.50
           = $3.00 ต่อวัน

ค่าเอาต์พุต = 500,000 / 1,000,000 × $7.50
            = $3.75 ต่อวัน

รวม        = $6.75 ต่อวัน
รายเดือน   = $6.75 × 30
           = $202.50 ต่อเดือน
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ผลประหยัดเมื่อเทียบกับ Gemini 3.5 Flash
&lt;/h3&gt;

&lt;p&gt;สมมติว่างานเดียวกันสร้างเอาต์พุต 600,000 โทเค็นบน Gemini 3.5 Flash แต่ลดลงเหลือประมาณ 500,000 โทเค็นบน Gemini 3.6 Flash&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;โมเดล&lt;/th&gt;
&lt;th&gt;เอาต์พุตต่อวัน&lt;/th&gt;
&lt;th&gt;ราคาเอาต์พุต&lt;/th&gt;
&lt;th&gt;ค่าเอาต์พุตต่อวัน&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 3.5 Flash&lt;/td&gt;
&lt;td&gt;600,000 โทเค็น&lt;/td&gt;
&lt;td&gt;9.00 ดอลลาร์ / 1M&lt;/td&gt;
&lt;td&gt;5.40 ดอลลาร์&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 3.6 Flash&lt;/td&gt;
&lt;td&gt;500,000 โทเค็น&lt;/td&gt;
&lt;td&gt;7.50 ดอลลาร์ / 1M&lt;/td&gt;
&lt;td&gt;3.75 ดอลลาร์&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;ต่างกัน 1.65 ดอลลาร์ต่อวัน หรือประมาณ 49.50 ดอลลาร์ต่อเดือนเฉพาะค่าเอาต์พุต&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;($5.40 - $3.75) / $5.40 × 100 = 30.6%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;แม้ทั้งราคาและจำนวนโทเค็นจะลดลงราว 17% แต่เมื่อทั้งสองปัจจัยคูณกัน ค่าเอาต์พุตจริงจึงลดลงได้ประมาณ 31%&lt;/p&gt;

&lt;h2&gt;
  
  
  Flash-Lite ถูกกว่าอีกสำหรับงานง่าย
&lt;/h2&gt;

&lt;p&gt;หาก workload ของคุณไม่ต้องใช้ reasoning ซับซ้อน Gemini 3.5 Flash-Lite เป็นตัวเลือกต้นทุนต่ำกว่า:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;รายการ&lt;/th&gt;
&lt;th&gt;Gemini 3.5 Flash-Lite&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;อินพุต&lt;/td&gt;
&lt;td&gt;0.30 ดอลลาร์ต่อ 1 ล้านโทเค็น&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;เอาต์พุต&lt;/td&gt;
&lt;td&gt;2.50 ดอลลาร์ต่อ 1 ล้านโทเค็น&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;อ่าน context cache&lt;/td&gt;
&lt;td&gt;0.03 ดอลลาร์ต่อ 1 ล้านโทเค็น&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;จัดเก็บ context cache&lt;/td&gt;
&lt;td&gt;1.00 ดอลลาร์ต่อ 1 ล้านโทเค็นต่อชั่วโมง&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ความเร็วเอาต์พุต&lt;/td&gt;
&lt;td&gt;ประมาณ 350 โทเค็นต่อวินาที&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;สำหรับปริมาณงานเดิม:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;อินพุต 2 ล้านโทเค็นต่อวัน&lt;/li&gt;
&lt;li&gt;เอาต์พุต 500,000 โทเค็นต่อวัน
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ค่าอินพุต  = 2 × $0.30 = $0.60
ค่าเอาต์พุต = 0.5 × $2.50 = $1.25
รวม        = $1.85 ต่อวัน
รายเดือน   = $55.50 ต่อเดือน
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;คิดเป็นต้นทุนต่ำกว่า Gemini 3.6 Flash ราว 70% เมื่อใช้จำนวนโทเค็นเท่ากัน&lt;/p&gt;

&lt;p&gt;เลือก Flash-Lite สำหรับงาน เช่น:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;การจัดหมวดหมู่&lt;/li&gt;
&lt;li&gt;การดึงข้อมูล&lt;/li&gt;
&lt;li&gt;การกำหนดเส้นทางคำขอ&lt;/li&gt;
&lt;li&gt;การตอบแบบ structured output สั้น ๆ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ส่วน Gemini 3.6 Flash เหมาะกับงานที่ต้องใช้ reasoning หลายขั้นตอนมากกว่า อ่านเพิ่มได้ที่&lt;a href="https://apidog.com/th/blog/what-is-gemini-3-5-flash-lite?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Gemini 3.5 Flash-Lite คืออะไร&lt;/a&gt;และ&lt;a href="https://apidog.com/th/blog/gemini-3-5-flash-lite-vs-3-6-flash?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Gemini 3.5 Flash-Lite vs 3.6 Flash&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  วิธีควบคุมและวัดค่าใช้จ่าย
&lt;/h2&gt;

&lt;p&gt;ใช้ 4 แนวทางนี้ในการควบคุมบิล API&lt;/p&gt;

&lt;h3&gt;
  
  
  1. แคช context ที่ใช้ซ้ำ
&lt;/h3&gt;

&lt;p&gt;หากทุกคำขอมี system prompt ยาว ๆ หรือเอกสารอ้างอิงชุดเดิม ให้ใช้ context caching&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;อินพุตปกติ:       $1.50 / 1M tokens
อ่านจาก cache:    $0.15 / 1M tokens
ค่าจัดเก็บ cache: $1.00 / 1M tokens / ชั่วโมง
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ก่อนเปิด cache ให้ประเมินจำนวนครั้งที่จะ reuse context เดิม เพราะการแคชคุ้มสำหรับ prefix ที่ถูกเรียกซ้ำบ่อย ไม่ใช่ข้อมูลที่ใช้เพียงครั้งเดียว&lt;/p&gt;

&lt;h3&gt;
  
  
  2. ตัด prompt และจำกัดเอาต์พุต
&lt;/h3&gt;

&lt;p&gt;เอาต์พุตมีราคาแพงกว่าอินพุต 5 เท่า จึงควร:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ตัดข้อมูลอ้างอิงที่ไม่เกี่ยวข้องออกจาก prompt&lt;/li&gt;
&lt;li&gt;ส่งเฉพาะ document chunk ที่จำเป็น&lt;/li&gt;
&lt;li&gt;จำกัดจำนวนโทเค็นเอาต์พุตสูงสุด&lt;/li&gt;
&lt;li&gt;บังคับรูปแบบคำตอบให้สั้นและมีโครงสร้างเมื่อเหมาะสม&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ตัวอย่าง prompt ที่กระชับ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;สรุปเอกสารต่อไปนี้เป็น JSON โดยมีฟิลด์:
- summary: ไม่เกิน 100 คำ
- risks: รายการไม่เกิน 5 ข้อ
- next_actions: รายการไม่เกิน 3 ข้อ
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Route งานตามความซับซ้อน
&lt;/h3&gt;

&lt;p&gt;อย่าใช้โมเดลเดียวกับทุก endpoint ให้แยกเส้นทางงาน เช่น:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;classification / extraction / routing
  -&amp;gt; Gemini 3.5 Flash-Lite

multi-step reasoning / agent workflow / complex analysis
  -&amp;gt; Gemini 3.6 Flash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;การทำ model routing แบบผสมมักลดต้นทุนได้มากกว่าการพยายามเลือกโมเดลเดียวที่เหมาะกับทุกงาน&lt;/p&gt;

&lt;h3&gt;
  
  
  4. เก็บค่า &lt;code&gt;usageMetadata&lt;/code&gt; จากทุกคำขอ
&lt;/h3&gt;

&lt;p&gt;อย่าคาดการณ์จาก prompt เพียงอย่างเดียว ให้บันทึก &lt;code&gt;usageMetadata&lt;/code&gt; จาก response ของ Gemini ทุกครั้ง เพราะนี่คือข้อมูลที่บอกจำนวนโทเค็นจริงที่ใช้ในการเรียก API&lt;/p&gt;

&lt;p&gt;โครงสร้างการเก็บข้อมูลในระบบอาจเป็นแบบนี้:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;usage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;usageMetadata&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;inputTokens&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;usage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;promptTokenCount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;outputTokens&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;usage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;candidatesTokenCount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;totalTokens&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;usage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;totalTokenCount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;นำข้อมูลนี้ไปเก็บในระบบ observability หรือฐานข้อมูล แล้วคำนวณต้นทุนต่อ endpoint, ต่อผู้ใช้ หรือแต่ละ workflow ได้&lt;/p&gt;

&lt;p&gt;ตัวอย่างสูตรคำนวณ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;inputCost&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;inputTokens&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="nx"&gt;_000_000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;1.5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;outputCost&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;outputTokens&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="nx"&gt;_000_000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;7.5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;totalCost&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;inputCost&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;outputCost&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ทดสอบงบประมาณ API ก่อนขึ้น production
&lt;/h2&gt;

&lt;p&gt;ใน&lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;คุณสามารถสร้างคำขอ &lt;code&gt;POST&lt;/code&gt; ไปยัง Gemini API, เก็บ API key ใน environment variables และทดสอบด้วย prompt จริงของระบบได้&lt;/p&gt;

&lt;p&gt;แนวทางที่ใช้งานได้จริง:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;สร้าง request สำหรับ workflow หลักแต่ละเส้นทาง&lt;/li&gt;
&lt;li&gt;ใช้ environment variable เก็บ API key แทนการใส่คีย์ลงใน request&lt;/li&gt;
&lt;li&gt;ส่ง prompt ที่ใกล้เคียง production มากที่สุด&lt;/li&gt;
&lt;li&gt;ตรวจสอบ &lt;code&gt;usageMetadata&lt;/code&gt; ใน response&lt;/li&gt;
&lt;li&gt;เพิ่ม assertion เพื่อป้องกัน token usage เพิ่มขึ้นโดยไม่ตั้งใจ&lt;/li&gt;
&lt;li&gt;ตั้ง schedule ให้รันทดสอบเป็นระยะเพื่อตรวจจับต้นทุนที่เพิ่มขึ้น&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ตัวอย่างแนวคิดของ assertion:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ทำให้การทดสอบล้มเหลวหากเอาต์พุตสูงเกินงบที่ตั้งไว้&lt;/span&gt;
&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;usageMetadata&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;candidatesTokenCount&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toBeLessThan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;วิธีนี้ช่วยป้องกันกรณีที่แก้ prompt แล้วเอาต์พุตเพิ่มเป็นสองเท่าโดยไม่มีใครสังเกต จนบิล production เพิ่มขึ้นตามไปด้วย&lt;/p&gt;

&lt;p&gt;คุณสามารถ&lt;a href="https://apidog.com/th/blog/how-to-schedule-api-tests-apidog?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;กำหนดเวลาทดสอบ API&lt;/a&gt;เพื่อตรวจจับการเปลี่ยนแปลงได้ตั้งแต่เนิ่น ๆ หรือ&lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ดาวน์โหลด Apidog&lt;/a&gt;เพื่อทดสอบ Gemini endpoint ก่อนนำระบบขึ้น production&lt;/p&gt;

&lt;h2&gt;
  
  
  คำถามที่พบบ่อย
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Gemini 3.6 Flash มีค่าใช้จ่ายเท่าไรต่อ 1 ล้านโทเค็น?
&lt;/h3&gt;

&lt;p&gt;อินพุตราคา 1.50 ดอลลาร์ต่อ 1 ล้านโทเค็น และเอาต์พุตราคา 7.50 ดอลลาร์ต่อ 1 ล้านโทเค็น การอ่าน context cache ราคา 0.15 ดอลลาร์ต่อ 1 ล้านโทเค็น พร้อมค่าจัดเก็บ 1.00 ดอลลาร์ต่อ 1 ล้านโทเค็นต่อชั่วโมง&lt;/p&gt;

&lt;h3&gt;
  
  
  ราคาเอาต์พุตรวม thinking tokens หรือไม่?
&lt;/h3&gt;

&lt;p&gt;รวมแล้ว โทเค็นที่โมเดลใช้ให้เหตุผลก่อนตอบถูกคิดรวมในอัตราเอาต์พุต 7.50 ดอลลาร์ต่อ 1 ล้านโทเค็น ดังนั้น reasoning ที่มากขึ้นหมายถึงค่าใช้จ่ายเอาต์พุตที่สูงขึ้น&lt;/p&gt;

&lt;h3&gt;
  
  
  มีแพ็กเกจฟรีหรือไม่?
&lt;/h3&gt;

&lt;p&gt;มี ผ่าน Google AI Studio แต่มีการจำกัดอัตราการใช้งาน เหมาะสำหรับ prototype และการทดสอบ ไม่เหมาะกับ production หรือข้อมูลละเอียดอ่อน&lt;/p&gt;

&lt;h3&gt;
  
  
  Gemini 3.6 Flash ถูกกว่า 3.5 Flash หรือไม่?
&lt;/h3&gt;

&lt;p&gt;ถูกกว่า อัตราเอาต์พุตลดจาก 9.00 ดอลลาร์เหลือ 7.50 ดอลลาร์ต่อ 1 ล้านโทเค็น และ Gemini 3.6 Flash ใช้โทเค็นเอาต์พุตน้อยลงประมาณ 17% สำหรับงานเดียวกัน ทำให้ค่าเอาต์พุตจริงลดลงได้ประมาณ 31%&lt;/p&gt;

&lt;h3&gt;
  
  
  ควรใช้ Flash-Lite เมื่อใด?
&lt;/h3&gt;

&lt;p&gt;ใช้เมื่อภารกิจมีปริมาณมากแต่ไม่ซับซ้อน เช่น classification, extraction, routing และ structured response แบบสั้น Flash-Lite มีราคาอินพุต 0.30 ดอลลาร์ และเอาต์พุต 2.50 ดอลลาร์ต่อ 1 ล้านโทเค็น จึงถูกกว่า Gemini 3.6 Flash ราว 70% สำหรับจำนวนโทเค็นเท่ากัน&lt;/p&gt;

&lt;h2&gt;
  
  
  สรุป
&lt;/h2&gt;

&lt;p&gt;วางงบประมาณ Gemini 3.6 Flash ที่:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;1.50 ดอลลาร์ต่อ 1 ล้านโทเค็นอินพุต&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;7.50 ดอลลาร์ต่อ 1 ล้านโทเค็นเอาต์พุต&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;0.15 ดอลลาร์ต่อ 1 ล้านโทเค็นสำหรับ cache read&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1.00 ดอลลาร์ต่อ 1 ล้านโทเค็นต่อชั่วโมงสำหรับ cache storage&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ลดต้นทุนด้วย context caching สำหรับข้อมูลที่ reuse บ่อย, ตัด prompt ให้กระชับ, จำกัดเอาต์พุต, และ route งานง่ายไปยัง Flash-Lite ที่สำคัญที่สุดคือวัด &lt;code&gt;usageMetadata&lt;/code&gt; จากคำขอจริงเสมอ&lt;/p&gt;

&lt;p&gt;สำหรับบริบทการเปลี่ยนแปลงต้นทุนในเวอร์ชันก่อนหน้า ดู&lt;a href="https://apidog.com/th/blog/gemini-3-0-api-cost?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ค่าใช้จ่าย Gemini 3.0 API&lt;/a&gt; และใช้&lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;เพื่อตรวจสอบว่า token budget ที่วางไว้ตรงกับค่าใช้จ่ายจริงใน production.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>วิธีใช้ Gemini 3.6 Flash ฟรี</title>
      <dc:creator>Thanawat Wongchai</dc:creator>
      <pubDate>Wed, 22 Jul 2026 04:21:05 +0000</pubDate>
      <link>https://dev.to/thanawat_wonchai/withiiaich-gemini-36-flash-frii-4jj2</link>
      <guid>https://dev.to/thanawat_wonchai/withiiaich-gemini-36-flash-frii-4jj2</guid>
      <description>&lt;p&gt;คำตอบสั้น ๆ: ได้ คุณสามารถใช้ Gemini 3.6 Flash ได้ฟรีผ่านแอป Gemini หรือบริการ Gemini API ฟรีใน Google AI Studio ทั้งสองทางมีข้อจำกัดด้านโควต้า และบริการ API ฟรีมีเงื่อนไขการใช้ข้อมูลที่ควรตรวจสอบก่อนส่งข้อมูลส่วนตัวหรือข้อมูลสำหรับการผลิต&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;ลองใช้ Apidog วันนี้&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Gemini 3.6 Flash คือโมเดลหลักที่ Google ปรับปรุงใหม่และ &lt;a href="https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-6-flash-3-5-flash-lite-3-5-flash-cyber/" rel="noopener noreferrer"&gt;ประกาศเมื่อวันที่ 21 กรกฎาคม 2026&lt;/a&gt; โดยมีราคาต่ำลงและทำงานเร็วกว่า Gemini 3.5 Flash ที่ถูกแทนที่ จึงเหมาะสำหรับสร้างต้นแบบก่อนเริ่มใช้งานแบบชำระเงิน&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkiaom43zih7zur5k2kj6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkiaom43zih7zur5k2kj6.png" alt="Gemini 3.6 Flash" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  คุณสามารถใช้ Gemini 3.6 Flash ได้ฟรีหรือไม่?
&lt;/h2&gt;

&lt;p&gt;ได้ โดยมี 2 วิธีสำหรับการใช้งานคนละแบบ&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;แอป Gemini&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ใช้สำหรับสนทนาและทดลองโมเดลโดยไม่ต้องเขียนโค้ด เพียงลงชื่อเข้าใช้ด้วยบัญชี Google แล้วเริ่มพิมพ์คำสั่ง&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;บริการ Gemini API ฟรี&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ใช้สำหรับนักพัฒนาที่ต้องการเรียกโมเดลจากแอปของตนเอง สร้าง API key ใน &lt;a href="https://aistudio.google.com" rel="noopener noreferrer"&gt;Google AI Studio&lt;/a&gt; แล้วส่งคำขอผ่าน HTTP หรือ SDK ได้ทันที&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ข้อควรจำเกี่ยวกับชื่อโมเดล:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;โมเดลหลักคือ Gemini &lt;strong&gt;3.6 Flash&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;รุ่นที่ประหยัดกว่าคือ Gemini &lt;strong&gt;3.5 Flash-Lite&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ทั้งสองเปิดตัวพร้อมกันแต่ใช้หมายเลขเวอร์ชันต่างกัน ดูรายละเอียดเพิ่มเติมได้ที่ &lt;a href="https://apidog.com/th/blog/what-is-gemini-3-6-flash?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Gemini 3.6 Flash คืออะไร&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ใช้ Gemini 3.6 Flash ฟรีผ่านแอป Gemini
&lt;/h2&gt;

&lt;p&gt;หากต้องการทดลองโมเดลอย่างรวดเร็ว ให้เปิดแอป Gemini ลงชื่อเข้าใช้ด้วยบัญชี Google แล้วส่งคำถามหรือคำสั่งได้เลย Gemini 3.6 Flash เป็นโมเดลสำหรับงานตอบสนองรวดเร็วและการใช้งานทั่วไป&lt;/p&gt;

&lt;p&gt;เหมาะกับงาน เช่น&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ถามตอบและสรุปข้อมูล&lt;/li&gt;
&lt;li&gt;ร่างอีเมลหรือเอกสาร&lt;/li&gt;
&lt;li&gt;ตรวจสอบตรรกะของโค้ด&lt;/li&gt;
&lt;li&gt;ทดลอง prompt ก่อนนำไปใช้ใน API&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;อย่างไรก็ตาม แอป Gemini ไม่เหมาะกับการรวมเข้ากับผลิตภัณฑ์ เพราะคุณไม่สามารถควบคุม request body, ตั้งค่าพารามิเตอร์ เช่น temperature หรือส่งคำขอแบบอัตโนมัติจำนวนมากได้ หากต้องการสิ่งเหล่านี้ ให้ใช้ API&lt;/p&gt;

&lt;h2&gt;
  
  
  ใช้ Gemini API ฟรีใน Google AI Studio
&lt;/h2&gt;

&lt;p&gt;สำหรับนักพัฒนา ให้เริ่มตามขั้นตอนนี้&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;เปิด &lt;a href="https://aistudio.google.com" rel="noopener noreferrer"&gt;Google AI Studio&lt;/a&gt; และลงชื่อเข้าใช้&lt;/li&gt;
&lt;li&gt;เลือก &lt;strong&gt;รับคีย์ API&lt;/strong&gt; แล้วสร้าง API key&lt;/li&gt;
&lt;li&gt;เก็บ key ไว้ใน environment variable แทนการเขียนลงใน source code&lt;/li&gt;
&lt;li&gt;เรียกโมเดลด้วยรหัส &lt;code&gt;gemini-3.6-flash&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ตัวอย่างคำขอขั้นต่ำด้วย &lt;code&gt;curl&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s2"&gt;"https://generativelanguage.googleapis.com/v1beta/models/gemini-3.6-flash:generateContent"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"x-goog-api-key: &lt;/span&gt;&lt;span class="nv"&gt;$GEMINI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "contents": [
      {
        "parts": [
          {
            "text": "Explain what a REST API is in two sentences."
          }
        ]
      }
    ]
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ก่อนรันคำสั่ง ให้ตั้งค่า environment variable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;GEMINI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"YOUR_API_KEY"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;บริการฟรีรับอินพุตประเภทเดียวกับบริการแบบชำระเงิน ได้แก่ ข้อความ รูปภาพ วิดีโอ เสียง และไฟล์ PDF โดยผลลัพธ์เป็นข้อความ และคุณยังใช้หน้าต่างบริบทขนาด 1M-token ของโมเดลได้&lt;/p&gt;

&lt;p&gt;สำหรับตัวอย่างพารามิเตอร์และแนวทางทดสอบ API เพิ่มเติม โปรดดู &lt;a href="https://apidog.com/th/blog/how-to-use-gemini-3-6-flash-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;วิธีใช้ Gemini 3.6 Flash API&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ข้อจำกัดที่ต้องรู้ก่อนใช้บริการฟรี
&lt;/h2&gt;

&lt;p&gt;คำว่า “ฟรี” ไม่ได้หมายความว่าใช้งานได้ไม่จำกัด โดยมีข้อจำกัดหลัก 2 เรื่อง&lt;/p&gt;

&lt;h3&gt;
  
  
  1. ขีดจำกัดอัตราและโควต้า
&lt;/h3&gt;

&lt;p&gt;บริการฟรีจำกัดจำนวนคำขอต่อนาทีและต่อวัน เมื่อเกินขีดจำกัด API จะตอบกลับด้วย HTTP &lt;code&gt;429 Too Many Requests&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;อย่า hard-code ตัวเลขโควต้าไว้ในระบบ เพราะ Google อาจเปลี่ยนแปลงได้ ตรวจสอบค่าปัจจุบันจาก &lt;a href="https://ai.google.dev/gemini-api/docs" rel="noopener noreferrer"&gt;เอกสาร Gemini API&lt;/a&gt; สำหรับ key ของคุณเสมอ&lt;/p&gt;

&lt;p&gt;แนวทางปฏิบัติ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ใช้บริการฟรีสำหรับการเรียนรู้และสร้างต้นแบบ&lt;/li&gt;
&lt;li&gt;จัดการ HTTP 429 ในโค้ด&lt;/li&gt;
&lt;li&gt;เพิ่ม retry พร้อม exponential backoff&lt;/li&gt;
&lt;li&gt;หลีกเลี่ยงการใช้ free tier รองรับทราฟฟิกจริง&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ตัวอย่าง retry แบบง่ายใน JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;callGeminiWithRetry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;retries&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;attempt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;attempt&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;retries&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;attempt&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="mi"&gt;429&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;delay&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="nx"&gt;attempt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Gemini API rate limit exceeded&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. การใช้ข้อมูล
&lt;/h3&gt;

&lt;p&gt;บริการฟรีมีเงื่อนไขที่ Google อาจใช้ข้อความที่ส่งเข้าไปและผลลัพธ์จากโมเดลเพื่อปรับปรุงผลิตภัณฑ์ของตน&lt;/p&gt;

&lt;p&gt;ดังนั้น อย่าส่งข้อมูลต่อไปนี้ผ่าน free tier:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ข้อมูลลูกค้า&lt;/li&gt;
&lt;li&gt;ความลับหรือ credential&lt;/li&gt;
&lt;li&gt;source code ที่เป็นกรรมสิทธิ์&lt;/li&gt;
&lt;li&gt;ข้อมูลส่วนบุคคล&lt;/li&gt;
&lt;li&gt;ข้อมูลการผลิตที่มีความละเอียดอ่อน&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ให้มองบริการฟรีเป็น sandbox สำหรับทดลอง API และสร้างต้นแบบ ไม่ใช่สภาพแวดล้อมสำหรับข้อมูลจริง หากต้องประมวลผลข้อมูลละเอียดอ่อน ควรพิจารณาย้ายไปใช้บริการแบบชำระเงิน&lt;/p&gt;

&lt;p&gt;แนวทางเดียวกันนี้ใช้กับรุ่นก่อนหน้าเช่นกัน ดูได้จาก &lt;a href="https://apidog.com/th/blog/how-to-use-gemini-3-5-for-free?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;วิธีใช้ Gemini 3.5 ฟรี&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  เมื่อใดควรย้ายไปใช้บริการแบบชำระเงิน
&lt;/h2&gt;

&lt;p&gt;พิจารณาอัปเกรดเมื่อเกิดกรณีต่อไปนี้&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ต้องการโควต้าสูงขึ้น&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
แอปจริงมักชน rate limit ของ free tier ได้เร็ว บริการแบบชำระเงินช่วยรองรับผู้ใช้จำนวนมากขึ้น&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ต้องประมวลผลข้อมูลส่วนตัวหรือข้อมูลลูกค้า&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
หากข้อมูลที่ส่งเข้า API ต้องมีเงื่อนไขความเป็นส่วนตัวที่เหมาะสม ควรเปลี่ยนออกจากบริการฟรี&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;กำลังนำระบบขึ้น production&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
เมื่อผู้ใช้จริงพึ่งพาการตอบกลับจากโมเดล คุณต้องการปริมาณงานและเงื่อนไขการใช้งานที่คาดการณ์ได้&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gemini 3.6 Flash มีค่าใช้จ่าย $1.50 ต่อ 1 ล้านโทเค็นอินพุต และ $7.50 ต่อ 1 ล้านโทเค็นเอาต์พุต โดยราคาเอาต์พุตลดลงจาก $9.00 ของ Gemini 3.5 Flash นอกจากนี้ โมเดลยังมีแนวโน้มใช้โทเค็นเอาต์พุตน้อยลงสำหรับงานเดียวกัน&lt;/p&gt;

&lt;p&gt;ดูรายละเอียดค่าใช้จ่ายได้ที่ &lt;a href="https://apidog.com/th/blog/gemini-3-6-flash-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ราคา Gemini 3.6 Flash&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ทางเลือกที่ประหยัดกว่า: Gemini 3.5 Flash-Lite
&lt;/h2&gt;

&lt;p&gt;หากงานของคุณเน้นปริมาณมากมากกว่าการให้เหตุผลซับซ้อน ให้พิจารณา Gemini 3.5 Flash-Lite&lt;/p&gt;

&lt;p&gt;ราคา:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ประเภท&lt;/th&gt;
&lt;th&gt;ราคา&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;อินพุต&lt;/td&gt;
&lt;td&gt;$0.30 ต่อ 1 ล้านโทเค็น&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;เอาต์พุต&lt;/td&gt;
&lt;td&gt;$2.50 ต่อ 1 ล้านโทเค็น&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Flash-Lite สามารถสตรีมเอาต์พุตได้ประมาณ 350 โทเค็นต่อวินาที และมี free tier ของตัวเอง&lt;/p&gt;

&lt;p&gt;เหมาะกับงาน เช่น&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;การจัดประเภทข้อความ&lt;/li&gt;
&lt;li&gt;การติดแท็กข้อมูล&lt;/li&gt;
&lt;li&gt;การแยกข้อมูลสั้น ๆ&lt;/li&gt;
&lt;li&gt;การกำหนดเส้นทางคำขอ&lt;/li&gt;
&lt;li&gt;งานซ้ำจำนวนมากที่ต้องการ latency ต่ำ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;เลือก Gemini 3.6 Flash เมื่อต้องการการให้เหตุผลที่แข็งแรงขึ้นหรือการใช้เครื่องมือ เลือก Flash-Lite เมื่อต้องการทำงานง่าย ๆ จำนวนมากในต้นทุนต่อคำขอที่ต่ำกว่า&lt;/p&gt;

&lt;p&gt;อ่านเพิ่มเติมที่ &lt;a href="https://apidog.com/th/blog/what-is-gemini-3-5-flash-lite?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Gemini 3.5 Flash-Lite คืออะไร&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ทดสอบ Gemini API ฟรีด้วย Apidog
&lt;/h2&gt;

&lt;p&gt;Free tier เป็นจุดที่ปัญหา API มักปรากฏชัด เช่น API key ใช้งานได้ แต่คำขอจำนวนมากเริ่มได้รับ HTTP 429 หรือ response มีโครงสร้างต่างจากที่โค้ดคาดไว้&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; ช่วยให้คุณสร้าง ส่ง ตรวจสอบ และทดสอบคำขอ API ก่อนเชื่อมเข้ากับแอปจริง&lt;/p&gt;

&lt;p&gt;ตั้งค่าเพียงครั้งเดียวแล้วใช้ซ้ำได้ในทีม:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;สร้างคำขอ &lt;code&gt;POST&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ใช้ endpoint นี้:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   https://generativelanguage.googleapis.com/v1beta/models/gemini-3.6-flash:generateContent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;เก็บ API key เป็น environment variable&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ตั้ง header:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   x-goog-api-key: {{GEMINI_API_KEY}}
   Content-Type: application/json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;กำหนด request body&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"contents"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="nl"&gt;"parts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
           &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
             &lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Explain what a REST API is in two sentences."&lt;/span&gt;&lt;span class="w"&gt;
           &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;เพิ่ม assertion สำหรับ response&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ตรวจสอบว่า API ตอบกลับด้วยสถานะ &lt;code&gt;200&lt;/code&gt; และมีฟิลด์ JSON ที่แอปต้องใช้ วิธีนี้ช่วยตรวจจับการเปลี่ยนแปลงของ response schema ได้เร็วขึ้น&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;เฝ้าระวัง HTTP 429&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ส่งคำขอเป็นชุดเพื่อดูพฤติกรรมของ rate limit โดยตรง เมื่อโควต้าหมด คุณจะเห็นสถานะ 429 ในเครื่องมือทดสอบแทนที่จะพบปัญหาหลัง deploy&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;ตั้งเวลารัน regression test&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;เปลี่ยนคำขอเป็น &lt;a href="https://apidog.com/th/blog/how-to-schedule-api-tests-apidog?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;การทดสอบ API ตามกำหนดเวลา&lt;/a&gt; เพื่อตรวจหาการเปลี่ยนแปลงด้านโควต้าหรือความคลาดเคลื่อนของ API contract โดยอัตโนมัติ&lt;/p&gt;

&lt;p&gt;Apidog ไม่ใช่โมเดล AI แต่เป็นไคลเอนต์และเครื่องมือทดสอบที่ช่วยให้มั่นใจว่าคำขอที่ส่งไปยังโมเดลทำงานตามที่คาดหวัง &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ดาวน์โหลด Apidog&lt;/a&gt; แล้วเชื่อมต่อกับ API key ฟรีเพื่อเริ่มทดสอบได้ทันที&lt;/p&gt;

&lt;h2&gt;
  
  
  คำถามที่พบบ่อย
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Gemini 3.6 Flash ฟรีแบบไม่จำกัดหรือไม่?
&lt;/h3&gt;

&lt;p&gt;ไม่ ฟรีมีขีดจำกัดจำนวนคำขอต่อนาทีและต่อวัน เมื่อเกินโควต้า API จะตอบกลับด้วย HTTP 429 ตรวจสอบโควต้าปัจจุบันได้จาก &lt;a href="https://ai.google.dev/gemini-api/docs" rel="noopener noreferrer"&gt;เอกสาร Gemini API&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ข้อมูลในบริการฟรีเป็นส่วนตัวหรือไม่?
&lt;/h3&gt;

&lt;p&gt;ไม่ทั้งหมด Google อาจใช้ข้อความที่ส่งเข้าไปและผลลัพธ์ของโมเดลเพื่อปรับปรุงผลิตภัณฑ์ อย่าส่งข้อมูลละเอียดอ่อน ข้อมูลลูกค้า หรือข้อมูลที่เป็นกรรมสิทธิ์ผ่านบริการฟรี&lt;/p&gt;

&lt;h3&gt;
  
  
  ต้องใส่บัตรเครดิตเพื่อใช้ API ฟรีหรือไม่?
&lt;/h3&gt;

&lt;p&gt;ไม่ คุณสามารถสร้าง key ใน &lt;a href="https://aistudio.google.com" rel="noopener noreferrer"&gt;Google AI Studio&lt;/a&gt; และเริ่มเรียกใช้ API ได้โดยไม่ต้องตั้งค่าการเรียกเก็บเงิน เพิ่มวิธีชำระเงินเมื่อจำเป็นต้องใช้บริการแบบชำระเงินหรือโควต้าที่สูงขึ้น&lt;/p&gt;

&lt;h3&gt;
  
  
  แอป Gemini เหมือนกับ Gemini API ฟรีหรือไม่?
&lt;/h3&gt;

&lt;p&gt;ไม่ แอป Gemini เป็นอินเทอร์เฟซสนทนาสำหรับผู้ใช้ทั่วไป ส่วน Gemini API ฟรีให้ key และการเข้าถึงแบบ programmatic สำหรับนำไปใช้ในซอฟต์แวร์ของคุณ&lt;/p&gt;

&lt;h3&gt;
  
  
  ควรเริ่มด้วย Flash หรือ Flash-Lite?
&lt;/h3&gt;

&lt;p&gt;เริ่มด้วย Gemini 3.6 Flash สำหรับงานทั่วไป งานที่ต้องใช้การให้เหตุผล หรือการใช้เครื่องมือ เลือก Gemini 3.5 Flash-Lite เมื่อมีคำขอแบบง่ายจำนวนมากและต้องการต้นทุนต่อคำขอที่ต่ำที่สุด&lt;/p&gt;

&lt;h2&gt;
  
  
  ขั้นตอนถัดไป
&lt;/h2&gt;

&lt;p&gt;เริ่มจากแอป Gemini หากต้องการทดลองโมเดลแบบไม่เขียนโค้ด จากนั้นย้ายไปใช้ Gemini API ฟรีใน &lt;a href="https://aistudio.google.com" rel="noopener noreferrer"&gt;Google AI Studio&lt;/a&gt; เมื่อพร้อมสร้างแอป&lt;/p&gt;

&lt;p&gt;สำหรับการใช้งานจริง:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;เก็บ API key ใน environment variable&lt;/li&gt;
&lt;li&gt;หลีกเลี่ยงการส่งข้อมูลละเอียดอ่อนผ่าน free tier&lt;/li&gt;
&lt;li&gt;จัดการ HTTP 429 และเพิ่ม retry logic&lt;/li&gt;
&lt;li&gt;ทดสอบ request และ response schema ก่อน deploy&lt;/li&gt;
&lt;li&gt;ย้ายไปใช้บริการแบบชำระเงินเมื่อมีทราฟฟิกจริงหรือข้อกำหนดด้านข้อมูล&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;เชื่อมต่อคำขอ Gemini ผ่าน &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; ตั้งแต่เริ่มต้น เพื่อให้คุณตรวจพบ rate limit และความผิดปกติของ API ในขั้นตอนทดสอบ ไม่ใช่หลังผู้ใช้เจอปัญหา&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Gemini 3.5 Flash Cyber คืออะไร? โมเดลความปลอดภัยขั้นสูงจาก Google</title>
      <dc:creator>Thanawat Wongchai</dc:creator>
      <pubDate>Wed, 22 Jul 2026 04:11:02 +0000</pubDate>
      <link>https://dev.to/thanawat_wonchai/gemini-35-flash-cyber-khuueaair-omedlkhwaampldphaykhansuungcchaak-google-2fp0</link>
      <guid>https://dev.to/thanawat_wonchai/gemini-35-flash-cyber-khuueaair-omedlkhwaampldphaykhansuungcchaak-google-2fp0</guid>
      <description>&lt;p&gt;Gemini 3.5 Flash Cyber คือโมเดล Flash ของ Google ที่ปรับแต่งสำหรับค้นหาและแก้ไขช่องโหว่ซอฟต์แวร์ ภายใต้โครงการ CodeMender เปิดตัวเมื่อวันที่ 21 กรกฎาคม 2026 พร้อมโมเดล Flash อีกสองรุ่น อย่างไรก็ตาม นักพัฒนาทั่วไปยังใช้งานไม่ได้: โมเดลนี้เป็นโครงการนำร่องแบบจำกัดสิทธิ์สำหรับหน่วยงานรัฐบาลและพันธมิตรที่เชื่อถือได้เท่านั้น ไม่มี Public API และไม่มีราคาที่เผยแพร่สู่สาธารณะ&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;ลองใช้ Apidog วันนี้&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;ดังนั้นบทความนี้ไม่ใช่คู่มือตั้งค่า Cyber เพราะยังไม่มี API key, model ID หรือโค้ดตัวอย่างที่เรียกใช้ได้จริง แต่จะอธิบายสถานะของโมเดล สิ่งที่โมเดลทำได้ และแนวทางที่คุณนำไปใช้กับงาน security ได้ตั้งแต่วันนี้&lt;/p&gt;

&lt;h2&gt;
  
  
  Gemini 3.5 Flash Cyber คืออะไร?
&lt;/h2&gt;

&lt;p&gt;Gemini 3.5 Flash Cyber คือโมเดลเฉพาะทางด้านช่องโหว่ความปลอดภัยในโค้ด โดยเป็นส่วนหนึ่งของโครงการ CodeMender ของ Google ซึ่งมุ่งค้นหาและแก้ไขช่องโหว่ซอฟต์แวร์&lt;/p&gt;

&lt;p&gt;ต่างจาก Flash รุ่นทั่วไปที่รองรับงานเขียนโค้ด วิเคราะห์ข้อมูล และงาน reasoning ที่หลากหลาย Cyber ถูกปรับแต่งเพื่อเป้าหมายหลักเดียว:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ตรวจจับรูปแบบโค้ดที่มีความเสี่ยง&lt;/li&gt;
&lt;li&gt;ระบุช่องโหว่ที่อาจเกิดขึ้น&lt;/li&gt;
&lt;li&gt;เสนอแนวทางแก้ไขโค้ด&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9g31v0gi7fyv09axx284.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9g31v0gi7fyv09axx284.png" alt="Gemini 3.5 Flash Cyber" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Google ประกาศโมเดลนี้ใน&lt;a href="https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-6-flash-3-5-flash-lite-3-5-flash-cyber/" rel="noopener noreferrer"&gt;โพสต์โมเดล Gemini&lt;/a&gt; เดียวกับการอัปเดต Flash รุ่นอื่น ๆ ส่วนรายละเอียดของ Flash สำหรับงานทั่วไปดูได้จาก&lt;a href="https://deepmind.google/models/gemini/flash/" rel="noopener noreferrer"&gt;หน้าโมเดล DeepMind Flash&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ข้อควรแยกให้ชัดเจน:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CodeMender&lt;/strong&gt; คือโปรแกรมหรือโครงการ&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini 3.5 Flash Cyber&lt;/strong&gt; คือโมเดลที่พัฒนาขึ้นเพื่อสนับสนุนงานในโครงการนั้น&lt;/li&gt;
&lt;li&gt;ชื่อโมเดลคือ &lt;strong&gt;3.5 Flash Cyber&lt;/strong&gt; ไม่ใช่ 3.6&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ข้อจำกัด: คุณอาจยังใช้มันไม่ได้
&lt;/h2&gt;

&lt;p&gt;สถานะปัจจุบันของ Gemini 3.5 Flash Cyber คือการเข้าถึงแบบจำกัด Google เปิดให้เฉพาะรัฐบาลและพันธมิตรที่เชื่อถือได้ ยังไม่มีการเปิดใช้งานทั่วไปสำหรับนักพัฒนา&lt;/p&gt;

&lt;p&gt;ในทางปฏิบัติ หมายความว่า:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ไม่มี Public API&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
คุณยังไม่สามารถระบุ model ID ของ Cyber ในแอปแล้วเรียกใช้งานเหมือนโมเดล Gemini ทั่วไปได้&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ไม่มีราคาสาธารณะ&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Google ยังไม่เผยแพร่อัตราค่าบริการต่อโทเค็น เพราะยังไม่มีช่องทางการเข้าถึงแบบเปิด เปรียบเทียบกับโมเดล Flash มาตรฐานที่มีราคาใน&lt;a href="https://ai.google.dev/gemini-api/docs/pricing" rel="noopener noreferrer"&gt;เอกสารราคา Gemini API&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ไม่มีการสมัครใช้งานด้วยตนเอง&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ไม่มีปุ่มในคอนโซลหรือฟอร์มสาธารณะสำหรับเปิดใช้ Cyber ในบัญชีนักพัฒนาทั่วไป&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;หากคุณพบคู่มือที่อ้างว่ามี Cyber API, model string หรือราคา ให้ตรวจสอบแหล่งข้อมูลอย่างระมัดระวัง เพราะ Google ยังไม่ได้เผยแพร่ข้อมูลเหล่านี้สำหรับสาธารณะ&lt;/p&gt;

&lt;h2&gt;
  
  
  ทำไม Google ถึงจำกัดการเข้าถึง?
&lt;/h2&gt;

&lt;p&gt;เหตุผลหลักคือความเสี่ยงจากการใช้งานได้สองทาง หรือ &lt;em&gt;dual-use&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;โมเดลที่สามารถค้นหาช่องโหว่เพื่อช่วยทีมป้องกันระบบ ก็อาจถูกใช้เพื่อระบุจุดอ่อนสำหรับการโจมตีได้เช่นกัน การเปิดเครื่องมือค้นหาช่องโหว่ประสิทธิภาพสูงให้ทุกคนเข้าถึงทันที จึงเพิ่มความเสี่ยงด้านความปลอดภัยโดยตรง&lt;/p&gt;

&lt;p&gt;รูปแบบการเปิดตัวแบบจำกัดช่วยให้ Google สามารถ:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ใช้งานโมเดลกับกรณีป้องกันระบบจริง&lt;/li&gt;
&lt;li&gt;สังเกตพฤติกรรมและผลกระทบจากการใช้งาน&lt;/li&gt;
&lt;li&gt;ประเมินความเสี่ยงก่อนขยายสิทธิ์การเข้าถึง&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ไม่มีการประกาศวันเปิดตัวสู่สาธารณะอย่างเป็นทางการ ดังนั้นอย่าวางแผน workflow ที่ต้องพึ่งพา Cyber ในตอนนี้ ให้เลือกใช้เครื่องมือที่ทีมเข้าถึงได้จริงแทน&lt;/p&gt;

&lt;h2&gt;
  
  
  ตำแหน่งในตระกูล Flash
&lt;/h2&gt;

&lt;p&gt;การอัปเดตวันที่ 21 กรกฎาคมเปิดตัวโมเดล Flash สามรุ่น ซึ่งใช้เลขเวอร์ชันต่างกัน:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Gemini 3.6 Flash&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
โมเดลอเนกประสงค์สำหรับงานเขียนโค้ดและวิเคราะห์ รองรับ context window 1 ล้านโทเค็น มี Free tier ใน Google AI Studio และมีราคาแบบสาธารณะ: 1.50 ดอลลาร์ต่อล้านโทเค็นอินพุต และ 7.50 ดอลลาร์ต่อล้านโทเค็นเอาต์พุต ดูรายละเอียดได้ที่ &lt;a href="https://apidog.com/th/blog/what-is-gemini-3-6-flash?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Gemini 3.6 Flash คืออะไร&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Gemini 3.5 Flash-Lite&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
รุ่นสำหรับงานปริมาณสูงและเน้นต้นทุน เป็นรุ่นที่เร็วที่สุดในกลุ่ม โดยประมาณ 350 โทเค็นเอาต์พุตต่อวินาที ราคา 0.30 ดอลลาร์ต่อล้านโทเค็นอินพุต และ 2.50 ดอลลาร์ต่อล้านโทเค็นเอาต์พุต ดูรายละเอียดได้ที่ &lt;a href="https://apidog.com/th/blog/what-is-gemini-3-5-flash-lite?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Gemini 3.5 Flash-Lite คืออะไร&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Gemini 3.5 Flash Cyber&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
โมเดลเฉพาะทางด้านความปลอดภัย เข้าถึงได้เฉพาะรัฐบาลและพันธมิตรที่เชื่อถือได้ ไม่มี Public API และไม่มีราคาสาธารณะ&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;จุดที่อาจทำให้สับสนคือรุ่นหลักใช้หมายเลข &lt;strong&gt;3.6&lt;/strong&gt; ขณะที่ Flash-Lite และ Cyber ใช้หมายเลข &lt;strong&gt;3.5&lt;/strong&gt; นี่ไม่ใช่การพิมพ์ผิด แต่เป็นโมเดลที่อยู่คนละสายเวอร์ชัน&lt;/p&gt;

&lt;p&gt;หากต้องเลือกระหว่างตัวเลือกแบบสาธารณะ ดูการเปรียบเทียบได้ที่ &lt;a href="https://apidog.com/th/blog/gemini-3-6-flash-vs-gemini-3-5-flash?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Gemini 3.6 Flash vs 3.5 Flash&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  นักพัฒนาควรทำอะไรได้บ้างในวันนี้?
&lt;/h2&gt;

&lt;p&gt;แม้ยังใช้ Cyber ไม่ได้ แต่คุณสามารถสร้าง workflow ด้าน security ที่ใช้งานจริงได้ด้วยสองแนวทางต่อไปนี้&lt;/p&gt;

&lt;h3&gt;
  
  
  1. ใช้ Gemini 3.6 Flash สำหรับ security code review เบื้องต้น
&lt;/h3&gt;

&lt;p&gt;Gemini 3.6 Flash เป็นโมเดลสาธารณะที่สามารถใช้ช่วยตรวจโค้ดได้ เช่น ขอให้ตรวจหา:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;การตรวจสอบ input ที่ขาดหายไป&lt;/li&gt;
&lt;li&gt;การจัดการ authentication หรือ authorization ที่ผิดพลาด&lt;/li&gt;
&lt;li&gt;การใช้ secret หรือ token อย่างไม่ปลอดภัย&lt;/li&gt;
&lt;li&gt;การ query ที่มีความเสี่ยงต่อ injection&lt;/li&gt;
&lt;li&gt;การ validate ข้อมูลก่อนบันทึกลงฐานข้อมูลไม่เพียงพอ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ตัวอย่าง prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ตรวจสอบโค้ด API endpoint นี้ในมุมมองความปลอดภัย

- ระบุจุดที่อาจเกิดช่องโหว่
- อธิบายผลกระทบของแต่ละจุด
- เสนอแนวทางแก้ไขแบบเฉพาะเจาะจง
- อย่าสรุปว่าปลอดภัยหากไม่มีหลักฐานจากโค้ด

[วางโค้ดของคุณที่นี่]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ผลลัพธ์จากโมเดลควรเป็นจุดเริ่มต้นของการตรวจสอบ ไม่ใช่ผลการ audit ที่ยืนยันได้เอง ทีมยังต้องทดสอบและตรวจทานโค้ดจริงก่อน deploy&lt;/p&gt;

&lt;h3&gt;
  
  
  2. ทดสอบความปลอดภัยของ API อย่างเป็นระบบ
&lt;/h3&gt;

&lt;p&gt;ปัญหา API ที่พบได้จริงจำนวนมากมักเกิดจาก:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ไม่มี authentication หรือ authorization ที่ถูกต้อง&lt;/li&gt;
&lt;li&gt;การตั้งค่า transport security อ่อนแอ&lt;/li&gt;
&lt;li&gt;endpoint ไม่เป็นไปตาม API contract หลังการเปลี่ยนแปลง&lt;/li&gt;
&lt;li&gt;regression ที่เกิดขึ้นหลัง deploy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;คุณสามารถทดสอบประเด็นเหล่านี้ได้โดยไม่ต้องใช้โมเดลเฉพาะทาง&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; ช่วยให้คุณส่งคำขอ API, เพิ่ม assertion และทำงานทดสอบซ้ำได้ โดยเริ่มจากกรณีต่อไปนี้&lt;/p&gt;

&lt;h3&gt;
  
  
  ตรวจสอบ authentication
&lt;/h3&gt;

&lt;p&gt;ส่งคำขอไปยัง endpoint เดียวกันด้วยหลายสถานะของ token:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ไม่มี token&lt;/li&gt;
&lt;li&gt;token หมดอายุ&lt;/li&gt;
&lt;li&gt;token ไม่ถูกต้อง&lt;/li&gt;
&lt;li&gt;token ที่ถูกต้องแต่ไม่มีสิทธิ์&lt;/li&gt;
&lt;li&gt;token ที่ถูกต้องและมีสิทธิ์&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ตัวอย่าง expectation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET /api/admin/users

ไม่มี token                 -&amp;gt; 401
token ไม่ถูกต้อง            -&amp;gt; 401
token ถูกต้องแต่ไม่มีสิทธิ์ -&amp;gt; 403
token ถูกต้องและมีสิทธิ์    -&amp;gt; 200
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;หากคำขอที่ไม่มี token ได้รับ &lt;code&gt;200 OK&lt;/code&gt; แทน &lt;code&gt;401 Unauthorized&lt;/code&gt; นั่นคือปัญหาที่ต้องแก้ไขทันที&lt;/p&gt;

&lt;h3&gt;
  
  
  ตรวจสอบ mTLS และใบรับรองไคลเอนต์
&lt;/h3&gt;

&lt;p&gt;หากบริการของคุณต้องใช้ client certificate ให้ทดสอบทั้งกรณีที่ควรผ่านและควรถูกปฏิเสธ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;คำขอที่แนบใบรับรองไคลเอนต์ถูกต้องควรเชื่อมต่อได้&lt;/li&gt;
&lt;li&gt;คำขอที่ไม่มีใบรับรองควรถูกปฏิเสธ&lt;/li&gt;
&lt;li&gt;คำขอที่ใช้ใบรับรองหมดอายุหรือไม่ถูกต้องควรถูกปฏิเสธ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ดูขั้นตอนได้ที่ &lt;a href="https://apidog.com/th/blog/how-to-test-apis-client-certificates-mtls-apidog?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;การทดสอบ API ด้วยใบรับรองไคลเอนต์และ mTLS ใน Apidog&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ตั้งเวลาทดสอบ API contract
&lt;/h3&gt;

&lt;p&gt;ทุก endpoint ควรมี assertion ขั้นต่ำ เช่น:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTTP status code&lt;/li&gt;
&lt;li&gt;ฟิลด์สำคัญใน JSON response&lt;/li&gt;
&lt;li&gt;data type ของฟิลด์&lt;/li&gt;
&lt;li&gt;รูปแบบ error response&lt;/li&gt;
&lt;li&gt;header ที่เกี่ยวข้องกับ security&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ตัวอย่าง assertion สำหรับ endpoint สร้างผู้ใช้:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;POST /users

คาดหวัง:
- status code = 201
- response.body.id เป็น string
- response.body.email ตรงกับรูปแบบอีเมล
- response.body.password ไม่มีอยู่ใน response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;จากนั้นตั้งเวลารันชุดทดสอบซ้ำเพื่อจับ regression หลังมีการเปลี่ยนแปลง ดูวิธีทำได้ที่ &lt;a href="https://apidog.com/th/blog/how-to-schedule-api-tests-apidog?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ตั้งเวลาทดสอบ API แบบซ้ำ&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;เริ่มต้นได้จากการตรวจสอบ authentication ก่อน เพราะมักตรวจพบปัญหาที่มีผลกระทบสูงด้วย effort ที่ไม่มากนัก &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ดาวน์โหลด Apidog&lt;/a&gt; เพื่อสร้างและรันชุดทดสอบ API ของคุณ&lt;/p&gt;

&lt;h2&gt;
  
  
  คำถามที่พบบ่อย
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ฉันสามารถเข้าถึง Gemini 3.5 Flash Cyber ได้หรือไม่?
&lt;/h3&gt;

&lt;p&gt;ไม่ได้ในตอนนี้ โมเดลนี้เป็นโครงการนำร่องแบบจำกัดสิทธิ์สำหรับรัฐบาลและพันธมิตรที่เชื่อถือได้ ยังไม่เปิดใช้งานแก่สาธารณะ&lt;/p&gt;

&lt;h3&gt;
  
  
  ฉันจะขอสิทธิ์เข้าถึงได้อย่างไร?
&lt;/h3&gt;

&lt;p&gt;การเข้าถึงเป็นแบบเชิญและขึ้นอยู่กับความสัมพันธ์กับพันธมิตร ไม่ใช่การสมัครแบบเปิด หากองค์กรของคุณเป็นหน่วยงานรัฐบาลหรือพันธมิตรด้านความปลอดภัยของ Google การเข้าถึงจะดำเนินผ่านช่องทางความสัมพันธ์นั้น&lt;/p&gt;

&lt;p&gt;สำหรับการเปลี่ยนแปลงสถานะ ให้ติดตาม&lt;a href="https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-6-flash-3-5-flash-lite-3-5-flash-cyber/" rel="noopener noreferrer"&gt;บล็อกของ Google&lt;/a&gt; และ&lt;a href="https://deepmind.google/models/gemini/flash/" rel="noopener noreferrer"&gt;หน้าโมเดล DeepMind&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  มี API หรือราคาที่เผยแพร่แล้วหรือไม่?
&lt;/h3&gt;

&lt;p&gt;ไม่มีสำหรับการใช้งานสาธารณะ ยังไม่มี model ID ที่นักพัฒนาทั่วไปเรียกใช้ได้ และไม่มีอัตราค่าบริการต่อโทเค็นที่ Google เผยแพร่&lt;/p&gt;

&lt;h3&gt;
  
  
  CodeMender คืออะไร?
&lt;/h3&gt;

&lt;p&gt;CodeMender คือโครงการของ Google ที่มุ่งค้นหาและแก้ไขช่องโหว่ในโค้ด ส่วน Gemini 3.5 Flash Cyber คือโมเดลที่ปรับแต่งสำหรับงานดังกล่าว&lt;/p&gt;

&lt;h3&gt;
  
  
  ระหว่างนี้ควรใช้เครื่องมืออะไรสำหรับงาน security?
&lt;/h3&gt;

&lt;p&gt;ใช้ &lt;a href="https://apidog.com/th/blog/what-is-gemini-3-6-flash?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Gemini 3.6 Flash&lt;/a&gt; สำหรับการตรวจโค้ดเบื้องต้น แล้วเสริมด้วยการทดสอบ API จริง โดยเน้น authentication, authorization, mTLS และ API contract regression&lt;/p&gt;

&lt;h2&gt;
  
  
  สรุป
&lt;/h2&gt;

&lt;p&gt;Gemini 3.5 Flash Cyber เป็นโมเดลด้านความปลอดภัยของ Google สำหรับค้นหาและแก้ไขช่องโหว่ในโค้ดภายใต้โครงการ CodeMender แต่ยังเป็นโครงการนำร่องที่จำกัดสิทธิ์สำหรับรัฐบาลและพันธมิตรที่เชื่อถือได้&lt;/p&gt;

&lt;p&gt;สำหรับนักพัฒนาทั่วไป ตอนนี้ยังไม่มี Public API, ราคา หรือวิธีสมัครใช้งานด้วยตนเอง&lt;/p&gt;

&lt;p&gt;สิ่งที่ทำได้ทันทีคือใช้ Gemini 3.6 Flash ช่วยตรวจโค้ด และสร้างชุดทดสอบ API ที่ตรวจสอบ authentication, mTLS และ API contract อย่างต่อเนื่อง เพื่อจับปัญหาก่อนกลายเป็น incident ใน production&lt;/p&gt;

</description>
    </item>
    <item>
      <title>วิธีใช้ Gemini 3.6 Flash API</title>
      <dc:creator>Thanawat Wongchai</dc:creator>
      <pubDate>Wed, 22 Jul 2026 04:06:47 +0000</pubDate>
      <link>https://dev.to/thanawat_wonchai/withiiaich-gemini-36-flash-api-221d</link>
      <guid>https://dev.to/thanawat_wonchai/withiiaich-gemini-36-flash-api-221d</guid>
      <description>&lt;p&gt;คุณเรียกใช้งาน Gemini 3.6 Flash ผ่าน Gemini API ของ Google ด้วย model ID คือ &lt;code&gt;gemini-3.6-flash&lt;/code&gt; Google &lt;a href="https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-6-flash-3-5-flash-lite-3-5-flash-cyber/" rel="noopener noreferrer"&gt;เปิดตัว Flash รุ่นปรับปรุงเมื่อวันที่ 21 กรกฎาคม 2026&lt;/a&gt; และ 3.6 Flash คือ&lt;a href="https://apidog.com/th/blog/what-is-gemini-3-6-flash?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;รุ่นหลักสำหรับการทำงาน&lt;/a&gt;: มีค่าใช้จ่ายต่ำกว่า 3.5 Flash, รองรับ context window ขนาด 1M โทเค็น และรับอินพุตเป็นข้อความ รูปภาพ วิดีโอ เสียง และ PDF ได้ คู่มือนี้จะแสดงขั้นตอนตั้งแต่รับ API key, เรียกใช้งานด้วย curl และ Python, ปรับพารามิเตอร์สำคัญ ไปจนถึงตั้งค่า regression test สำหรับตรวจสอบ API หลังนำขึ้นใช้งานจริง&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;ลองใช้ Apidog วันนี้&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0fgsrjx7azoxwt8g6dn4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0fgsrjx7azoxwt8g6dn4.png" alt="Gemini 3.6 Flash" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  สิ่งที่ต้องเตรียมก่อนเริ่มต้น
&lt;/h2&gt;

&lt;p&gt;เริ่มต้นได้โดยไม่ต้องตั้งค่าการเรียกเก็บเงินล่วงหน้า โดยเตรียมเพียง:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;บัญชี Google สำหรับลงชื่อเข้าใช้และสร้าง API key&lt;/li&gt;
&lt;li&gt;Gemini API key จาก Google AI Studio&lt;/li&gt;
&lt;li&gt;เครื่องมือส่ง HTTP request เช่น &lt;code&gt;curl&lt;/code&gt;, Python หรือ API client เช่น Apidog&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ระดับฟรีใช้งานผ่าน AI Studio และมีการจำกัดอัตรา (rate limit) จึงเหมาะสำหรับทดสอบและสร้างต้นแบบโดยไม่ต้องใช้บัตรเครดิต&lt;/p&gt;

&lt;h2&gt;
  
  
  รับ Gemini API key
&lt;/h2&gt;

&lt;p&gt;ไปที่ &lt;a href="https://aistudio.google.com" rel="noopener noreferrer"&gt;Google AI Studio&lt;/a&gt; แล้วลงชื่อเข้าใช้ด้วยบัญชี Google ของคุณ&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;คลิก &lt;strong&gt;Get API key&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;คลิก &lt;strong&gt;Create API key&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;คัดลอก key และเก็บไว้ในที่ปลอดภัย&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ปฏิบัติต่อ API key เหมือนรหัสผ่าน เพราะผู้ที่มี key สามารถเรียกใช้บริการผ่านบัญชีของคุณได้&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffmp7foi5yqt10pnvtfvx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffmp7foi5yqt10pnvtfvx.png" alt="หน้าสร้าง Gemini API key" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;อย่า hard-code key ในโค้ด หรือ commit ลง repository ให้ตั้งเป็น environment variable แทน:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;GEMINI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your_key_here"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python SDK อย่างเป็นทางการสามารถอ่านตัวแปรนี้ได้โดยตรง ทำให้ไม่ต้องเก็บ secret ใน source code ดูรายละเอียดการตั้งค่าเพิ่มเติมได้จาก&lt;a href="https://ai.google.dev/gemini-api/docs" rel="noopener noreferrer"&gt;เอกสาร Gemini API ของ Google&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  เรียก Gemini 3.6 Flash ครั้งแรกด้วย curl
&lt;/h2&gt;

&lt;p&gt;Gemini REST API ใช้ &lt;code&gt;POST&lt;/code&gt; ไปยังเมธอด &lt;code&gt;generateContent&lt;/code&gt; ของโมเดล&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s2"&gt;"https://generativelanguage.googleapis.com/v1beta/models/gemini-3.6-flash:generateContent"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"x-goog-api-key: &lt;/span&gt;&lt;span class="nv"&gt;$GEMINI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "contents": [
      {
        "parts": [
          {"text": "Explain how APIs work"}
        ]
      }
    ]
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;จุดสำคัญของ request นี้:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ส่ง API key ผ่าน header &lt;code&gt;x-goog-api-key&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;ระบุ request body เป็น JSON&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;contents&lt;/code&gt; เป็นอาร์เรย์ของข้อความหรือข้อมูลที่ส่งให้โมเดล&lt;/li&gt;
&lt;li&gt;แต่ละ &lt;code&gt;content&lt;/code&gt; มี &lt;code&gt;parts&lt;/code&gt; ซึ่งใช้ผสมข้อความ รูปภาพ หรือไฟล์ใน request เดียวได้&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;เมื่อสำเร็จ ข้อความที่โมเดลสร้างจะอยู่ในฟิลด์:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;candidates[0].content.parts[0].text
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เก็บ path นี้ไว้ใช้ตรวจสอบผลลัพธ์ใน regression test ภายหลัง&lt;/p&gt;

&lt;h2&gt;
  
  
  เรียกใช้งานด้วย Python
&lt;/h2&gt;

&lt;p&gt;ติดตั้ง Google Gen AI SDK ก่อน:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;google-genai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;จากนั้นสร้างไฟล์ Python ดังนี้:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;google&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;genai&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;genai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  &lt;span class="c1"&gt;# อ่าน GEMINI_API_KEY จาก environment
&lt;/span&gt;
&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_content&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemini-3.6-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;contents&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Explain how APIs work&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;SDK จะอ่าน &lt;code&gt;GEMINI_API_KEY&lt;/code&gt; จาก environment โดยอัตโนมัติ ดังนั้น API key จะไม่ปรากฏในโค้ด และ &lt;code&gt;resp.text&lt;/code&gt; คือข้อความตอบกลับจากโมเดล&lt;/p&gt;

&lt;h2&gt;
  
  
  พารามิเตอร์สำคัญที่ควรรู้
&lt;/h2&gt;

&lt;p&gt;คำขอพื้นฐานใช้งานได้ทันที แต่พารามิเตอร์ต่อไปนี้ช่วยควบคุมผลลัพธ์ได้มากขึ้น&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;System instruction&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ใช้กำหนดกฎหรือบทบาทของโมเดลตลอดบทสนทนา เช่น “ตอบเป็น JSON เท่านั้น” หรือ “ทำหน้าที่เป็น code reviewer ที่ตอบแบบกระชับ” แยกออกจาก prompt ของผู้ใช้ จึงไม่ต้องใส่คำสั่งเดิมซ้ำทุกข้อความ&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Max output tokens&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ใช้จำกัดความยาวของคำตอบ Gemini 3.6 Flash สร้าง output ได้สูงสุด 64k โทเค็น เพิ่มค่านี้สำหรับงานสร้างเนื้อหายาว และลดลงเมื่อต้องการควบคุมค่าใช้จ่ายหรือ latency&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Multimodal inputs&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
โมเดลรับข้อความ รูปภาพ วิดีโอ เสียง และ PDF ได้ใน request เดียว โดยเพิ่มข้อมูลเป็นรายการใน &lt;code&gt;parts&lt;/code&gt; ควบคู่กับข้อความ ผลลัพธ์เป็นข้อความ และ context window รองรับอินพุตได้สูงสุด 1M โทเค็น&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Thinking and reasoning&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
สำหรับ prompt ที่ซับซ้อน โมเดลอาจให้เหตุผลก่อนตอบ ซึ่งช่วยงานแบบหลายขั้นตอน แต่ thinking tokens จะรวมอยู่ในค่า output ด้วย คุณจึงควรปรับระดับการให้เหตุผลให้สมดุลกับความเร็วและงบประมาณ&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ตรวจสอบชื่อฟิลด์และพารามิเตอร์ล่าสุดจาก&lt;a href="https://ai.google.dev/gemini-api/docs" rel="noopener noreferrer"&gt;เอกสาร Gemini API&lt;/a&gt; เสมอ แทนการเดาชื่อพารามิเตอร์เอง&lt;/p&gt;

&lt;h2&gt;
  
  
  ราคาและระดับฟรี
&lt;/h2&gt;

&lt;p&gt;Gemini 3.6 Flash มีค่าใช้จ่าย:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;$1.50 ต่อ 1M โทเค็นอินพุต&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;$7.50 ต่อ 1M โทเค็นเอาต์พุต&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ราคา output ลดลงจาก $9.00 ของ Gemini 3.5 Flash และ Gemini 3.6 Flash มีแนวโน้มใช้ output tokens น้อยลงประมาณ 17% สำหรับงานเดียวกัน&lt;/p&gt;

&lt;p&gt;ข้อควรระวังคือราคา output รวม thinking tokens ด้วย ดังนั้น prompt ที่ต้องใช้การให้เหตุผลมากอาจมีค่าใช้จ่ายสูงกว่าความยาวคำตอบที่เห็นบนหน้าจอ ดูตัวอย่างการคำนวณได้จาก&lt;a href="https://apidog.com/th/blog/gemini-3-6-flash-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;คู่มือราคา Gemini 3.6 Flash&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ระดับฟรีผ่าน AI Studio เหมาะกับการเรียนรู้และสร้างต้นแบบ แต่มี rate limit ทั้งต่อนาทีและต่อวัน นอกจากนี้ Google อาจใช้ข้อมูลจากระดับฟรีเพื่อปรับปรุงผลิตภัณฑ์ หากต้องการใช้งานจริง ให้เปิดใช้งานการเรียกเก็บเงิน โดยยังใช้ API key เดิมและโค้ดเดิมได้&lt;/p&gt;

&lt;p&gt;อ่านรายละเอียดเพิ่มเติมได้ที่&lt;a href="https://apidog.com/th/blog/how-to-use-gemini-3-6-flash-for-free?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;วิธีใช้ Gemini 3.6 Flash ฟรี&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ทดสอบและแก้ไขข้อบกพร่อง Gemini API ใน Apidog
&lt;/h2&gt;

&lt;p&gt;การใช้ &lt;code&gt;curl&lt;/code&gt; ช่วยยืนยันว่า request ทำงานได้หนึ่งครั้ง แต่ไม่สามารถแจ้งเตือนคุณได้เมื่อ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;response field เปลี่ยน&lt;/li&gt;
&lt;li&gt;API key หมดอายุ&lt;/li&gt;
&lt;li&gt;การ deploy ทำให้ request เสียหาย&lt;/li&gt;
&lt;li&gt;API เริ่มตอบกลับไม่ตรงตามที่แอปคาดหวัง&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; ช่วยบันทึก request และทำ regression test ซ้ำได้ตามขั้นตอนต่อไปนี้&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;สร้าง request&lt;/strong&gt;
สร้าง &lt;code&gt;POST&lt;/code&gt; request ใหม่ด้วย URL:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   https://generativelanguage.googleapis.com/v1beta/models/gemini-3.6-flash:generateContent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;จากนั้นวาง JSON body เดียวกับตัวอย่าง &lt;code&gt;curl&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;เก็บ key ใน environment variable&lt;/strong&gt;
เพิ่มตัวแปรชื่อ &lt;code&gt;GEMINI_API_KEY&lt;/code&gt; ใน Apidog environment แล้วกำหนดค่า header ดังนี้:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   x-goog-api-key: {{GEMINI_API_KEY}}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;วิธีนี้ช่วยป้องกันไม่ให้ secret ปรากฏใน request ที่แชร์ และสลับ key ระหว่าง &lt;code&gt;dev&lt;/code&gt;, &lt;code&gt;staging&lt;/code&gt; และ &lt;code&gt;prod&lt;/code&gt; ได้โดยไม่แก้ request&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;เพิ่ม assertions&lt;/strong&gt;
ตรวจสอบว่า:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;HTTP status เป็น &lt;code&gt;200&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;candidates[0].content.parts[0].text&lt;/code&gt; มีอยู่&lt;/li&gt;
&lt;li&gt;ข้อความตอบกลับไม่ว่างเปล่า&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Assertions เหล่านี้ช่วยยืนยันว่า API ตอบกลับข้อมูลที่แอปใช้งานได้จริง ไม่ใช่เพียงตอบกลับบางอย่าง&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;บันทึกและตั้งเวลา run&lt;/strong&gt;
เก็บ request ไว้ใน collection แล้ว&lt;a href="https://apidog.com/th/blog/how-to-schedule-api-tests-apidog?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;กำหนดเวลาให้ทำงานเป็น regression test&lt;/a&gt; จะเรียกตามเวลา หรือรันใน CI ก็ได้&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ดาวน์โหลด Apidog&lt;/a&gt; เพื่อเริ่มสร้างและรันการทดสอบได้ภายในไม่กี่นาที Apidog ไม่ได้รันโมเดลแทนคุณ แต่ช่วยตรวจสอบว่า API ที่แอปพึ่งพายังตอบสนองตามสัญญาที่คาดหวัง&lt;/p&gt;

&lt;h2&gt;
  
  
  ข้อผิดพลาดและการแก้ไขที่พบบ่อย
&lt;/h2&gt;

&lt;h3&gt;
  
  
  401 Unauthorized: invalid key
&lt;/h3&gt;

&lt;p&gt;สาเหตุที่เป็นไปได้:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API key ไม่ถูกต้อง&lt;/li&gt;
&lt;li&gt;key ถูกยกเลิก&lt;/li&gt;
&lt;li&gt;ไม่มี header &lt;code&gt;x-goog-api-key&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;environment variable ไม่ถูกแทนค่า&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ตรวจสอบว่า key จาก AI Studio ถูกส่งอย่างถูกต้อง และไม่มีช่องว่างเกินท้ายค่า โดยเฉพาะเมื่อใช้ &lt;code&gt;{{GEMINI_API_KEY}}&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  429 Too Many Requests: rate limit
&lt;/h3&gt;

&lt;p&gt;คุณอาจถึงขีดจำกัดคำขอต่อนาทีหรือต่อวันของระดับฟรี&lt;/p&gt;

&lt;p&gt;แนวทางแก้ไข:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ลดอัตราการส่ง request&lt;/li&gt;
&lt;li&gt;เพิ่ม retry พร้อม backoff&lt;/li&gt;
&lt;li&gt;เปิดใช้งานการเรียกเก็บเงินเพื่อใช้ขีดจำกัดที่สูงขึ้น&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ลูปทดสอบที่ยิง request ถี่มากเป็นสาเหตุที่พบบ่อยของข้อผิดพลาดนี้&lt;/p&gt;

&lt;h3&gt;
  
  
  404 Not Found: model not found
&lt;/h3&gt;

&lt;p&gt;ตรวจสอบ model ID ให้ตรงตามนี้:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gemini-3.6-flash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;อย่าสลับเป็น:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gemini-3.5-flash
gemini-flash-3.6
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;โมเดล Lite ของสายนี้คือ &lt;code&gt;gemini-3.5-flash-lite&lt;/code&gt; ซึ่งเป็นโมเดลคนละตัวในสาย 3.5&lt;/p&gt;

&lt;h2&gt;
  
  
  คำถามที่พบบ่อย
&lt;/h2&gt;

&lt;h3&gt;
  
  
  model ID ที่แน่นอนสำหรับ Gemini 3.6 Flash คืออะไร?
&lt;/h3&gt;

&lt;p&gt;ใช้ &lt;code&gt;gemini-3.6-flash&lt;/code&gt; ทั้งใน SDK และ REST URL path ก่อน &lt;code&gt;:generateContent&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Gemini 3.6 Flash API ใช้งานฟรีหรือไม่?
&lt;/h3&gt;

&lt;p&gt;มีระดับฟรีผ่าน AI Studio และมี rate limit เหมาะสำหรับเรียนรู้และสร้างต้นแบบ การใช้งานจริงต้องเปิดใช้งานการเรียกเก็บเงิน ดูรายละเอียดได้ที่&lt;a href="https://apidog.com/th/blog/how-to-use-gemini-3-6-flash-for-free?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;วิธีใช้ Gemini 3.6 Flash ฟรี&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ส่งอะไรไปยังโมเดลได้บ้าง?
&lt;/h3&gt;

&lt;p&gt;ส่งข้อความ รูปภาพ วิดีโอ เสียง และ PDF ได้ โดยรองรับ context window สูงสุด 1M โทเค็น และผลลัพธ์เป็นข้อความ&lt;/p&gt;

&lt;h3&gt;
  
  
  ทำไมค่าใช้จ่ายสูงกว่าความยาวคำตอบที่เห็น?
&lt;/h3&gt;

&lt;p&gt;ราคา output ที่ $7.50 ต่อ 1M โทเค็นรวม thinking tokens ของโมเดลด้วย Prompt ที่ใช้เหตุผลมากจึงอาจมีค่าใช้จ่ายสูงกว่าคำตอบที่แสดง&lt;/p&gt;

&lt;h3&gt;
  
  
  ใช้เหมือน Gemini 3.5 Flash API หรือไม่?
&lt;/h3&gt;

&lt;p&gt;รูปแบบการเรียกใช้งานเหมือนกัน หากคุณ&lt;a href="https://apidog.com/th/blog/how-to-use-gemini-3-5-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;เคยใช้ Gemini 3.5 API&lt;/a&gt; คุณเพียงเปลี่ยน model ID เป็น &lt;code&gt;gemini-3.6-flash&lt;/code&gt; โดย 3.6 Flash มีค่า output ต่ำกว่าและใช้ output tokens น้อยลงสำหรับงานเดียวกัน&lt;/p&gt;

&lt;h3&gt;
  
  
  ใช้ API key เดียวกันกับ curl, Python และ Apidog ได้หรือไม่?
&lt;/h3&gt;

&lt;p&gt;ได้ API key เดียวจาก AI Studio ใช้ได้กับทุกเครื่องมือ ควรเก็บ key เป็น environment variable ในแต่ละเครื่องมือ แทนการ hard-code เพื่อให้เปลี่ยนหรือยกเลิก key ได้ง่าย&lt;/p&gt;

&lt;h2&gt;
  
  
  จะไปต่อจากนี้ที่ไหน
&lt;/h2&gt;

&lt;p&gt;ตอนนี้คุณมี:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gemini API key&lt;/li&gt;
&lt;li&gt;ตัวอย่าง request ที่ใช้งานได้ด้วย curl&lt;/li&gt;
&lt;li&gt;ตัวอย่าง Python SDK&lt;/li&gt;
&lt;li&gt;แนวทางเลือกพารามิเตอร์&lt;/li&gt;
&lt;li&gt;แนวทางตั้ง regression test สำหรับ endpoint&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;เริ่มจากระดับฟรี เก็บ API key ไว้ใน environment variable และอ้างอิง&lt;a href="https://ai.google.dev/gemini-api/docs" rel="noopener noreferrer"&gt;เอกสาร Gemini API อย่างเป็นทางการ&lt;/a&gt; เมื่อต้องใช้งานความสามารถเพิ่มเติม&lt;/p&gt;

&lt;p&gt;เมื่อ Gemini API กลายเป็นส่วนสำคัญของแอป ให้ห่อหุ้ม request ด้วยการทดสอบใน&lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; เพื่อให้คุณตรวจพบการเปลี่ยนแปลงของ API ก่อนที่ผู้ใช้จะพบปัญหา&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Gemini 3.6 Flash คืออะไร</title>
      <dc:creator>Thanawat Wongchai</dc:creator>
      <pubDate>Wed, 22 Jul 2026 04:06:40 +0000</pubDate>
      <link>https://dev.to/thanawat_wonchai/gemini-36-flash-khuueaair-53j</link>
      <guid>https://dev.to/thanawat_wonchai/gemini-36-flash-khuueaair-53j</guid>
      <description>&lt;p&gt;Gemini 3.6 Flash เป็นโมเดลหลักตัวใหม่ของ Google ที่เปิดให้ใช้งานทั่วไปเมื่อวันที่ 21 กรกฎาคม 2026 โดยมีต้นทุนต่ำลงและใช้โทเค็นได้มีประสิทธิภาพกว่า Gemini 3.5 Flash ที่ถูกแทนที่ เหมาะสำหรับระบบที่ส่งคำขอ API ปริมาณสูงและต้องการผลลัพธ์ที่เชื่อถือได้โดยไม่ต้องใช้โมเดลระดับเรือธง&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;ลองใช้ Apidog วันนี้&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;บทความนี้สรุปความแตกต่างจากรุ่นก่อน ข้อมูลจำเพาะ ราคา คะแนนทดสอบ และแนวทางเรียก API พร้อมขั้นตอนสร้าง regression test เพื่อยืนยันว่าโมเดลให้ผลลัพธ์ตรงกับที่ระบบของคุณต้องการจริง&lt;/p&gt;

&lt;h2&gt;
  
  
  Gemini 3.6 Flash คืออะไร?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-6-flash-3-5-flash-lite-3-5-flash-cyber/" rel="noopener noreferrer"&gt;Gemini 3.6 Flash&lt;/a&gt; คือโมเดลระดับกลางสำหรับงานปริมาณสูงในตระกูล Gemini ของ Google หรือโมเดล “workhorse” สำหรับงาน production ทั่วไป เช่น&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;สรุปข้อความ&lt;/li&gt;
&lt;li&gt;ดึงข้อมูลจากเอกสาร&lt;/li&gt;
&lt;li&gt;จัดหมวดหมู่ข้อมูล&lt;/li&gt;
&lt;li&gt;สร้างแชตหรือผู้ช่วยสนทนา&lt;/li&gt;
&lt;li&gt;เรียกใช้เครื่องมือหลายขั้นตอนใน agent workflow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;โมเดลรองรับอินพุตเป็นข้อความ รูปภาพ วิดีโอ เสียง และ PDF ในคำขอเดียว แต่สร้างเอาต์พุตเป็นข้อความเท่านั้น&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3nigl4hntkqmjc8j5z1z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3nigl4hntkqmjc8j5z1z.png" alt="Gemini 3.6 Flash" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Google เปิดตัวพร้อมอีกสองโมเดลเมื่อวันที่ 21 กรกฎาคม 2026:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemini 3.5 Flash-Lite&lt;/strong&gt;: รุ่นที่ถูกกว่าและเร็วกว่า สำหรับงานปริมาณมาก&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini 3.5 Flash Cyber&lt;/strong&gt;: โมเดลด้านความปลอดภัยที่จำกัดการเข้าถึงสำหรับรัฐบาลและพันธมิตรที่เชื่อถือได้&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;อ่านรายละเอียดเพิ่มเติมได้ที่ &lt;a href="https://apidog.com/th/blog/what-is-gemini-3-5-flash-lite?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Gemini 3.5 Flash-Lite คืออะไร&lt;/a&gt; และ &lt;a href="https://apidog.com/th/blog/what-is-gemini-3-5-flash-cyber?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Gemini 3.5 Flash Cyber คืออะไร&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3nnbenh1p54fphr2ra3t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3nnbenh1p54fphr2ra3t.png" alt="Gemini Flash รุ่นต่าง ๆ" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ข้อควรระวังคือหมายเลขเวอร์ชันของแต่ละระดับไม่เหมือนกัน:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gemini-3.6-flash
gemini-3.5-flash-lite
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;สองรหัสนี้เป็นคนละโมเดล ไม่ใช่การพิมพ์ผิด ตรวจสอบ model ID ให้ตรงก่อนอัปเดตระบบ&lt;/p&gt;

&lt;p&gt;Google เผยแพร่รายละเอียดไว้บน&lt;a href="https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-6-flash-3-5-flash-lite-3-5-flash-cyber/" rel="noopener noreferrer"&gt;บล็อกของ Google&lt;/a&gt; และ&lt;a href="https://deepmind.google/models/gemini/flash/" rel="noopener noreferrer"&gt;หน้า DeepMind Flash&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  มีอะไรใหม่เมื่อเทียบกับ Gemini 3.5 Flash
&lt;/h2&gt;

&lt;p&gt;การเปลี่ยนแปลงหลักของ Gemini 3.6 Flash คือประสิทธิภาพต่อคำขอ&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ใช้โทเค็นขาออกน้อยกว่า Gemini 3.5 Flash ประมาณ &lt;strong&gt;17%&lt;/strong&gt; สำหรับงานเดียวกัน&lt;/li&gt;
&lt;li&gt;ราคาโทเค็นขาออกลดจาก &lt;strong&gt;$9.00&lt;/strong&gt; เป็น &lt;strong&gt;$7.50 ต่อ 1M tokens&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;ทำงานด้าน coding และ computer use ได้ดีขึ้น&lt;/li&gt;
&lt;li&gt;ใช้ขั้นตอน reasoning และ tool calls น้อยลงใน workflow หลายขั้นตอน&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;สำหรับระบบ agent ความแตกต่างนี้ส่งผลโดยตรงต่อ latency และต้นทุน เพราะทุก reasoning loop และ tool call เพิ่มทั้งเวลาและค่าใช้จ่าย&lt;/p&gt;

&lt;p&gt;ก่อนย้าย workload ให้เปรียบเทียบผลลัพธ์จาก prompt จริงของคุณกับบทความ &lt;a href="https://apidog.com/th/blog/gemini-3-6-flash-vs-gemini-3-5-flash?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Gemini 3.6 Flash เทียบกับ 3.5 Flash&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ข้อมูลจำเพาะของ Gemini 3.6 Flash
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;คุณสมบัติ&lt;/th&gt;
&lt;th&gt;Gemini 3.6 Flash&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;รหัสโมเดล&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gemini-3.6-flash&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;หน้าต่างบริบทอินพุต&lt;/td&gt;
&lt;td&gt;1M tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;เอาต์พุตสูงสุด&lt;/td&gt;
&lt;td&gt;64k tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;รูปแบบอินพุต&lt;/td&gt;
&lt;td&gt;ข้อความ, รูปภาพ, วิดีโอ, เสียง, PDF&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;เอาต์พุต&lt;/td&gt;
&lt;td&gt;ข้อความเท่านั้น&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ราคาอินพุต&lt;/td&gt;
&lt;td&gt;$1.50 ต่อ 1M tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ราคาเอาต์พุต&lt;/td&gt;
&lt;td&gt;$7.50 ต่อ 1M tokens รวมโทเค็นการคิด&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ระดับฟรี&lt;/td&gt;
&lt;td&gt;มี ผ่าน Google AI Studio และมี rate limit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;เปิดตัวเมื่อ&lt;/td&gt;
&lt;td&gt;21 กรกฎาคม 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;หน้าต่างบริบท 1M tokens ช่วยให้ส่งเอกสารขนาดใหญ่ transcript ยาว หรือโค้ดเบสจำนวนมากในคำขอเดียวได้&lt;/p&gt;

&lt;p&gt;อย่างไรก็ตาม เอาต์พุตสูงสุดคือ 64k tokens ต่อคำขอ หากต้องสร้างรายงานหรือเนื้อหายาวมาก ควรแบ่งงานเป็นหลายส่วน เช่น:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;สร้างโครงร่าง&lt;/li&gt;
&lt;li&gt;สร้างเนื้อหาแต่ละส่วน&lt;/li&gt;
&lt;li&gt;รวมและตรวจสอบผลลัพธ์รอบสุดท้าย&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  ประสิทธิภาพเป็นอย่างไร
&lt;/h2&gt;

&lt;p&gt;คะแนน benchmark เป็นเพียงตัวชี้วัด ไม่ใช่การรับประกันผลลัพธ์ในระบบจริง แต่ใช้ช่วยเลือกโมเดลสำหรับงานแต่ละประเภทได้&lt;/p&gt;

&lt;h3&gt;
  
  
  งานเขียนโค้ด
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benchmark&lt;/th&gt;
&lt;th&gt;คะแนน&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SWE-Bench Pro&lt;/td&gt;
&lt;td&gt;58.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSWE v1.1&lt;/td&gt;
&lt;td&gt;49%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Terminal-bench 2.1&lt;/td&gt;
&lt;td&gt;78.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;SWE-Bench Pro วัดความสามารถในการแก้ปัญหา GitHub จริงในคลังโค้ด ขณะที่ Terminal-bench วัดการทำงานผ่านคำสั่งใน terminal&lt;/p&gt;

&lt;h3&gt;
  
  
  งาน computer use
&lt;/h3&gt;

&lt;p&gt;Gemini 3.6 Flash ทำคะแนน &lt;strong&gt;83.0%&lt;/strong&gt; บน OSWorld-Verified เพิ่มจาก &lt;strong&gt;78.4%&lt;/strong&gt; ของ Gemini 3.5 Flash ซึ่งสำคัญสำหรับทีมที่พัฒนา agent เพื่อควบคุมเดสก์ท็อปหรือแอปพลิเคชัน&lt;/p&gt;

&lt;h3&gt;
  
  
  คุณภาพงานระดับมืออาชีพ
&lt;/h3&gt;

&lt;p&gt;Gemini 3.6 Flash มีคะแนน &lt;strong&gt;GDPVal-AA v2 Elo 1421&lt;/strong&gt; โดย GDPVal ใช้วัดประสิทธิภาพในงานระดับมืออาชีพจริง และคะแนน Elo ที่สูงกว่าหมายถึงโมเดลชนะในการเปรียบเทียบแบบตัวต่อตัวมากกว่า&lt;/p&gt;

&lt;h3&gt;
  
  
  การใช้บริบทยาว
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;ที่บริบท 128k tokens: การเรียกคืนข้อมูลเฉลี่ย &lt;strong&gt;91.8%&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;ที่บริบทเต็ม 1M tokens: การเรียกคืนข้อมูลแบบจุดต่อจุดลดเหลือ &lt;strong&gt;54.0%&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ดังนั้น อย่าส่งข้อมูลขนาด 1M tokens แล้วคาดหวังว่าระบบจะค้นหารายละเอียดได้ครบทุกจุดเสมอไป ควรสร้างชุดทดสอบจากเอกสารและความยาวบริบทที่ระบบของคุณใช้จริง&lt;/p&gt;

&lt;h2&gt;
  
  
  ราคาโดยสรุป
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;รายการ&lt;/th&gt;
&lt;th&gt;ราคา&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;อินพุต&lt;/td&gt;
&lt;td&gt;$1.50 ต่อ 1M tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;เอาต์พุต&lt;/td&gt;
&lt;td&gt;$7.50 ต่อ 1M tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context caching&lt;/td&gt;
&lt;td&gt;$0.15 ต่อ 1M tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cache storage&lt;/td&gt;
&lt;td&gt;$1.00 ต่อ 1M tokens ต่อชั่วโมง&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;ราคาเอาต์พุตรวมโทเค็นการคิดด้วย แม้ reasoning บางส่วนจะไม่แสดงในคำตอบสุดท้าย แต่ยังถูกคิดค่าใช้จ่าย&lt;/p&gt;

&lt;p&gt;Context caching เหมาะกับระบบที่ส่ง system prompt เอกสาร หรือข้อมูลอ้างอิงชุดเดิมซ้ำ ๆ ในหลายคำขอ&lt;/p&gt;

&lt;p&gt;มีระดับฟรีผ่าน Google AI Studio แต่มี rate limit และ Google อาจใช้ข้อมูลจากระดับฟรีเพื่อปรับปรุงผลิตภัณฑ์ จึงควรใช้สำหรับ prototype มากกว่างาน production&lt;/p&gt;

&lt;p&gt;อ่านเพิ่มเติมได้ที่:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://apidog.com/th/blog/how-to-use-gemini-3-6-flash-for-free?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;วิธีใช้ Gemini 3.6 Flash ฟรี&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apidog.com/th/blog/gemini-3-6-flash-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ราคา Gemini 3.6 Flash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ai.google.dev/gemini-api/docs/pricing" rel="noopener noreferrer"&gt;ราคา Gemini API อย่างเป็นทางการ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  วิธีเข้าถึง Gemini 3.6 Flash
&lt;/h2&gt;

&lt;p&gt;คุณเข้าถึง Gemini 3.6 Flash ได้ผ่านช่องทางต่อไปนี้:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemini API ผ่าน &lt;a href="https://aistudio.google.com" rel="noopener noreferrer"&gt;Google AI Studio&lt;/a&gt;&lt;/strong&gt;: รับ API key แล้วเรียกใช้ &lt;code&gt;gemini-3.6-flash&lt;/code&gt; จาก REST client หรือ SDK&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Antigravity&lt;/strong&gt;: แพลตฟอร์มพัฒนา agent ของ Google&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini Enterprise Agent platform&lt;/strong&gt;: สำหรับทีมที่ต้องการสร้าง agent พร้อมการกำกับดูแล&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini app&lt;/strong&gt;: สำหรับใช้งานผ่านการสนทนาโดยตรง&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;สำหรับนักพัฒนา API คือช่องทางหลัก เริ่มต้นด้วยขั้นตอนนี้:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;สร้าง API key ใน Google AI Studio&lt;/li&gt;
&lt;li&gt;สร้างคำขอ &lt;code&gt;POST&lt;/code&gt; โดยระบุ model ID เป็น &lt;code&gt;gemini-3.6-flash&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;เก็บ API key ใน environment variable&lt;/li&gt;
&lt;li&gt;ส่ง prompt และตรวจสอบ response schema&lt;/li&gt;
&lt;li&gt;บันทึกคำขอเป็น regression test ก่อนเปลี่ยนโมเดลใน production&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ดูรายละเอียดเพิ่มเติมใน &lt;a href="https://apidog.com/th/blog/how-to-use-gemini-3-6-flash-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;วิธีใช้ Gemini 3.6 Flash API&lt;/a&gt;, &lt;a href="https://apidog.com/th/blog/google-gemini-3-api-guide?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;คู่มือ Google Gemini 3 API&lt;/a&gt; และ&lt;a href="https://ai.google.dev/gemini-api/docs" rel="noopener noreferrer"&gt;เอกสาร Gemini API อย่างเป็นทางการ&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ตำแหน่งในผลิตภัณฑ์ของ Google
&lt;/h2&gt;

&lt;p&gt;เลือกโมเดลตามคุณภาพที่ต้องการ ต้นทุน และ latency ที่ระบบรับได้&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;โมเดล&lt;/th&gt;
&lt;th&gt;เหมาะกับงาน&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 3.5 Flash-Lite&lt;/td&gt;
&lt;td&gt;งานปริมาณมาก ความหน่วงต่ำ และไม่ต้องการคุณภาพสูงสุด&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 3.6 Flash&lt;/td&gt;
&lt;td&gt;งานทั่วไปที่ต้องการคุณภาพเชื่อถือได้ เช่น agent, coding, extraction และ chat&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 3.5 Flash Cyber&lt;/td&gt;
&lt;td&gt;งานด้านความปลอดภัยสำหรับผู้ที่ได้รับสิทธิ์เข้าถึง&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Gemini 3.5 Flash-Lite มีราคา $0.30 สำหรับอินพุต และ $2.50 สำหรับเอาต์พุตต่อ 1M tokens พร้อมความเร็วประมาณ 350 โทเค็นขาออกต่อวินาที จึงเหมาะกับงานที่เน้นต้นทุนและ throughput&lt;/p&gt;

&lt;p&gt;ส่วน Gemini 3.6 Flash เหมาะเมื่อ task ซับซ้อนขึ้น หรือผลลัพธ์ต้องมีความน่าเชื่อถือกว่าระดับ Lite&lt;/p&gt;

&lt;p&gt;ข้อควรทราบ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gemini 3.5 Pro ยังไม่เปิดตัวสู่สาธารณะ โดย Google ระบุว่ายังทดสอบกับพันธมิตร&lt;/li&gt;
&lt;li&gt;Google แย้มการฝึก Gemini 4 ล่วงหน้า แต่ยังไม่มีโมเดลให้เรียกใช้งาน&lt;/li&gt;
&lt;li&gt;Gemini 3.6 Flash เป็นโมเดลระดับกลาง ไม่ใช่โมเดลเรือธงที่ทันสมัยที่สุด&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;สำหรับข้อมูลพื้นฐานของรุ่นก่อนหน้า ดู &lt;a href="https://apidog.com/th/blog/what-is-gemini-3-5?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Gemini 3.5 คืออะไร&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  การทดสอบ Gemini 3.6 Flash ใน Apidog
&lt;/h2&gt;

&lt;p&gt;อย่าตัดสินใจย้ายโมเดลจาก benchmark เพียงอย่างเดียว ให้ทดสอบกับ prompt, context length และ response format ที่ระบบของคุณใช้งานจริง&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; ช่วยส่งคำขอ REST, จัดการ environment variables และสร้าง regression test สำหรับ Gemini API ได้&lt;/p&gt;

&lt;h3&gt;
  
  
  ขั้นตอนตั้งค่า regression test
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;สร้างคำขอ &lt;code&gt;POST&lt;/code&gt; ไปยัง Gemini API และกำหนด model เป็น &lt;code&gt;gemini-3.6-flash&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;เก็บ API key ไว้ใน environment variable แทนการใส่ลงใน URL หรือ request โดยตรง&lt;/li&gt;
&lt;li&gt;ส่งคำขอด้วย prompt ตัวแทนของ production&lt;/li&gt;
&lt;li&gt;เพิ่ม assertions สำหรับ status code และฟิลด์ JSON ที่สำคัญ&lt;/li&gt;
&lt;li&gt;บันทึกคำขอเป็น regression test&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://apidog.com/th/blog/how-to-schedule-api-tests-apidog?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;กำหนดเวลาให้รัน&lt;/a&gt; เพื่อตรวจจับการเปลี่ยนแปลงของ response หรือ latency&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ตัวอย่างสิ่งที่ควรตรวจสอบในแต่ละรอบทดสอบ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- HTTP status ต้องเป็น 200
- ฟิลด์ข้อความตอบกลับต้องมีค่า
- JSON response ต้องตรง schema ที่แอปพลิเคชันคาดหวัง
- เวลา response ต้องไม่เกินเกณฑ์ที่ทีมกำหนด
- ผลลัพธ์จาก prompt สำคัญต้องไม่เปลี่ยนจนกระทบ workflow
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Apidog ไม่ได้รันโมเดลและไม่ใช่ AI framework แต่เป็นเครื่องมือสำหรับสร้าง ส่ง และตรวจสอบคำขอ API เมื่อ Google อัปเดตโมเดลในอนาคต regression test ที่บันทึกไว้จะช่วยบอกได้รวดเร็วว่า integration ของคุณเปลี่ยนไปหรือไม่&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ดาวน์โหลด Apidog&lt;/a&gt; เพื่อเริ่มสร้างคำขอแรก&lt;/p&gt;

&lt;h2&gt;
  
  
  คำถามที่พบบ่อย
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Gemini 3.6 Flash ฟรีหรือไม่?
&lt;/h3&gt;

&lt;p&gt;มีระดับฟรีผ่าน Google AI Studio แต่มี rate limit และเหมาะกับการสร้าง prototype Google อาจใช้ข้อมูลจากระดับฟรีเพื่อปรับปรุงผลิตภัณฑ์ สำหรับ production จะคิดราคา $1.50 ต่อ 1M input tokens และ $7.50 ต่อ 1M output tokens&lt;/p&gt;

&lt;h3&gt;
  
  
  Gemini 3.6 Flash ดีกว่า Gemini 3.5 Flash หรือไม่?
&lt;/h3&gt;

&lt;p&gt;สำหรับงานส่วนใหญ่ใช่ Gemini 3.6 Flash ใช้โทเค็นขาออกน้อยลงประมาณ 17% ลดราคาเอาต์พุตจาก $9.00 เหลือ $7.50 ต่อ 1M tokens และมีประสิทธิภาพด้าน coding กับ computer use ดีขึ้น รวมถึงคะแนน OSWorld-Verified ที่เพิ่มจาก 78.4% เป็น 83.0%&lt;/p&gt;

&lt;h3&gt;
  
  
  Gemini 3.5 Pro เปิดตัวแล้วหรือยัง?
&lt;/h3&gt;

&lt;p&gt;ยังไม่เปิดตัว Google ระบุว่ายังคงทดสอบ Gemini 3.5 Pro กับพันธมิตร และ Gemini 4 ที่ถูกแย้มไว้ก็ยังไม่มีให้เรียกใช้&lt;/p&gt;

&lt;h3&gt;
  
  
  รหัสโมเดลคืออะไร?
&lt;/h3&gt;

&lt;p&gt;ใช้รหัสนี้:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gemini-3.6-flash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;อย่าสับสนกับ &lt;code&gt;gemini-3.5-flash-lite&lt;/code&gt; ซึ่งเป็นโมเดล Flash-Lite ที่ราคาถูกกว่า&lt;/p&gt;

&lt;h3&gt;
  
  
  Gemini 3.6 Flash ทำอะไรไม่ได้บ้าง?
&lt;/h3&gt;

&lt;p&gt;โมเดลสร้างเอาต์พุตเป็นข้อความเท่านั้น จึงไม่สามารถสร้างรูปภาพ เสียง หรือวิดีโอได้ แม้จะอ่านไฟล์เหล่านี้เป็นอินพุตได้&lt;/p&gt;

&lt;p&gt;นอกจากนี้ ความแม่นยำด้านการเรียกคืนข้อมูลลดลงเมื่อใช้บริบทใกล้ขีดจำกัด 1M tokens โดยอยู่ที่ประมาณ 54.0% สำหรับการเรียกคืนข้อมูลแบบจุดต่อจุดที่ความยาวเต็ม&lt;/p&gt;

&lt;p&gt;Gemini 3.6 Flash เหมาะสำหรับ workload Gemini API ส่วนใหญ่ที่ต้องการต้นทุนต่ำลง ใช้โทเค็นได้มีประสิทธิภาพขึ้น และรองรับงาน agent ได้ดีขึ้นกว่ารุ่นที่แทนที่ ก่อนย้ายระบบในวงกว้าง ให้บันทึก API tests สำหรับ prompt สำคัญและรันซ้ำอย่างสม่ำเสมอ&lt;/p&gt;

</description>
    </item>
    <item>
      <title>เว็บดาต้า API สำหรับนักพัฒนา: ทุกสิ่งที่คุณต้องรู้ในปี 2026</title>
      <dc:creator>Thanawat Wongchai</dc:creator>
      <pubDate>Tue, 21 Jul 2026 18:53:50 +0000</pubDate>
      <link>https://dev.to/thanawat_wonchai/ewbdaataa-api-samhrabnakphathnaa-thuksingthiikhuntngruuainpii-2026-3n4h</link>
      <guid>https://dev.to/thanawat_wonchai/ewbdaataa-api-samhrabnakphathnaa-thuksingthiikhuntngruuainpii-2026-3n4h</guid>
      <description>&lt;p&gt;แอปพลิเคชันสมัยใหม่แทบไม่ได้ทำงานแบบแยกเดี่ยว แต่ต้องเชื่อมต่อข้อมูลและบริการจากระบบภายนอกอยู่เสมอ&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;ลองใช้ Apidog วันนี้&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;ไม่ว่าจะเป็นแอปพยากรณ์อากาศแบบเรียลไทม์ แพลตฟอร์มอีคอมเมิร์ซที่แสดงสถานะสินค้า แดชบอร์ดการเงินที่ติดตามตลาด หรือแอป AI ที่ดึงข้อมูลภายนอก ประสบการณ์ดิจิทัลเหล่านี้ล้วนต้องพึ่งพาการแลกเปลี่ยนข้อมูลผ่าน API&lt;/p&gt;

&lt;p&gt;นี่คือบทบาทของ &lt;strong&gt;Web Data API&lt;/strong&gt;: อินเทอร์เฟซที่มีโครงสร้างให้แอปพลิเคชันร้องขอ ประมวลผล และนำข้อมูลจากระบบภายนอกมาใช้งานได้โดยตรง&lt;/p&gt;

&lt;p&gt;การผสานรวม API ไม่ได้จบที่การส่ง HTTP request นักพัฒนายังต้องจัดการการยืนยันตัวตน โครงสร้างข้อมูลที่เปลี่ยนแปลง ความน่าเชื่อถือ เอกสารประกอบ และการทดสอบอัตโนมัติ บทความนี้จะอธิบายวิธีทำงานกับ Web Data API อย่างเป็นระบบ รวมถึงการใช้ &lt;strong&gt;Apidog CLI&lt;/strong&gt; เพื่อทำให้การทดสอบและ workflow ของ API เป็นอัตโนมัติ&lt;/p&gt;

&lt;h2&gt;
  
  
  Web Data API คืออะไร?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F14qfp3nn1g0e15d3sedx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F14qfp3nn1g0e15d3sedx.png" alt="Web Data API" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Web Data API คืออินเทอร์เฟซที่ช่วยให้แอปพลิเคชันเข้าถึงและแลกเปลี่ยนข้อมูลผ่านอินเทอร์เน็ตได้&lt;/p&gt;

&lt;p&gt;แทนที่แอปจะเข้าถึงฐานข้อมูลของอีกระบบโดยตรง API จะเป็นชั้นสื่อสารที่ควบคุมระหว่างไคลเอนต์และแหล่งข้อมูลภายนอก&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application
      |
      v
 Web Data API
      |
      v
External Data Source
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ตัวอย่างเช่น แอปพยากรณ์อากาศไม่ต้องดูแลฐานข้อมูลสภาพอากาศทั่วโลกเอง แต่สามารถเรียกข้อมูลจาก Weather API ได้&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /weather?city=London
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;API ประมวลผลคำขอและส่งข้อมูลที่มีโครงสร้างกลับมา เช่น JSON:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"city"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"London"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"temperature"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"condition"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Cloudy"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;จากนั้นแอปพลิเคชันจึงนำข้อมูลไปแสดงผลหรือใช้ในตรรกะของระบบต่อไป&lt;/p&gt;

&lt;h2&gt;
  
  
  Web Data API ทำงานอย่างไร?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F14qfp3nn1g0e15d3sedx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F14qfp3nn1g0e15d3sedx.png" alt="การทำงานของ Web Data API" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Web Data API ส่วนใหญ่ใช้รูปแบบ request-response ผ่าน HTTP โดยมีขั้นตอนหลัก 3 ส่วน&lt;/p&gt;

&lt;h3&gt;
  
  
  1. ไคลเอนต์ส่งคำขอ
&lt;/h3&gt;

&lt;p&gt;แอปพลิเคชันไคลเอนต์ส่งคำขอไปยัง API endpoint โดยคำขออาจประกอบด้วย:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTTP method&lt;/li&gt;
&lt;li&gt;URL ของ endpoint&lt;/li&gt;
&lt;li&gt;Headers&lt;/li&gt;
&lt;li&gt;ข้อมูลการยืนยันตัวตน&lt;/li&gt;
&lt;li&gt;Query parameters&lt;/li&gt;
&lt;li&gt;Request body&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ตัวอย่าง:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET https://api.example.com/products
Authorization: Bearer token123
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. API ประมวลผลคำขอ
&lt;/h3&gt;

&lt;p&gt;ฝั่ง API จะดำเนินการ เช่น:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ตรวจสอบการยืนยันตัวตน&lt;/li&gt;
&lt;li&gt;ตรวจสอบสิทธิ์การเข้าถึง&lt;/li&gt;
&lt;li&gt;ตรวจสอบและประมวลผลพารามิเตอร์&lt;/li&gt;
&lt;li&gt;เรียกข้อมูลจากฐานข้อมูลหรือบริการภายนอก&lt;/li&gt;
&lt;li&gt;ใช้ business logic&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. API ส่งคืนการตอบกลับ
&lt;/h3&gt;

&lt;p&gt;API ส่งผลลัพธ์กลับมา โดยมักอยู่ในรูปแบบ JSON:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"product"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Laptop"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"availability"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ฝั่งไคลเอนต์ควรตรวจสอบทั้ง HTTP status code และโครงสร้างข้อมูลก่อนนำ response ไปใช้งาน&lt;/p&gt;

&lt;h2&gt;
  
  
  ประเภททั่วไปของ Web Data API
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmx0v3ssfzm6g9wyc8a8p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmx0v3ssfzm6g9wyc8a8p.png" alt="ประเภทของ Web Data API" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  REST API
&lt;/h3&gt;

&lt;p&gt;REST API เป็นรูปแบบ Web Data API ที่ใช้งานแพร่หลาย ใช้ HTTP method มาตรฐาน เช่น:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GET&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;POST&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PUT&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DELETE&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ตัวอย่าง:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /users
POST /orders
DELETE /products/123
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;REST API มักตอบกลับเป็น JSON และพบได้บ่อยในเว็บและแอปมือถือ&lt;/p&gt;

&lt;h3&gt;
  
  
  GraphQL API
&lt;/h3&gt;

&lt;p&gt;GraphQL ช่วยให้ไคลเอนต์ระบุฟิลด์ข้อมูลที่ต้องการได้อย่างชัดเจน โดยทั่วไปจะใช้ endpoint เดียว&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight graphql"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เหมาะกับแอปพลิเคชันที่ต้องการรูปแบบการดึงข้อมูลยืดหยุ่น&lt;/p&gt;

&lt;h3&gt;
  
  
  Web API สำหรับข้อมูลแบบเรียลไทม์
&lt;/h3&gt;

&lt;p&gt;บางระบบต้องรับข้อมูลที่อัปเดตต่อเนื่อง เช่น:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ราคาหุ้น&lt;/li&gt;
&lt;li&gt;ราคาสกุลเงินดิจิทัล&lt;/li&gt;
&lt;li&gt;คะแนนกีฬา&lt;/li&gt;
&lt;li&gt;การแจ้งเตือนสด&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;API กลุ่มนี้อาจใช้ WebSockets หรือการเชื่อมต่อแบบสตรีมมิง&lt;/p&gt;

&lt;h2&gt;
  
  
  การใช้งานทั่วไปของ Web Data API
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4ytdc1mym8dacjhl5u2f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4ytdc1mym8dacjhl5u2f.png" alt="กรณีใช้งาน Web Data API" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  แอปพลิเคชันทางการเงิน
&lt;/h3&gt;

&lt;p&gt;แพลตฟอร์มการเงินใช้ API เพื่อเข้าถึง:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ข้อมูลตลาดหุ้น&lt;/li&gt;
&lt;li&gt;อัตราแลกเปลี่ยน&lt;/li&gt;
&lt;li&gt;การประมวลผลการชำระเงิน&lt;/li&gt;
&lt;li&gt;ข้อมูลธนาคาร&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ตัวอย่างเช่น แดชบอร์ดการเงินสามารถดึงข้อมูลตลาดแบบเรียลไทม์โดยไม่ต้องดูแลฐานข้อมูลการเงินเอง&lt;/p&gt;

&lt;h3&gt;
  
  
  แพลตฟอร์มอีคอมเมิร์ซ
&lt;/h3&gt;

&lt;p&gt;ร้านค้าออนไลน์พึ่งพา API สำหรับ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ข้อมูลสินค้า&lt;/li&gt;
&lt;li&gt;การจัดการสินค้าคงคลัง&lt;/li&gt;
&lt;li&gt;การชำระเงิน&lt;/li&gt;
&lt;li&gt;การอัปเดตสถานะการจัดส่ง&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  แอปพลิเคชันปัญญาประดิษฐ์
&lt;/h3&gt;

&lt;p&gt;แอป AI มักใช้ API เพื่อ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;เข้าถึงโมเดล AI&lt;/li&gt;
&lt;li&gt;ดึงข้อมูลจากภายนอก&lt;/li&gt;
&lt;li&gt;ค้นหาข้อมูล&lt;/li&gt;
&lt;li&gt;เชื่อมต่อแหล่งความรู้&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;เมื่อระบบ AI เชื่อมต่อบริการมากขึ้น ความน่าเชื่อถือของ API integration ก็ยิ่งสำคัญ&lt;/p&gt;

&lt;h3&gt;
  
  
  บริการตำแหน่งและการทำแผนที่
&lt;/h3&gt;

&lt;p&gt;แอปนำทางใช้ API สำหรับ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;แผนที่&lt;/li&gt;
&lt;li&gt;พิกัดทางภูมิศาสตร์&lt;/li&gt;
&lt;li&gt;เส้นทาง&lt;/li&gt;
&lt;li&gt;การคำนวณระยะทาง&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  แพลตฟอร์มโซเชียล
&lt;/h3&gt;

&lt;p&gt;API ของโซเชียลมีเดียอาจเปิดให้เข้าถึง:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;โปรไฟล์ผู้ใช้&lt;/li&gt;
&lt;li&gt;โพสต์&lt;/li&gt;
&lt;li&gt;ข้อมูลวิเคราะห์&lt;/li&gt;
&lt;li&gt;เครื่องมือจัดการเนื้อหา&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ความท้าทายเมื่อทำงานกับ Web Data API
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvdam8izu3gdwmlh6bx7k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvdam8izu3gdwmlh6bx7k.png" alt="ความท้าทายของ Web Data API" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;แม้ API จะทำให้การเชื่อมต่อข้อมูลสะดวกขึ้น แต่การนำไปใช้จริงต้องรับมือกับปัญหาหลายด้าน&lt;/p&gt;

&lt;h2&gt;
  
  
  การยืนยันตัวตนและความปลอดภัย
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn611g4omicz4ux0vuxa8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn611g4omicz4ux0vuxa8.png" alt="การยืนยันตัวตน API" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;API ส่วนใหญ่ต้องมีการยืนยันตัวตน วิธีที่พบได้บ่อย ได้แก่:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API keys&lt;/li&gt;
&lt;li&gt;OAuth tokens&lt;/li&gt;
&lt;li&gt;JWT authentication&lt;/li&gt;
&lt;li&gt;Access tokens&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;อย่าฮาร์ดโค้ด credential ลงใน source code หรือ commit secret ลง repository ให้เก็บค่าเหล่านี้ใน environment variables หรือ secret manager แทน&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_secret_key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;สำหรับ CI/CD ให้เก็บ token ใน repository secrets และส่งต่อเป็น environment variable ตอนรัน pipeline&lt;/p&gt;

&lt;h2&gt;
  
  
  การเปลี่ยนแปลงและการกำหนดเวอร์ชันของ API
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcvmrtc6q86ku8t4gfh8l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcvmrtc6q86ku8t4gfh8l.png" alt="API versioning" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;API ภายนอกอาจเปลี่ยนแปลงเมื่อเวลาผ่านไป แม้เป็นการเปลี่ยนชื่อฟิลด์เพียงเล็กน้อยก็อาจทำให้แอปเสียหายได้&lt;/p&gt;

&lt;p&gt;ตัวอย่าง response เดิม:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"username"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"developer"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เปลี่ยนเป็น:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"user_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"developer"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เพื่อลดผลกระทบ:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ตรวจสอบ schema ของ response&lt;/li&gt;
&lt;li&gt;จัดการกรณีฟิลด์หายหรือชนิดข้อมูลไม่ตรง&lt;/li&gt;
&lt;li&gt;ติดตามเอกสารและประกาศการเปลี่ยนแปลงของ API&lt;/li&gt;
&lt;li&gt;รัน contract test ก่อน deploy&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  การทดสอบความน่าเชื่อถือของ API
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3epimerrkeis07ma5s9r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3epimerrkeis07ma5s9r.png" alt="การทดสอบ API" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;การทดสอบ request ทุกตัวด้วยมือไม่เหมาะกับระบบขนาดใหญ่ ควรมี automated test เพื่อตรวจสอบว่า:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Response ถูกต้อง&lt;/li&gt;
&lt;li&gt;การยืนยันตัวตนยังทำงาน&lt;/li&gt;
&lt;li&gt;โครงสร้างข้อมูลสอดคล้องกับที่คาดไว้&lt;/li&gt;
&lt;li&gt;การเปลี่ยนแปลงของ API ไม่ทำให้ flow สำคัญเสียหาย&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;อย่างน้อยแต่ละ test ควรตรวจสอบ status code และฟิลด์สำคัญใน response&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Unexpected status: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Missing product field&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  การจัดการเอกสารประกอบ
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgu1vkif6yw5e31iqhy55.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgu1vkif6yw5e31iqhy55.png" alt="เอกสาร API" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;เอกสารที่ดีช่วยให้ผู้ใช้ API เริ่มต้นได้เร็วและลดการสื่อสารซ้ำ ควรระบุข้อมูลต่อไปนี้ให้ชัดเจน:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Endpoint ที่รองรับ&lt;/li&gt;
&lt;li&gt;พารามิเตอร์ที่จำเป็นและไม่จำเป็น&lt;/li&gt;
&lt;li&gt;วิธีการยืนยันตัวตน&lt;/li&gt;
&lt;li&gt;รูปแบบ request และ response&lt;/li&gt;
&lt;li&gt;HTTP status code&lt;/li&gt;
&lt;li&gt;รูปแบบ error response&lt;/li&gt;
&lt;li&gt;ข้อจำกัดอัตรา หรือ rate limits&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  แนวทางปฏิบัติที่ดีที่สุดสำหรับ Web Data API
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feq6k5ofh8ks33i0s7aqs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feq6k5ofh8ks33i0s7aqs.png" alt="แนวทางปฏิบัติที่ดีที่สุด" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. อ่านเอกสาร API ก่อนเริ่มเชื่อมต่อ
&lt;/h3&gt;

&lt;p&gt;ก่อนเขียนโค้ด ให้ตรวจสอบ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Endpoint ที่ใช้งานได้&lt;/li&gt;
&lt;li&gt;ข้อกำหนดการยืนยันตัวตน&lt;/li&gt;
&lt;li&gt;Rate limits&lt;/li&gt;
&lt;li&gt;รูปแบบ response&lt;/li&gt;
&lt;li&gt;Error codes ที่อาจเกิดขึ้น&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;เริ่มจากทดลอง request ใน environment แยกก่อนเชื่อมเข้ากับ production flow&lt;/p&gt;

&lt;h3&gt;
  
  
  2. ใช้ Environment Variables สำหรับข้อมูลลับ
&lt;/h3&gt;

&lt;p&gt;อย่าเก็บ API key หรือ token ในโค้ดโดยตรง:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_secret_key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ตัวอย่างการเรียกใช้ใน Node.js:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://api.example.com/products&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;Authorization&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;API_KEY&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. ตรวจสอบ Response ของ API
&lt;/h3&gt;

&lt;p&gt;อย่าคาดเดาว่า response จะมีโครงสร้างเดิมเสมอ ควรตรวจสอบ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Status code&lt;/li&gt;
&lt;li&gt;ฟิลด์ที่จำเป็น&lt;/li&gt;
&lt;li&gt;ชนิดข้อมูล&lt;/li&gt;
&lt;li&gt;รูปแบบ error&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;การตรวจสอบ response ช่วยตรวจจับ breaking change ได้ก่อนกระทบผู้ใช้&lt;/p&gt;

&lt;h3&gt;
  
  
  4. ทำให้การทดสอบ API เป็นอัตโนมัติ
&lt;/h3&gt;

&lt;p&gt;ให้ test รันทุกครั้งเมื่อมีการเปลี่ยนแปลงโค้ดหรือ definition ของ API แทนการตรวจด้วยมือหลังแก้ไขแต่ละครั้ง&lt;/p&gt;

&lt;p&gt;ควรมีอย่างน้อย:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Smoke test สำหรับ endpoint สำคัญ&lt;/li&gt;
&lt;li&gt;Test การยืนยันตัวตน&lt;/li&gt;
&lt;li&gt;Schema validation&lt;/li&gt;
&lt;li&gt;Test flow หลายขั้นตอน เช่น login → create → fetch → verify&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. อัปเดตเอกสารให้สอดคล้องกับ API
&lt;/h3&gt;

&lt;p&gt;เอกสารควรเปลี่ยนไปพร้อม implementation หาก endpoint, parameter หรือ response เปลี่ยน ควรอัปเดตเอกสารและ test ที่เกี่ยวข้องใน pull request เดียวกัน&lt;/p&gt;

&lt;h2&gt;
  
  
  ใช้ Apidog CLI สำหรับการทดสอบและระบบอัตโนมัติของ Web Data API
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frah00b8nz7ax1hpxxux0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frah00b8nz7ax1hpxxux0.png" alt="Apidog CLI" width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;เมื่อ API workflow เติบโตขึ้น การส่ง request อย่างเดียวไม่เพียงพอ การพัฒนา API สมัยใหม่ต้องมีการตรวจสอบ การทดสอบ ระบบอัตโนมัติ และการทำงานร่วมกันตลอด lifecycle&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.apidog.com/introduction-to-apidog-cli-605134m0?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;&lt;strong&gt;Apidog CLI&lt;/strong&gt;&lt;/a&gt; นำความสามารถของ Apidog มาใช้จาก terminal และ CI/CD pipeline ได้โดยตรง&lt;/p&gt;

&lt;p&gt;นักพัฒนาสามารถใช้ CLI เพื่อจัดการทรัพยากร API เรียกใช้การทดสอบอัตโนมัติ ตรวจสอบ schema จัดการ environment และทำ workflow ซ้ำ ๆ ให้เป็นอัตโนมัติ โดยไม่ต้องออกจาก command line&lt;/p&gt;

&lt;h3&gt;
  
  
  การจัดการทรัพยากร API
&lt;/h3&gt;

&lt;p&gt;จัดการทรัพยากรจาก terminal ได้ เช่น:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTTP API endpoints&lt;/li&gt;
&lt;li&gt;Schema&lt;/li&gt;
&lt;li&gt;ทรัพยากรเอกสารประกอบ&lt;/li&gt;
&lt;li&gt;API assets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;แนวทางนี้ช่วยให้ definition ของ API อยู่ใน workflow การพัฒนาของทีมได้ชัดเจนขึ้น&lt;/p&gt;

&lt;h2&gt;
  
  
  การทดสอบ API อัตโนมัติ
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3p69hhjudj3pzu9a64e3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3p69hhjudj3pzu9a64e3.png" alt="Automated API testing" width="799" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Apidog CLI รองรับ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;กรณีทดสอบ (Test cases)&lt;/li&gt;
&lt;li&gt;สถานการณ์ทดสอบ (Test scenarios)&lt;/li&gt;
&lt;li&gt;ชุดทดสอบ (Test suites)&lt;/li&gt;
&lt;li&gt;การดำเนินการแบบอัตโนมัติ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;คุณสามารถรันการทดสอบในเครื่องระหว่างพัฒนา หรือเรียกใช้ผ่าน CI/CD pipeline ก่อน merge และ deploy&lt;/p&gt;

&lt;h2&gt;
  
  
  การจัดการสถานการณ์ทดสอบ
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1nqxc1253szf094en81h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1nqxc1253szf094en81h.png" alt="Test scenario management" width="799" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;API workflow ที่ซับซ้อนมักมีหลายขั้นตอน เช่น:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ยืนยันตัวตนผู้ใช้&lt;/li&gt;
&lt;li&gt;สร้างทรัพยากร&lt;/li&gt;
&lt;li&gt;เรียกคืนทรัพยากร&lt;/li&gt;
&lt;li&gt;ตรวจสอบ response&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Apidog CLI รองรับสถานการณ์ทดสอบแบบหลายขั้นตอนด้วย:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;การแยกตัวแปร&lt;/li&gt;
&lt;li&gt;Assertions&lt;/li&gt;
&lt;li&gt;Request chaining&lt;/li&gt;
&lt;li&gt;การควบคุม flow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ตัวอย่างแนวคิดของ flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Login
  ↓
Extract access token
  ↓
Create resource
  ↓
Fetch resource
  ↓
Assert expected fields
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  การตรวจสอบ Schema
&lt;/h2&gt;

&lt;p&gt;ก่อนสร้างหรืออัปเดตทรัพยากร API ให้ตรวจสอบไฟล์ JSON กับ schema ที่กำหนดไว้ล่วงหน้า&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apidog cli-schema validate endpoint-create &lt;span class="nt"&gt;--file&lt;/span&gt; ./endpoint.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;การตรวจสอบนี้ช่วยจับปัญหาก่อนส่งการเปลี่ยนแปลง เช่น:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ฟิลด์ที่หายไป&lt;/li&gt;
&lt;li&gt;ชนิดข้อมูลไม่ถูกต้อง&lt;/li&gt;
&lt;li&gt;โครงสร้าง JSON ไม่ถูกต้อง&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  การจัดการสภาพแวดล้อมและตัวแปร
&lt;/h2&gt;

&lt;p&gt;แต่ละ environment มักใช้ค่าการกำหนดค่าต่างกัน เช่น:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;URL สำหรับ development&lt;/li&gt;
&lt;li&gt;สภาพแวดล้อมทดสอบ&lt;/li&gt;
&lt;li&gt;Endpoint สำหรับ production&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Apidog CLI ช่วยจัดการ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Environments&lt;/li&gt;
&lt;li&gt;Variables&lt;/li&gt;
&lt;li&gt;Runtime settings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ควรแยกค่าระหว่าง environment และหลีกเลี่ยงการใช้ production credential ในงานทดสอบ&lt;/p&gt;

&lt;h2&gt;
  
  
  การรองรับการนำเข้าและส่งออก
&lt;/h2&gt;

&lt;p&gt;โปรเจกต์ API อาจต้องย้ายข้อมูลระหว่างเครื่องมือ Apidog CLI รองรับการนำเข้าและส่งออกข้อมูล API หลายรูปแบบ เช่น:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OpenAPI&lt;/li&gt;
&lt;li&gt;Postman&lt;/li&gt;
&lt;li&gt;HAR&lt;/li&gt;
&lt;li&gt;JMeter&lt;/li&gt;
&lt;li&gt;WSDL&lt;/li&gt;
&lt;li&gt;Markdown&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ช่วยให้สามารถนำ API assets ที่มีอยู่มารวมเข้ากับ workflow ใหม่ได้ง่ายขึ้น&lt;/p&gt;

&lt;h1&gt;
  
  
  การติดตั้ง Apidog CLI
&lt;/h1&gt;

&lt;p&gt;ติดตั้ง Apidog CLI ผ่าน npm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; apidog-cli@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;หลังติดตั้ง ให้ตรวจสอบว่าคำสั่งพร้อมใช้งาน:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apidog &lt;span class="nt"&gt;--help&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  การยืนยันตัวตนด้วย Apidog CLI
&lt;/h1&gt;

&lt;p&gt;ก่อนเข้าถึงโปรเจกต์ส่วนตัว ให้ยืนยันตัวตนด้วย token:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apidog login &lt;span class="nt"&gt;--with-token&lt;/span&gt; &amp;lt;token&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;CLI จะจัดเก็บข้อมูลการยืนยันตัวตนไว้ในเครื่องเพื่อใช้กับคำสั่งต่อไป&lt;/p&gt;

&lt;p&gt;สำหรับ CI/CD ไม่ควรใส่ token ลงในไฟล์ pipeline โดยตรง ให้เก็บไว้ใน repository secrets แล้วอ้างอิงผ่าน environment variable&lt;/p&gt;

&lt;h1&gt;
  
  
  การเรียกใช้การทดสอบ API จาก Command Line
&lt;/h1&gt;

&lt;p&gt;เรียกใช้ test scenario จาก terminal ได้โดยตรง:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apidog run &lt;span class="nt"&gt;--access-token&lt;/span&gt; &lt;span class="nv"&gt;$APIDOG_ACCESS_TOKEN&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; &amp;lt;testScenarioId&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;รูปแบบนี้ช่วยให้คุณใส่ API test เข้าไปใน workflow การพัฒนาอัตโนมัติได้ เช่น รันก่อน merge pull request หรือก่อน deploy&lt;/p&gt;

&lt;h1&gt;
  
  
  การรวมการทดสอบ Web Data API เข้ากับ CI/CD
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8i7wt7kg0d6vekz4hngv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8i7wt7kg0d6vekz4hngv.png" alt="Web Data API CI/CD" width="799" height="578"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ทีมสมัยใหม่ควรรัน API test ทุกครั้งที่มีการเปลี่ยนแปลงโค้ดหรือ configuration ที่เกี่ยวข้องกับ API&lt;/p&gt;

&lt;p&gt;Apidog CLI สามารถทำงานร่วมกับ CI/CD platform เช่น:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Actions&lt;/li&gt;
&lt;li&gt;GitLab CI/CD&lt;/li&gt;
&lt;li&gt;Jenkins&lt;/li&gt;
&lt;li&gt;Azure Pipelines&lt;/li&gt;
&lt;li&gt;CircleCI&lt;/li&gt;
&lt;li&gt;Bitbucket Pipelines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ตัวอย่างขั้นตอนที่ควรอยู่ใน pipeline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Install dependencies
  ↓
Run unit tests
  ↓
Run API schema validation
  ↓
Run API test scenarios
  ↓
Deploy only when tests pass
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;แนวทางนี้ช่วยให้ทีมตรวจพบปัญหา API ก่อนเข้าสู่ production&lt;/p&gt;

&lt;h1&gt;
  
  
  Web Data API และอนาคตของการพัฒนา
&lt;/h1&gt;

&lt;p&gt;API จะสำคัญมากขึ้นตามการเติบโตของ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;แอปพลิเคชัน AI&lt;/li&gt;
&lt;li&gt;บริการคลาวด์&lt;/li&gt;
&lt;li&gt;ไมโครเซอร์วิส&lt;/li&gt;
&lt;li&gt;แอปพลิเคชันมือถือ&lt;/li&gt;
&lt;li&gt;แพลตฟอร์มที่ขับเคลื่อนด้วยข้อมูล&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;นักพัฒนาจึงต้องก้าวข้ามการทดสอบ endpoint ด้วยมือ และนำแนวทางที่รองรับ schema validation, automation และ CI/CD integration มาใช้&lt;/p&gt;

&lt;p&gt;เครื่องมือ command line มีประโยชน์เป็นพิเศษ เพราะสามารถทำงานร่วมกับ pipeline ระบบอัตโนมัติและสภาพแวดล้อมการพัฒนาสมัยใหม่ได้โดยตรง&lt;/p&gt;

&lt;h1&gt;
  
  
  ข้อคิดสุดท้าย
&lt;/h1&gt;

&lt;p&gt;Web Data API คือรากฐานของแอปพลิเคชันสมัยใหม่ ช่วยให้ระบบเชื่อมต่อกัน ดึงข้อมูลจากภายนอก และสร้างประสบการณ์ผู้ใช้ที่สมบูรณ์ขึ้น&lt;/p&gt;

&lt;p&gt;แต่ API integration ที่น่าเชื่อถือไม่ได้เกิดจากการส่ง HTTP request เพียงอย่างเดียว คุณต้องมีการจัดการ secret การตรวจสอบ response การทดสอบ schema เอกสารที่เป็นปัจจุบัน และ automated test ที่รันได้ใน CI/CD&lt;/p&gt;

&lt;p&gt;เมื่อรวมแนวทางเหล่านี้เข้ากับเครื่องมืออัตโนมัติ เช่น Apidog CLI ทีมจะลดงานทดสอบด้วยมือ ตรวจพบปัญหาได้เร็วขึ้น และรักษาคุณภาพของ API ได้ดีขึ้นเมื่อระบบเติบโต&lt;/p&gt;

</description>
    </item>
    <item>
      <title>เครื่องมือ API ยังจำเป็นอยู่ไหมในยุคเอไอเอเจนต์</title>
      <dc:creator>Thanawat Wongchai</dc:creator>
      <pubDate>Tue, 21 Jul 2026 10:18:22 +0000</pubDate>
      <link>https://dev.to/thanawat_wonchai/ekhruuengmuue-api-yangcchamepnyuuaihmainyukheaieecchnt-5cjl</link>
      <guid>https://dev.to/thanawat_wonchai/ekhruuengmuue-api-yangcchamepnyuuaihmainyukheaieecchnt-5cjl</guid>
      <description>&lt;p&gt;คุณให้ Cursor สร้างเอนด์พอยต์ ให้ Copilot เติมเนื้อหาคำขอ ให้ Claude Code เขียนและรันการทดสอบหนึ่งรอบ คำถามที่ตามมาคือ: เมื่อเอเจนต์ทำงานเหล่านี้ได้แล้ว เรายังต้องมีเครื่องมือ API โดยเฉพาะหรือไม่?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;ลองใช้ Apidog วันนี้&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;คำตอบคือยังต้องมี แต่บทบาทเปลี่ยนไป&lt;/strong&gt; เอเจนต์ AI สร้างคำขอ API, สเปก และการทดสอบได้เร็วขึ้น งานที่ลดลงคือการพิมพ์คำขอด้วยมือ งานที่สำคัญขึ้นคือการรันการทดสอบแบบทำซ้ำได้ การเก็บสเปกให้เป็นแหล่งข้อมูลจริง และการตรวจสอบสิ่งที่เอเจนต์ส่งออกไป&lt;/p&gt;

&lt;p&gt;เอเจนต์เก่งในการสร้างงาน API แต่ไม่ควรเป็นผู้ตรวจงานของตัวเอง บทความนี้อธิบายงานที่เอเจนต์ช่วยลดภาระได้จริง งานที่ยังต้องใช้เครื่องมือเฉพาะ และตำแหน่งของ &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; ในเวิร์กโฟลว์นี้ หากต้องการลงมือทำ ดูคู่มือ &lt;a href="https://apidog.com/th/blog/ai-agents-api-testing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;การใช้เอเจนต์ AI สำหรับการทดสอบ API&lt;/a&gt; และดู &lt;a href="https://modelcontextprotocol.io" rel="noopener noreferrer"&gt;Model Context Protocol&lt;/a&gt; สำหรับโปรโตคอลที่เชื่อมเอเจนต์เข้ากับสเปก&lt;/p&gt;

&lt;h2&gt;
  
  
  เกิดอะไรขึ้นเมื่อเอเจนต์เข้าสู่ขั้นตอนการทำงาน
&lt;/h2&gt;

&lt;p&gt;เดิมไคลเอนต์ API คือพื้นที่ทำงานแบบแมนนวล: พิมพ์ URL, ตั้ง header, วาง token, บันทึกคำขอ และเขียน assertion&lt;/p&gt;

&lt;p&gt;ตอนนี้เอเจนต์ช่วยร่างคำขอ โค้ดไคลเอนต์ การทดสอบ และบางครั้งรวมถึงไฟล์ OpenAPI ได้ ทำให้ทีมขนาดเล็กส่งเอนด์พอยต์ เวอร์ชัน และการเปลี่ยนแปลงได้มากขึ้น&lt;/p&gt;

&lt;p&gt;แต่ผลลัพธ์ที่สร้างได้มากขึ้นไม่ได้ลดความจำเป็นของเกตตรวจสอบ กลับเพิ่มความสำคัญของมัน เช่นเดียวกับคอมไพเลอร์และลินเทอร์ที่เพิ่มปริมาณโค้ดที่คุณสร้างได้ แต่ไม่ได้แทนที่ชุดทดสอบ&lt;/p&gt;

&lt;p&gt;สำหรับ API จุดคอขวดจึงเปลี่ยนจาก “เขียนคำขอ” เป็น “เชื่อถือสิ่งที่ถูกสร้างขึ้น”&lt;/p&gt;

&lt;h2&gt;
  
  
  สี่งานที่เอเจนต์ AI ไม่ได้แบ่งเบาภาระของคุณ
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;งาน&lt;/th&gt;
&lt;th&gt;เอเจนต์ทำได้เอง?&lt;/th&gt;
&lt;th&gt;สิ่งที่ยังต้องการเครื่องมือ&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ร่างคำขอหรือการทดสอบเบื้องต้น&lt;/td&gt;
&lt;td&gt;ใช่ ทำได้ดี&lt;/td&gt;
&lt;td&gt;พื้นที่สำหรับรัน บันทึก และรันซ้ำ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;รันชุดทดสอบและควบคุม CI เมื่อผ่านหรือไม่ผ่าน&lt;/td&gt;
&lt;td&gt;ไม่ ผลลัพธ์อาจต่างกัน&lt;/td&gt;
&lt;td&gt;รันเนอร์แบบกำหนดผลได้ในไปป์ไลน์&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;เก็บสเปก API เป็นแหล่งความจริง&lt;/td&gt;
&lt;td&gt;ไม่ อาจคลาดเคลื่อน&lt;/td&gt;
&lt;td&gt;ที่เก็บสเปกที่เอเจนต์อ่านได้&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;สร้างการเรียกใช้ที่ล้มเหลวซ้ำสำหรับมนุษย์&lt;/td&gt;
&lt;td&gt;ไม่&lt;/td&gt;
&lt;td&gt;ประวัติคำขอที่ตรวจสอบได้&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;จำลอง upstream 500, 429 หรือ timeout&lt;/td&gt;
&lt;td&gt;บางส่วน&lt;/td&gt;
&lt;td&gt;เซิร์ฟเวอร์จำลองที่ควบคุมได้&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ตัดสินว่าสัญญาถูกต้อง&lt;/td&gt;
&lt;td&gt;ไม่&lt;/td&gt;
&lt;td&gt;มนุษย์ร่วมกับการยืนยัน&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;สี่งานที่ตอบว่า “ไม่” คือจุดที่ยังควรเก็บเครื่องมือ API ไว้ในเวิร์กโฟลว์&lt;/p&gt;

&lt;h3&gt;
  
  
  1. รันและควบคุมการทดสอบอย่างเด็ดขาด
&lt;/h3&gt;

&lt;p&gt;เอเจนต์มีลักษณะ probabilistic หากสั่งให้รันงานเดิมสองครั้ง คุณอาจได้สรุปหรือคำตัดสินคนละแบบ นี่เหมาะกับการสำรวจ แต่ไม่เหมาะกับ merge gate ที่คอมมิตเดียวกันควรให้ผลผ่านหรือไม่ผ่านแบบเดิมทุกครั้ง&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fohnu5y4f1dhi4vpa2cbm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fohnu5y4f1dhi4vpa2cbm.png" alt="การรันทดสอบ API ใน CI" width="800" height="531"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;แนวทางที่ใช้งานได้จริงคือแยกหน้าที่ให้ชัดเจน:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ให้เอเจนต์ร่าง test case หรือ assertion&lt;/li&gt;
&lt;li&gt;บันทึก test case ไว้ในโปรเจกต์&lt;/li&gt;
&lt;li&gt;ให้ CI รันชุดทดสอบทุก pull request&lt;/li&gt;
&lt;li&gt;ให้ exit code เป็นตัวตัดสินว่าจะ merge ได้หรือไม่&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ตัวอย่างแนวคิดใน CI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Run API tests&lt;/span&gt;
  &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;apidog-cli run --environment ci&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;คำถามตรวจสอบง่าย ๆ คือ: หากสัญญา API เสีย ระบบทำให้บิลด์ล้มเหลวได้โดยไม่มีคนเฝ้าหรือไม่?&lt;/p&gt;

&lt;p&gt;หากมีเพียงเอเจนต์ในหน้าต่างแชทที่รันการทดสอบ คำตอบคือไม่ เพราะไม่มีใครรับประกันว่าจะรันแชทซ้ำในทุก pull request แต่รันเนอร์ใน CI ที่คืน exit code จริงทำได้&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/th/blog/apidog-cli-ai-agent-workflows?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog CLI ในเวิร์กโฟลว์เอเจนต์หรือ CI&lt;/a&gt; ใช้รันเคสทดสอบที่บันทึกไว้แบบ headless ส่งคืน exit code และทำให้บิลด์ล้มเหลวเมื่อสัญญาเสีย สำหรับรายละเอียดเรื่อง failure mode ดู &lt;a href="https://apidog.com/th/blog/production-ai-agent-reliability?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ทำไมเอเจนต์ AI จึงล้มเหลวในการผลิต&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. เก็บสัญญา API ไว้เป็นแหล่งความจริง
&lt;/h3&gt;

&lt;p&gt;ความผิดพลาดที่พบบ่อยคือเอเจนต์เรียกเอนด์พอยต์ที่ไม่มีอยู่ หรือใช้ฟิลด์ที่ถูกเปลี่ยนชื่อไปแล้วหลายคอมมิต เอเจนต์ไม่ได้รู้สคีมาจริงของคุณเสมอไป แต่มักเดาจากรูปแบบที่พบทั่วไป&lt;/p&gt;

&lt;p&gt;วิธีแก้ไม่ใช่เพียงเขียน prompt ให้ดีขึ้น แต่คือให้เอเจนต์เข้าถึงสเปกจริงผ่าน &lt;a href="https://modelcontextprotocol.io" rel="noopener noreferrer"&gt;Model Context Protocol&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ตัวอย่าง:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;เอเจนต์อาจเดาว่า API การชำระเงินใช้ &lt;code&gt;POST /v1/charges&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;แต่ API จริงของคุณอาจใช้ &lt;code&gt;POST /v1/payments&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;และอาจต้องมี idempotency header รวมถึง request body คนละรูปแบบ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;เมื่อเชื่อมสเปกผ่าน MCP เอเจนต์จะอ่าน path, schema และข้อกำหนดการยืนยันตัวตนก่อนเขียนโค้ด ลดข้อผิดพลาดตั้งแต่ขั้นตอนสร้างงาน&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/th/blog/apidog-mcp-server?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog MCP Server&lt;/a&gt; ทำให้คำจำกัดความ OpenAPI พร้อมใช้งานสำหรับ Cursor, Copilot, Claude Code หรือ Cline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx apidog-mcp-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;แนวทางนี้ใช้กับคำจำกัดความ &lt;a href="https://www.openapis.org/" rel="noopener noreferrer"&gt;OpenAPI&lt;/a&gt; ที่ทีมดูแลอยู่แล้ว และคำสั่งนี้ไม่ต้องมีบัญชีเพื่อเริ่มทดลอง ดูตัวอย่างเพิ่มใน &lt;a href="https://apidog.com/th/blog/vibe-coding-with-apidog-mcp-server?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;การเขียนโค้ดด้วย Apidog MCP Server&lt;/a&gt; และ &lt;a href="https://apidog.com/th/blog/api-client-cursor-copilot?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ยังต้องใช้ API client หรือไม่เมื่อเขียนโค้ดใน AI IDE&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. จำลองความล้มเหลวที่เอเจนต์ต้องเอาชีวิตรอด
&lt;/h3&gt;

&lt;p&gt;API จริงอาจตอบกลับ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;429&lt;/code&gt; เมื่อถูก rate limit&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;500&lt;/code&gt; ระหว่าง incident&lt;/li&gt;
&lt;li&gt;timeout เมื่อบางภูมิภาคมีปัญหา&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;โค้ดที่เอเจนต์สร้างต้องรับมือกับแต่ละกรณี เช่น retry, backoff หรือ fallback แต่คุณทดสอบเส้นทางเหล่านี้ไม่ได้หาก sandbox ตอบ &lt;code&gt;200 OK&lt;/code&gt; ตลอดเวลา&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fohnu5y4f1dhi4vpa2cbm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fohnu5y4f1dhi4vpa2cbm.png" alt="การจำลองความล้มเหลวของ API" width="800" height="531"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ให้ชี้โค้ดไปยัง mock server ที่ควบคุมได้ แล้วบังคับผลลัพธ์ที่ต้องการ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET /upstream-resource
→ 500 Internal Server Error
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;จากนั้นตรวจสอบว่าแอปทำสิ่งที่คาดหวังหรือไม่:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;429 → รอและลองใหม่ตาม backoff
500 → ใช้ fallback หรือแสดงข้อผิดพลาดที่เหมาะสม
timeout → ยกเลิกคำขอและคืนค่าที่จัดการได้
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Apidog smart mock ช่วยส่งคืน response เหล่านี้โดยไม่ต้องตั้งเซิร์ฟเวอร์ที่เสียขึ้นมาเอง ดูแนวทางเพิ่มเติมใน &lt;a href="https://apidog.com/th/blog/ai-agents-api-testing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;การทดสอบ API ด้วยเอเจนต์ AI&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. ดูสิ่งที่เอเจนต์ส่งไปจริง
&lt;/h3&gt;

&lt;p&gt;เมื่อ API call ล้มเหลว สรุปจากเอเจนต์ไม่ใช่หลักฐานบนเครือข่าย คุณต้องตรวจดูข้อมูลดิบ เช่น:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;request header&lt;/li&gt;
&lt;li&gt;request body&lt;/li&gt;
&lt;li&gt;status code&lt;/li&gt;
&lt;li&gt;response body&lt;/li&gt;
&lt;li&gt;ลำดับของการเรียกใช้&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;เอเจนต์อาจ “คิด” ว่าส่ง token ถูกต้อง แต่ไคลเอนต์จริงอาจส่ง token ที่หมดอายุ ความต่างนี้จะเห็นได้เมื่ออ่าน request และ response จริงเท่านั้น&lt;/p&gt;

&lt;p&gt;Apidog เก็บประวัติคำขอ และ &lt;a href="https://apidog.com/th/blog/ai-agent-debugger?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog AI Agent Debugger&lt;/a&gt; ช่วยไล่ดูการทำงานของเอเจนต์ทีละขั้น ทั้ง LLM call, MCP tool call และการแลกเปลี่ยนหลายรอบ&lt;/p&gt;

&lt;p&gt;ขอบเขตของเครื่องมือนี้ควรชัดเจน: Apidog ตรวจสอบพฤติกรรมของเอเจนต์บนเลเยอร์ API แต่ไม่ได้สร้าง รัน หรือประสานงานเอเจนต์ มันคือดีบักเกอร์ ไม่ใช่ runtime ดูเพิ่มเติมได้ใน &lt;a href="https://apidog.com/th/blog/can-ai-replace-api-testing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;AI สามารถแทนที่การทดสอบ API ได้หรือไม่&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  สิ่งที่เอเจนต์แทนที่ได้จริง
&lt;/h2&gt;

&lt;p&gt;เอเจนต์ลดงานซ้ำ ๆ ได้จริง โดยเฉพาะ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;การพิมพ์คำขอ CRUD ทั่วไปด้วยมือ&lt;/li&gt;
&lt;li&gt;โค้ดไคลเอนต์ boilerplate ในภาษาที่ทีมใช้&lt;/li&gt;
&lt;li&gt;ร่างแรกของ test หรือ mock&lt;/li&gt;
&lt;li&gt;การค้นหาเอนด์พอยต์ที่ถูกต้อง เมื่อเชื่อมสเปกผ่าน MCP&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ดังนั้น API client แบบแมนนวลในฐานะ “พื้นที่พิมพ์คำขอ” จึงสำคัญน้อยลงกว่าปี 2020 แต่เวิร์กโฟลว์ API ไม่ได้หายไป มันเปลี่ยนจากการสร้างด้วยมือไปสู่การตรวจสอบผลลัพธ์จากเอเจนต์&lt;/p&gt;

&lt;h2&gt;
  
  
  เมื่อคุณอาจไม่จำเป็นต้องมีเครื่องมือ API โดยเฉพาะ
&lt;/h2&gt;

&lt;p&gt;คุณอาจข้ามแพลตฟอร์ม API เต็มรูปแบบได้เมื่อ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;เขียนสคริปต์ใช้ครั้งเดียว และ &lt;code&gt;curl&lt;/code&gt; คำสั่งเดียวเพียงพอ&lt;/li&gt;
&lt;li&gt;สร้าง prototype คนเดียว มีเพียง 2–3 เอนด์พอยต์&lt;/li&gt;
&lt;li&gt;ไม่มีทีมอื่นหรือบริษัทอื่นต้องพึ่งพาสัญญา API ของคุณ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ในกรณีเหล่านี้ เอเจนต์ร่วมกับ &lt;code&gt;curl&lt;/code&gt; อาจเพียงพอ และแพลตฟอร์มเต็มรูปแบบอาจเกินความจำเป็น&lt;/p&gt;

&lt;p&gt;แต่ควรเพิ่มเครื่องมือเฉพาะเมื่อความเสี่ยงเพิ่มขึ้น เช่น:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API ถูกส่งต่อให้ผู้ใช้หรือทีมอื่น&lt;/li&gt;
&lt;li&gt;มี CI และ merge gate&lt;/li&gt;
&lt;li&gt;ทีมอื่นพัฒนาต่อบนสัญญาของคุณ&lt;/li&gt;
&lt;li&gt;response ที่ผิดพลาดสร้างต้นทุนหรือผลกระทบต่อระบบ&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Apidog มีบทบาทอย่างไรในเวิร์กโฟลว์ของเอเจนต์
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; ทำหน้าที่เป็นเลเยอร์ตรวจสอบที่กำหนดผลได้รอบเอเจนต์ของคุณ ไม่ใช่ agent framework และไม่ได้เขียนหรือตัดสินใจแทนเอเจนต์&lt;/p&gt;

&lt;p&gt;ในเวิร์กโฟลว์นี้ Apidog ใช้สำหรับ:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;รัน test ที่เอเจนต์ร่างไว้&lt;/li&gt;
&lt;li&gt;จัดเก็บสเปกที่เอเจนต์อ่านผ่าน MCP&lt;/li&gt;
&lt;li&gt;จำลอง failure response ที่โค้ดต้องรับมือ&lt;/li&gt;
&lt;li&gt;ตรวจสอบ request และ response เมื่อเกิดปัญหา&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;เริ่มต้นโดยไม่ต้องมีบัญชีได้ด้วย:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx apidog-mcp-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;จากนั้นใช้ CLI ใน CI เพื่อรันการทดสอบแบบ headless&lt;/p&gt;

&lt;p&gt;หากกำลังเปรียบเทียบเครื่องมือ ดู &lt;a href="https://apidog.com/th/blog/apidog-postman-ai-api-testing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog เทียบกับ Postman สำหรับการทดสอบ API ด้วย AI และ LLM&lt;/a&gt; หรือ &lt;a href="https://apidog.com/th/blog/30-best-api-testing-tools?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;30 เครื่องมือทดสอบ API ที่ดีที่สุด&lt;/a&gt; รวมถึงบทความ &lt;a href="https://apidog.com/th/blog/is-postman-dead-2026?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Postman ตายแล้วหรือไม่ในปี 2026&lt;/a&gt; และ &lt;a href="https://apidog.com/th/blog/best-api-testing-tools-ai-agents?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;เครื่องมือทดสอบ API ที่ดีที่สุดสำหรับเอเจนต์ AI&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ดาวน์โหลด Apidog&lt;/a&gt; เพื่อทำตามขั้นตอนข้างต้น โดยแผนฟรีครอบคลุมความสามารถที่กล่าวถึงในบทความนี้&lt;/p&gt;

&lt;h2&gt;
  
  
  คำถามที่พบบ่อย
&lt;/h2&gt;

&lt;h3&gt;
  
  
  เอเจนต์ AI สามารถแทนที่การทดสอบ API ได้ทั้งหมดหรือไม่?
&lt;/h3&gt;

&lt;p&gt;ไม่ได้ เอเจนต์ร่างการทดสอบได้ดี แต่การรันแบบกำหนดผลได้และการควบคุม merge จากผลทดสอบต้องใช้รันเนอร์ที่เสถียร ส่วนการตัดสินว่าสัญญาถูกต้องยังต้องอาศัยมนุษย์และการยืนยัน&lt;/p&gt;

&lt;h3&gt;
  
  
  ฉันยังต้องใช้ Postman หรือ Apidog หรือไม่ หากใช้ Cursor หรือ Copilot?
&lt;/h3&gt;

&lt;p&gt;โดยทั่วไปยังต้องใช้ สำหรับงานที่เอเจนต์ใน IDE ไม่ครอบคลุม:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ป้อนสเปก API จริงให้เอเจนต์ผ่าน &lt;a href="https://apidog.com/th/blog/apidog-mcp-server?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog MCP Server&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;รันการทดสอบที่ได้ใน CI&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;เอเจนต์เขียนการเรียกใช้ได้ แต่คุณยังต้องมีระบบตรวจสอบ&lt;/p&gt;

&lt;h3&gt;
  
  
  ไคลเอนต์ API ตายแล้วหรือไม่?
&lt;/h3&gt;

&lt;p&gt;ไม่ แต่จุดศูนย์ถ่วงเปลี่ยนไป งานพิมพ์คำขอด้วยมือลดลง ขณะที่งานรันการทดสอบ จำลองความล้มเหลว ควบคุม CI และตรวจสอบ traffic เพิ่มขึ้น&lt;/p&gt;

&lt;h3&gt;
  
  
  “การตรวจสอบที่เด็ดขาด” หมายถึงอะไร?
&lt;/h3&gt;

&lt;p&gt;อินพุตเดียวกันต้องให้ผลผ่านหรือไม่ผ่านเหมือนเดิมทุกครั้งที่รัน นี่คือสิ่งที่ CI ต้องพึ่งพา แต่เอเจนต์อาจให้ผลต่างกันในแต่ละรอบ จึงไม่ควรใช้เอเจนต์เองเป็น merge gate&lt;/p&gt;

&lt;h3&gt;
  
  
  Apidog ทำงานได้โดยไม่ต้องมีบัญชีหรือไม่?
&lt;/h3&gt;

&lt;p&gt;ส่วนที่ใช้กับเอเจนต์ทำได้ &lt;code&gt;npx apidog-mcp-server&lt;/code&gt; และ &lt;a href="https://apidog.com/th/blog/apidog-cli-ai-agent-workflows?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog CLI&lt;/a&gt; ทำงานแบบ headless โดยไม่ต้องเข้าสู่ระบบ จึงเชื่อมเข้ากับเอเจนต์หรือไปป์ไลน์ก่อน แล้วค่อยลงชื่อเข้าใช้ภายหลังได้&lt;/p&gt;

&lt;h2&gt;
  
  
  คำถามที่แท้จริง
&lt;/h2&gt;

&lt;p&gt;ประเด็นไม่ใช่ “เครื่องมือหรือเอเจนต์” แต่คือการแบ่งหน้าที่ให้ถูกต้อง&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;เอเจนต์ร่างคำขอ การทดสอบ และโค้ดไคลเอนต์&lt;/li&gt;
&lt;li&gt;เครื่องมือรันชุดทดสอบให้ได้ผลเดิมทุกครั้ง&lt;/li&gt;
&lt;li&gt;เครื่องมือเก็บสเปกที่เอเจนต์อ่านได้&lt;/li&gt;
&lt;li&gt;เครื่องมือจำลองความล้มเหลว&lt;/li&gt;
&lt;li&gt;เครื่องมือแสดงสิ่งที่เกิดขึ้นจริงบนเครือข่าย&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;เก็บทั้งสองส่วนไว้ และให้แต่ละส่วนทำงานที่มันทำได้ดีที่สุด&lt;/p&gt;

&lt;p&gt;เริ่มจาก &lt;code&gt;npx apidog-mcp-server&lt;/code&gt; และ &lt;a href="https://apidog.com/th/blog/apidog-cli-ai-agent-workflows?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog CLI&lt;/a&gt; หรือ &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ลองใช้ Apidog ฟรี&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>การกู้คืนข้อผิดพลาด AI Agent: รูปแบบ Retry, Timeout, Backoff และ Circuit Breaker</title>
      <dc:creator>Thanawat Wongchai</dc:creator>
      <pubDate>Tue, 21 Jul 2026 08:57:18 +0000</pubDate>
      <link>https://dev.to/thanawat_wonchai/kaarkuukhuuenkhphidphlaad-ai-agent-ruupaebb-retry-timeout-backoff-aela-circuit-breaker-48n2</link>
      <guid>https://dev.to/thanawat_wonchai/kaarkuukhuuenkhphidphlaad-ai-agent-ruupaebb-retry-timeout-backoff-aela-circuit-breaker-48n2</guid>
      <description>&lt;p&gt;เอเจนต์ของคุณเรียกใช้ API แล้วได้รับสถานะ &lt;code&gt;429 Too Many Requests&lt;/code&gt; จึงพยายามเรียกซ้ำทันที ได้ &lt;code&gt;429&lt;/code&gt; อีกครั้ง แล้ววนซ้ำต่อไปจนงานหยุดลงหรือค่าใช้จ่ายพุ่งสูงขึ้น ไม่มีใครตั้งใจเขียนวงจรแบบนี้ แต่มันมักเกิดจากการจัดการข้อผิดพลาดแบบตรงไปตรงมาเกินไป และเป็นปัญหาที่พบบ่อยใน&lt;a href="https://github.com/anthropics/anthropic-sdk-python/discussions/1341" rel="noopener noreferrer"&gt;กระดานสนทนา Anthropic SDK&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;ลองใช้ Apidog วันนี้&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;การกู้คืนข้อผิดพลาดคือสิ่งที่แยกเดโมที่ดูดีออกจากเอเจนต์ที่พร้อมใช้งานจริง ปัญหาไม่ได้อยู่ที่โมเดล แต่อยู่ที่โค้ดของคุณทำอะไรเมื่อ tool call ช้า ถูกจำกัดอัตรา หรือใช้งานไม่ได้ หากออกแบบถูกต้อง dependency ที่ไม่เสถียรจะกลายเป็นเพียงการหยุดชั่วคราวที่ผู้ใช้แทบไม่สังเกตเห็น แต่หากออกแบบผิด สถานะ &lt;code&gt;500&lt;/code&gt; ครั้งเดียวอาจลุกลามเป็น incident ได้&lt;/p&gt;

&lt;p&gt;บทความนี้ครอบคลุม 4 รูปแบบหลักสำหรับการกู้คืน:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Retry ด้วย Exponential Backoff และ Jitter&lt;/li&gt;
&lt;li&gt;Timeout สำหรับทุกการเรียกออก&lt;/li&gt;
&lt;li&gt;Circuit Breaker&lt;/li&gt;
&lt;li&gt;Idempotency Key&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;จากนั้นจะนำทั้งหมดไปทดสอบกับ Mock API ก่อนที่ผู้ใช้จริงจะพบช่องโหว่ สำหรับภาพรวมเพิ่มเติมเกี่ยวกับความล้มเหลวของเอเจนต์ AI ใน production โปรดดู&lt;a href="https://apidog.com/th/blog/production-ai-agent-reliability?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;สาเหตุที่เอเจนต์ AI พังในการใช้งานจริง&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  คุณไม่สามารถทดสอบการกู้คืนกับ API ที่ทำงานปกติได้
&lt;/h2&gt;

&lt;p&gt;นี่คือกับดักที่พบบ่อย: dependency ทำงานปกติใน development คุณเขียนเอเจนต์ การเรียกสำเร็จ เดโมผ่าน แล้วจึง deploy แต่โค้ด recovery ไม่เคยถูกเรียกใช้งานเลย เพราะ API ไม่ได้ส่ง error ที่คุณต้องจัดการ&lt;/p&gt;

&lt;p&gt;ผลคือครั้งแรกที่ retry, timeout หรือ circuit breaker ทำงาน คือระหว่าง incident จริงที่มีผู้ใช้กำลังรออยู่&lt;/p&gt;

&lt;p&gt;แนวทางที่ถูกต้องคือต้องสร้าง failure โดยตั้งใจ:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;สร้าง Mock ของ API ที่เอเจนต์เรียกใช้&lt;/li&gt;
&lt;li&gt;กำหนดให้ Mock ส่งกลับ &lt;code&gt;429&lt;/code&gt;, &lt;code&gt;500&lt;/code&gt;, timeout หรือ response body ที่ผิดรูปแบบ&lt;/li&gt;
&lt;li&gt;ชี้ tool ของเอเจนต์ไปยัง Mock แทน service จริง&lt;/li&gt;
&lt;li&gt;ตรวจสอบว่าเอเจนต์ retry, back off, หยุด retry หรือส่ง error กลับอย่างไร&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ด้วยวิธีนี้ failure จะเป็นสิ่งที่คุณเรียกใช้ได้ใน test suite แทนที่จะเป็นสิ่งที่ปลุกคุณตอนตี 3 คุณสามารถใช้&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;เพื่อสร้าง Mock และกำหนด response sequence สำหรับสถานการณ์เหล่านี้&lt;/p&gt;

&lt;h2&gt;
  
  
  Retry ด้วย Exponential Backoff และ Jitter
&lt;/h2&gt;

&lt;p&gt;Retry คือแนวป้องกันแรก แต่ retry แบบ “เจอ error แล้วเรียกใหม่ทันที” คือกับดัก&lt;/p&gt;

&lt;p&gt;เมื่อบริการกำลังรับภาระสูง ไคลเอ็นต์ที่ล้มเหลวทุกตัวจะ retry พร้อมกัน ทำให้ dependency ถูกถล่มหนักกว่าเดิม ปัญหานี้มักเรียกว่า retry storm&lt;/p&gt;

&lt;p&gt;ให้ใช้ 2 เทคนิคคู่กัน:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Exponential Backoff&lt;/strong&gt;: เพิ่มเวลารอเป็นลำดับ เช่น 1, 2, 4, 8 วินาที&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jitter&lt;/strong&gt;: เพิ่มค่าสุ่มในเวลารอ เพื่อไม่ให้ไคลเอ็นต์จำนวนมาก retry พร้อมกัน&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ตัวอย่าง Python สำหรับ retry ที่มีเพดานจำนวนครั้งและเพดาน delay:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;MAX_RETRIES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="n"&gt;MAX_DELAY_SECONDS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;retry_delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;attempt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;base_delay&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="n"&gt;attempt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MAX_DELAY_SECONDS&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;jitter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;uniform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;base_delay&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.25&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;base_delay&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;jitter&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;call_api&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;attempt&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MAX_RETRIES&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;  &lt;span class="c1"&gt;# connect timeout, read timeout
&lt;/span&gt;            &lt;span class="p"&gt;)&lt;/span&gt;

            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;429&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;retry_after&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Retry-After&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;retry_after&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                    &lt;span class="n"&gt;delay&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;retry_after&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                    &lt;span class="n"&gt;delay&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;retry_delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;attempt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

                &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="k"&gt;continue&lt;/span&gt;

            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;600&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;retry_delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;attempt&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
                &lt;span class="k"&gt;continue&lt;/span&gt;

            &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exceptions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;retry_delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;attempt&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;RuntimeError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;API call failed after maximum retry attempts&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ควรจำกัด 2 ค่าเสมอ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;จำนวนครั้งที่ retry&lt;/strong&gt; เพื่อไม่ให้ permanent failure กลายเป็น loop&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;เวลารอสูงสุด&lt;/strong&gt; เพื่อไม่ให้ผู้ใช้ต้องรอหลายนาที&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;โดยทั่วไป retry ประมาณ 3–5 ครั้งมักเพียงพอสำหรับ transient error หากมากกว่านั้น คุณอาจกำลัง retry สิ่งที่ไม่มีทางสำเร็จ&lt;/p&gt;

&lt;p&gt;Anthropic SDK มีการ retry สำหรับบาง error ของการเรียก SDK เองด้วย Exponential Backoff และกำหนดจำนวนครั้งได้ผ่าน &lt;code&gt;max_retries&lt;/code&gt; แต่ไม่ได้ครอบคลุม API อื่นที่ tool ของเอเจนต์เรียกใช้ คุณยังต้องนำรูปแบบนี้ไปใช้กับ dependency ของคุณเอง&lt;/p&gt;

&lt;p&gt;สำหรับตัวอย่างความเสียหายที่เกิดจาก retry ที่ออกแบบไม่ดี โปรดดู&lt;a href="https://apidog.com/th/blog/fintech-api-retry-logic?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ตรรกะการลองใหม่สำหรับ API ที่มีความเสี่ยงสูง&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ตั้งค่า Timeout ในทุกการเรียกใช้
&lt;/h2&gt;

&lt;p&gt;Retry ช่วยได้เมื่อ request ล้มเหลว แต่กรณีที่แย่กว่าคือ request ที่ไม่ตอบกลับเลย&lt;/p&gt;

&lt;p&gt;Dependency อาจรับ connection แล้วค้างอยู่โดยไม่ส่ง response หากไม่มี timeout tool call จะ block และ workflow ทั้งหมดอาจหยุดอยู่บน socket เดียว ไม่มี error ไม่มี retry และไม่มี recovery&lt;/p&gt;

&lt;p&gt;ทุก outbound call ควรมีอย่างน้อย 3 ระดับ:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Connect timeout&lt;/strong&gt; — เวลาสูงสุดสำหรับการเปิด connection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read timeout&lt;/strong&gt; — เวลาสูงสุดสำหรับการรอ response&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Operation deadline&lt;/strong&gt; — งบเวลารวมของงานหรือ workflow ทั้งหมด&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ตัวอย่างด้วย &lt;code&gt;httpx&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;httpx&lt;/span&gt;

&lt;span class="n"&gt;timeout&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;httpx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Timeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;connect&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;3.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;10.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;10.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;pool&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;5.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;httpx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.example.com/search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;หากคุณมี agent workflow หลายขั้นตอน ให้กำหนด deadline ระดับงานด้วย ตัวอย่างเช่น หากผู้ใช้รอได้สูงสุด 30 วินาที อย่าปล่อยให้ tool call เดียวใช้เวลา 25 วินาที แล้วให้ retry อีกหลายครั้งจนเกินงบ&lt;/p&gt;

&lt;p&gt;เลือก timeout จาก latency จริง ไม่ใช่การเดา:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ใช้ค่า p99 ของ dependency เป็นจุดเริ่มต้น&lt;/li&gt;
&lt;li&gt;เพิ่ม buffer สำหรับ network variability&lt;/li&gt;
&lt;li&gt;อย่าตั้งสั้นเกินไปจนตัด request ที่ควรสำเร็จ&lt;/li&gt;
&lt;li&gt;อย่าตั้งนานเกินไปจน dependency ที่ค้างทำให้ agent ใช้งานไม่ได้&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;สำหรับ streaming response ควรมี timeout แยกต่างหาก เพราะงาน streaming ที่ใช้เวลานานอาจเป็นพฤติกรรมปกติ&lt;/p&gt;

&lt;h2&gt;
  
  
  ใช้ Circuit Breaker เมื่อ Dependency ล่ม
&lt;/h2&gt;

&lt;p&gt;Backoff เหมาะสำหรับบริการที่กำลังยุ่งชั่วคราว แต่ไม่เหมาะกับบริการที่ล่มต่อเนื่อง&lt;/p&gt;

&lt;p&gt;หาก dependency ล้มเหลวมาหลายนาที request ถัดไปก็มักจะล้มเหลวเช่นกัน การ retry ต่อไปจึงเพิ่มภาระให้ระบบที่เสียอยู่แล้ว และบังคับให้ผู้ใช้รอ timeout ที่คาดเดาได้&lt;/p&gt;

&lt;p&gt;Circuit Breaker มี 3 สถานะ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Closed&lt;/strong&gt;: สถานะปกติ Request ผ่านได้ และระบบนับ failure&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open&lt;/strong&gt;: เมื่อ failure เกินเกณฑ์ ระบบหยุดส่ง request ไปยัง dependency และ fail fast&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Half-open&lt;/strong&gt;: หลังช่วง cool-down ระบบอนุญาต probe request หนึ่งครั้ง หากสำเร็จจึงกลับไป Closed หากล้มเหลวจะกลับไป Open&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;แนวคิดแบบย่อ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CircuitBreaker&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;failure_threshold&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;failure_threshold&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;failure_threshold&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;failures&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;closed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;allow_request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;open&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;record_success&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;failures&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;closed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;record_failure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;failures&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;failures&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;failure_threshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;open&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ใน production คุณต้องเพิ่ม cool-down timer และ half-open probe แต่หลักสำคัญคือ:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;สร้าง Circuit Breaker แยกตาม dependency ไม่ใช่สร้างตัวเดียวทั่วทั้งเอเจนต์&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;ตัวอย่าง: หาก Search API ล่ม เอเจนต์ยังควรเรียก Billing API ที่ทำงานปกติได้&lt;/p&gt;

&lt;p&gt;สำหรับเอเจนต์ Circuit Breaker จะเปลี่ยน “Payment API ล่ม” ให้เป็น error ที่รวดเร็วและวิเคราะห์ได้ แทนที่จะปล่อยให้ workflow เสียเวลา timeout ซ้ำหลายครั้งจนใช้งบ token และเวลาหมด&lt;/p&gt;

&lt;h2&gt;
  
  
  ทำให้ Retry ปลอดภัยด้วย Idempotency Key
&lt;/h2&gt;

&lt;p&gt;Retry จะปลอดภัยก็ต่อเมื่อ operation นั้นทำซ้ำได้อย่างปลอดภัย แต่ request ที่เปลี่ยนแปลงสถานะมักไม่เป็นเช่นนั้น&lt;/p&gt;

&lt;p&gt;ตัวอย่าง:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;เอเจนต์ส่ง &lt;code&gt;POST /charge&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Server ประมวลผลการชำระเงินสำเร็จ&lt;/li&gt;
&lt;li&gt;Response timeout ระหว่างส่งกลับ&lt;/li&gt;
&lt;li&gt;เอเจนต์คิดว่า request ล้มเหลวและ retry&lt;/li&gt;
&lt;li&gt;ลูกค้าถูกเรียกเก็บเงิน 2 ครั้ง&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ปัญหาไม่ใช่ retry ทำงานผิด แต่เป็น request ถูกออกแบบโดยไม่มี idempotency&lt;/p&gt;

&lt;p&gt;ให้สร้าง Idempotency Key หนึ่งค่า สำหรับหนึ่ง logical operation แล้วส่งไปใน header:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;uuid&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;idempotency_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;uuid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;uuid4&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.example.com/charge&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;customer_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cus_123&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;amount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Idempotency-Key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;idempotency_key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ข้อสำคัญคือสร้าง key &lt;strong&gt;ก่อนเข้าสู่ retry loop&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;uuid&lt;/span&gt;

&lt;span class="n"&gt;idempotency_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;uuid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;uuid4&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;attempt&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.example.com/charge&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Idempotency-Key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;idempotency_key&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;อย่าสร้าง key ใหม่ในการ retry แต่ละครั้ง:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ไม่ถูกต้อง: retry แต่ละครั้งมี key ใหม่
&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;attempt&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.example.com/charge&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Idempotency-Key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;uuid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;uuid4&lt;/span&gt;&lt;span class="p"&gt;())},&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Server ต้องบันทึก key ที่พบครั้งแรก และเมื่อได้รับ key เดิมอีกครั้ง ต้องส่งผลลัพธ์เดิมกลับแทนการทำ operation ซ้ำ&lt;/p&gt;

&lt;p&gt;ใช้ Idempotency Key กับทุก request ที่สร้างหรือแก้ไข state เช่น:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;การชำระเงิน&lt;/li&gt;
&lt;li&gt;การสร้างคำสั่งซื้อ&lt;/li&gt;
&lt;li&gt;การส่งอีเมลหรือข้อความ&lt;/li&gt;
&lt;li&gt;การสร้าง record&lt;/li&gt;
&lt;li&gt;การอัปเดตข้อมูลสำคัญ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;สำหรับการเรียก read-only เช่น &lt;code&gt;GET /users/123&lt;/code&gt; โดยทั่วไป retry ได้โดยไม่ต้องใช้ key&lt;/p&gt;

&lt;p&gt;ดูรายละเอียดฝั่ง server ได้ในคู่มือ&lt;a href="https://apidog.com/th/blog/idempotency-key?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Idempotency Keys&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  รับมือ Rate Limits และวงจร &lt;code&gt;RateLimitError&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Rate limit ต้องได้รับการจัดการเป็นกรณีพิเศษ เพราะ server มักส่งคำแนะนำมาให้แล้ว&lt;/p&gt;

&lt;p&gt;Response &lt;code&gt;429&lt;/code&gt; มักมี header &lt;code&gt;Retry-After&lt;/code&gt; ซึ่งระบุเวลาที่ควรรอก่อน retry เช่น:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="k"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;1.1&lt;/span&gt; &lt;span class="m"&gt;429&lt;/span&gt; &lt;span class="ne"&gt;Too Many Requests&lt;/span&gt;
&lt;span class="na"&gt;Retry-After&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;30&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;หาก server บอกให้รอ 30 วินาที แต่คุณ retry ใน 2 วินาที คุณก็จะได้ &lt;code&gt;429&lt;/code&gt; อีกครั้ง และสร้าง RateLimitError loop:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ได้ &lt;code&gt;429&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;retry เร็วเกินไป&lt;/li&gt;
&lt;li&gt;ได้ &lt;code&gt;429&lt;/code&gt; อีกครั้ง&lt;/li&gt;
&lt;li&gt;ถูกจำกัดหนักขึ้น&lt;/li&gt;
&lt;li&gt;วนซ้ำจน workflow ล้มเหลว&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ดูรายละเอียดเพิ่มเติมได้ที่&lt;a href="https://apidog.com/th/blog/rate-limit-exceeded-guide?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;คู่มือแก้ไข Rate Limit Exceeded&lt;/a&gt;และ&lt;a href="https://github.com/anthropics/anthropic-sdk-python/discussions/1630" rel="noopener noreferrer"&gt;เธรด Anthropic SDK นี้&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ลำดับการจัดการที่ควรใช้คือ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_retry_delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;attempt&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;retry_after&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Retry-After&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;retry_after&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;retry_after&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;retry_delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;attempt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;หลักการคือ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ถ้ามี &lt;code&gt;Retry-After&lt;/code&gt; ให้เคารพค่าจาก server&lt;/li&gt;
&lt;li&gt;ถ้าไม่มี ให้ fallback ไปใช้ Exponential Backoff + Jitter&lt;/li&gt;
&lt;li&gt;จำกัดจำนวน retry เพื่อให้ sustained rate limit จบด้วย error ที่ชัดเจน&lt;/li&gt;
&lt;li&gt;อย่ารอแบบไม่มีที่สิ้นสุด&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;นอกจากนี้ควรป้องกันเชิงรุกด้วย rate limiter ฝั่ง client เช่น Token Bucket เพื่อควบคุมความเร็ว request ของตัวเองให้อยู่ภายใต้ quota ของ provider&lt;/p&gt;

&lt;p&gt;Recovery ช่วยจัดการ rate limit ที่เกิดขึ้นแล้ว ส่วน pacing ช่วยไม่ให้คุณไปชน rate limit ตั้งแต่แรก&lt;/p&gt;

&lt;h2&gt;
  
  
  วิธีทดสอบเส้นทางการกู้คืน
&lt;/h2&gt;

&lt;p&gt;รูปแบบ recovery จะมีค่าเมื่อคุณพิสูจน์ได้ว่ามันทำงานจริง โดยต้องใช้ Mock API ที่สร้าง failure ตามคำสั่งได้&lt;/p&gt;

&lt;p&gt;นำ flow ต่อไปนี้ไปใช้กับทุก dependency:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;สร้าง Mock ของ dependency&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Mock API ที่ tool ของเอเจนต์เรียกใช้ เพื่อควบคุม status code, header, response body และ delay ได้ทั้งหมด โดยไม่ต้องเรียกเก็บเงินจริงหรือส่งอีเมลจริง&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;กำหนด response sequence&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ตั้งค่าให้ endpoint เดียวตอบกลับตามลำดับ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ครั้งที่ 1: &lt;code&gt;429&lt;/code&gt; พร้อม &lt;code&gt;Retry-After: 2&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;ครั้งที่ 2: &lt;code&gt;500&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;ครั้งที่ 3: &lt;code&gt;200&lt;/code&gt; พร้อม body ที่ถูกต้อง&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ชี้เอเจนต์ไปยัง Mock&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
เปลี่ยน base URL ของ tool จาก service จริงเป็น Mock URL&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ยืนยันพฤติกรรม&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ตรวจสอบว่าเอเจนต์:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;รออย่างน้อย 2 วินาทีหลัง &lt;code&gt;429&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;retry หลัง &lt;code&gt;500&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;สำเร็จในการเรียกครั้งที่ 3&lt;/li&gt;
&lt;li&gt;ไม่เกินจำนวน retry ที่กำหนด&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ตัวอย่าง pseudo-test:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;test_agent_recovers_from_429_then_500&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mock_api&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;mock_api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sequence&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;429&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;headers&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Retry-After&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;body&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;error&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;temporary failure&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;body&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;result&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;success&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;])&lt;/span&gt;

    &lt;span class="n"&gt;started_at&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;elapsed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;started_at&lt;/span&gt;

    &lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;result&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;success&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;elapsed&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;mock_api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;request_count&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เพิ่ม test อีกอย่างน้อย 3 กลุ่ม:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Give-up path
&lt;/h3&gt;

&lt;p&gt;กำหนดให้ Mock ล้มเหลวทุกครั้ง แล้วตรวจสอบว่าเอเจนต์หยุดเมื่อถึง retry limit และส่ง error ที่ชัดเจน&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;test_agent_stops_after_retry_limit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mock_api&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;mock_api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;always_return&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;pytest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raises&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;RuntimeError&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;mock_api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;request_count&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Circuit Breaker path
&lt;/h3&gt;

&lt;p&gt;กำหนดให้ request ติดต่อกันล้มเหลว แล้วตรวจสอบว่า circuit เปิดและ request ถัดไป fail fast แทนการรอ timeout ทุกครั้ง&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Idempotency path
&lt;/h3&gt;

&lt;p&gt;กำหนดให้ Mock รับ mutating request สำเร็จ แต่ตัด response ทิ้งเพื่อให้ client คิดว่า timeout จากนั้นให้เอเจนต์ retry แล้วตรวจสอบว่า:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Request ทั้งสองมี &lt;code&gt;Idempotency-Key&lt;/code&gt; เดียวกัน&lt;/li&gt;
&lt;li&gt;Server ประมวลผล logical operation เพียงครั้งเดียว&lt;/li&gt;
&lt;li&gt;ไม่มีการสร้าง charge, order หรือ record ซ้ำ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;แนวทางที่ครอบคลุมกว่านี้อยู่ใน&lt;a href="https://apidog.com/th/blog/how-to-test-ai-agents-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;คู่มือทดสอบเอเจนต์ที่เรียกใช้ API ของคุณ&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  รายการตรวจสอบการกู้คืนข้อผิดพลาด
&lt;/h2&gt;

&lt;p&gt;ก่อน deploy เอเจนต์ ให้ตรวจสอบรายการนี้:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Outbound call ทุกตัวมี connect timeout, read timeout และ operation deadline&lt;/li&gt;
&lt;li&gt;[ ] Retry ใช้ Exponential Backoff พร้อม Jitter&lt;/li&gt;
&lt;li&gt;[ ] Retry มีเพดานทั้งจำนวนครั้งและเวลารอสูงสุด&lt;/li&gt;
&lt;li&gt;[ ] Response &lt;code&gt;429&lt;/code&gt; อ่านและเคารพ &lt;code&gt;Retry-After&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Circuit Breaker แยกตาม dependency&lt;/li&gt;
&lt;li&gt;[ ] Mutating request ทุกตัวมี Idempotency Key ที่คงที่ตลอด retry&lt;/li&gt;
&lt;li&gt;[ ] Give-up path ส่ง error ที่ชัดเจน ไม่ใช่ loop หรือการรอไม่สิ้นสุด&lt;/li&gt;
&lt;li&gt;[ ] Recovery flow ทุกแบบมี test ที่บังคับให้เกิด failure ผ่าน Mock&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;หากทำครบทั้งหมดนี้ เอเจนต์ของคุณจะกู้คืนจากความล้มเหลวได้โดยการออกแบบ ไม่ใช่ด้วยโชค&lt;/p&gt;

&lt;h2&gt;
  
  
  Apidog เหมาะกับอะไร และไม่เหมาะกับอะไร
&lt;/h2&gt;

&lt;p&gt;กำหนดขอบเขตของเครื่องมือให้ชัดเจน: Apidog ไม่ใช่ agent framework, model host หรือ runtime สำหรับเอเจนต์ ไม่ได้สร้าง รัน หรือจัดการเอเจนต์ของคุณ และไม่ได้ประเมินคุณภาพ output ของโมเดล&lt;/p&gt;

&lt;p&gt;สิ่งที่ Apidog ช่วยได้คือ API layer ที่เอเจนต์เรียกใช้ ซึ่งเป็นจุดที่ recovery สำเร็จหรือล้มเหลว&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo65oxtq6euo7601cx0xb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo65oxtq6euo7601cx0xb.png" alt="ภาพแสดงการทำงานของ Apidog" width="799" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;สำหรับ use case นี้ Apidog มีบทบาทหลัก 3 อย่าง:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Mock dependency&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
สร้าง stand-in ที่ควบคุมได้สำหรับ API ภายนอก&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;จำลอง failure response&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
กำหนด &lt;code&gt;429&lt;/code&gt; พร้อม &lt;code&gt;Retry-After&lt;/code&gt;, &lt;code&gt;500&lt;/code&gt;, timeout หรือ malformed body เพื่อทดสอบ recovery path&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ตรวจสอบ request ที่ Mock ได้รับ&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ตรวจว่า &lt;code&gt;Idempotency-Key&lt;/code&gt; มีอยู่และคงที่, request shape ถูกต้อง และจำนวน request เป็นไปตามที่คาดไว้&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;กล่าวคือ &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;ช่วยจำลอง failure ที่เอเจนต์ต้องรับมือ และตรวจสอบสิ่งที่เอเจนต์ส่งกลับไป&lt;/p&gt;

&lt;h2&gt;
  
  
  คำถามที่พบบ่อย
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Anthropic SDK ไม่จัดการ retry ให้แล้วหรือ?
&lt;/h3&gt;

&lt;p&gt;สำหรับการเรียกผ่าน SDK เอง ใช่ Anthropic SDK จะ retry error บางประเภทด้วย Exponential Backoff และเคารพ &lt;code&gt;Retry-After&lt;/code&gt; โดยกำหนดจำนวนครั้งสูงสุดผ่าน &lt;code&gt;max_retries&lt;/code&gt; ได้&lt;/p&gt;

&lt;p&gt;แต่ SDK ไม่ได้จัดการ API อื่นที่ tool ของเอเจนต์เรียกใช้ คุณต้องใช้ retry, timeout, circuit breaker และ idempotency pattern เดียวกันกับ dependency เหล่านั้นเอง&lt;/p&gt;

&lt;h3&gt;
  
  
  เมื่อไรที่ต้องใช้ Idempotency Key?
&lt;/h3&gt;

&lt;p&gt;ใช้กับทุก operation ที่สร้างหรือเปลี่ยนแปลง state เช่น charge, order, message ที่ส่งออก หรือ record ใหม่&lt;/p&gt;

&lt;p&gt;สำหรับ read-only call เช่น &lt;code&gt;GET&lt;/code&gt; โดยทั่วไป retry ได้โดยไม่จำเป็นต้องมี key&lt;/p&gt;

&lt;p&gt;สร้าง key หนึ่งครั้งต่อ logical action และใช้ key เดิมในทุก retry ของ action นั้น&lt;/p&gt;

&lt;h2&gt;
  
  
  ฝึกซ้อม Failure หนึ่งครั้งในสัปดาห์นี้
&lt;/h2&gt;

&lt;p&gt;คุณไม่จำเป็นต้องสร้างทั้ง 4 รูปแบบพร้อมกัน เริ่มจาก failure ที่สร้างความเสียหายมากที่สุดในระบบของคุณ ซึ่งมักเป็น rate-limit loop หรือ mutating request ที่ไม่มี idempotency&lt;/p&gt;

&lt;p&gt;ลองทำตามนี้:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;สร้าง Mock endpoint&lt;/li&gt;
&lt;li&gt;ตั้งค่าให้ตอบ &lt;code&gt;429&lt;/code&gt; พร้อม &lt;code&gt;Retry-After&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;จำลอง response timeout หลัง server ประมวลผล request&lt;/li&gt;
&lt;li&gt;ตรวจดูว่าเอเจนต์ back off อย่างถูกต้องหรือไม่&lt;/li&gt;
&lt;li&gt;ตรวจว่า retry ใช้ Idempotency Key เดิมหรือไม่&lt;/li&gt;
&lt;li&gt;ยืนยันว่าไม่มี operation ซ้ำเกิดขึ้น&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;เมื่อคุณเห็น retry ที่เว้นจังหวะถูกต้อง และเห็น Idempotency Key เดิมตลอดการ retry คุณจะมีเหตุผลที่ดีกว่าเดโมที่ราบรื่นในการเชื่อมั่นว่าเอเจนต์พร้อมรับมือกับ production failure&lt;/p&gt;

</description>
    </item>
    <item>
      <title>ระบบป้องกันเอเจนต์ AI: ด่านอนุมัติและการจำกัดรัศมีผลกระทบ</title>
      <dc:creator>Thanawat Wongchai</dc:creator>
      <pubDate>Tue, 21 Jul 2026 08:33:36 +0000</pubDate>
      <link>https://dev.to/thanawat_wonchai/rabbpngkaneecchnt-ai-daannumatiaelakaarcchamkadrasmiiphlkrathb-28mj</link>
      <guid>https://dev.to/thanawat_wonchai/rabbpngkaneecchnt-ai-daannumatiaelakaarcchamkadrasmiiphlkrathb-28mj</guid>
      <description>&lt;p&gt;เป็นเวลาตี 3 แล้ว เอเจนต์ของคุณกำลังจัดการคิวตั๋วสนับสนุน ตั๋วหนึ่งดูเหมือนต้องส่งเรื่องให้ผู้บริหาร เอเจนต์จึงเขียนสรุปและส่งอีเมลไปให้เจ้านายของคุณ สรุปนั้นถูกต้อง ไวยากรณ์ก็ดี แต่ไม่มีใครขออีเมลนั้น ไม่มีใครตรวจทานก่อน และไม่มีอะไรหยุดมันได้เมื่อเอเจนต์ตัดสินใจส่ง เอเจนต์ทำตามคำสั่งอย่างเคร่งครัด ซึ่งเป็นส่วนที่ควรทำให้คุณนอนไม่หลับ&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;ลองใช้ Apidog วันนี้&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;ความล้มเหลวที่สร้างความเสียหายมากที่สุดไม่ใช่โมเดลเข้าใจผิดหรือ workflow ล่ม เพราะปัญหาเหล่านั้นมักเห็นได้ชัดและตรวจจับง่ายกว่า ปัญหาที่อันตรายคือเอเจนต์ทำตามคำสั่งได้อย่างแม่นยำ แต่ผลลัพธ์ยังไม่ดี เพราะมันส่งอีเมล ลบข้อมูล หรือสั่งซื้อไปแล้ว โดยไม่มีชั้นควบคุมระหว่างการตัดสินใจของโมเดลกับการดำเนินการจริง&lt;/p&gt;

&lt;p&gt;Guardrail คือชั้นที่ตรวจสอบการกระทำก่อนเกิดผลข้างเคียง แล้วเลือกว่าจะอนุญาต บล็อก หรือขอให้มนุษย์อนุมัติ บทความนี้อธิบาย Guardrail 4 ประเภทที่นำไปใช้ได้จริง:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;รายการที่อนุญาตให้ทำงานอัตโนมัติ (allowlist)&lt;/li&gt;
&lt;li&gt;ด่านอนุมัติ (approval gate)&lt;/li&gt;
&lt;li&gt;โหมดทดลองทำงาน (dry-run)&lt;/li&gt;
&lt;li&gt;ข้อจำกัดขอบเขตความเสียหาย (blast-radius limits)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;และที่สำคัญคือการทดสอบเพื่อพิสูจน์ว่า Guardrail ใช้งานได้จริง หากต้องการบริบทเพิ่มเติม โปรดดู &lt;a href="https://apidog.com/th/blog/production-ai-agent-reliability?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;เหตุใดเอเจนต์ AI จึงล้มเหลวในการทำงานจริง&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  จัดเรียงการดำเนินการตามระดับความเสียหายที่อาจเกิดขึ้น
&lt;/h2&gt;

&lt;p&gt;ไม่ใช่ทุกการดำเนินการต้องผ่านการอนุมัติ เอเจนต์ที่อ่านปฏิทิน ดึงข้อมูลพยากรณ์ หรือเรียกดูรายงานแบบ read-only ควรทำงานอัตโนมัติได้ การบังคับให้มนุษย์กด “อนุมัติ” ทุกครั้งจะทำให้คนเริ่มกดผ่านโดยไม่ตรวจสอบ และด่านอนุมัติจะไร้ค่าเมื่อเกิดกรณีสำคัญจริง&lt;/p&gt;

&lt;p&gt;เริ่มจากแบ่งเครื่องมือหรือ endpoint ของเอเจนต์เป็น 2 กลุ่ม&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;กลุ่ม&lt;/th&gt;
&lt;th&gt;ตัวอย่าง&lt;/th&gt;
&lt;th&gt;พฤติกรรม&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Allowlist&lt;/td&gt;
&lt;td&gt;อ่านข้อมูล, ค้นหา, การดำเนินการแบบ idempotent, การแก้ไขที่ย้อนกลับได้&lt;/td&gt;
&lt;td&gt;รันอัตโนมัติ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ต้องมี Guardrail&lt;/td&gt;
&lt;td&gt;ส่งอีเมล, ลบข้อมูล, ชำระเงิน, เขียนข้อมูลลงระบบ, การกระทำที่ลูกค้าหรือทีมมองเห็น&lt;/td&gt;
&lt;td&gt;ขออนุมัติหรือบล็อก&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;ใช้คำถามนี้ช่วยตัดสินใจ:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“ถ้าเอเจนต์ทำสิ่งนี้ผิดพลาด 100 ครั้ง ผลเสียจะร้ายแรงแค่ไหน?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;ถ้าคำตอบไม่ใช่ “ไม่เป็นไร” การดำเนินการนั้นไม่ควรอยู่ใน allowlist&lt;/p&gt;

&lt;p&gt;อย่าจัดกลุ่มตาม HTTP verb เพียงอย่างเดียว ตัวอย่างเช่น &lt;code&gt;POST&lt;/code&gt; สร้างอีเมลฉบับร่างอาจย้อนกลับได้ แต่ &lt;code&gt;POST&lt;/code&gt; ที่สร้างและส่งอีเมลทันทีมีผลข้างเคียงที่ย้อนกลับยาก แม้โค้ดจะดูคล้ายกัน แต่ต้องจัดระดับความเสี่ยงจากผลลัพธ์จริง&lt;/p&gt;

&lt;p&gt;ตัวอย่าง policy แบบง่าย:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;ToolRisk&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;safe&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;approval_required&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;toolPolicy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Record&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ToolRisk&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;calendar.list&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;safe&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;weather.get&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;safe&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;tickets.search&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;safe&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;email.createDraft&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;safe&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;email.send&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;approval_required&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;customer.delete&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;approval_required&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;payment.create&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;approval_required&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;issue.close&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;approval_required&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;requiresApproval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;toolName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;toolPolicy&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;toolName&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;safe&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;กำหนดค่าเริ่มต้นให้เป็น &lt;code&gt;approval_required&lt;/code&gt; เสมอ หากมีเครื่องมือใหม่ที่ยังไม่ได้จัดประเภท อย่าปล่อยให้มันทำงานอัตโนมัติโดยบังเอิญ&lt;/p&gt;

&lt;h2&gt;
  
  
  ให้มนุษย์เข้ามาเกี่ยวข้องในการดำเนินการที่ก่อความเสียหาย
&lt;/h2&gt;

&lt;p&gt;เมื่อรู้แล้วว่าการดำเนินการใดมีความเสี่ยง ให้เพิ่ม approval gate เอเจนต์ต้องหยุดก่อนเรียกใช้เครื่องมือ แสดงสิ่งที่จะทำ และรอการยืนยันจากมนุษย์&lt;/p&gt;

&lt;p&gt;รูปแบบนี้คือ human-in-the-loop และมีคุณค่าสูง เพราะเปลี่ยนความผิดพลาดที่ย้อนกลับไม่ได้ให้เป็นคำขอที่ผู้ตรวจสอบสามารถปฏิเสธได้&lt;/p&gt;

&lt;p&gt;ด่านอนุมัติที่ดีต้องแสดง payload จริง ไม่ใช่แค่ข้อความสรุปจากเอเจนต์&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ข้อมูลที่ควรแสดงก่อนอนุมัติ&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ชื่อเครื่องมือหรือ endpoint&lt;/li&gt;
&lt;li&gt;HTTP method และ URL&lt;/li&gt;
&lt;li&gt;ผู้รับหรือทรัพยากรที่ได้รับผลกระทบ&lt;/li&gt;
&lt;li&gt;request body จริง&lt;/li&gt;
&lt;li&gt;เหตุผลที่เอเจนต์เสนอการดำเนินการนี้&lt;/li&gt;
&lt;li&gt;ผลกระทบที่คาดว่าจะเกิดขึ้น&lt;/li&gt;
&lt;li&gt;ตัวเลือกอนุมัติและปฏิเสธที่ชัดเจน&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ตัวอย่าง request ที่ควรส่งให้ผู้ตรวจสอบ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tool"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"email.send"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"reason"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ตั๋วถูกจัดเป็นกรณีส่งเรื่องให้ผู้บริหาร"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"request"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"method"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"POST"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/v1/emails/send"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"body"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"to"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"manager@example.com"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"subject"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"สรุปตั๋วสนับสนุนที่ต้องส่งเรื่อง"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;อย่าให้ผู้ตรวจสอบต้องเชื่อคำสรุปว่า “เอเจนต์จะส่งอีเมล” เพราะสิ่งที่ต้องตรวจคือผู้รับ หัวข้อ และเนื้อหา&lt;/p&gt;

&lt;p&gt;นอกจากนี้ การปฏิเสธต้องทำได้ง่าย หากปุ่มปฏิเสธไม่ชัดเจนหรือ workflow ช้า ผู้ตรวจสอบจะเริ่มอนุมัติทุกอย่างโดยอัตโนมัติ การพูดคุยเกี่ยวกับการ &lt;a href="https://github.com/anthropics/anthropic-sdk-python/discussions/1630" rel="noopener noreferrer"&gt;เพิ่มขั้นตอนการอนุมัติโดยมนุษย์ก่อนที่เอเจนต์จะดำเนินการ&lt;/a&gt; มักย้ำประเด็นเดียวกัน: ผู้ตรวจสอบต้องเห็น payload ที่เป็นรูปธรรมจึงจะตัดสินใจได้จริง&lt;/p&gt;

&lt;p&gt;บันทึกผลทุกครั้งด้วย:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;auditLog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="nx"&gt;agentRunId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;email.send&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;decision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;rejected&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;reviewerId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;currentUser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;createdAt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;toISOString&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;บันทึกการอนุมัติและปฏิเสธช่วยให้คุณตรวจสอบได้ว่า Guardrail ใดทำงานผิดพลาด หากมีการดำเนินการอันตรายหลุดออกไป&lt;/p&gt;

&lt;h2&gt;
  
  
  ให้เอเจนต์มีโหมดทดลองทำงาน (dry-run)
&lt;/h2&gt;

&lt;p&gt;Approval gate ป้องกัน production ส่วน dry-run ป้องกันความมั่นใจก่อนนำระบบไปใช้งานจริง&lt;/p&gt;

&lt;p&gt;ในโหมด dry-run เอเจนต์ยังคงทำงานตามปกติ:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;เลือกเครื่องมือ&lt;/li&gt;
&lt;li&gt;สร้าง request&lt;/li&gt;
&lt;li&gt;เลือกอาร์กิวเมนต์&lt;/li&gt;
&lt;li&gt;วางแผนลำดับการเรียก API&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;แต่จะไม่ส่งคำขอที่ก่อให้เกิดผลข้างเคียงจริง กลับรายงานสิ่งที่ “จะทำ” แทน&lt;/p&gt;

&lt;p&gt;ตัวอย่าง implementation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;executeToolCall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;toolName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;unknown&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;dryRun&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dryRun&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dry_run&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;toolName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ไม่มีการเรียก API จริง&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;callRealTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;toolName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dry-run มีประโยชน์ 2 ด้าน:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;คุณเห็นพฤติกรรมเต็มรูปแบบของเอเจนต์กับข้อมูลจริงโดยไม่มีผลข้างเคียง&lt;/li&gt;
&lt;li&gt;คุณได้ลำดับการเรียก API ที่เอเจนต์ตั้งใจทำ พร้อม argument ของแต่ละขั้นตอน&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ตัวอย่างผลลัพธ์ dry-run ที่ควรเก็บ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"runId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"run_123"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"dryRun"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"plannedCalls"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"step"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"tool"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tickets.get"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"arguments"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"ticketId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"T-1024"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"step"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"tool"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"email.send"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"arguments"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"to"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"manager@example.com"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"subject"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Escalation summary"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เมื่อคุณเห็นว่าเอเจนต์พยายามเรียก endpoint ลบข้อมูลในขั้นตอนที่ 4 คุณสามารถแก้ prompt, tool definition หรือ policy ได้ก่อนที่ผลเสียจะเกิดขึ้นจริง การมีมุมมองจาก &lt;a href="https://apidog.com/th/blog/ai-agent-debugger?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;เครื่องมือดีบักเอเจนต์ AI โดยเฉพาะ&lt;/a&gt; ช่วยเปลี่ยนข้อความคลุมเครืออย่าง “เอเจนต์ทำอะไรแปลก ๆ” ให้เป็นข้อมูลที่แก้ปัญหาได้&lt;/p&gt;

&lt;p&gt;อย่าสับสนระหว่าง dry-run กับ approval gate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dry-run&lt;/strong&gt;: ใช้ใน development และ staging เพื่อดูแผนการทำงานโดยไม่เกิดผลจริง&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Approval gate&lt;/strong&gt;: ใช้ใน production เพื่อให้มนุษย์อนุมัติการกระทำจริง&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;คุณควรมีทั้งสองอย่าง&lt;/p&gt;

&lt;h2&gt;
  
  
  จำกัดขอบเขตความเสียหาย
&lt;/h2&gt;

&lt;p&gt;Allowlist, approval gate และ dry-run ควบคุมว่าการดำเนินการหนึ่งครั้งควรเกิดขึ้นหรือไม่ แต่ blast-radius limits ควบคุมความเสียหายรวมที่เอเจนต์ทำได้จากหลายการดำเนินการ แม้บางรายการจะผ่านการอนุมัติแล้วก็ตาม&lt;/p&gt;

&lt;p&gt;เริ่มจากข้อจำกัด 3 ประเภทนี้&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Scopes
&lt;/h3&gt;

&lt;p&gt;ให้ credential แก่เอเจนต์เท่าที่จำเป็น&lt;/p&gt;

&lt;p&gt;เอเจนต์ที่ดูแล issue ของโปรเจกต์เดียวควรใช้ token ที่เข้าถึงได้เฉพาะโปรเจกต์นั้น ไม่ใช่ API key ระดับผู้ดูแลระบบทั้งองค์กร&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;agent_token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;scopes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;projects:project-42:read&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;projects:project-42:write&lt;/span&gt;
  &lt;span class="na"&gt;denied_scopes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;organization:admin&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;billing:write&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;users:delete&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Quotas
&lt;/h3&gt;

&lt;p&gt;จำกัดจำนวนครั้งที่เอเจนต์เรียกการดำเนินการในช่วงเวลาหนึ่ง เพื่อให้ loop ที่ผิดพลาดหยุดก่อนส่งอีเมลหลายพันฉบับ&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;quota&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;email.send&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;maxCalls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;windowMs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;customer.delete&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;maxCalls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;windowMs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Spend caps
&lt;/h3&gt;

&lt;p&gt;กำหนดเพดานการใช้ token และค่าใช้จ่ายของเครื่องมือต่องานและต่อวัน&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;limits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;maxTokensPerRun&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="nx"&gt;_000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;maxToolCostPerRunUsd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;maxDailyToolCostUsd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;หากเอเจนต์ทำงานผิดปกติ ขีดจำกัดเหล่านี้ต้องทำให้มันหยุดเอง แทนที่จะใช้ทรัพยากรหรือสร้างค่าใช้จ่ายไปจนเกินควบคุม&lt;/p&gt;

&lt;p&gt;ติดตาม metric ของขีดจำกัดเหล่านี้เหมือนที่ติดตาม &lt;a href="https://apidog.com/th/blog/api-observability?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;API observability&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;จำนวนการเรียกต่อ agent run&lt;/li&gt;
&lt;li&gt;จำนวนอีเมลหรือรายการที่สร้างต่อช่วงเวลา&lt;/li&gt;
&lt;li&gt;การใช้ token ต่องาน&lt;/li&gt;
&lt;li&gt;ค่าใช้จ่ายต่อวัน&lt;/li&gt;
&lt;li&gt;อัตราข้อผิดพลาดเมื่อเข้าใกล้ quota&lt;/li&gt;
&lt;li&gt;จำนวนครั้งที่การดำเนินการถูกบล็อกด้วย policy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OWASP ระบุความเสี่ยงเรื่อง “Excessive agency” ไว้ใน &lt;a href="https://owasp.org/www-project-top-10-for-large-language-model-applications/" rel="noopener noreferrer"&gt;OWASP Top 10 สำหรับแอปพลิเคชัน LLM&lt;/a&gt; และข้อจำกัดเหล่านี้คือวิธีลดอำนาจของเอเจนต์ให้เหลือเท่าที่จำเป็น&lt;/p&gt;

&lt;h2&gt;
  
  
  วิธีทดสอบ Guardrail
&lt;/h2&gt;

&lt;p&gt;Guardrail คือ branch ในโค้ดที่มักทำงานเฉพาะเมื่อกำลังจะเกิดเรื่องอันตราย ซึ่งทำให้เป็นเส้นทางที่ถูกใช้งานน้อยที่สุดและมีโอกาสเสียโดยไม่รู้ตัวมากที่สุด&lt;/p&gt;

&lt;p&gt;Guardrail ที่ไม่ได้ทดสอบ คือ Guardrail ที่คุณยังไม่มี&lt;/p&gt;

&lt;p&gt;อย่าทดสอบด้วย API จริง เพราะนั่นอาจหมายถึงส่งอีเมลจริง ลบข้อมูลจริง หรือสร้างรายการชำระเงินจริงเพื่อพิสูจน์ว่าด่านป้องกันทำงานหรือไม่ ให้ mock endpoint ที่มีผลข้างเคียง แล้วตรวจสอบว่าเอเจนต์เลือกเส้นทางใด&lt;/p&gt;

&lt;h3&gt;
  
  
  ขั้นตอนการทดสอบ
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Mock endpoint ที่มีผลข้างเคียง&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
สร้าง mock สำหรับ API ส่งอีเมล ลบข้อมูล หรือชำระเงิน โดยไม่เรียก API จริง&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;รันสถานการณ์อันตราย&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ส่งตั๋วที่ต้องส่งเรื่องให้ผู้บริหาร คำขอลบข้อมูล หรือคำสั่งซื้อที่มีมูลค่าสูงให้เอเจนต์&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ยืนยันเส้นทาง ไม่ใช่แค่ผลลัพธ์&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ตรวจว่า endpoint จริงไม่ได้รับ request และมีการสร้างคำขออนุมัติแทน&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ทดสอบเส้นทางปลอดภัยด้วย&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ตรวจว่าการอ่านข้อมูลหรือการค้นหาผ่านได้โดยไม่ต้องรอ approval ที่ไม่จำเป็น&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ตัวอย่างด้วย Jest:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nf"&gt;it&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ขออนุมัติก่อนส่งอีเมล และไม่เรียก endpoint จริง&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sendEmail&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;jest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;createApprovalRequest&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;jest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;runAgent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;input&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;สรุปตั๋วนี้แล้วส่งให้ผู้บริหาร&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;email.send&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;sendEmail&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="nx"&gt;createApprovalRequest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sendEmail&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;not&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toHaveBeenCalled&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;createApprovalRequest&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toHaveBeenCalledWith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;objectContaining&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;email.send&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;request&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;objectContaining&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;}),&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;และทดสอบ allowlist เพื่อป้องกัน Guardrail ที่เข้มเกินไป:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nf"&gt;it&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;อนุญาตให้ค้นหาตั๋วได้โดยไม่ขออนุมัติ&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;searchTickets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;jest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;mockResolvedValue&lt;/span&gt;&lt;span class="p"&gt;([]);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;createApprovalRequest&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;jest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;runAgent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;input&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ค้นหาตั๋วที่เปิดอยู่&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;tickets.search&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;searchTickets&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="nx"&gt;createApprovalRequest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;searchTickets&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toHaveBeenCalled&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;createApprovalRequest&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;not&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toHaveBeenCalled&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เงื่อนไขที่ต้องผ่านไม่ใช่แค่ “เอเจนต์ตอบถูก” แต่คือ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ผลข้างเคียงไม่เกิดขึ้น&lt;/li&gt;
&lt;li&gt;มีคำขออนุมัติถูกสร้าง&lt;/li&gt;
&lt;li&gt;payload ที่แสดงผู้ตรวจสอบตรงกับ request ที่เอเจนต์ตั้งใจส่ง&lt;/li&gt;
&lt;li&gt;การดำเนินการปลอดภัยไม่ถูกบล็อกโดยไม่จำเป็น&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ดูรายละเอียดเพิ่มเติมในคู่มือ &lt;a href="https://apidog.com/th/blog/how-to-test-ai-agents-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;วิธีทดสอบเอเจนต์ AI ที่เรียกใช้ API ของคุณ&lt;/a&gt; และ &lt;a href="https://apidog.com/th/blog/ai-agents-api-testing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;การทดสอบเอเจนต์ AI และ API&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Apidog เหมาะสมกับตรงไหน (และไม่เหมาะสมกับตรงไหน)
&lt;/h2&gt;

&lt;p&gt;กำหนดหน้าที่ของเครื่องมือให้ชัดเจน &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; ไม่ใช่ agent framework, model host, Guardrail library หรือ evaluation platform มันไม่ได้สร้างหรือรันเอเจนต์ของคุณ และไม่ได้ตัดสินใจว่าการกระทำใดปลอดภัย&lt;/p&gt;

&lt;p&gt;โค้ดและ orchestration layer ของคุณยังคงเป็นเจ้าของ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;allowlist&lt;/li&gt;
&lt;li&gt;approval gate&lt;/li&gt;
&lt;li&gt;dry-run switch&lt;/li&gt;
&lt;li&gt;scopes&lt;/li&gt;
&lt;li&gt;quotas&lt;/li&gt;
&lt;li&gt;spend caps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Apidog อยู่ในชั้น API ที่ Guardrail เหล่านี้ต้องป้องกัน คุณสามารถจำลอง endpoint ที่มีผลข้างเคียง เช่น การส่ง การลบ หรือการเรียกเก็บเงิน เพื่อให้เอเจนต์ฝึกทำงานกับ API โดยไม่เกิดผลลัพธ์จริง&lt;/p&gt;

&lt;p&gt;แนวทางใช้งานคือ:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;สร้าง mock endpoint สำหรับ API ที่มีผลข้างเคียง&lt;/li&gt;
&lt;li&gt;กำหนด response ให้ใกล้เคียงบริการจริง รวมถึงกรณี error&lt;/li&gt;
&lt;li&gt;รันเอเจนต์ใน dry-run หรือ test environment&lt;/li&gt;
&lt;li&gt;ตรวจสอบ request ที่เอเจนต์พยายามส่ง&lt;/li&gt;
&lt;li&gt;ยืนยันว่าเส้นทางจริงไม่มี traffic และเส้นทางอนุมัติทำงานตามคาด&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;นี่คือบทบาทที่เหมาะสม: ทดสอบ API ที่เอเจนต์เรียกใช้ และจำลอง API ที่มีความเสี่ยง เพื่อพิสูจน์ว่าเอเจนต์ใช้เส้นทางอนุมัติแทนเส้นทางจริง&lt;/p&gt;

&lt;h2&gt;
  
  
  คำถามที่พบบ่อย
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ความแตกต่างระหว่าง allowlist กับ approval gate คืออะไร?
&lt;/h3&gt;

&lt;p&gt;Allowlist ระบุว่าการดำเนินการใดทำงานอัตโนมัติได้โดยไม่ต้องมีมนุษย์เข้ามาเกี่ยวข้อง ส่วน approval gate คือจุดหยุดสำหรับการดำเนินการที่ไม่ได้อยู่ใน allowlist เพื่อให้มนุษย์ตรวจสอบและยืนยันก่อนทำงานจริง&lt;/p&gt;

&lt;p&gt;Allowlist ทำหน้าที่จัดประเภท ส่วน gate ทำหน้าที่หยุดและขออนุมัติ&lt;/p&gt;

&lt;h3&gt;
  
  
  Guardrail ทำให้เอเจนต์ช้าลงมากเกินไปหรือไม่?
&lt;/h3&gt;

&lt;p&gt;จะช้าเกินไปก็ต่อเมื่อคุณวาง gate ผิดตำแหน่ง เก็บการอ่านข้อมูลและการดำเนินการที่ย้อนกลับได้ไว้ใน allowlist แล้วใช้ approval gate เฉพาะงานที่มีต้นทุนสูงหรือย้อนกลับยาก ขั้นตอนส่วนใหญ่จึงยังทำงานต่อได้โดยไม่ติดขัด&lt;/p&gt;

&lt;h3&gt;
  
  
  ฉันสามารถทดสอบ Guardrail โดยไม่เรียก API จริงได้หรือไม่?
&lt;/h3&gt;

&lt;p&gt;ได้ และควรทำเช่นนั้นเสมอ จำลอง endpoint ที่มีผลข้างเคียง รันเอเจนต์ในสถานการณ์อันตราย แล้วตรวจว่า mock ของ endpoint จริงไม่ได้ถูกเรียก ขณะที่ workflow อนุมัติทำงานตามที่กำหนด&lt;/p&gt;

&lt;h3&gt;
  
  
  ฉันควรใส่อะไรไว้หลัง approval gate เป็นอันดับแรก?
&lt;/h3&gt;

&lt;p&gt;เริ่มจากสิ่งที่แก้ไขยากที่สุด:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;การชำระเงิน&lt;/li&gt;
&lt;li&gt;การลบข้อมูล&lt;/li&gt;
&lt;li&gt;การส่งอีเมลหรือข้อความถึงลูกค้า&lt;/li&gt;
&lt;li&gt;การเปลี่ยนสถานะที่ทีมอื่นมองเห็น&lt;/li&gt;
&lt;li&gt;การแก้ไขข้อมูลถาวร&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;หากการทำผิดเพียงครั้งเดียวสร้างความเสียหายร้ายแรง การดำเนินการนั้นควรอยู่หลัง gate ไม่ใช่อยู่ใน allowlist&lt;/p&gt;

&lt;h2&gt;
  
  
  เริ่มจากการดำเนินการที่สร้างความเสียหายมากที่สุด
&lt;/h2&gt;

&lt;p&gt;คุณไม่จำเป็นต้องสร้าง Guardrail ทั้ง 4 ประเภทในวันแรก&lt;/p&gt;

&lt;p&gt;ให้เลือกการดำเนินการเดียวที่คุณไม่อยากอธิบายในการตรวจสอบเหตุการณ์ เช่น “เอเจนต์ส่งอีเมลถึงลูกค้าเอง” หรือ “เอเจนต์ลบข้อมูล production เอง” แล้วทำ 3 อย่างภายในสัปดาห์นี้:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;เพิ่ม approval gate ให้การดำเนินการนั้น&lt;/li&gt;
&lt;li&gt;สร้าง mock endpoint สำหรับผลข้างเคียง&lt;/li&gt;
&lt;li&gt;เขียน test ที่ยืนยันว่าเอเจนต์ขออนุมัติก่อนดำเนินการ&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;เมื่อคุณเห็น test ล้มเหลวทันทีที่ปิดหรือทำ Guardrail เสีย คุณจะเชื่อมั่นในด่านป้องกันด้วยเหตุผลที่ถูกต้อง: มันผ่านการพิสูจน์แล้ว&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ดาวน์โหลด Apidog&lt;/a&gt; เพื่อจำลอง endpoint ที่ก่อให้เกิดความเสียหาย กำหนด response และตรวจสอบว่าเอเจนต์ใช้เส้นทางอนุมัติแทนการเรียก API จริง&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>automation</category>
      <category>security</category>
    </item>
  </channel>
</rss>
