- 1. Synapse คืออะไร
- 2. ความสามารถที่ใช้ระหว่างพัฒนา
- 3. วงจรการพัฒนาเมื่อใช้ Synapse
- 4. สิ่งที่ต้องเตรียม
- 5. ติดตั้ง Synapse
- 6. Workshop: Agent ช่วยออกแบบกรณีทดสอบ API
- 7. Workshop ต่อเนื่อง: ตรวจ Tool Calling
- 8. ออกแบบการทดลองสำหรับชั้นเรียน
- 9. การตั้งค่าที่ควรรู้
- 10. ขอบเขตการใช้งานและข้อมูลที่จัดเก็บ
- 11. แก้ปัญหาเบื้องต้น
- 12. สิ่งที่ควรส่งท้าย Workshop
- เอกสารอ้างอิงและสถานะการตรวจสอบ
ทดลอง 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 หรือโค้ดก่อนทดลองซ้ำ
จุดที่ควรตรวจแยกกันมีสามระดับ:
- ผลลัพธ์: ตอบถูกต้องและตรงรูปแบบหรือไม่
- การใช้เครื่องมือ: เลือกเครื่องมือและส่งข้อมูลถูกต้องหรือไม่
- การทำงานของระบบ: ใช้เวลาและโทเคนเท่าใด มีข้อผิดพลาดอะไร
การตอบสำเร็จในระดับ 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
- คลาส
ApiTestCoachพร้อม Instructions ที่ปรับปรุงแล้ว - ตัวอย่างคำตอบก่อนและหลังปรับ Prompt
- ตารางผลทดลองพร้อม Model, Tokens, Time และคะแนนคุณภาพ
- คำอธิบายกรณี Stateless กับ Conversational
- หากมี Tool: ตัวอย่าง Arguments และ Result ที่วิเคราะห์แล้ว
Synapse ช่วยให้วงจรทดลองและตรวจสอบ Agent มองเห็นได้จากเว็บเดียวกัน ส่วนการตัดสินว่า Agent ทำงานถูกต้องยังต้องอาศัยข้อกำหนดและเกณฑ์ประเมินที่ชัดเจน
#เอกสารอ้างอิงและสถานะการตรวจสอบ
- RedberryProducts/Synapse — README
- Synapse — คู่มือ GOAL.md
- Synapse — composer.json
- Laravel AI SDK — เอกสารทางการ
- Laravel News — Synapse: A Dev Dashboard for Laravel AI SDK Agents — บทความแนะนำหัวข้อนี้ เผยแพร่ 6 ตุลาคม 2026