文本生成
ShipAny 支持市面上流行的 AI 文本生成模型。
使用 OpenAI 的模型
-
先在 OpenAI 平台注册账号,生成 API Key
-
配置 OpenAI API Key
.env
OPENAI_API_KEY = "sk-xxx";
- 选择 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 兼容的模型生成文本:
-
先在开放平台生成对应的 API Key
-
配置 OpenAI API 兼容的参数
.env
ZHIPU_BASE_URL = "https://open.bigmodel.cn/api/paas/v4";
ZHIPU_API_KEY = "xxx";
- 生成文本
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 上的聚合模型
-
先在 OpenRouter 平台注册账号,绑定银行卡购买 credits,生成 API Key
-
在配置文件设置 OpenRouter 的 API Key
.env
OPENROUTER_API_KEY = "sk-or-v1-xxx";
- 选择 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");
}
}