Skip to main content

Kiến trúc Tích hợp Pi

Tài liệu này mô tả cách OpenClaw tích hợp với pi-coding-agent và các gói liên quan (pi-ai, pi-agent-core, pi-tui) để cung cấp khả năng agent AI.

Tổng quan

OpenClaw sử dụng pi SDK để nhúng một agent mã hóa AI vào kiến trúc cổng nhắn tin của mình. Thay vì khởi tạo pi như một subprocess hoặc sử dụng chế độ RPC, OpenClaw trực tiếp nhập và khởi tạo AgentSession của pi thông qua createAgentSession(). Cách tiếp cận nhúng này cung cấp:
  • Kiểm soát hoàn toàn vòng đời phiên và xử lý sự kiện
  • Tiêm công cụ tùy chỉnh (nhắn tin, sandbox, hành động cụ thể cho từng kênh)
  • Tùy chỉnh lời nhắc hệ thống cho từng kênh/ngữ cảnh
  • Duy trì phiên với hỗ trợ phân nhánh/nén
  • Xoay vòng hồ sơ xác thực đa tài khoản với dự phòng
  • Chuyển đổi mô hình không phụ thuộc vào nhà cung cấp

Phụ thuộc gói

Cấu trúc tệp

Các runtime hành động tin nhắn cụ thể cho từng kênh hiện nằm trong thư mục tiện ích mở rộng do plugin sở hữu thay vì dưới src/agents/tools, ví dụ:
  • extensions/discord/src/actions/runtime*.ts
  • extensions/slack/src/action-runtime.ts
  • extensions/telegram/src/action-runtime.ts
  • extensions/whatsapp/src/action-runtime.ts

Quy trình Tích hợp Cốt lõi

1. Chạy một Agent Nhúng

Điểm vào chính là runEmbeddedPiAgent() trong pi-embedded-runner/run.ts:

2. Tạo Phiên

Bên trong runEmbeddedAttempt() (được gọi bởi runEmbeddedPiAgent()), pi SDK được sử dụng:

3. Đăng ký Sự kiện

subscribeEmbeddedPiSession() đăng ký các sự kiện AgentSession của pi:
Các sự kiện được xử lý bao gồm:
  • message_start / message_end / message_update (luồng văn bản/suy nghĩ)
  • tool_execution_start / tool_execution_update / tool_execution_end
  • turn_start / turn_end
  • agent_start / agent_end
  • auto_compaction_start / auto_compaction_end

4. Nhắc nhở

Sau khi thiết lập, phiên được nhắc nhở:
SDK xử lý toàn bộ vòng lặp agent: gửi đến LLM, thực thi các cuộc gọi công cụ, luồng phản hồi. Tiêm hình ảnh là cục bộ cho lời nhắc: OpenClaw tải các tham chiếu hình ảnh từ lời nhắc hiện tại và truyền chúng qua images chỉ cho lượt đó. Nó không quét lại các lượt lịch sử cũ hơn để tiêm lại payload hình ảnh.

Kiến trúc Công cụ

Quy trình Công cụ

  1. Công cụ Cơ bản: codingTools của pi (đọc, bash, chỉnh sửa, viết)
  2. Thay thế Tùy chỉnh: OpenClaw thay thế bash bằng exec/process, tùy chỉnh đọc/chỉnh sửa/viết cho sandbox
  3. Công cụ OpenClaw: nhắn tin, trình duyệt, canvas, phiên, cron, gateway, v.v.
  4. Công cụ Kênh: Công cụ hành động cụ thể cho Discord/Telegram/Slack/WhatsApp
  5. Lọc Chính sách: Công cụ được lọc theo hồ sơ, nhà cung cấp, agent, nhóm, chính sách sandbox
  6. Chuẩn hóa Lược đồ: Lược đồ được làm sạch cho các quirks của Gemini/OpenAI
  7. Gói AbortSignal: Công cụ được gói để tôn trọng tín hiệu hủy

Bộ chuyển đổi Định nghĩa Công cụ

AgentTool của pi-agent-core có chữ ký execute khác với ToolDefinition của pi-coding-agent. Bộ chuyển đổi trong pi-tool-definition-adapter.ts kết nối điều này:

Chiến lược Chia Công cụ

splitSdkTools() truyền tất cả công cụ qua customTools:
Điều này đảm bảo lọc chính sách của OpenClaw, tích hợp sandbox, và bộ công cụ mở rộng vẫn nhất quán trên các nhà cung cấp.

Xây dựng Lời nhắc Hệ thống

Lời nhắc hệ thống được xây dựng trong buildAgentSystemPrompt() (system-prompt.ts). Nó lắp ráp một lời nhắc đầy đủ với các phần bao gồm Công cụ, Phong cách Cuộc gọi Công cụ, Rào chắn An toàn, Tham khảo CLI OpenClaw, Kỹ năng, Tài liệu, Không gian làm việc, Sandbox, Nhắn tin, Thẻ Phản hồi, Giọng nói, Phản hồi Im lặng, Nhịp tim, Siêu dữ liệu Thời gian chạy, cộng với Bộ nhớ và Phản ứng khi được bật, và các tệp ngữ cảnh tùy chọn và nội dung lời nhắc hệ thống bổ sung. Các phần được cắt tỉa cho chế độ lời nhắc tối thiểu được sử dụng bởi các subagent. Lời nhắc được áp dụng sau khi tạo phiên thông qua applySystemPromptOverrideToSession():

