vercel ai sdk使用指南(Nextjs版本)

快速开始

开始前请注意你的node环境是否符合Node.js 18+pnpm, 没有pnpm,也可以用npm或者yarn安装也可以

1.首先创建一个空项目

bash 复制代码
pnpm create next-app@latest my-ai-app

cd到对应目录

bash 复制代码
cd my-ai-app

2.安装vercel的AI SDK包

安装AI 包和 AI SDK 的 React Hooks。AI SDK 的ai Vercel AI Gateway 提供程序包含在软件包中。您还需要安装schema validation 库,该库用于定义工具输入

bash 复制代码
pnpm add ai @ai-sdk/react zod

3.配置API Key(密钥)为环境变量

在项目根目录下创建一个文件.env.local,并添加你的API 密钥。

javascript 复制代码
AI_GATEWAY_API_KEY=xxxxxxxxx

xxxxxxxxx替换为你自己的密钥,密钥获取地址:Vercel AI Gateway

4.创建后端路由代码

创建一个路由处理程序,app/api/chat/route.ts并添加以下代码

javascript 复制代码
import { streamText, UIMessage, convertToModelMessages } from 'ai';

export async function POST(req: Request) {
  const { messages }: { messages: UIMessage[] } = await req.json();

  const result = streamText({
    model: 'anthropic/claude-sonnet-4.5',
    messages: convertToModelMessages(messages),
  });

  return result.toUIMessageStreamResponse();
}

代码解释

定义一个异步POST请求处理程序,并messages从请求体中提取信息。该messages变量包含您与聊天机器人之间的对话历史记录,并为聊天机器人提供生成下一代对话所需的上下文。这些messages信息属于 UIMessage 类型,专为应用程序 UI 使用而设计------它们包含完整的消息历史记录和相关的元数据,例如时间戳。

调用streamText从包中导入的函数ai。此函数接受一个包含model提供程序和messages(在步骤 1 中定义)的配置对象。您可以传递其他设置以进一步自定义模型的行为。messages需要一个ModelMessage[]数组。此类型与不同,UIMessage因为它不包含元数据,例如时间戳或发送者信息。要在这些类型之间进行转换,我们使用convertToModelMessages函数,该函数会剥离特定于 UI 的元数据并将UIMessage[]数组转换为ModelMessage[]模型所需的格式。

该streamText函数返回一个StreamTextResult结果对象。该结果对象包含将结果转换为流式响应对象的函数。 toUIMessageStreamResponse

最后,将结果返回给客户端以流式传输响应。

此路由处理程序在以下位置创建一个 POST 请求端点/api/chat

5.创建前端页面

javascript 复制代码
'use client';

import { useChat } from '@ai-sdk/react';
import { useState } from 'react';

export default function Chat() {
  const [input, setInput] = useState('');
  const { messages, sendMessage } = useChat();
  return (
    <div className="flex flex-col w-full max-w-md py-24 mx-auto stretch">
      {messages.map(message => (
        <div key={message.id} className="whitespace-pre-wrap">
          {message.role === 'user' ? 'User: ' : 'AI: '}
          {message.parts.map((part, i) => {
            switch (part.type) {
              case 'text':
                return <div key={`${message.id}-${i}`}>{part.text}</div>;
            }
          })}
        </div>
      ))}

      <form
        onSubmit={e => {
          e.preventDefault();
          sendMessage({ text: input });
          setInput('');
        }}
      >
        <input
          className="fixed dark:bg-zinc-900 bottom-0 w-full max-w-md p-2 mb-8 border border-zinc-300 dark:border-zinc-800 rounded shadow-xl"
          value={input}
          placeholder="Say something..."
          onChange={e => setInput(e.currentTarget.value)}
        />
      </form>
    </div>
  );
}

到这里你就成功完成一个简单的大模型调用啦,你也可以在第4步的model配置种配置不同的AI模型

模型列表可以访问连接查看:模型列表

相关推荐
救救孩子把17 小时前
51-机器学习与大模型开发数学教程-4-13 EM算法与混合模型
人工智能·算法·机器学习
Fuly102417 小时前
多模态大模型应用技术栈
人工智能·深度学习·计算机视觉
Brduino脑机接口技术答疑17 小时前
TDCA 算法在 SSVEP 场景中的训练必要性
人工智能·算法·机器学习·脑机接口
栀秋66617 小时前
LangChain Memory 实战指南:让大模型记住你每一句话,轻松打造“有记忆”的AI助手
javascript·langchain·llm
悟道心18 小时前
1.自然语言处理NLP - 入门
人工智能·自然语言处理
雪花desu18 小时前
深度解析RAG(检索增强生成)技术
人工智能·深度学习·语言模型·chatgpt·langchain
咚咚王者18 小时前
人工智能之数学基础 离散数学:第四章 离散概率
人工智能
阿标在干嘛18 小时前
科力辰平台:作为一个科技查新平台,其核心能力边界在哪里?
人工智能·科技
徽44018 小时前
农田植被目标检测数据标注与模型训练总结3
人工智能·目标检测·目标跟踪
冒泡的肥皂18 小时前
25年AI我得DEMO老师
人工智能·后端