ทดลอง Prompt ตรวจการเรียกเครื่องมือ และติดตามการทำงานของ AI Agent ผ่านเบราว์เซอร์

#1. Synapse คืออะไร

Synapse เป็นแพ็กเกจของ Redberry ชื่อ redberry/synapse สำหรับทดลองและตรวจสอบ Agent ที่พัฒนาด้วย Laravel AI SDK (laravel/ai) นักพัฒนาสามารถเลือก Agent ส่งคำถาม และดูข้อมูลประกอบคำตอบได้จากเว็บเดียวกัน

Laravel AI SDK รับหน้าที่สร้างและเรียกใช้งาน Agent ส่วน Synapse เพิ่มหน้าจอสำหรับทำงานระหว่างการพัฒนา เช่น ดู System Prompt ตรวจอาร์กิวเมนต์ที่โมเดลส่งให้เครื่องมือ และย้อนดูบทสนทนาที่เคยทดลอง [1][2]

ตัวอย่างปัญหาที่เหมาะกับเครื่องมือนี้ ได้แก่ Agent ไม่เรียกเครื่องมือที่ต้องการ เรียกด้วยพารามิเตอร์ผิด ตอบช้า ใช้โทเคนมาก หรือเกิดข้อผิดพลาดระหว่างเรียกผู้ให้บริการโมเดล

ขอบเขตสำคัญ: Synapse บันทึกการสนทนาที่เกิดใน Playground ของตนเอง เอกสารระบุว่าไม่ได้เก็บทุกคำขอ AI จากระบบ Production โดยอัตโนมัติ [2]

#2. ความสามารถที่ใช้ระหว่างพัฒนา

ความสามารถ สิ่งที่ตรวจสอบได้ ตัวอย่างการใช้
Agent Discovery คลาส Agent, Provider, Model และ Tools ตรวจว่า Agent ใหม่ถูกค้นพบหรือไม่
Chat Playground คำตอบแบบ Streaming และไฟล์แนบ ทดลองคำถามก่อนสร้างหน้าจอจริง
Model Selector เปลี่ยนโมเดลสำหรับการทดลองผ่านหน้าจอ เปรียบเทียบคำตอบโดยไม่แก้คลาส Agent
Tool Inspection Arguments, Result, Duration และ Status ตรวจว่าโมเดลส่งรหัสหรือเงื่อนไขถูกต้องหรือไม่
Info Panel System Prompt, Tool Schema, Middleware และค่าการสร้างคำตอบ ตรวจค่าที่ Agent ใช้งานจริง
Conversation History ค้นหา กรอง ตั้งชื่อ เปิดดู และลบประวัติ เก็บกรณีที่ตอบผิดเพื่อวิเคราะห์
Token Usage โทเคนและเวลา พร้อมรายละเอียดเพิ่มเติมเมื่อมีข้อมูล เปรียบเทียบการใช้ทรัพยากร
Error Cards Exception, Message และ Stack Trace หาตำแหน่งที่เกิดข้อผิดพลาด

ข้อมูล Reasoning หรือ Thinking ที่แสดงขึ้นอยู่กับโมเดลและข้อมูลที่ Provider/SDK ส่งกลับ ไม่ควรตีความว่าเป็นการเข้าถึงกระบวนการคิดภายในทั้งหมดของทุกโมเดล รายละเอียดโทเคนที่บาง Provider ไม่ส่งกลับก็อาจไม่ปรากฏ [2]

#3. วงจรการพัฒนาเมื่อใช้ Synapse

เริ่มจากเขียน Agent ใน Laravel เปิด Synapse เพื่อทดลองคำถาม ตรวจคำตอบและข้อมูลการเรียกเครื่องมือ แล้วปรับ Instructions, Tool Schema หรือโค้ดก่อนทดลองซ้ำ

จุดที่ควรตรวจแยกกันมีสามระดับ:

  1. ผลลัพธ์: ตอบถูกต้องและตรงรูปแบบหรือไม่
  2. การใช้เครื่องมือ: เลือกเครื่องมือและส่งข้อมูลถูกต้องหรือไม่
  3. การทำงานของระบบ: ใช้เวลาและโทเคนเท่าใด มีข้อผิดพลาดอะไร

