เจาะลึก Pi: Coding Agent แนว Minimalist ที่เน้นความเรียบง่ายและประหยัด Token

· By: SirilukP

Working with Pi Coding Agents

บทนำ

ในขณะที่ Coding agent ส่วนใหญ่กำลังแข่งกันเพิ่มความสามารถ เช่น Claude Code ที่จัดการ sub-agents และโหมดการวางแผนได้ทันที หรือ Cursor ที่รวมโมเดลไว้ใน IDE เพื่อความสะดวกแบบเบ็ดเสร็จ แต่ Pi กลับเลือกเดินทางสายตรงกันข้าม README ของ Pi ระบุไว้อย่างชัดเจนว่า: ไม่มี MCP, ไม่มี sub-agents, ไม่มีโหมดการวางแผน, ไม่มีหน้าต่างขออนุญาตจุกจิก และไม่มีการรัน bash ในพื้นหลัง ซึ่งถือเป็นจุดขายที่แปลกใหม่และน่าสนใจมาก

บทความนี้จะพาไปทดสอบใช้งาน Pi ในสภาพแวดล้อมจริง โดยผมได้ติดตั้งเวอร์ชัน 0.80.3 ตาม changelog และลองเขียน extension ด้วย TypeScript เพื่อพิสูจน์ว่าเครื่องมือที่เน้นความเรียบง่ายนี้ใช้งานได้จริงเพียงใด

สิ่งที่ต้องมีก่อนเริ่ม:

  • Node.js 22 ขึ้นไป, npm และ terminal
  • API key ของผู้ให้บริการอย่างน้อยหนึ่งราย (Anthropic, OpenAI, Google ฯลฯ) สำหรับการรัน session จริง

Pi คืออะไรกันแน่ และใครอยู่เบื้องหลัง

Pi พัฒนาโดย Mario Zechner ผู้สร้าง libGDX โดยเขาได้ เผยแพร่เรียงความเมื่อเดือนพฤศจิกายน 2025 อธิบายถึงปัญหาของเครื่องมือในกระแสหลักที่มักอัดฉีด context ที่มองไม่เห็นและเปลี่ยนพฤติกรรมโดยไม่แจ้งล่วงหน้า เขาจึงสร้าง Pi ให้เป็น core loop ขนาดเล็กที่เน้นจุดเชื่อมต่อสำหรับส่วนขยาย (extension points) แทน

โปรเจกต์นี้ได้รับการสนับสนุนจาก Armin Ronacher ผู้สร้าง Flask และต่อมาบริษัท Earendil Inc. ของเขาก็ได้เข้าซื้อกิจการ โดยยังคงรักษาตัว core ของ Pi ให้เป็น license แบบ MIT ตาม RFC 0015 และเปิดตัวแพลตฟอร์มคลาวด์ Lefos ควบคู่กันไป ปัจจุบัน GitHub repository ของ Pi มี stars มากกว่า 70,000 ดวง ซึ่งยืนยันถึงความนิยมของแนวคิดแบบน้อยแต่มากนี้ได้เป็นอย่างดี

เครื่องมือทั้งสี่และสิ่งที่จงใจขาดหายไป

ชุดเครื่องมือพื้นฐานของ Pi มีเพียง 4 อย่างเท่านั้นคือ: read, write, edit, และ bash ซึ่งเมื่อลองรัน pi --help จะพบคำอธิบายสั้นๆ ว่าเป็น "AI coding assistant with read, bash, edit, write tools"

เหตุผลที่ Pi ตัดฟีเจอร์อื่นๆ ออกไป ไม่ใช่แค่เรื่องของปรัชญา แต่เป็นเรื่องของต้นทุน token ด้วย เนื่องจาก coding agent ทั่วไปอาจใช้ system prompt สูงถึง 7,000 ถึง 10,000 tokens ในทุกการเรียก API ในขณะที่ Pi ออกแบบมาให้ใช้ต่ำกว่า 1,000 tokens โดยจะอัดฉีดเพิ่มเพียงไฟล์ AGENTS.md ที่ผู้ใช้ควบคุมได้เองเท่านั้น วิธีนี้ช่วยให้โมเดลมี context budget เหลือสำหรับการทำงานจริงมากขึ้น

ลงมือปฏิบัติ: การติดตั้งและการรัน Session จริง

การติดตั้ง Pi ทำได้ง่ายๆ ผ่าน npm:

# การติดตั้งที่แนะนำตามเอกสารของ Pi
npm install -g --ignore-scripts @earendil-works/pi-coding-agent
 
# หรือใช้ script ติดตั้งสำหรับ macOS/Linux
curl -fsSL https://pi.dev/install.sh | sh

หลังติดตั้งเสร็จ สามารถตั้งค่า API key และเริ่มใช้งานได้ทันที:

export ANTHROPIC_API_KEY=sk-ant-your-key-here
cd your-project-directory
pi

