文本生成
RavenSaaS 支持市面上流行的 AI 文本生成模型。
使用 OpenAI 的模型
先在 OpenAI 平台注册账号,生成 API Key。
1. 配置 OpenAI API Key
.env
1OPENAI_API_KEY = "sk-xxx"
2. 选择 OpenAI 的模型生成文本
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);
使用 OpenAI API 兼容的模型
市面上大部分的 AI 文本模型,都兼容 OpenAI API 的接口。只需要更换一下 API 前缀和 API Key,就可以按照 OpenAI 接口约定的参数进行调用。
以 智谱 AI 为例,使用 OpenAI API 兼容的模型生成文本:
1. 先在开放平台生成对应的 API Key
2. 配置 OpenAI API 兼容的参数
.env
1ZHIPU_BASE_URL = "https://open.bigmodel.cn/api/paas/v4"
2ZHIPU_API_KEY = "xxx"
3. 生成文本
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);
使用 OpenRouter 上的聚合模型
先在 OpenRouter 平台注册账号,绑定银行卡购买 credits,生成 API Key。
1. 在配置文件设置 OpenRouter 的 API Key
.env
1OPENROUTER_API_KEY = "sk-or-v1-xxx"
2. 选择 OpenRouter 上的一个模型生成文本
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 调用参考代码
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}