การตอบสำเร็จในระดับ HTTP หรือการแสดงสถานะสำเร็จของ Tool ไม่ได้ยืนยันว่าคำตอบถูกต้องตามงาน ผู้ทดสอบยังต้องกำหนดเกณฑ์คุณภาพของผลลัพธ์เอง

#4. สิ่งที่ต้องเตรียม

ข้อกำหนดที่ตรวจจาก composer.json ของโครงการ ณ วันที่เขียน [3]:

องค์ประกอบ Constraint ที่แพ็กเกจประกาศ
PHP ^8.3
Laravel Framework ^12.0 หรือ ^13.0
Laravel AI SDK ^0.9, ^0.10 หรือ ^0.11

เตรียมโปรเจกต์ Laravel ที่มีฐานข้อมูลพร้อมใช้งาน Composer และข้อมูลเชื่อมต่อผู้ให้บริการ AI ข้อกำหนดข้างต้นเป็นของ Synapse; Laravel รุ่นที่เลือกอาจกำหนด PHP ขั้นต่ำสูงกว่านี้ ให้ Composer ตรวจความเข้ากันได้ของทั้งโปรเจกต์

ตรวจสภาพแวดล้อมจากโฟลเดอร์โปรเจกต์:

php -v
composer --version
php artisan --version
composer show laravel/ai

หากยังไม่มี AI SDK ให้ติดตั้งรุ่นที่เข้ากันได้กับ Synapse และโปรเจกต์ ตัวอย่างเริ่มต้นสำหรับช่วงเวอร์ชันที่ตรวจสอบนี้:

composer require laravel/ai:"^0.11"
php artisan vendor:publish --provider="Laravel\Ai\AiServiceProvider"
php artisan migrate

ตั้งค่า API key ใน .env และตรวจ Provider กับ Model ใน config/ai.php ให้ตรงกัน เช่น เมื่อเลือก OpenAI:

OPENAI_API_KEY=ใส่คีย์ของคุณในเครื่องที่ใช้ทดลอง

ตัวแปรนี้ไม่ได้ทำให้ Provider เริ่มต้นเปลี่ยนเองโดยอัตโนมัติ ต้องตรวจค่าคอนฟิกที่โปรเจกต์ใช้ด้วย ขั้นตอนติดตั้งและการตั้งค่า SDK อ้างอิงเอกสาร Laravel [4]

#5. ติดตั้ง Synapse

รันจากโฟลเดอร์ Laravel:

composer require redberry/synapse --dev
php artisan synapse:install
php artisan serve --host=127.0.0.1 --port=8000

เปิด http://127.0.0.1:8000/synapse

Installer จัดเตรียม config/synapse.php, Migration และ SynapseServiceProvider สำหรับแอป พร้อมรัน Migration ส่วน Frontend ของแดชบอร์ดคอมไพล์มาในแพ็กเกจแล้ว จึงไม่ต้องรัน npm เพื่อใช้งาน Synapse [1]

ตรวจข้อมูลการติดตั้งเพิ่มเติม:

php artisan about
php artisan route:list --path=synapse

ผลที่คาดหวัง: เปิดหน้า Discovery ได้ หากยังไม่มี Agent หน้ารายการอาจว่าง ซึ่งเป็นเรื่องปกติในขั้นตอนนี้

#6. Workshop: Agent ช่วยออกแบบกรณีทดสอบ API

#6.1 สร้าง Agent

php artisan make:agent ApiTestCoach

ปรับไฟล์ app/Ai/Agents/ApiTestCoach.php เป็นตัวอย่างต่อไปนี้:

<?php

namespace App\Ai\Agents;

use Laravel\Ai\Contracts\Agent;
use Laravel\Ai\Promptable;

class ApiTestCoach implements Agent
{
    use Promptable;

    public function instructions(): string
    {
        return <<<'PROMPT'
คุณเป็นผู้ช่วยออกแบบกรณีทดสอบ REST API สำหรับนักศึกษาวิศวกรรมซอฟต์แวร์
ตอบเป็นภาษาไทย โดยอ้างอิงเฉพาะข้อกำหนดที่ผู้ใช้ให้
หากข้อมูลไม่พอ ให้ระบุข้อมูลที่ต้องถามเพิ่มและแยกสมมติฐานอย่างชัดเจน
นำเสนอเป็นตาราง: ID | เป้าหมาย | Input | Expected Result
ครอบคลุมกรณีปกติ ค่าขอบเขต และข้อมูลไม่ถูกต้องตามข้อกำหนด
อย่าอ้างว่าได้เรียก API หรือรันการทดสอบจริง
PROMPT;
    }
}

