Vercel AI SDK 快速入门:Node.js 版 AI 聊天机器人开发指南
在当今 AI 技术蓬勃发展的时代,构建智能对话系统已成为开发者必备技能之一。Vercel AI SDK 作为一个强大的工具集,为开发者提供了快速集成 AI 功能的便捷途径。本文将带你从零开始,使用 Node.js 和 Vercel AI SDK 构建一个功能完善的 AI 聊天机器人。## 环境准备在开始之前,请确保你的开发环境满足以下要求:1. **Node.js 18+**:这是运行...
Vercel AI SDK 快速入门:Node.js 版 AI 聊天机器人开发指南
前言
在当今 AI 技术蓬勃发展的时代,构建智能对话系统已成为开发者必备技能之一。Vercel AI SDK 作为一个强大的工具集,为开发者提供了快速集成 AI 功能的便捷途径。本文将带你从零开始,使用 Node.js 和 Vercel AI SDK 构建一个功能完善的 AI 聊天机器人。
环境准备
在开始之前,请确保你的开发环境满足以下要求:
- Node.js 18+:这是运行 JavaScript/TypeScript 代码的基础环境
- pnpm:一个高效的 Node.js 包管理器(也可以使用 npm 或 yarn)
- OpenAI API 密钥:用于访问 OpenAI 的语言模型服务
如果你还没有 OpenAI API 密钥,可以前往 OpenAI 官网申请获取。
项目初始化
让我们从创建一个全新的 Node.js 项目开始:
mkdir ai-chatbot
cd ai-chatbot
pnpm init
安装依赖
接下来,安装项目所需的依赖包:
pnpm add ai @ai-sdk/openai zod dotenv
pnpm add -D @types/node tsx typescript
这里我们安装了以下几个关键包:
ai:Vercel AI SDK 核心库@ai-sdk/openai:OpenAI 提供程序zod:用于定义类型安全的模式验证dotenv:用于加载环境变量
开发依赖则包括 TypeScript 相关工具和运行环境。
配置环境变量
创建一个 .env 文件来存储你的 OpenAI API 密钥:
OPENAI_API_KEY=你的API密钥
请务必将 你的API密钥 替换为实际的 OpenAI API 密钥。这个密钥将被用于验证你的应用与 OpenAI 服务的连接。
基础聊天机器人实现
现在,让我们创建一个基本的聊天机器人。新建 index.ts 文件并添加以下代码:
import { openai } from '@ai-sdk/openai';
import { CoreMessage, streamText } from 'ai';
import dotenv from 'dotenv';
import * as readline from 'node:readline/promises';
dotenv.config();
const terminal = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
const messages: CoreMessage[] = [];
async function main() {
while (true) {
const userInput = await terminal.question('你: ');
messages.push({ role: 'user', content: userInput });
const result = streamText({
model: openai('gpt-4o'),
messages,
});
let fullResponse = '';
process.stdout.write('\nAI助手: ');
for await (const delta of result.textStream) {
fullResponse += delta;
process.stdout.write(delta);
}
process.stdout.write('\n\n');
messages.push({ role: 'assistant', content: fullResponse });
}
}
main().catch(console.error);
这段代码实现了一个简单的命令行聊天机器人,具有以下特点:
- 使用
readline创建交互式命令行界面 - 维护
messages数组保存对话历史,为模型提供上下文 - 使用
streamText函数实现流式响应,提升用户体验 - 支持持续对话,每次对话都会更新上下文
运行你的聊天机器人
启动你的应用:
pnpm tsx index.ts
现在,你可以直接在命令行中与 AI 进行对话了!输入你的问题或消息,AI 会实时给出响应。
增强功能:工具集成
虽然大型语言模型(LLM)具有强大的生成能力,但在某些特定任务上仍有局限。这时,"工具"就派上用场了。工具是 LLM 可以调用的外部功能,能够扩展模型的能力边界。
添加天气工具
让我们为聊天机器人添加一个天气查询功能:
import { tool } from 'ai';
import { z } from 'zod';
// 在streamText配置中添加tools选项
const result = streamText({
model: openai('gpt-4o'),
messages,
tools: {
weather: tool({
description: '获取指定地点的天气信息(摄氏度)',
parameters: z.object({
location: z.string().describe('要查询天气的地点'),
}),
execute: async ({ location }) => ({
location,
temperature: Math.round((Math.random() * 30 + 5) * 10) / 10, // 5°C到35°C之间的随机温度
}),
}),
},
});
这个天气工具具有以下特点:
- 定义了清晰的描述,帮助模型理解何时使用该工具
- 使用 Zod 定义参数模式,确保类型安全
- 包含执行函数,可以集成真实天气 API(示例中使用随机温度模拟)
现在你可以询问类似"纽约的天气怎么样?"这样的问题,模型会自动调用天气工具获取信息。
多步骤工具调用
默认情况下,模型生成工具调用后就结束响应。为了实现更复杂的交互,我们可以启用多步骤工具调用:
const result = streamText({
model: openai('gpt-4o'),
messages,
tools: {
// ...工具定义
},
maxSteps: 5, // 允许最多5个步骤
onStepFinish: step => {
console.log(JSON.stringify(step, null, 2)); // 调试日志
},
});
通过设置 maxSteps,模型可以:
- 生成工具调用
- 接收工具执行结果
- 基于结果生成自然语言响应
- 必要时继续调用其他工具
添加温度转换工具
为了展示多工具协作,我们再添加一个温度转换工具:
tools: {
weather: tool({
// ...天气工具定义
}),
convertCelsiusToFahrenheit: tool({
description: '将摄氏温度转换为华氏温度',
parameters: z.object({
celsius: z.number().describe('要转换的摄氏温度'),
}),
execute: async ({ celsius }) => {
const fahrenheit = (celsius * 9) / 5 + 32;
return { fahrenheit: Math.round(fahrenheit * 100) / 100 };
},
}),
}
现在,当你询问"纽约现在的温度是多少华氏度?"时,模型会:
- 调用天气工具获取摄氏温度
- 调用温度转换工具转换为华氏度
- 生成包含转换结果的友好响应
最佳实践与进阶建议
- 错误处理:为工具执行添加适当的错误处理逻辑
- 限流控制:对API调用实施限流,避免超额使用
- 上下文管理:定期清理过长的对话历史,避免超出模型上下文限制
- 真实API集成:将示例中的模拟工具替换为真实的天气API或其他服务
- 用户界面:考虑将命令行界面升级为Web界面,提升用户体验
总结
通过本文,你已经学会了:
- 如何使用 Vercel AI SDK 快速搭建 Node.js AI 应用
- 实现基本的流式聊天机器人
- 通过工具扩展模型能力
- 实现多步骤工具调用流程
这些技术可以应用于各种场景,如客服机器人、智能助手、数据分析工具等。Vercel AI SDK 的强大之处在于它提供了一致的接口,让你可以轻松切换不同的模型提供商,而无需重写大量代码。
现在,你已经具备了构建智能对话系统的基础能力,接下来可以探索更复杂的应用场景,如多模态交互、检索增强生成(RAG)等高级功能。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)