🚀 Vercel AI SDK 使用指南:提示词(Prompts),支持国产模型

🚀 环境准备:接入国产大模型

在开始 Prompt 教学之前,我们先搞定"基础设施"。Vercel AI SDK 的 @ai-sdk/openai 包提供了极佳的兼容性,完美支持所有兼容 OpenAI 接口规范的国产模型。

1. 安装依赖

Bash

bash 复制代码
npm install ai @ai-sdk/openai zod

2. 配置国产模型 Provider

我们不需要安装各种乱七八糟的非官方 SDK,直接用 createOpenAI 创建自定义 Provider 即可。

新建一个 utils/ai-models.ts 文件:

TypeScript

php 复制代码
import { createOpenAI } from '@ai-sdk/openai';

// 配置 DeepSeek
export const deepseek = createOpenAI({
  name: 'deepseek',
  baseURL: 'https://api.deepseek.com',
  apiKey: process.env.DEEPSEEK_API_KEY, // 记得在 .env 中配置 Key
});

// 配置 Moonshot (Kimi)
export const moonshot = createOpenAI({
  name: 'moonshot',
  baseURL: 'https://api.moonshot.cn/v1',
  apiKey: process.env.MOONSHOT_API_KEY,
});

// 配置阿里云通义千问 (Qwen) - 需兼容接口地址
export const qwen = createOpenAI({
  name: 'qwen',
  baseURL: 'https://dashscope.aliyuncs.com/compatible-mode/v1',
  apiKey: process.env.DASHSCOPE_API_KEY,
});

现在,我们就可以在代码里随心所欲地调用了!


💡 AI SDK 提示词的三种境界

根据 Vercel AI SDK 文档,提示词主要分为三种形式:Text Prompts(文本提示)System Prompts(系统提示)Message Prompts(消息提示)

我们将逐一拆解,并配合国产模型进行实战。

1. Text Prompts(文本提示)

这是最基础的形式,适用于简单的单次生成任务。你直接给模型一个字符串,它给你返回结果。

场景: 生成文案、简单的翻译。

TypeScript

javascript 复制代码
import { generateText } from 'ai';
import { deepseek } from './utils/ai-models';

async function main() {
  const result = await generateText({
    // 切换模型只需改这里:deepseek('deepseek-chat') 或 moonshot('moonshot-v1-8k')
    model: deepseek('deepseek-chat'), 
    prompt: '用鲁迅的语气写一段关于"周五不想上班"的短评。',
  });

  console.log(result.text);
}

进阶技巧:动态模版 利用 JS 的模板字符串,我们可以轻松注入变量:

TypeScript

ini 复制代码
const destination = '重庆';
const days = 3;

const result = await generateText({
  model: deepseek('deepseek-chat'),
  prompt: `我计划去${destination}玩${days}天,请为我规划一份特种兵式的旅游攻略,重点推荐美食。`,
});

2. System Prompts(系统提示)

系统提示是给模型的"人设"或"出厂设置"。它能极大地规范模型的行为边界。在 AI SDK 中,system 属性与 prompt 分离,使逻辑更清晰。

场景: 角色扮演、特定格式输出规范。

TypeScript

javascript 复制代码
import { generateText } from 'ai';
import { moonshot } from './utils/ai-models';

async function main() {
  const result = await generateText({
    model: moonshot('moonshot-v1-8k'), // Kimi 擅长长文本和遵循指令
    
    // 这里设定人设
    system: `你是一位资深的前端架构师。
    1. 回答问题时必须包含代码示例。
    2. 解释要通俗易懂,但不要过度简化。
    3. 所有的代码示例请使用 TypeScript。`,
    
    // 这里是具体问题
    prompt: '解释一下 React Server Components 的优势。',
  });

  console.log(result.text);
}

3. Message Prompts(消息提示/对话模式)

这是开发聊天机器人(Chatbot)时最常用的模式。它不仅仅是一句话,而是一个包含上下文的数组。

数组中包含三种核心角色:

  • User (用户) : 提问者。
  • Assistant (助手) : 模型之前的回复。
  • Tool (工具) : 如果使用了 Function Calling,这里会包含工具调用的结果。

场景: 多轮对话、聊天机器人。

TypeScript