ตัวอย่างนี้ใช้ Agent contract และ Promptable ของ SDK โดยตั้งใจให้เป็น Agent แบบ Stateless และไม่มี Tools เพื่อเริ่มทดลองจากพฤติกรรมที่ตรวจได้ง่าย Provider และ Model ใช้ตามการตั้งค่าของโปรเจกต์

#6.2 ทดลองข้อความแรก

รีเฟรชหน้า Discovery เลือก ApiTestCoach และส่งข้อความ:

ช่วยออกแบบกรณีทดสอบ POST /api/products

ข้อกำหนด:
- name เป็น string จำเป็นต้องมี ความยาว 1–100 ตัวอักษร
- price เป็นตัวเลข จำเป็นต้องมี อยู่ระหว่าง 0.01 ถึง 999999.99 รวมค่าขอบเขต
- stock เป็น integer จำเป็นต้องมี อยู่ระหว่าง 0 ถึง 100000 รวมค่าขอบเขต
- สำเร็จตอบ 201 และ JSON มี id, name, price, stock
- validation ไม่ผ่านตอบ 422 พร้อมรายละเอียด field ที่ผิด

สร้างกรณีทดสอบ 12 กรณี และห้ามสมมติว่าต้องมี authentication

#6.3 ตรวจผลในแดชบอร์ด

  • มีกรณีปกติและค่าขอบเขตจริงตามโจทย์หรือไม่
  • กรณี stock = -1 คาดหวัง 422 หรือไม่
  • กรณี price = 0.01 ผ่านการตรวจช่วงค่าหรือไม่ เมื่อฟิลด์อื่นถูกต้อง
  • มีการแต่งเงื่อนไข Authentication ที่โจทย์ไม่ได้ระบุหรือไม่
  • Info Panel แสดง Instructions ตามที่เขียนหรือไม่
  • Model, Token Usage และเวลาที่แสดงตรงกับการทดลองครั้งนี้หรือไม่

Agent นี้ไม่มี Tools ดังนั้นการไม่พบ Tool Call Card จึงเป็นพฤติกรรมที่คาดหวัง ไม่ใช่ข้อผิดพลาดของการติดตั้ง

#6.4 ทดลองข้อจำกัดเรื่องความจำ

ส่งข้อความใหม่ว่า:

จากข้อกำหนดก่อนหน้า ช่วยเพิ่มอีก 3 กรณี

Agent ตัวอย่างไม่ได้ implement Conversational จึงไม่ได้รับบริบทก่อนหน้าแบบบทสนทนาต่อเนื่องจาก Synapse การเห็นประวัติบนหน้าจอไม่ได้แปลว่าประวัติถูกส่งเข้าโมเดลทุกครั้ง

หากต้องการหลายเทิร์น ให้พัฒนา Agent ให้รองรับ Conversational ตามเอกสาร SDK เช่น ใช้ร่วมกับ RemembersConversations เมื่อ Agent รองรับแล้ว Synapse จะส่งประวัติจากตารางของตนเองสำหรับการทดลอง [2][4]

#6.5 ปรับ Prompt แล้วเปรียบเทียบ

เพิ่มข้อกำหนดใน Instructions ว่า:

ในแต่ละกรณีให้ทดสอบเงื่อนไขหลักเพียงหนึ่งเรื่อง
กรณี invalid ให้ฟิลด์อื่นทั้งหมดอยู่ในค่าที่ถูกต้อง
แยก Expected HTTP Status ออกจากรายละเอียด Expected JSON

เริ่มบทสนทนาใหม่ ใช้โจทย์เดิมและโมเดลเดิม แล้วเปรียบเทียบผลกับรอบแรก การเริ่มใหม่ช่วยควบคุมผลของบริบทสะสม

#7. Workshop ต่อเนื่อง: ตรวจ Tool Calling

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

จุดตรวจ คำถามที่ผู้ทดสอบควรตอบ
Tool selection เลือกเครื่องมือที่ตรงกับงานหรือไม่
Arguments ชื่อฟิลด์ ชนิดข้อมูล และค่าที่ส่งตรงกับ Schema หรือไม่
Result Tool คืนข้อมูลหรือข้อผิดพลาดอะไร
Duration เวลาที่ใช้กระจุกอยู่ที่ Tool ใด
Final response คำตอบสุดท้ายสอดคล้องกับผลลัพธ์ของ Tool หรือไม่