Pi รองรับผู้ให้บริการมากกว่า 15 ราย เช่น Anthropic, OpenAI, Google, Azure, Bedrock, Mistral, Groq, Cerebras, xAI, Hugging Face, OpenRouter, และ Ollama โดยสามารถสลับโมเดลได้ทันทีด้วยคำสั่ง /model หรือกด Ctrl+P เพื่อเลือกจากรายการโปรด

จุดเด่นที่สำคัญคือ Pi เก็บข้อมูล session เป็นแบบต้นไม้ (trees) ทำให้คุณสามารถใช้คำสั่ง /tree เพื่อย้อนกลับไปยังจุดใดก็ได้และลองแตกสาขา (branch) ความคิดใหม่ๆ ได้โดยไม่เสียข้อมูลเดิม

การสร้าง Extension จริง: Permission Gate และเครื่องมือปรับแต่งเอง เนื่องจาก Pi ไม่มีระบบยืนยันสิทธิ์ขั้นสูงมาให้ เราจึงต้องสร้างขึ้นเอง ตัวอย่างเช่นการสร้าง Permission gate เพื่อป้องกันคำสั่งอันตรายด้วย TypeScript:

// permission-gate.ts
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
import { Type } from "typebox";
 
export default function (pi: ExtensionAPI) {
  // ดักจับคำสั่ง bash ที่มีความเสี่ยง
  pi.on("tool_call", async (event, ctx) => {
    if (event.toolName === "bash" && typeof event.input.command === "string") {
      const risky = /\brm\s+-rf\b|\bsudo\b|\bgit\s+push\s+--force\b/;
      if (risky.test(event.input.command)) {
        const ok = await ctx.ui.confirm(
          "Risky command",
          `Allow: ${event.input.command}`
        );
        if (!ok) {
          return { block: true, reason: "Blocked by permission gate extension" };
        }
      }
    }
  });
 
// เพิ่มเครื่องมือใหม่ให้นับคำได้
  pi.registerTool({
    name: "count_words",
    label: "Count Words",
    description: "Counts words in a block of text.",
    promptSnippet: "Count words in a string",
    parameters: Type.Object({
      text: Type.String({ description: "Text to count words in" }),
    }),
    async execute(toolCallId, params) {
      const count = params.text.trim().split(/\s+/).filter(Boolean).length;
      return {
        content: [{ type: "text", text: `${count} words` }],
        details: { count },
      };
    }
  });
 
pi.registerCommand("gate-status", {
    description: "Show that the permission gate extension is active",
    handler: async (_args, ctx) => {
      ctx.ui.notify("Permission gate extension is active.", "info");
    },
  });
}

คุณสามารถใช้งาน extension นี้ได้โดยการเพิ่ม flag -e ตอนรัน:

pi -e ./permission-gate.ts --list-models anthropic

จุดที่ความเรียบง่ายช่วยได้จริง

  1. โครงสร้าง Session แบบต้นไม้: ช่วยให้การทดลองหลายแนวทางขนานกันทำได้ง่ายและเป็นระเบียบกว่าการแชทแบบเส้นตรง
  2. ความยืดหยุ่นในการสลับโมเดล: รองรับตั้งแต่ cloud API ไปจนถึง local model อย่าง Ollama โดยไม่เสียบริบทการทำงาน
  3. การประหยัด Token: System prompt ขนาดเล็กช่วยลดค่าใช้จ่ายและเพิ่มพื้นที่จัดเก็บข้อมูลสำคัญใน context

สิ่งที่คุณต้องแลกมา

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

บทสรุป

Pi เหมาะสำหรับนักพัฒนาที่ต้องการควบคุมทุกอย่างด้วยตัวเอง ชอบทำงานใน Terminal และพร้อมที่จะเขียน extension เพื่อปรับแต่งเครื่องมือตาม threat model ของตนเอง แต่จะไม่เหมาะกับคนที่ต้องการระบบอัตโนมัติแบบกดปุ่มเดียวจบหรือต้องการราวกั้นความปลอดภัยสำเร็จรูป

ท้ายที่สุดแล้ว ความน่าสนใจของ Pi คือการกล้าที่จะนำเสนอ "สิ่งที่เราไม่ได้สร้าง" ให้เป็นจุดแข็ง ซึ่งหาได้ยากในตลาดปัจจุบัน มันคือทางเลือกสำหรับคนที่ต้องการ harness ที่เล็กลง เพื่อให้ตัวเองตัดสินใจได้มากขึ้นนั่นเอง

A simple sequence diagram

ผังลำดับงานแบบง่าย (A simple sequence diagram)

Source: KDnuggets
ดูแลงานแปลและเรียบเรียงโดย SirilukP

ความคิดเห็น (0)

เข้าสู่ระบบเพื่อร่วมแสดงความเห็น

สมัครสมาชิก

มาเป็นคนแรกที่แสดงความเห็นกันเลยโบร