createModel()

从环境变量创建 Model<Api> 对象。这是所有章节共用的模型工厂函数。

源码位置

shared/model.ts

用法

import { createModel } from "../../shared/model";

const model = createModel();

环境变量

变量默认值说明
AI_PROVIDERanthropic提供商名称:anthropicopenaigoogledeepseek
AI_MODELclaude-sonnet-4-6所选提供商的模型 ID

提供商映射

提供商API环境变量 Key
anthropicanthropic-messagesANTHROPIC_API_KEY
openaiopenai-completionsOPENAI_API_KEY
googlegoogle-generative-aiGOOGLE_API_KEY
deepseekopenai-completionsOPENAI_API_KEY

返回类型

返回 @mariozechner/pi-aiModel<Api> 对象:

interface Model<A extends Api> {
  id: string;
  name: string;
  api: A;
  provider: string;
  baseUrl: string;
  reasoning: boolean;
  input: ("text" | "image")[];
  cost: {
    input: number;
    output: number;
    cacheRead: number;
    cacheWrite: number;
  };
  contextWindow: number;
  maxTokens: number;
}

完整实现

import "dotenv/config";
import type { Model, Api } from "@mariozechner/pi-ai";

const PROVIDER_MAP: Record<
  string,
  { api: string; provider: string; envKey: string }
> = {
  openai: {
    api: "openai-completions",
    provider: "openai",
    envKey: "OPENAI_API_KEY",
  },
  anthropic: {
    api: "anthropic-messages",
    provider: "anthropic",
    envKey: "ANTHROPIC_API_KEY",
  },
  google: {
    api: "google-generative-ai",
    provider: "google",
    envKey: "GOOGLE_API_KEY",
  },
  deepseek: {
    api: "openai-completions",
    provider: "deepseek",
    envKey: "OPENAI_API_KEY",
  },
};

export function createModel(): Model<Api> {
  const provider = process.env.AI_PROVIDER || "anthropic";
  const modelId = process.env.AI_MODEL || "claude-sonnet-4-6";
  const m = PROVIDER_MAP[provider] ?? PROVIDER_MAP.anthropic;

  if (!process.env[m.envKey]) {
    console.error(`Missing ${m.envKey} — set it in .env or export it`);
    process.exit(1);
  }

  return {
    id: modelId,
    name: modelId,
    api: m.api as Api,
    provider: m.provider,
    baseUrl: "",
    reasoning: false,
    input: ["text"] as ("text" | "image")[],
    cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
    contextWindow: 128_000,
    maxTokens: 8_192,
  };
}

错误处理

如果所需的 API Key 环境变量未设置,createModel() 会打印错误并退出进程:

Missing ANTHROPIC_API_KEY — set it in .env or export it