บทความ

Laravel AI SDK 1.1 มีอะไรใหม่ Agent Skills, Cohere และ tool ที่ต้องขออนุมัติก่อน

Laravel AI SDK 1.1 ให้ agent โหลดคู่มือเฉพาะงานแบบ Agent Skills ได้เมื่อต้องใช้ เพิ่ม Cohere สำหรับแชต ให้ tool สำเร็จรูปต้องมีคนอนุมัติก่อนทำงาน และ failover ไม่หยุดเพราะ provider ไม่มี tool บางตัว

เผยแพร่
เวลาอ่าน
3 นาที
สรุปจาก
Yannick Lyn Fatt · laravel-news.com
แท็ก
#AI#Laravel

ถ้ายังไม่เคยเขียน agent ด้วย AI SDK ลองอ่านตัวอย่าง agent ของ Spatieก่อน จะเห็นภาพว่า agent กับ tool หน้าตาเป็นยังไง

อัปเกรดเป็น 1.1

composer require laravel/ai:^1.1

1.1 ต้องใช้ laravel/boost 2.10.0 ขึ้นไป และใช้ร่วมกับ laravel/mcp ที่ต่ำกว่า 1.0 ไม่ได้ ถ้า composer ฟ้องว่า conflict ให้อัปเกรดสองตัวนี้ไปพร้อมกัน

Agent Skills โหลดคู่มือเฉพาะงานเมื่อต้องใช้

Agent Skills เป็นรูปแบบเปิดที่ Anthropic เริ่มไว้ เครื่องมืออย่าง Claude Code, Cursor, GitHub Copilot และ Laravel Boost ใช้กันอยู่แล้ว skill หนึ่งตัวคือโฟลเดอร์ที่มีไฟล์ SKILL.md บอกชื่อ บอกว่าใช้ตอนไหน แล้วตามด้วยคำสั่งสำหรับงานนั้น

ปัญหาที่ skill ช่วยแก้คือ instructions() ที่ยาวขึ้นเรื่อย ๆ ถ้ายัดนโยบายคืนเงิน วิธีคิดค่าส่ง และสไตล์การเขียนทั้งหมดไว้ใน prompt ทุกคำขอจะเสีย token กับเรื่องที่ไม่เกี่ยวด้วย skill ให้ agent เห็นแค่ชื่อกับคำอธิบาย แล้วค่อยโหลดเนื้อหาเต็มเมื่องานนั้นต้องใช้

resources/skills/
└── shipping-policy/
    ├── SKILL.md
    └── references/REMOTE-AREAS.md
---
name: shipping-policy
description: Use when a customer asks about shipping fees, delivery time, or a late parcel.
---

# Shipping policy

สั่งครบ 1,000 บาทส่งฟรีทั่วประเทศ ต่ำกว่านั้นคิด 50 บาท...

ฝั่ง agent ใส่ contract HasSkills แล้วบอกว่าจะเอา skill มาจากไหนบ้าง

use Laravel\Ai\Contracts\Agent;
use Laravel\Ai\Contracts\HasSkills;
use Laravel\Ai\Promptable;
use Laravel\Ai\Skills\Skill;

class SupportAgent implements Agent, HasSkills
{
    use Promptable;

    public function instructions(): string
    {
        return 'You are a support agent.';
    }

    public function skills(): iterable
    {
        return [
            resource_path('skills'),
            base_path('.agents/skills'),
            new Skill(
                name: 'house-style',
                description: 'Use when you write copy for a customer.',
                instructions: view('skills.house-style', ['brand' => $this->brand]),
            ),
            fn () => $this->user->team->skills->map->toSkill(),
        ];
    }
}

ที่มาของ skill มีสามแบบ

  • โฟลเดอร์ เช่น resource_path('skills') อ่านทุกโฟลเดอร์ย่อยที่มี SKILL.md
  • object Skill เขียนใน PHP ตรง ๆ คำสั่งจะเป็น Blade view ก็ได้
  • closure ดึงจากฐานข้อมูล เช่น ให้แต่ละทีมเขียน skill ของตัวเองในหน้า admin closure ทำงานเฉพาะตอนที่ต้องใช้

