สถาปัตยกรรมการรวม Pi
เอกสารนี้อธิบายว่า Mayros รวมกับ pi-coding-agent และแพ็คเกจที่เกี่ยวข้อง (pi-ai, pi-agent-core, pi-tui) เพื่อขับเคลื่อนความสามารถ AI agent
ภาพรวม
Mayros ใช้ pi SDK เพื่อฝัง AI coding agent เข้าในสถาปัตยกรรมเกตเวย์ข้อความ แทนที่จะเรียกใช้ pi เป็น subprocess หรือใช้โหมด RPC Mayros จะนำเข้าและสร้างอินสแตนซ์ AgentSession ของ pi ผ่าน createAgentSession() โดยตรง วิธีการฝังนี้มอบ:
- การควบคุมวงจรชีวิตเซสชันและการจัดการเหตุการณ์อย่างเต็มที่
- การฉีดเครื่องมือแบบกำหนดเอง (การส่งข้อความ, sandbox, การดำเนินการเฉพาะช่องทาง)
- การปรับแต่งระบบ prompt ต่อช่องทาง/บริบท
- การคงอยู่ของเซสชันพร้อมการรองรับการแตกสาขา/การบีบอัด
- การหมุนเวียนโปรไฟล์การพิสูจน์ตัวตนหลายบัญชีพร้อม failover
- การสลับโมเดลแบบไม่ขึ้นกับผู้ให้บริการ
การพึ่งพาแพ็คเกจ
json{ "@mariozechner/pi-agent-core": "0.49.3", "@mariozechner/pi-ai": "0.49.3", "@mariozechner/pi-coding-agent": "0.49.3", "@mariozechner/pi-tui": "0.49.3" }
| แพ็คเกจ | วัตถุประสงค์ |
|---|---|
pi-ai | นามธรรม LLM หลัก: Model, streamSimple, ประเภทข้อความ, API ผู้ให้บริการ |
pi-agent-core | ลูป Agent, การดำเนินการเครื่องมือ, ประเภท AgentMessage |
pi-coding-agent | SDK ระดับสูง: createAgentSession, SessionManager, AuthStorage, ModelRegistry, เครื่องมือในตัว |
pi-tui | คอมโพเนนต์ Terminal UI (ใช้ในโหมด TUI โลคัลของ Mayros) |
โครงสร้างไฟล์
src/agents/
├── pi-embedded-runner.ts # Re-exports จาก pi-embedded-runner/
├── pi-embedded-runner/
│ ├── run.ts # จุดเข้าหลัก: runEmbeddedPiAgent()
│ ├── run/
│ │ ├── attempt.ts # ตรรกะความพยายามเดียวพร้อมการตั้งค่าเซสชัน
│ │ ├── params.ts # ประเภท RunEmbeddedPiAgentParams
│ │ ├── payloads.ts # สร้างเพย์โหลดการตอบกลับจากผลลัพธ์การรัน
│ │ ├── images.ts # การฉีดรูปภาพโมเดล Vision
│ │ └── types.ts # EmbeddedRunAttemptResult
│ ├── abort.ts # การตรวจจับข้อผิดพลาดการยกเลิก
│ ├── cache-ttl.ts # การติดตาม Cache TTL สำหรับการตัดแต่งบริบท
│ ├── compact.ts # ตรรกะการบีบอัดด้วยตนเอง/อัตโนมัติ
│ ├── extensions.ts # โหลด pi extensions สำหรับการรันที่ฝัง
│ ├── extra-params.ts # พารามิเตอร์สตรีมเฉพาะผู้ให้บริการ
│ ├── google.ts # การแก้ไขลำดับเทิร์น Google/Gemini
│ ├── history.ts # การจำกัดประวัติ (DM vs กลุ่ม)
│ ├── lanes.ts # เลนคำสั่งเซสชัน/ส่วนกลาง
│ ├── logger.ts # Logger ระบบย่อย
│ ├── model.ts # การแก้ไขโมเดลผ่าน ModelRegistry
│ ├── runs.ts # การติดตามการรันที่ใช้งาน, การยกเลิก, คิว
│ ├── sandbox-info.ts # ข้อมูล Sandbox สำหรับระบบ prompt
│ ├── session-manager-cache.ts # การแคชอินสแตนซ์ SessionManager
│ ├── session-manager-init.ts # การเริ่มต้นไฟล์เซสชัน
│ ├── system-prompt.ts # ตัวสร้างระบบ prompt
│ ├── tool-split.ts # แยกเครื่องมือเป็น builtIn vs custom
│ ├── types.ts # EmbeddedPiAgentMeta, EmbeddedPiRunResult
│ └── utils.ts # การแมป ThinkLevel, คำอธิบายข้อผิดพลาด
สำหรับรายละเอียดทางเทคนิคเพิ่มเติม ดูที่ซอร์สโค้ดและเอกสารแพ็คเกจ pi
เวิร์กโฟลว์การรวมหลัก
- การรัน Embedded Agent: จุดเข้าหลักคือ
runEmbeddedPiAgent()ซึ่งตั้งค่าเซสชัน เครื่องมือ และการแมปเหตุการณ์ - การสร้างเซสชัน: ใช้ pi SDK เพื่อสร้าง
AgentSessionพร้อมเครื่องมือและการตั้งค่าแบบกำหนดเอง - การสมัครสมาชิกเหตุการณ์: สมัครสมาชิกเหตุการณ์เซสชันสำหรับการสตรีม, การดำเนินการเครื่องมือ และการตอบกลับ
- การ Prompting: Prompt เซสชันด้วยข้อความผู้ใช้และรูปภาพตัวเลือก
สถาปัตยกรรมเครื่องมือ
ไปป์ไลน์เครื่องมือ
- เครื่องมือฐาน:
codingToolsของ pi (read, bash, edit, write) - การแทนที่แบบกำหนดเอง: Mayros แทนที่ bash ด้วย
exec/process, ปรับแต่ง read/edit/write สำหรับ sandbox - เครื่องมือ Mayros: messaging, browser, canvas, sessions, cron, gateway, ฯลฯ
- เครื่องมือช่องทาง: เครื่องมือการดำเนินการเฉพาะ Discord/Telegram/Slack/WhatsApp
- การกรองนโยบาย: เครื่องมือกรองตามโปรไฟล์, ผู้ให้บริการ, agent, กลุ่ม, นโยบาย sandbox
- การปรับมาตรฐานสคีมา: สคีมาที่ทำความสะอาดสำหรับความแปลกของ Gemini/OpenAI
- การห่อ AbortSignal: เครื่องมือที่ห่อเพื่อเคารพสัญญาณยกเลิก
การจัดการเซสชัน
- ไฟล์เซสชันเป็นไฟล์ JSONL พร้อมโครงสร้างต้นไม้
- แคช SessionManager เพื่อหลีกเลี่ยงการแยกวิเคราะห์ไฟล์ซ้ำ
- จำกัดประวัติการสนทนาตามประเภทช่องทาง
- การบีบอัดอัตโนมัติเกิดขึ้นเมื่อบริบทล้น
การพิสูจน์ตัวตนและการแก้ไขโมเดล
- รักษาที่เก็บโปรไฟล์การพิสูจน์ตัวตนพร้อม API keys หลายตัวต่อผู้ให้บริการ
- โปรไฟล์หมุนเวียนเมื่อล้มเหลวพร้อมการติดตาม cooldown
FailoverErrorกระตุ้น fallback โมเดลเมื่อกำหนดค่า
Pi Extensions
Mayros โหลด pi extensions แบบกำหนดเองสำหรับพฤติกรรมเฉพาะทาง:
- Compaction Safeguard: เพิ่มราวกันให้กับการบีบอัด
- Context Pruning: การตัดแต่งบริบทตาม cache-TTL
ความแตกต่างหลักจาก Pi CLI
| ด้าน | Pi CLI | Mayros Embedded |
|---|---|---|
| การเรียกใช้ | คำสั่ง pi / RPC | SDK ผ่าน createAgentSession() |
| เครื่องมือ | เครื่องมือ coding เริ่มต้น | ชุดเครื่องมือ Mayros แบบกำหนดเอง |
| ระบบ prompt | AGENTS.md + prompts | แบบไดนามิกต่อช่องทาง/บริบท |
| ที่เก็บเซสชัน | ~/.pi/agent/sessions/ | ~/.mayros/agents/<agentId>/sessions/ (หรือ $MAYROS_STATE_DIR/agents/<agentId>/sessions/) |
| การพิสูจน์ตัวตน | ข้อมูลรับรองเดียว | หลายโปรไฟล์พร้อมการหมุนเวียน |