Text Generation
ShipAny supports popular AI text generation models available in the market.
Using OpenAI Models
-
First, register an account on OpenAI platform and generate an API Key
-
Configure OpenAI API Key
.env
OPENAI_API_KEY = "sk-xxx";
- Select an OpenAI model to generate text
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);
Using OpenAI API Compatible Models
Most AI text models in the market are compatible with OpenAI’s API interface. You only need to change the API prefix and API Key to make calls using OpenAI’s API convention parameters.
Taking Zhipu AI as an example, here’s how to generate text using an OpenAI API compatible model:
-
First, generate the corresponding API Key on the open platform
-
Configure OpenAI API compatible parameters
.env
ZHIPU_BASE_URL = "https://open.bigmodel.cn/api/paas/v4";
ZHIPU_API_KEY = "xxx";
- Generate text
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);
Using Aggregated Models on OpenRouter
-
First, register an account on OpenRouter platform, link a bank card to purchase credits, and generate an API Key
-
Set the OpenRouter API Key in the configuration file
.env
OPENROUTER_API_KEY = "sk-or-v1-xxx";
- Select a model on OpenRouter to generate text
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 Call Reference Code
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");
}
}