SDK รวมทุกที่มาเป็น tool ชื่อ LoadSkill ตัวเดียว model เห็นรายชื่อ skill พร้อมคำอธิบาย และเรียก LoadSkill เมื่ออยากอ่านเนื้อหาเต็มกับไฟล์ใน references/

Cohere ใช้แชตได้แล้ว

เดิม Cohere ใช้ได้แค่ทำ embedding กับ rerank ตอนนี้ใช้สร้างข้อความผ่าน Chat API v2 ได้ครบ ทั้ง streaming, tool call, structured output และ reasoning

$response = (new SupportAgent)->prompt('Hello', provider: 'cohere');

model เริ่มต้นคือ command-a-03-2025 Cohere บังคับให้ model เรียก tool ตัวที่ระบุไม่ได้ ToolChoice::tool('X') จึงส่งไปแค่ tool ตัวนั้นแล้วตั้งให้ต้องเรียก ส่วนการแนบเอกสารและ citation ยังไม่รองรับ

Tool สำเร็จรูปต้องขออนุมัติก่อนได้

tool ที่มากับ SDK ทั้ง MCP tool, agent tool, similarity search และ filesystem tool ตอนนี้สั่ง requireApproval() ได้ ไม่ต้อง subclass เอง ตัวอย่างนี้ดึง tool จาก MCP server ของ GitHub แล้วให้ตัวที่แก้ข้อมูลต้องมีคนอนุมัติก่อน ส่วนตัวที่ประกาศว่าอ่านอย่างเดียว (readOnlyHint) ปล่อยผ่าน

use Laravel\Ai\Tools\McpTool;

$github->tools()
    ->mapInto(McpTool::class)
    ->map(fn (McpTool $tool) => ($tool->annotations()['readOnlyHint'] ?? false)
        ? $tool
        : $tool->requireApproval());

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

Failover ไม่หยุดเพราะ provider ไม่มี tool บางตัว

failover คือการส่ง provider ไปหลายตัว ถ้าตัวแรกล่ม SDK ลองตัวถัดไปให้

$response = (new SupportAgent)->prompt('...', provider: [Lab::Anthropic, Lab::OpenAI]);

เดิมถ้า agent ใช้ provider tool อย่าง WebSearch แล้ว provider สำรองไม่มี tool นั้น failover จะหยุดทั้งที่ยังมีตัวให้ลอง 1.1 ตัด tool ที่ provider ตัวนั้นไม่รองรับออกก่อนลองแต่ละรอบ งานยังเดินต่อได้ด้วย tool ที่เหลือ ส่วน ToolSearch บน provider ที่ไม่มี tool search ในตัว SDK จะแตก tool ข้างในออกมาส่งเป็น tool ธรรมดาแทน

อัปเดตอื่น ๆ

  • Laya แบบ self-hosted ใช้จัดหมวด (classification) กับ Laya server ของเราเองได้ผ่าน driver typesafe
  • provider tool เพิ่ม ToolSearch ใช้บน Azure OpenAI ได้ Groq ใช้ WebSearch กับ CodeExecution ได้ (เฉพาะ model GPT-OSS) และ WebSearch ส่งตำแหน่งไปให้ OpenRouter
  • tool MoveFile ให้ agent ย้ายหรือเปลี่ยนชื่อไฟล์ได้ในคำสั่งเดียว
  • model เริ่มต้นใหม่ Anthropic เป็น claude-sonnet-5-5 และ Gemini เป็น gemini-3.8-flash ถ้าไม่ได้ระบุ model เองใน agent ผลลัพธ์และค่าใช้จ่ายอาจเปลี่ยนหลังอัปเกรด

รายการ PR ทั้งหมดอยู่ใน release notes v1.1.0 และตัวอย่างโค้ดครบ ๆ อยู่ในบทความต้นฉบับของ Laravel News

อ่านต่อ

ล่าสุด

ดูทั้งหมด →