Pify

Hướng dẫn nhanh: Tạo Pi agent đầu tiên

Tạo một chương trình TypeScript nhỏ để nhận phản hồi streaming qua Pi AI API hiện tại.

Hướng dẫn này dùng release Pi 0.85.0 chính thức để tạo một chương trình TypeScript nhỏ nhận phản hồi streaming từ model. Bạn sẽ cài @earendil-works/pi-ai, đăng ký các provider có sẵn, chọn một model và xử lý luồng sự kiện. Bạn không cần biết Pi từ trước.

Kết quả

Một file TypeScript gọi model qua Models.streamSimple(). Từ đây, bạn có thể bổ sung Tool, xử lý sự kiện, lưu phiên làm việc và xây dựng vòng lặp Agent.

Trước khi bắt đầu

Bạn cần:

  • Node.js 22.19 trở lên - kiểm tra bằng node --version
  • API key của một provider - ví dụ Anthropic, OpenAI, Google hoặc local proxy tương thích với OpenAI Chat Completions. Ví dụ dưới đây dùng Anthropic.
  • Terminal đang mở tại một thư mục rỗng

Chi phí và an toàn

Hướng dẫn này gọi API thật. Hãy đặt giới hạn chi tiêu thấp trên tài khoản provider và tuyệt đối không commit API key.

1. Khởi tạo dự án

mkdir pi-quickstart && cd pi-quickstart
npm init -y
npm pkg set type=module
npm install @earendil-works/pi-ai@0.85.0
npm install --save-dev tsx

Bạn sẽ có:

  • package.json được cấu hình để dùng ECMAScript modules
  • @earendil-works/pi-ai và TypeScript loader tsx trong node_modules

2. Thêm API key

Tạo file .env trong cùng thư mục:

.env
ANTHROPIC_API_KEY=sk-ant-...

Vì sao dùng .env thay vì hardcode

Provider đọc key khi chương trình chạy. Thêm .env vào .gitignore để key không lọt vào source control.

Thêm .env vào .gitignore:

.gitignore
node_modules
.env

3. Viết agent

Tạo agent.ts:

agent.ts
import { builtinModels } from "@earendil-works/pi-ai/providers/all";

const models = builtinModels();
const model = models.getModel("anthropic", "claude-sonnet-4-5");
if (!model) throw new Error("Model not found");

const stream = models.streamSimple(model, {
  systemPrompt: "You are a concise assistant. Reply in one sentence.",
  messages: [
    {
      role: "user",
      content: "What is the capital of France?",
      timestamp: Date.now(),
    },
  ],
});

for await (const event of stream) {
  if (event.type === "text_delta") {
    process.stdout.write(event.delta);
  } else if (event.type === "done") {
    console.log("\n[done] reason:", event.reason);
  }
}

Bốn bước diễn ra trong file này:

  1. builtinModels() tạo một Models collection và đăng ký các provider có sẵn.
  2. models.getModel("anthropic", "claude-sonnet-4-5") lấy model descriptor từ collection đó.
  3. models.streamSimple(model, context) mở request streaming và trả về một async iterable.
  4. Vòng for await xử lý sự kiện cho đến khi stream kết thúc. text_delta chứa từng phần văn bản; done là sự kiện cuối.

4. Nạp key và chạy

Provider đọc ANTHROPIC_API_KEY từ environment của process. Node có thể nạp trực tiếp file .env:

node --env-file=.env --import tsx agent.ts

Thêm npm script

Thêm cấu hình sau vào package.json nếu bạn muốn dùng lệnh ngắn hơn:

package.json
{
  "scripts": {
    "start": "node --env-file=.env --import tsx agent.ts"
  }
}

Sau đó chạy npm start.

Kết quả sẽ tương tự:

The capital of France is Paris.
[done] reason: stop

Nếu thấy vậy, bạn đã có một Pi agent hoạt động.

5. Thử một biến thể

Đổi user message và chạy lại:

agent.ts
const stream = models.streamSimple(model, {
  systemPrompt: "You are a concise assistant. Reply in one sentence.",
  messages: [
    {
      role: "user",
      content: "Name three Pi SDK packages.",
      timestamp: Date.now(),
    },
  ],
});

Metadata {6} yêu cầu code renderer của Fumadocs làm nổi bật dòng 6.

Tiếp theo

Bạn đã có một lệnh Models.streamSimple() hoạt động. Chọn nội dung tiếp theo theo mục tiêu của bạn:

Mục tiêuĐọc
Hiểu toàn bộ vòng lặp Agent, không chỉ một model callChương 3: Vòng lặp Agent
Thêm một Tool mà model có thể gọiThêm Tool tùy chỉnh
Tích hợp model provider không có sẵn trong SDKTích hợp model mới
Lưu cuộc hội thoại qua nhiều lần chạyLưu phiên làm việc

Khắc phục sự cố

Error: ANTHROPIC_API_KEY is not set

Provider không tìm thấy key. Xác nhận .env nằm trong thư mục hiện tại và bạn đã chạy Node với --env-file=.env.

Error: model not found

models.getModel() không tìm thấy descriptor. Kiểm tra provider ID và model ID. Xem Tham khảo cấu hình.

SyntaxError: Cannot use import statement outside a module

package.json của bạn thiếu "type": "module". Chạy npm pkg set type=module rồi thử lại.

Trong trang này