AIHero
    14 / 16Vercel AI SDK 教程

    使用 Vercel AI SDK 创建嵌入向量

    学习如何使用 Vercel AI SDK 为文本和数据创建、检索嵌入向量。

    Matt Pocock
    Matt Pocock
    源代码下一课
    本页目录

    Vercel AI SDK 提供了一种非常简单的嵌入创建方式。

    嵌入用于在高维空间中表示词语、图像或数据。

    需要判断两个事物有多相似时,嵌入非常有用。

    因此,嵌入成为搜索、分类等任务的强大基础能力。

    创建嵌入

    滚动式代码讲解

    1

    第一步是获取嵌入模型。这里使用 OpenAI 的模型。

    2

    我们要为 dog、cat、car 和 bike 几个词创建嵌入,因此先把它们放进数组。

    3

    接着使用 AI SDK 的 embedMany 这个 AI SDK 函数,并传入模型和值。

    import { openai } from "@ai-sdk/openai";
    const model = openai.embedding(
    "text-embedding-3-small",
    );

    把结果记录出来,看看创建了什么。

    可以看到,结果是一组包含大量数字的数组。这些数组就是向量,每个向量代表多维空间中的一个位置。

    根据模型不同,数组可能包含数千个数字。这些数字构成的向量,代表 LLM 对该词含义的理解。

    创建向量数据库

    现在可以把向量及其代表的值一起存入向量数据库。

    const vectorDatabase = embeddings.map(
    (embedding, index) => ({
    value: values[index],
    embedding,
    }),
    );

    这是一个极其简单的向量数据库:一组向量列表,每个向量附带它所代表的值。

    在真实项目中,可以使用 Postgres,并安装类似 pgvector 的扩展来查询向量。

    搜索相似嵌入

    现在使用这个向量数据库,搜索与某个查询词最相似的条目。

    还需要为查询词再创建一个嵌入。

    为此,可以使用 AI SDK 的 embed AI SDK 函数。

    import { embed } from "ai";
    const searchTerm = await embed({
    model,
    value: "Canine",
    });

    我们来搜索与“Canine”最相似的词。

    现在已经得到所需的全部向量。这就是执行相似度搜索需要的所有信息,无需再次查询 LLM。

    接下来计算查询词与数据库中每个向量之间的余弦相似度。

    滚动式代码讲解

    1

    幸运的是,AI SDK 提供了一个 cosineSimilarity 函数。

    遍历数据库中的每个条目,计算它与查询词的相似度。

    2

    然后按相似度排序。

    import { cosineSimilarity } from "ai";
    const entries = vectorDatabase.map((entry) => {
    return {
    value: entry.value,
    similarity: cosineSimilarity(
    entry.embedding,
    searchTerm.embedding,
    ),
    };
    });

    记录结果后可以看到,相似度是 0 到 1 之间的数字,并精确到许多小数位。

    [
    { "value": "Dog", "similarity": 0.8918085834539862 },
    { "value": "Cat", "similarity": 0.5911997598415127 },
    { "value": "Car", "similarity": 0.5564415138726317 },
    { "value": "Bike", "similarity": 0.5002829969392777 }
    ]

    可以看到 Dog 排在最前面,因为它与 Canine.

    这套相对简单的配置可以支持搜索、分类等各种实用功能。

    AI SDK 提供了 embed, embedManycosineSimilarity 函数,以及查询嵌入模型的能力,非常方便。

    登录以保存进度。