เอกสารระบุกรณีพิเศษว่า Sub-agent ที่ล้มเหลวอาจแสดง Tool Call เป็น Success เพราะ SDK จับ Exception และคืนข้อความ Agent failed: ... เป็นผลลัพธ์ปกติ ผู้ทดสอบจึงต้องเปิดดู Result ด้วย [2]

สำหรับแล็บ ให้เริ่มจากเครื่องมืออ่านข้อมูลหรือข้อมูลจำลอง เพราะ Playground เรียก Agent และ Tool จริงตามโค้ดของแอป

#8. ออกแบบการทดลองสำหรับชั้นเรียน

กิจกรรมต่อไปนี้เป็นแนวทางที่ผู้เขียนเสนอ ไม่ใช่ระบบประเมินอัตโนมัติที่ Synapse มีให้สำเร็จรูป

กำหนดโจทย์คงที่ 5 ข้อ เช่น ออกแบบ Test Case, ตรวจ Test Case ที่ขาด, วิเคราะห์ Validation, แยกสมมติฐาน และอธิบายผลลัพธ์จาก Tool ให้แต่ละกลุ่มทดลอง Prompt สองแบบ แบบละ 3 รอบ รวม 30 คำตอบต่อกลุ่ม

ตัวแปร วิธีควบคุมหรือบันทึก
Prompt เก็บข้อความจริงและชื่อเวอร์ชัน
Provider / Model บันทึกชื่อที่ใช้จริงทุกครั้ง
Generation settings คงค่าเดิมเมื่อเปรียบเทียบเฉพาะ Prompt
Conversation context เริ่มบทสนทนาใหม่สำหรับแต่ละกรณี
Test input ใช้โจทย์และข้อมูลชุดเดียวกัน
Quality ให้คะแนนตาม Rubric ที่กำหนดก่อนทดลอง
Tokens / Time บันทึกจากแดชบอร์ด และระบุข้อมูลที่ไม่มี
Errors แยก Provider Error, Tool Error และคำตอบผิดตามงาน

Rubric ที่เสนอให้คะแนนหัวข้อละ 0–2 รวม 10 คะแนน: ความตรงข้อกำหนด ความครอบคลุมค่าขอบเขต ความถูกต้องของ Expected Result การไม่เพิ่มข้อกำหนดเอง และความชัดเจนของรูปแบบ

แบบบันทึกสำหรับนำไปใช้:

Case Prompt version Model Run Quality /10 Input tokens Output tokens Time Notes
API-01 v1 … 1 … … … … …
API-01 v2 … 1 … … … … …

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

#9. การตั้งค่าที่ควรรู้

ค่าหลักอยู่ใน config/synapse.php [1][2]

คีย์ การใช้งาน
discovery.paths เพิ่มโฟลเดอร์ค้นหา Agent นอกเหนือจาก app/Ai/Agents และ app/Agents
discovery.ignore ซ่อนคลาสที่ไม่ต้องการให้ปรากฏ
playground.models เพิ่มตัวเลือกโมเดลสำหรับทดลอง
ui.path เปลี่ยน Path ของแดชบอร์ด
storage.connection เลือก Database Connection สำหรับข้อมูล Synapse
storage.attachments_disk เลือก Disk สำหรับไฟล์แนบ
retention.days ระยะเวลาเก็บประวัติสำหรับการ Prune

ตัวอย่างเปิดการล้างประวัติเก่ารายวัน:

SYNAPSE_AUTO_PRUNE=true
SYNAPSE_PRUNE_DAYS=7

การตั้งค่านี้ต้องมี Laravel Scheduler ทำงาน จึงจะเกิดงานตามเวลาที่กำหนด หากต้องการลบข้อมูลเก่าด้วยตนเอง:

php artisan synapse:prune --days=7

คำสั่งนี้ลบประวัติที่เก่ากว่าเกณฑ์พร้อมข้อมูลและไฟล์แนบที่เกี่ยวข้อง ควรเก็บผลการทดลองที่ต้องใช้สอนก่อนล้างข้อมูล

#10. ขอบเขตการใช้งานและข้อมูลที่จัดเก็บ

