🚀 环境准备:接入国产大模型
在开始 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 应用的核心思路就是:标准化。
- 连接层 :用
createOpenAI+baseURL搞定所有国产模型。 - 简单任务 :用
prompt+system快速生成。 - 复杂交互 :用
messages数组管理上下文。
现在,你已经掌握了这套"万能钥匙",不管是 DeepSeek 的推理能力,还是 Kimi 的长文本能力,都能在你的项目中无缝切换,快速落地。