AI 集成文本生成

文本生成

ShipAny 支持市面上流行的 AI 文本生成模型。

使用 OpenAI 的模型

  1. 先在 OpenAI 平台注册账号,生成 API Key

  2. 配置 OpenAI API Key

.env
OPENAI_API_KEY = "sk-xxx";
  1. 选择 OpenAI 的模型生成文本
app/api/demo/gen-text/route.ts
import { generateText } from "ai";
import { openai } from "@ai-sdk/openai";
 
const prompt = "who are you?";
const model = "gpt-4o";
 
const textModel = openai(model);
 
const { text, warnings } = await generateText({
  model: textModel,
  prompt: prompt,
});
 
if (warnings && warnings.length > 0) {
  throw new Error("gen text failed");
}
 
console.log("gen text ok:", text);

使用 OpenAI API 兼容的模型

市面上大部分的 AI 文本模型,都兼容 OpenAI API 的接口。只需要更换一下 API 前缀和 API Key,就可以按照 OpenAI 接口约定的参数进行调用。

智谱 AI 为例,使用 OpenAI API 兼容的模型生成文本:

  1. 先在开放平台生成对应的 API Key

  2. 配置 OpenAI API 兼容的参数

.env
ZHIPU_BASE_URL = "https://open.bigmodel.cn/api/paas/v4";
ZHIPU_API_KEY = "xxx";
  1. 生成文本
app/api/demo/gen-text/route.ts
import { generateText } from "ai";
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
 
const zhipu = createOpenAICompatible({
  name: "zhipu",
  apiKey: process.env.ZHIPU_API_KEY,
  baseURL: process.env.ZHIPU_BASE_URL,
});
 
const prompt = "who are you?";
const model = "glm-4-flash";
 
const textModel = zhipu(model);
 
const { text, warnings } = await generateText({
  model: textModel,
  prompt: prompt,
});
 
if (warnings && warnings.length > 0) {
  throw new Error("gen text failed");
}
 
console.log("gen text ok:", text);

使用 OpenRouter 上的聚合模型

  1. 先在 OpenRouter 平台注册账号,绑定银行卡购买 credits,生成 API Key

  2. 在配置文件设置 OpenRouter 的 API Key

.env
OPENROUTER_API_KEY = "sk-or-v1-xxx";
  1. 选择 OpenRouter 上的一个模型生成文本
app/api/demo/gen-text/route.ts
import { generateText } from "ai";
import { createOpenRouter } from "@openrouter/ai-sdk-provider";
 
const openrouter = createOpenRouter({
  apiKey: process.env.OPENROUTER_API_KEY,
});
 
const prompt = "who are you?";
const model = "deepseek/deepseek-r1";
 
const textModel = openrouter(model);
 
const { text, warnings } = await generateText({
  model: textModel,
  prompt: prompt,
});
 
if (warnings && warnings.length > 0) {
  throw new Error("gen text failed");
}
 
console.log("gen text ok:", text);

API 调用参考代码

app/api/demo/gen-text/route.ts
import { LanguageModelV1, generateText } from "ai";
import { respData, respErr } from "@/lib/resp";
 
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
import { createOpenRouter } from "@openrouter/ai-sdk-provider";
import { openai } from "@ai-sdk/openai";
 
export async function POST(req: Request) {
  try {
    const { prompt, provider, model } = await req.json();
    if (!prompt || !provider || !model) {
      return respErr("invalid params");
    }
 
    let textModel: LanguageModelV1;
 
    switch (provider) {
      case "openai":
        textModel = openai(model);
        break;
      case "openrouter":
        const openrouter = createOpenRouter({
          apiKey: process.env.OPENROUTER_API_KEY,
        });
        textModel = openrouter(model);
        break;
      case "zhipu":
        const zhipu = createOpenAICompatible({
          name: "zhipu",
          apiKey: process.env.ZHIPU_API_KEY,
          baseURL: process.env.ZHIPU_BASE_URL,
        });
        textModel = zhipu(model);
        break;
      default:
        return respErr("invalid provider");
    }
 
    const { text, warnings } = await generateText({
      model: textModel,
      prompt: prompt,
    });
 
    if (warnings && warnings.length > 0) {
      console.log("gen text warnings:", provider, warnings);
      return respErr("gen text failed");
    }
 
    return respData(text);
  } catch (err) {
    console.log("gen text failed:", err);
    return respErr("gen text failed");
  }
}

参考