Skip to content

Pi LLM 抽象层

位置

packages/ai/src/

设计理念

Pi 的 LLM 抽象层叫 pi-ai,设计目标是:

  1. 所有 provider 共用一个通用接口
  2. 支持 generate(非流式)和 stream(流式)
  3. Provider 实现各自的消息格式转换

核心接口

typescript
interface AI {
  generate(options: GenerateOptions): Promise<GenerateResult>;
  stream(options: GenerateOptions): AsyncIterable<StreamChunk>;
  countTokens(messages: Message[]): Promise<number>;
}
typescript
interface GenerateOptions {
  messages: Message[];
  tools?: ToolSchema[];
  temperature?: number;
  maxTokens?: number;
  model?: string;
}

Provider 实现

Pi 内置的 provider:

Provider实现文件备注
OpenAIproviders/openai.tsChat Completions API
Anthropicproviders/anthropic.tsMessages API
DeepSeekproviders/deepseek.tsOpenAI-compatible
Ollamaproviders/ollama.ts本地模型
Googleproviders/google.tsGemini

Provider 注册

typescript
class ModelRegistry {
  register(provider: AI, models: string[]): void;
  get(modelName: string): AI;
}

与 OpenCode 对比

维度PiOpenCode
抽象粒度单一 AI interfaceProtocol + Endpoint + Auth + Framing
Provider 数量~5~20+
路由按 model name按 Route definition
复杂度高(Effect/Schema-driven)

与 Hermes 对比

维度PiHermes
核心接口AI.generate/streamOpenAI SDK + ProviderTransport
适配方向每个 provider 一个实现OpenAI-compatible 窄腰 + adapter
复杂度中(transport/adapter 两层)

Pi 的 pi-ai 适合学习:清晰、简洁、每个 provider 独立实现,没有任何运行时抽象泄漏。

Powered by VitePress