สถาปัตยกรรมการรวม 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-agentSDK ระดับสูง: 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

เวิร์กโฟลว์การรวมหลัก

  1. การรัน Embedded Agent: จุดเข้าหลักคือ runEmbeddedPiAgent() ซึ่งตั้งค่าเซสชัน เครื่องมือ และการแมปเหตุการณ์
  2. การสร้างเซสชัน: ใช้ pi SDK เพื่อสร้าง AgentSession พร้อมเครื่องมือและการตั้งค่าแบบกำหนดเอง
  3. การสมัครสมาชิกเหตุการณ์: สมัครสมาชิกเหตุการณ์เซสชันสำหรับการสตรีม, การดำเนินการเครื่องมือ และการตอบกลับ
  4. การ Prompting: Prompt เซสชันด้วยข้อความผู้ใช้และรูปภาพตัวเลือก

สถาปัตยกรรมเครื่องมือ

ไปป์ไลน์เครื่องมือ

  1. เครื่องมือฐาน: codingTools ของ pi (read, bash, edit, write)
  2. การแทนที่แบบกำหนดเอง: Mayros แทนที่ bash ด้วย exec/process, ปรับแต่ง read/edit/write สำหรับ sandbox
  3. เครื่องมือ Mayros: messaging, browser, canvas, sessions, cron, gateway, ฯลฯ
  4. เครื่องมือช่องทาง: เครื่องมือการดำเนินการเฉพาะ Discord/Telegram/Slack/WhatsApp
  5. การกรองนโยบาย: เครื่องมือกรองตามโปรไฟล์, ผู้ให้บริการ, agent, กลุ่ม, นโยบาย sandbox
  6. การปรับมาตรฐานสคีมา: สคีมาที่ทำความสะอาดสำหรับความแปลกของ Gemini/OpenAI
  7. การห่อ AbortSignal: เครื่องมือที่ห่อเพื่อเคารพสัญญาณยกเลิก

การจัดการเซสชัน

  • ไฟล์เซสชันเป็นไฟล์ JSONL พร้อมโครงสร้างต้นไม้
  • แคช SessionManager เพื่อหลีกเลี่ยงการแยกวิเคราะห์ไฟล์ซ้ำ
  • จำกัดประวัติการสนทนาตามประเภทช่องทาง
  • การบีบอัดอัตโนมัติเกิดขึ้นเมื่อบริบทล้น

การพิสูจน์ตัวตนและการแก้ไขโมเดล

  • รักษาที่เก็บโปรไฟล์การพิสูจน์ตัวตนพร้อม API keys หลายตัวต่อผู้ให้บริการ
  • โปรไฟล์หมุนเวียนเมื่อล้มเหลวพร้อมการติดตาม cooldown
  • FailoverError กระตุ้น fallback โมเดลเมื่อกำหนดค่า

Pi Extensions

Mayros โหลด pi extensions แบบกำหนดเองสำหรับพฤติกรรมเฉพาะทาง:

  • Compaction Safeguard: เพิ่มราวกันให้กับการบีบอัด
  • Context Pruning: การตัดแต่งบริบทตาม cache-TTL

ความแตกต่างหลักจาก Pi CLI

ด้านPi CLIMayros Embedded
การเรียกใช้คำสั่ง pi / RPCSDK ผ่าน createAgentSession()
เครื่องมือเครื่องมือ coding เริ่มต้นชุดเครื่องมือ Mayros แบบกำหนดเอง
ระบบ promptAGENTS.md + promptsแบบไดนามิกต่อช่องทาง/บริบท
ที่เก็บเซสชัน~/.pi/agent/sessions/~/.mayros/agents/<agentId>/sessions/ (หรือ $MAYROS_STATE_DIR/agents/<agentId>/sessions/)
การพิสูจน์ตัวตนข้อมูลรับรองเดียวหลายโปรไฟล์พร้อมการหมุนเวียน