Logo
RavenSaaS Docs

文本生成

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}

参考

AI SDK Generate Text

AI SDK Generate Text 文档

查看文档

AI SDK Provider

AI SDK Provider 文档

查看文档