Vercel AI SDK 快速入门:Node.js 版 AI 聊天机器人开发指南

【免费下载链接】ai Build AI-powered applications with React, Svelte, Vue, and Solid 【免费下载链接】ai 项目地址: https://gitcode.com/GitHub_Trending/ai/ai

前言

在当今 AI 技术蓬勃发展的时代,构建智能对话系统已成为开发者必备技能之一。Vercel AI SDK 作为一个强大的工具集,为开发者提供了快速集成 AI 功能的便捷途径。本文将带你从零开始,使用 Node.js 和 Vercel AI SDK 构建一个功能完善的 AI 聊天机器人。

环境准备

在开始之前,请确保你的开发环境满足以下要求:

  1. Node.js 18+:这是运行 JavaScript/TypeScript 代码的基础环境
  2. pnpm:一个高效的 Node.js 包管理器(也可以使用 npm 或 yarn)
  3. 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);

这段代码实现了一个简单的命令行聊天机器人,具有以下特点:

  1. 使用 readline 创建交互式命令行界面
  2. 维护 messages 数组保存对话历史,为模型提供上下文
  3. 使用 streamText 函数实现流式响应,提升用户体验
  4. 支持持续对话,每次对话都会更新上下文

运行你的聊天机器人

启动你的应用:

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之间的随机温度
      }),
    }),
  },
});

这个天气工具具有以下特点:

  1. 定义了清晰的描述,帮助模型理解何时使用该工具
  2. 使用 Zod 定义参数模式,确保类型安全
  3. 包含执行函数,可以集成真实天气 API(示例中使用随机温度模拟)

现在你可以询问类似"纽约的天气怎么样?"这样的问题,模型会自动调用天气工具获取信息。

多步骤工具调用

默认情况下,模型生成工具调用后就结束响应。为了实现更复杂的交互,我们可以启用多步骤工具调用:

const result = streamText({
  model: openai('gpt-4o'),
  messages,
  tools: {
    // ...工具定义
  },
  maxSteps: 5, // 允许最多5个步骤
  onStepFinish: step => {
    console.log(JSON.stringify(step, null, 2)); // 调试日志
  },
});

通过设置 maxSteps,模型可以:

  1. 生成工具调用
  2. 接收工具执行结果
  3. 基于结果生成自然语言响应
  4. 必要时继续调用其他工具

添加温度转换工具

为了展示多工具协作,我们再添加一个温度转换工具:

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 };
    },
  }),
}

现在,当你询问"纽约现在的温度是多少华氏度?"时,模型会:

  1. 调用天气工具获取摄氏温度
  2. 调用温度转换工具转换为华氏度
  3. 生成包含转换结果的友好响应

最佳实践与进阶建议

  1. 错误处理:为工具执行添加适当的错误处理逻辑
  2. 限流控制:对API调用实施限流,避免超额使用
  3. 上下文管理:定期清理过长的对话历史,避免超出模型上下文限制
  4. 真实API集成:将示例中的模拟工具替换为真实的天气API或其他服务
  5. 用户界面:考虑将命令行界面升级为Web界面,提升用户体验

总结

通过本文,你已经学会了:

  1. 如何使用 Vercel AI SDK 快速搭建 Node.js AI 应用
  2. 实现基本的流式聊天机器人
  3. 通过工具扩展模型能力
  4. 实现多步骤工具调用流程

这些技术可以应用于各种场景,如客服机器人、智能助手、数据分析工具等。Vercel AI SDK 的强大之处在于它提供了一致的接口,让你可以轻松切换不同的模型提供商,而无需重写大量代码。

现在,你已经具备了构建智能对话系统的基础能力,接下来可以探索更复杂的应用场景,如多模态交互、检索增强生成(RAG)等高级功能。

【免费下载链接】ai Build AI-powered applications with React, Svelte, Vue, and Solid 【免费下载链接】ai 项目地址: https://gitcode.com/GitHub_Trending/ai/ai

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