Text Generation
RavenSaaS supports popular AI text generation models on the market.
Using OpenAI Models
First register an account on the OpenAI platform and generate an API Key.
1. Configure OpenAI API Key
.env
1OPENAI_API_KEY = "sk-xxx"
2. Select OpenAI Model to Generate Text
app/api/gen-text/route.ts
1import { generateText } from "ai";
2import { openai } from "@ai-sdk/openai";
3
4const prompt = "You are a useful assistant.";
5const model = "gpt-4o";
6
7const textModel = openai(model);
8
9const { text, warnings } = await generateText({
10 model: textModel,
11 prompt: prompt,
12});
13
14if (warnings && warnings.length > 0) {
15 throw new Error("Text generation Warning");
16}
17
18console.log("Text generation Result:", text);
Using OpenAI API Compatible Models
Most AI text models on the market are compatible with OpenAI API interfaces. You just need to change the API prefix and API Key to call according to OpenAI interface conventions.
Taking Zhipu AI as an example, use OpenAI API compatible models to generate text:
1. First Generate Corresponding API Key on the Open Platform
2. Configure OpenAI API Compatible Parameters
.env
1ZHIPU_BASE_URL = "https://open.bigmodel.cn/api/paas/v4"
2ZHIPU_API_KEY = "xxx"
3. Generate Text
app/api/demo/gen-text/route.ts
1import { generateText } from "ai";
2import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
3
4const zhipu = createOpenAICompatible({
5 name: "zhipu",
6 apiKey: process.env.ZHIPU_API_KEY,
7 baseURL: process.env.ZHIPU_BASE_URL,
8});
9
10const prompt = "who are you?";
11const model = "glm-4-flash";
12
13const textModel = zhipu(model);
14
15const { text, warnings } = await generateText({
16 model: textModel,
17 prompt: prompt,
18});
19
20if (warnings && warnings.length > 0) {
21 throw new Error("gen text failed");
22}
23
24console.log("gen text ok:", text);
Using OpenRouter Aggregated Models
First register an account on the OpenRouter platform, bind a bank card to purchase credits, and generate an API Key.
1. Set OpenRouter API Key in Configuration File
.env
1OPENROUTER_API_KEY = "sk-or-v1-xxx"
2. Select a Model on OpenRouter to Generate Text
app/api/demo/gen-text/route.ts
1import { generateText } from "ai";
2import { createOpenRouter } from "@openrouter/ai-sdk-provider";
3
4const openrouter = createOpenRouter({
5 apiKey: process.env.OPENROUTER_API_KEY,
6});
7
8const prompt = "who are you?";
9const model = "deepseek/deepseek-r1";
10
11const textModel = openrouter(model);
12
13const { text, warnings } = await generateText({
14 model: textModel,
15 prompt: prompt,
16});
17
18if (warnings && warnings.length > 0) {
19 throw new Error("gen text failed");
20}
21
22console.log("gen text ok:", text);
API Call Reference Code
app/api/demo/gen-text/route.ts
1import { LanguageModelV1, generateText } from "ai";
2import { respData, respErr } from "@/lib/resp";
3
4import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
5import { createOpenRouter } from "@openrouter/ai-sdk-provider";
6import { openai } from "@ai-sdk/openai";
7
8export async function POST(req: Request) {
9 try {
10 const { prompt, provider, model } = await req.json();
11 if (!prompt || !provider || !model) {
12 return respErr("invalid params");
13 }
14
15 let textModel: LanguageModelV1;
16
17 switch (provider) {
18 case "openai":
19 textModel = openai(model);
20 break;
21 case "openrouter":
22 const openrouter = createOpenRouter({
23 apiKey: process.env.OPENROUTER_API_KEY,
24 });
25 textModel = openrouter(model);
26 break;
27 case "zhipu":
28 const zhipu = createOpenAICompatible({
29 name: "zhipu",
30 apiKey: process.env.ZHIPU_API_KEY,
31 baseURL: process.env.ZHIPU_BASE_URL,
32 });
33 textModel = zhipu(model);
34 break;
35 default:
36 return respErr("invalid provider");
37 }
38
39 const { text, warnings } = await generateText({
40 model: textModel,
41 prompt: prompt,
42 });
43
44 if (warnings && warnings.length > 0) {
45 console.log("gen text warnings:", provider, warnings);
46 return respErr("gen text failed");
47 }
48
49 return respData(text);
50 } catch (err) {
51 console.log("gen text failed:", err);
52 return respErr("gen text failed");
53 }
54}