Quản lý Phiên

Tệp Phiên

Các phiên là các tệp JSONL với cấu trúc cây (liên kết id/parentId). SessionManager của Pi xử lý duy trì:
OpenClaw bao bọc điều này với guardSessionManager() để đảm bảo an toàn kết quả công cụ.

Bộ nhớ đệm Phiên

session-manager-cache.ts lưu trữ các phiên bản SessionManager để tránh phân tích tệp lặp lại:

Giới hạn Lịch sử

limitHistoryTurns() cắt tỉa lịch sử hội thoại dựa trên loại kênh (DM so với nhóm).

Nén

Nén tự động kích hoạt khi ngữ cảnh tràn. compactEmbeddedPiSessionDirect() xử lý nén thủ công:

Xác thực & Giải quyết Mô hình

Hồ sơ Xác thực

OpenClaw duy trì một kho hồ sơ xác thực với nhiều khóa API cho mỗi nhà cung cấp:
Hồ sơ xoay vòng khi gặp lỗi với theo dõi thời gian chờ:

Giải quyết Mô hình

Dự phòng

FailoverError kích hoạt chuyển đổi mô hình khi được cấu hình:

Tiện ích mở rộng Pi

OpenClaw tải các tiện ích mở rộng pi tùy chỉnh cho hành vi chuyên biệt:

Bảo vệ Nén

src/agents/pi-extensions/compaction-safeguard.ts thêm rào chắn cho nén, bao gồm ngân sách token thích ứng cộng với tóm tắt lỗi công cụ và thao tác tệp:

Cắt tỉa Ngữ cảnh

src/agents/pi-extensions/context-pruning.ts triển khai cắt tỉa ngữ cảnh dựa trên TTL cache:

Luồng & Phản hồi Khối

Chia Khối

EmbeddedBlockChunker quản lý luồng văn bản thành các khối phản hồi rời rạc:

Loại bỏ Thẻ Suy nghĩ/Chung kết

Luồng đầu ra được xử lý để loại bỏ các khối <think>/<thinking> và trích xuất nội dung <final>:

Chỉ thị Phản hồi

Các chỉ thị phản hồi như [[media:url]], [[voice]], [[reply:id]] được phân tích và trích xuất:

Xử lý Lỗi

Phân loại Lỗi

pi-embedded-helpers.ts phân loại lỗi để xử lý phù hợp:

Suy nghĩ Cấp độ Dự phòng

Nếu một cấp độ suy nghĩ không được hỗ trợ, nó sẽ chuyển sang dự phòng:

Tích hợp Sandbox

Khi chế độ sandbox được bật, công cụ và đường dẫn bị giới hạn:

Xử lý Cụ thể cho Nhà cung cấp

Anthropic

  • Loại bỏ chuỗi ma thuật từ chối
  • Xác thực lượt cho các vai trò liên tiếp
  • Tương thích tham số Claude Code

Google/Gemini

  • Sửa lỗi thứ tự lượt (applyGoogleTurnOrderingFix)
  • Làm sạch lược đồ công cụ (sanitizeToolsForGoogle)
  • Làm sạch lịch sử phiên (sanitizeSessionHistory)

OpenAI

  • Công cụ apply_patch cho các mô hình Codex
  • Xử lý hạ cấp độ suy nghĩ

Tích hợp TUI

OpenClaw cũng có chế độ TUI cục bộ sử dụng các thành phần pi-tui trực tiếp:
Điều này cung cấp trải nghiệm terminal tương tác tương tự như chế độ gốc của pi.

Khác biệt Chính so với Pi CLI

Cân nhắc Tương lai

Các khu vực có thể cần tái cấu trúc:
  1. Căn chỉnh chữ ký công cụ: Hiện đang thích ứng giữa chữ ký pi-agent-core và pi-coding-agent
  2. Bao bọc quản lý phiên: guardSessionManager thêm an toàn nhưng tăng độ phức tạp
  3. Tải tiện ích mở rộng: Có thể sử dụng ResourceLoader của pi trực tiếp hơn
  4. Độ phức tạp của trình xử lý luồng: subscribeEmbeddedPiSession đã trở nên lớn
  5. Quirks của nhà cung cấp: Nhiều đường dẫn mã cụ thể cho nhà cung cấp mà pi có thể xử lý

Kiểm tra

Phạm vi tích hợp Pi bao gồm các bộ sau:
  • src/agents/pi-*.test.ts
  • src/agents/pi-auth-json.test.ts
  • src/agents/pi-embedded-*.test.ts
  • src/agents/pi-embedded-helpers*.test.ts
  • src/agents/pi-embedded-runner*.test.ts
  • src/agents/pi-embedded-runner/**/*.test.ts
  • src/agents/pi-embedded-subscribe*.test.ts
  • src/agents/pi-tools*.test.ts
  • src/agents/pi-tool-definition-adapter*.test.ts
  • src/agents/pi-settings.test.ts
  • src/agents/pi-extensions/**/*.test.ts
Trực tiếp/tùy chọn:
  • src/agents/pi-embedded-runner-extraparams.live.test.ts (bật OPENCLAW_LIVE_TEST=1)
Để biết các lệnh chạy hiện tại, xem Quy trình Phát triển Pi.
Lần sửa đổi cuối 22 tháng 3, 2026