Synapse เก็บข้อมูลในตาราง synapse_conversations, synapse_messages และ synapse_tool_invocations แยกจากตารางบทสนทนาของ SDK แต่ยังใช้ฐานข้อมูลของแอปตาม Connection ที่กำหนด ประวัติของ Synapse ใช้ร่วมกันในระดับฐานข้อมูลแอป ไม่ได้แยกเป็นประวัติส่วนตัวของผู้ใช้แต่ละคน [2]

ใน Local แดชบอร์ดเปิดเข้าได้โดยไม่ต้อง Authentication ส่วน Production ปิดเป็นค่าเริ่มต้น การเปิดใช้นอก Local ต้องตรวจทั้งการลงทะเบียน Provider และ Gate viewSynapse ให้ครบ ดังนั้น Workshop นี้จึงผูกเซิร์ฟเวอร์ไว้ที่ 127.0.0.1 และใช้สภาพแวดล้อมพัฒนา [1][2]

Structured-output Agent มีพฤติกรรมเฉพาะใน Synapse รุ่นที่อ้างอิง: ผลแสดงเป็น JSON แบบจบครั้งเดียว และไม่แนบประวัติก่อนหน้าแม้คลาสจะรองรับ Conversation ด้วย ควรทดสอบพฤติกรรมนี้แยกจาก Agent สนทนาปกติ [2]

#11. แก้ปัญหาเบื้องต้น

อาการ สิ่งที่ควรตรวจ
ไม่พบ Agent implement Agent หรือไม่ อยู่ใน discovery.paths หรือไม่ และถูก ignore หรือไม่
คลาสอยู่ถูกที่แต่ยังไม่พบ Laravel Container สร้างคลาสได้หรือไม่ โดยเฉพาะ Constructor ที่ต้องการข้อมูลเฉพาะ
เปิด /synapse ไม่ได้ ตรวจ Route, SYNAPSE_ENABLED, Path และผลการติดตั้ง
ได้ 403 นอก Local ตรวจ Provider และ Gate สำหรับสภาพแวดล้อมนั้น
API key ไม่ทำงาน ตรวจ Provider ที่ Agent ใช้จริง และค่าใน config/ai.php
เปลี่ยน .env แล้วยังใช้ค่าเดิม ล้าง Config Cache ด้วย php artisan config:clear ในเครื่องพัฒนา
ข้อความมาตอนจบทั้งหมด ตรวจ Runtime, Buffering และว่าเป็น Structured Output หรือไม่
Agent จำข้อความก่อนหน้าไม่ได้ ตรวจ Conversational และข้อจำกัดของ Structured Output
ไม่มี Tool Card ตรวจว่า Agent มี Tools และรอบนั้นมีการเรียกจริงหรือไม่

README ระบุ php artisan serve, nginx/PHP-FPM และ FrankenPHP เป็น Runtime ที่ตรวจสอบ Streaming แล้ว และระบุข้อจำกัด Laravel Octane ใน v0.1.0 หากใช้รุ่นอื่นควรตรวจ Release และเอกสารของรุ่นที่ติดตั้งอีกครั้ง [1]

#12. สิ่งที่ควรส่งท้าย Workshop

  1. คลาส ApiTestCoach พร้อม Instructions ที่ปรับปรุงแล้ว
  2. ตัวอย่างคำตอบก่อนและหลังปรับ Prompt
  3. ตารางผลทดลองพร้อม Model, Tokens, Time และคะแนนคุณภาพ
  4. คำอธิบายกรณี Stateless กับ Conversational
  5. หากมี Tool: ตัวอย่าง Arguments และ Result ที่วิเคราะห์แล้ว

Synapse ช่วยให้วงจรทดลองและตรวจสอบ Agent มองเห็นได้จากเว็บเดียวกัน ส่วนการตัดสินว่า Agent ทำงานถูกต้องยังต้องอาศัยข้อกำหนดและเกณฑ์ประเมินที่ชัดเจน

#เอกสารอ้างอิงและสถานะการตรวจสอบ

  1. RedberryProducts/Synapse — README
  2. Synapse — คู่มือ GOAL.md
  3. Synapse — composer.json
  4. Laravel AI SDK — เอกสารทางการ
  5. Laravel News — Synapse: A Dev Dashboard for Laravel AI SDK Agents — บทความแนะนำหัวข้อนี้ เผยแพร่ 6 ตุลาคม 2026