← Cloudflare Vectorize / vectorize / get-started
Vectorize и Workers AI
Vectorize позволяет генерировать векторные эмбеддинги с помощью модели машинного обучения, включая модели, доступные в Workers AI.
Это руководство проведёт вас через следующие шаги:
- Создание индекса Vectorize.
- Подключение Cloudflare Worker в ваш индекс.
- Использование Workers AI чтобы создавать векторные эмбеддинги.
- Использование Vectorize для запросов к этим векторным эмбеддингам.
Предварительные требования
Чтобы продолжить:
- Зарегистрируйтесь для получения Аккаунт Cloudflare ↗ если вы ещё этого не сделали.
- Установка
npm↗. - Установка
Node.js↗. Используйте менеджер версий Node, например Volta ↗ или nvm ↗ чтобы избежать проблем с правами доступа и переключать версии Node.js. Wrangler требует версии Node16.17.0или более поздней версии.
1. Создайте Worker
Вы создадите новый проект со скриптом Worker, который будет выступать клиентским приложением для вашего индекса Vectorize.
Откройте терминал и создайте новый проект с именем embeddings-tutorial выполнив следующую команду:
npm create cloudflare@latest -- embeddings-tutorialДля настройки выберите следующие параметры:
- Для С чего вы хотите начать?, выберите
Hello World example. - Для Какой шаблон вы хотите использовать?, выберите
Worker only. - Для Какой язык вы хотите использовать?, выберите
TypeScript. - Для Хотите использовать git для контроля версий?, выберите
Yes. - Для Хотите развернуть приложение?, выберите
No(мы внесём некоторые изменения перед развёртыванием).
Это создаст новый embeddings-tutorial каталог. Ваш новый embeddings-tutorial каталог будет включать:
- A
"Hello World"Worker по адресуsrc/index.ts. - A
wrangler.jsoncфайл конфигурации.wrangler.jsoncпоказывает, как выглядит вашembeddings-tutorialWorker будет обращаться к вашему индексу.
2. Создайте индекс
Векторная база данных отличается от традиционной SQL или NoSQL базы данных. Она предназначена для хранения векторных эмбеддингов, которые являются представлениями данных, а не самими исходными данными.
Чтобы создать свой первый индекс Vectorize, перейдите в каталог, который вы только что создали для проекта Workers:
cd embeddings-tutorialЧтобы создать индекс, используйте wrangler vectorize create команду и укажите имя индекса. Хорошее имя индекса:
- Комбинация строчных и/или цифровых символов ASCII длиной менее 32 символов, начинается с буквы и использует дефисы (-) вместо пробелов.
- Отражает сценарий использования и окружение. Например, «production-doc-search» или «dev-recommendation-engine».
- Используется только для описания индекса и не используется напрямую в коде.
Кроме того, определите как dimensions векторов, которые будут храниться в индексе, а также расстояние metric используемая для определения похожих векторов при создании индекса. Эту конфигурацию нельзя изменить позже, поскольку векторная база данных настраивается с фиксированной конфигурацией векторов.
Выполните следующую wrangler vectorize команду, убедившись, что dimensions установлены в 768: это важно, поскольку модель Workers AI, используемая в этом руководстве, выводит векторы с 768 измерениями.
npx wrangler vectorize create embeddings-index --dimensions=768 --metric=cosine✅ Successfully created index 'embeddings-index'
[[vectorize]]
binding = "VECTORIZE" # available in your Worker on env.VECTORIZE
index_name = "embeddings-index"Это создаст новую базу данных векторов и выведет привязка конфигурация, необходимая на следующем шаге.
3. Привяжите свой Worker к индексу
Чтобы Worker мог подключаться к индексу Vectorize, необходимо создать привязку. Bindings позволяют вашим Workers обращаться к таким ресурсам, как Vectorize или R2, из Cloudflare Workers. Вы создаёте привязки, обновляя свой файл Wrangler.
Чтобы привязать индекс к своему Worker, добавьте следующее в конец файла Wrangler:
{
"vectorize": [
{
"binding": "VECTORIZE", // available in your Worker on env.VECTORIZE
"index_name": "embeddings-index"
}
]
}[[vectorize]]
binding = "VECTORIZE"
index_name = "embeddings-index"А именно:
- Значение (строка), которое вы задали для
<BINDING_NAME>будет использоваться для ссылки на эту базу данных в вашем Worker. В этом руководстве назовите свою привязкуVECTORIZE. - Привязка должна быть допустимое имя переменной JavaScript ↗. Например,
binding = "MY_INDEX"илиbinding = "PROD_SEARCH_INDEX"оба варианта были бы допустимыми именами для привязки. - Привязка доступна в Worker по адресу
env.<BINDING_NAME>и Vectorize client API доступен через эту привязку для использования в вашем приложении Workers.
4. Настройте Workers AI
Перед развёртыванием примера с эмбеддингами убедитесь, что ваш Worker использует каталог моделей, включая модель текстовых эмбеддингов встроен.
Внутри embeddings-tutorial каталоге откройте файл Wrangler в редакторе и добавьте новую [[ai]] привязку, чтобы сделать модели Workers AI доступными в вашем Worker:
{
"vectorize": [
{
"binding": "VECTORIZE",
"index_name": "embeddings-index"
}
],
"ai": {
"binding": "AI" // available in your Worker on env.AI
}
}[[vectorize]]
binding = "VECTORIZE"
index_name = "embeddings-index"
[ai]
binding = "AI"После настройки Workers AI можно писать код в своём Worker.
5. Напишите код в своём Worker
Чтобы написать код в своём Worker, перейдите в embeddings-tutorial Worker и откройте src/index.ts файл. index.ts файл предназначен для настройки взаимодействия вашего Worker с индексом Vectorize.
Очистите содержимое index.ts. Вставьте следующий фрагмент кода в свой index.ts файл. На env параметр, замените <BINDING_NAME> с VECTORIZE:
export interface Env {
VECTORIZE: Vectorize;
AI: Ai;
}
interface EmbeddingResponse {
shape: number[];
data: number[][];
}
export default {
async fetch(request, env, ctx): Promise<Response> {
let path = new URL(request.url).pathname;
if (path.startsWith("/favicon")) {
return new Response("", { status: 404 });
}
// You only need to generate vector embeddings once (or as
// data changes), not on every request
if (path === "/insert") {
// In a real-world application, you could read content from R2 or
// a SQL database (like D1) and pass it to Workers AI
const stories = [
"This is a story about an orange cloud",
"This is a story about a llama",
"This is a story about a hugging emoji",
];
const modelResp: EmbeddingResponse = await env.AI.run(
"@cf/baai/bge-base-en-v1.5",
{
text: stories,
},
);
// Convert the vector embeddings into a format Vectorize can accept.
// Each vector needs an ID, a value (the vector) and optional metadata.
// In a real application, your ID would be bound to the ID of the source
// document.
let vectors: VectorizeVector[] = [];
let id = 1;
modelResp.data.forEach((vector) => {
vectors.push({ id: `${id}`, values: vector });
id++;
});
let inserted = await env.VECTORIZE.upsert(vectors);
return Response.json(inserted);
}
// Your query: expect this to match vector ID. 1 in this example
let userQuery = "orange cloud";
const queryVector: EmbeddingResponse = await env.AI.run(
"@cf/baai/bge-base-en-v1.5",
{
text: [userQuery],
},
);
let matches = await env.VECTORIZE.query(queryVector.data[0], {
topK: 1,
});
return Response.json({
// Expect a vector ID. 1 to be your top match with a score of
// ~0.89693683
// This tutorial uses a cosine distance metric, where the closer to one,
// the more similar.
matches: matches,
});
},
} satisfies ExportedHandler<Env>;6. Разверните Worker
Перед глобальным развёртыванием Worker войдите в свой аккаунт Cloudflare, выполнив команду:
npx wrangler loginВы будете перенаправлены на страницу с предложением войти в панель управления Cloudflare. После входа вас спросят, может ли Wrangler вносить изменения в вашу учётную запись Cloudflare. Прокрутите вниз и выберите Allow чтобы продолжить.
Теперь разверните Worker, чтобы сделать проект доступным в интернете. Для развёртывания Worker выполните команду:
npx wrangler deployОткройте предпросмотр Worker по адресу https://embeddings-tutorial.<YOUR_SUBDOMAIN>.workers.dev.
7. Запросите свой индекс
Теперь можно перейти по URL-адресу созданного проекта, чтобы вставить векторы и выполнить к ним запросы.
Используя URL-адрес развёрнутого Worker (например,https://embeddings-tutorial.<YOUR_SUBDOMAIN>.workers.dev/), откройте браузер и выполните следующее:
- Сначала вставьте векторы, перейдя в
/insert. - Выполните запрос к индексу, перейдя по маршруту индекса:
/.
В результате должен вернуться следующий JSON:
{
"matches": {
"count": 1,
"matches": [
{
"id": "1",
"score": 0.89693683
}
]
}
}Расширьте этот пример, выполнив следующее:
- Добавление большего количества входных данных и создание большего набора векторов.
- Приём пользовательского параметра запроса, переданного в URL, например через
URL.searchParams. - Создание нового индекса с другим метрика расстояния и наблюдая за тем, как меняются ваши оценки в ответ на входные данные.
Завершив это руководство, вы успешно создали индекс Vectorize, использовали Workers AI для создания векторных эмбеддингов и развернули проект по всему миру.
Следующие шаги
- Создайте чат-бот на основе генеративного ИИ с помощью Workers AI и Vectorize.
- Подробнее о как работают векторные базы данных.
- Прочитайте примеры о том, как использовать API Vectorize из Cloudflare Workers.