下一代 AI 开发工具Vercel AI SDK 快速入门

简介: 下一代 AI 开发工具Vercel AI SDK 快速入门

最近AI的流行带来了很多相等震撼的开源项目和开发框架,本文分享人工智能驱动的Web开发世界的一个令人兴奋的开发工具 Vercel AI SDK,这是一个在科技界引起轰动的开源库。这个强大的工具集允许开发人员轻松构建边缘就绪的人工智能流文本和聊天Web应用程序。

Vercel AI SDK 是一个工具集合,旨在帮助构建基于AI的Web用户界面。为了更好的了解它可以做什么,本文通过一个快速入门教程,通过构建一个简单的人工智能标语生成器。

一个可互操作、支持流媒体、边缘就绪的软件开发套件,适用于使用 React 和 Svelte 构建的 AI 应用程序。

GitHubgithub.com/vercel-labs…

首先,需要设置项目开发环境,需要安装 Node.js 18+OpenAI API 密钥。通过创建一个新的 Next.js 应用程序来开始。SDK提供了一些入门代码,可帮助快速启动并运行。

项目地址github.com/QuintionTan…

使用以下命令创建新项目:


npx create-next-app vercel-ai-app

此命令启动项目创建项目并指导引导回答一些项目配置的问题:

image.png

之后,将下载并安装项目模板和依赖项。

image.png

安装项目完成后,接下来进入新创建的项目文件夹:


cd vercel-ai-app

接下来,将安装必要的依赖项 aiopenai-edge。后者与 Vercel Edge Functions 兼容,因此比官方 OpenAI SDK 更受欢迎,使用以下命令添加这些依赖项:


npm install ai openai-edge --save

然后,将在项目根目录的 .env.local 文件用来配置 OpenAI API 密钥。


OPENAI_API_KEY=YOUR OPEN AI API KEY

安装样式相关的依赖:


npm install autoprefixer postcss tailwindcss --save

根目录下创建文件 postcss.config.js,代码如下:


module.exports = {
    plugins: {
        tailwindcss: {},
        autoprefixer: {},
    },
};

下一步是创建 API 路由,路由处理程序将使用 Edge Runtime 通过 OpenAI 生成文本完成,然后将其流回 Next.js。 SDK 提供了一个简洁的示例来说明路由处理程序应该是什么样子:


import { Configuration, OpenAIApi } from "openai-edge";
import { OpenAIStream, StreamingTextResponse } from "ai";
const config = new Configuration({
    apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(config);
export const runtime = "edge";
export async function POST(req) {
    const { prompt } = await req.json();
    const response = await openai.createCompletion({
        model: "text-davinci-003",
        stream: true,
        temperature: 0.6,
        prompt: `Create three slogans for a business with unique features.
    Business: Bookstore with cats
    Slogans: "Purr-fect Pages", "Books and Whiskers", "Novels and Nuzzles"
    Business: Gym with rock climbing
    Slogans: "Peak Performance", "Reach New Heights", "Climb Your Way Fit"
    Business: ${prompt}
    Slogans:`,
    });
    const stream = OpenAIStream(response);
    return new StreamingTextResponse(stream);
}

将上述代码复制到新建文件中 app/api/completion/route.js。接下来分解一下这段代码,首先是导入必要的模块:


import { Configuration, OpenAIApi } from "openai-edge";
import { OpenAIStream, StreamingTextResponse } from "ai";

ConfigurationOpenAIApi 是从 openai-edge 包中导入的。Configuration 用于设置 OpenAI API 客户端的配置,而 OpenAIApi 就是客户端本身。OpenAIStreamStreamingTextResponse 是从 ai 包导入的。OpenAIStream 用于将 OpenAI API 的响应转换为流,StreamingTextResponse 用于将流作为响应返回。

下来,设置 OpenAI API 客户端:


const config = new Configuration({
    apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(config);

上面代码创建一个新的 Configuration 实例,传入一个包含 OpenAI API 密钥的对象,该密钥存储在环境变量中。然后创建一个新的 OpenAIApi 实例,传入刚刚创建的配置。

将运行时设置为 edge 以获得最佳性能:


export const runtime = "edge";

接下来,定义一个异步函数 POST,它将 Request 对象作为参数:


export async function POST(req) {
    const { prompt } = await req.json();

这个函数实现处理 POST 请求,从请求的 JSON 正文中提取 prompt。然后,根据提示要求 OpenAI 进行流式完成:


const response = await openai.createCompletion({
    model: "text-davinci-003",
    stream: true,
    temperature: 0.6,
    prompt: `Create three slogans for a business with unique features.
Business: Bookstore with cats
Slogans: "Purr-fect Pages", "Books and Whiskers", "Novels and Nuzzles"
Business: Gym with rock climbing
Slogans: "Peak Performance", "Reach New Heights", "Climb Your Way Fit"
Business: ${prompt}
Slogans:`,
});

在 openai 客户端调用 createCompletion 方法,传入一个指定要使用的模型的对象 text-davinci-003,需要一个流响应 stream: true,AI的 temperature 设置(控制输出的随机性),以及AI应该响应的 prompt

接下来,将响应转换为文本流:


const stream = OpenAIStream(response);

通过调用 OpenAIStream,传入 createCompletion 调用的响应,将响应转换为流。最后,返回流作为响应返回给前端:


return new StreamingTextResponse(stream);
}

创建一个新的 StreamingTextResponse,传入流并返回它,并发送回客户端的响应。

小结一下,上面代码设置了一个 OpenAI API 客户端,定义了一个处理 POST 请求的函数,在给定提示的情况下要求 OpenAI 进行流式完成,将响应转换为流,并将流作为响应返回。

最后,将创建一个带有表单的客户端组件,用于收集用户的提示并流回完成结果。SDK 提供了 useCompletion 挂钩来处理用户输入和表单提交。该钩子提供了多个实用函数和状态变量,包括 completioninputhandleInputChangehandleSubmit。将 app/page.js 中的默认代码替换为以下代码:


"use client";
import { useCompletion } from "ai/react";
export default function SloganGenerator() {
    const { completion, input, handleInputChange, handleSubmit } =
        useCompletion();
    return (
        <div className="mx-auto w-full max-w-md py-24 flex flex-col stretch">
            <form onSubmit={handleSubmit}>
                <input
                    className="fixed w-full max-w-md bottom-0 border border-gray-300 rounded mb-8 shadow-xl p-2"
                    value={input}
                    placeholder="Describe your business..."
                    onChange={handleInputChange}
                />
            </form>
            <div className="whitespace-pre-wrap my-6">{completion}</div>
        </div>
    );
}

同样来分解一下这个 React 组件:

首先,从 ai/react 包中导入需要的钩子:


import { useCompletion } from "ai/react";

useCompletionai/react 包提供的自定义 React 钩子。旨在处理用户输入和表单提交,以实现人工智能驱动的完成。

接下来定义一个功能组件 SloganGenerator


export default function SloganGenerator() {

这是在 React 中定义功能组件的标准方式。在这个组件中,将调用 useCompletion 钩子:


const { completion, input, handleInputChange, handleSubmit } =
        useCompletion();

useCompletion 挂钩返回一个包含多个属性的对象:completioninputhandleInputChangehandleSubmitcompletion 是当前的完成结果,表示生成文本的字符串值。input 是用户输入字段的当前值。 handleInputChangehandleSubmit 是处理用户交互的函数,例如分别在输入字段中键入内容和提交表单。

接下来,主要是返回组件的 JSX。

到此可以启动应用程序并通过输入业务描述来进行测试,以实时查看人工智能生成的口号。

使用以下命令启动 Web 应用程序:


npm run dev

已经使用 Vercel AI SDK 构建了一个流式标语生成器。

image.png

流媒体的力量

Vercel AI SDK 的主要功能之一是支持流接口。ChatGPT 等流式会话文本 UI 在过去几个月中获得了广泛的流行,主要是因为它们可以提供更好的用户体验,尤其是在聊天机器人等会话应用程序中。

大型语言模型 (LLM) 非常强大,但在生成长输出时,它们可能会很慢。如果尝试构建传统的阻塞式 UI,用户可能会发现自己花了大量时间盯着加载的 Loading。流式 UI 可以通过在部分响应可用时显示它们来帮助缓解此问题。

SDK 提供了阻塞式和流式 UI 的示例。流式 UI 开始显示响应的速度比阻塞式 UI 快得多,阻塞式 UI 必须等待生成整个响应才能显示任何内容。

缓存响应

根据正在构建的应用程序的类型,可能希望缓存从AI提供商收到的响应,至少是暂时的。Vercel AI SDK 提供了特殊的生命周期回调函数,可以用于此目的。onCompletion 回调特别有用,因为它会在流关闭时被调用,而这里就是可以缓存完整响应的地方。

SDK 提供了如何使用 Vercel KVNext.js 将 OpenAI 响应缓存 1 小时 的示例,这对于频繁发出相同或相似请求的应用程序特别有用。

项目地址github.com/QuintionTan…

总结

Vercel AI SDK 是用于构建人工智能驱动的用户界面的强大工具。它对流接口和响应缓存的支持,以及与 Next.js 等流行框架的兼容性,使其成为开发人员的多功能且高效的工具。无论是构建聊天机器人、标语生成器还是任何其他人工智能驱动的应用程序,Vercel AI SDK 都可以创建流畅且响应迅速的用户体验。


相关文章
|
19天前
|
机器学习/深度学习 人工智能 自然语言处理
Sketch2Lineart:AI绘画工具,自动将手绘草图转换成清晰的线条画
Sketch2Lineart是一款基于人工智能的绘画工具,能够自动将手绘草图转换成清晰的线条画。该工具支持多种功能,如草图转线稿、自动描述生成、细节调整和风格定制等,适用于艺术创作、产品设计、教育培训等多个领域。
131 60
Sketch2Lineart:AI绘画工具,自动将手绘草图转换成清晰的线条画
|
1天前
|
人工智能 自然语言处理 搜索推荐
你用过最好用的AI工具是什么?
2023年AI革命风起云涌,众多产品令人振奋。我体验了OpenAI的ChatGPT、微软New Bing、Anthropic Claude等多款AI产品。特别推荐微软New Bing,它集成了强大的搜索引擎和语言模型,回答问题精准,提供最新信息,还能免费进行创意绘图。此外,New Bing还集成了Copilot网页助手,帮助用户高效提取和总结内容。
48 27
你用过最好用的AI工具是什么?
|
1天前
|
机器学习/深度学习 人工智能 算法
X-AnyLabeling:开源的 AI 图像标注工具,支持多种标注样式,适于目标检测、图像分割等不同场景
X-AnyLabeling是一款集成了多种深度学习算法的图像标注工具,支持图像和视频的多样化标注样式,适用于多种AI训练场景。本文将详细介绍X-AnyLabeling的功能、技术原理以及如何运行该工具。
18 2
X-AnyLabeling:开源的 AI 图像标注工具,支持多种标注样式,适于目标检测、图像分割等不同场景
|
9天前
|
编解码 人工智能 监控
VISION XL:支持四倍超分辨率的 AI 视频修复处理工具,提供去除模糊、修复缺失等功能
VISION XL是一款基于潜在扩散模型的高效视频修复和超分辨率工具,能够修复视频缺失部分、去除模糊,并支持四倍超分辨率。该工具优化了处理效率,适合快速处理视频的应用场景。
53 6
VISION XL:支持四倍超分辨率的 AI 视频修复处理工具,提供去除模糊、修复缺失等功能
|
16天前
|
存储 人工智能 数据库
Codel:AI代理工具,支持在终端、浏览器、编辑器执行复杂任务和项目
Codel是一款全自主AI代理工具,支持在终端、浏览器和编辑器中执行复杂任务和项目。它运行在沙盒化的Docker环境中,具备自主操作能力,内置浏览器和文本编辑器,所有操作记录存储于PostgreSQL数据库。Codel能够自动完成复杂任务,如创建项目结构、进行网络搜索等,适用于自动化编程、研究与开发、教育与培训以及数据科学与分析等多个领域。
55 11
Codel:AI代理工具,支持在终端、浏览器、编辑器执行复杂任务和项目
|
18天前
|
机器学习/深度学习 人工智能 自然语言处理
Voice-Pro:开源AI音频处理工具,集成转录、翻译、TTS等一站式服务
Voice-Pro是一款开源的多功能音频处理工具,集成了语音转文字、文本转语音、实时翻译、YouTube视频下载和人声分离等多种功能。它支持超过100种语言,适用于教育、娱乐和商业等多个领域,为用户提供一站式的音频处理解决方案,极大地提高工作效率和音频处理的便捷性。
89 10
Voice-Pro:开源AI音频处理工具,集成转录、翻译、TTS等一站式服务
|
17天前
|
Web App开发 机器学习/深度学习 人工智能
Magic Copy:开源的 AI 抠图工具,在浏览器中自动识别图像进行抠图
Magic Copy 是一款开源的 AI 抠图工具,支持 Chrome 浏览器扩展。它基于 Meta 的 Segment Anything Model 技术,能够自动识别图像中的前景对象并提取出来,简化用户从图片中提取特定元素的过程,提高工作效率。
58 7
Magic Copy:开源的 AI 抠图工具,在浏览器中自动识别图像进行抠图
|
19天前
|
人工智能 自然语言处理 算法
Devika AI:开源的 AI 软件开发工具,理解和执行复杂的人类指令
Devika AI 是一款开源的 AI 软件开发工具,能够理解和执行复杂的人类指令。它通过分解任务、信息搜集和代码生成,帮助开发者提高效率,减少人工干预。本文将详细介绍 Devika AI 的功能、技术原理以及如何运行和配置该工具。
45 9
Devika AI:开源的 AI 软件开发工具,理解和执行复杂的人类指令
|
19天前
|
人工智能 JSON 自然语言处理
智能化AI工具-语言翻译与本地化
在全球化发展的背景下,语言翻译与本地化需求日益增长。无论是跨境电商、国际合作,还是本地化应用开发,都需要高效、准确的翻译解决方案。阿里云通义千问作为一款强大的大语言模型,不仅具备出色的自然语言理解能力,还能够在多语言翻译和本地化场景中发挥重要作用。本博客将详细介绍如何基于阿里云通义千问开发语言翻译与本地化工具,包括产品介绍、程序代码以及阿里云相关产品的具体使用流程。
53 10
|
17天前
|
人工智能 自然语言处理 API
吴恩达开源aisuite:简化AI模型调用的新工具 | AI工具
近日,著名人工智能学者吴恩达教授在推特上宣布了他的最新开源项目——aisuite。这款全新的Python包旨在简化开发者与各大AI模型服务商的集成过程,极大提升了应用开发的效率。aisuite的推出,无疑为人工智能领域的开发者带来了一个强大而便利的工具。
63 5