php 复制代码
import { streamText } from 'ai'; // 使用流式传输体验更好
import { deepseek } from './utils/ai-models';

async function chat() {
  const result = streamText({
    model: deepseek('deepseek-chat'),
    messages: [
      { role: 'system', content: '你是一个乐于助人的编程助手。' },
      { role: 'user', content: '你好!' },
      { role: 'assistant', content: '你好!有什么我可以帮你的吗?' }, // 模拟之前的上下文
      { role: 'user', content: '如何用 Vue3 实现一个防抖函数?' },
    ],
  });

  // 在终端实时打印流式结果
  for await (const textPart of result.textStream) {
    process.stdout.write(textPart);
  }
}

🧩 高级玩法:多模态与文件(Multimodal)

AI SDK 统一了多模态输入的格式。虽然目前 DeepSeek V3/R1 主要专注于文本 ,但如果你使用 Kimi (Moonshot)通义千问 (Qwen-VL) 等支持视觉的模型,你可以直接发送图片或文件。

发送图片(以兼容模型为例)

假设我们使用支持视觉的模型(例如通义千问 qwen-vl-max 或兼容的视觉模型):

TypeScript

php 复制代码
import { generateText } from 'ai';
import { qwen } from './utils/ai-models';
import fs from 'node:fs';

const result = await generateText({
  model: qwen('qwen-vl-max'), 
  messages: [
    {
      role: 'user',
      content: [
        { type: 'text', text: '这张图片里有什么?请详细描述。' },
        {
          type: 'image',
          // 支持 URL 或 Base64 或 Buffer
          image: fs.readFileSync('./demo.jpg'), 
        },
      ],
    },
  ],
});

发送文件(File Parts)

目前仅部分厂商(如 Google Gemini、Claude、OpenAI)原生支持 PDF/音频等文件输入。对于国产模型,建议先在本地将文件解析为文本(Text) ,然后作为 System Prompt 或 User Prompt 发送,这是最稳妥的跨模型兼容方案。


🛠 Provider Options:特定厂商参数

有时候你需要传递一些特定厂商才有的参数,比如 DeepSeek 的特定缓存设置(假设有)或者 OpenAI 的 reasoning_effort

AI SDK 允许你通过 providerOptions 透传这些参数,而不会破坏通用接口。

TypeScript

php 复制代码
const result = await generateText({
  model: deepseek('deepseek-chat'),
  prompt: '...',
  // 这是一个示例,具体参数需参考对应厂商文档
  providerOptions: {
    openai: { // 因为我们用的是 openai 兼容模式
      temperature: 0.7, // 覆盖默认设置
      top_p: 0.9
    },
  },
});

总结

使用 Vercel AI SDK 开发 AI 应用的核心思路就是:标准化

  1. 连接层 :用 createOpenAI + baseURL 搞定所有国产模型。
  2. 简单任务 :用 prompt + system 快速生成。
  3. 复杂交互 :用 messages 数组管理上下文。

现在,你已经掌握了这套"万能钥匙",不管是 DeepSeek 的推理能力,还是 Kimi 的长文本能力,都能在你的项目中无缝切换,快速落地。

相关推荐
We་ct16 小时前
LeetCode 224. 基本计算器:手写实现加减+括号运算
前端·算法·leetcode·typescript
We་ct20 小时前
LeetCode 141. 环形链表:两种解题思路详解
前端·算法·leetcode·链表·typescript
David凉宸1 天前
Vue 3 + TypeScript 企业级应用开发实战
前端·vue.js·typescript
阿蒙Amon1 天前
TypeScript学习-第12章:与主流框架结合
javascript·学习·typescript
三十_1 天前
TypeScript SDK Enum 运行时 404 问题解决方案
前端·typescript
疯狂踩坑人1 天前
【前后端联调】接口代码生成 - hono + typescript + openapi 最佳实践
前端·架构·typescript
Wect1 天前
LeetCode 224. 基本计算器:手写实现加减+括号运算
前端·算法·typescript
ZaneAI2 天前
🚀 Vercel AI SDK 使用指南:流式传输 (Streaming)
人工智能·typescript
We་ct3 天前
LeetCode 20. 有效的括号:栈的经典应用
前端·算法·leetcode·typescript