← Обзор / ai-search / how-to
Создание простой поисковой системы
В этом руководстве вы создадите поисковую систему, которая возвращает имена файлов, соответствующих запросу, используя search() метод для привязка Workers. Вы можете адаптировать его для использования REST API взамен.
Для достижения наилучших результатов с этим паттерном:
- Отключите переписывание запроса, чтобы сопоставление выполнялось напрямую с исходным запросом пользователя.
- Настройте экземпляр AI Search на небольшой размер чанков (обычно достаточно 256 токенов).
Предварительные требования
- Зарегистрируйтесь для получения Аккаунт Cloudflare ↗.
- Установка
Node.js↗.
менеджер версий Node.js
Используйте менеджер версий Node, например Volta ↗ или nvm ↗ чтобы избежать проблем с правами доступа и переключать версии Node.js. Wrangler, о котором пойдёт речь далее в этом руководстве, требует версию Node 16.17.0 или более поздней версии.
Вам также потребуется экземпляр AI Search, уже содержащий проиндексированный контент. Чтобы создать его и добавить контент, см. Начало работы.
1. Создайте проект Worker
Создайте новый проект Worker с помощью create-cloudflare CLI (C3). C3 ↗ это инструмент командной строки, который помогает настраивать и развёртывать новые приложения в Cloudflare.
Создайте новый проект с именем search-engine выполнив:
npm create cloudflare@latest -- search-engineДля настройки выберите следующие параметры:
- Для С чего вы хотите начать?, выберите
Hello World example. - Для Какой шаблон вы хотите использовать?, выберите
Worker only. - Для Какой язык вы хотите использовать?, выберите
TypeScript. - Для Хотите использовать git для контроля версий?, выберите
Yes. - Для Хотите развернуть приложение?, выберите
No(мы внесём некоторые изменения перед развёртыванием).
Перейдите в каталог вашего приложения:
cd search-engine2. Привяжите Worker к AI Search
Добавьте следующее в свой конфигурационный файл Wrangler:
{
"$schema": "./node_modules/wrangler/config-schema.json",
"ai_search_namespaces": [
{
"binding": "AI_SEARCH",
"namespace": "default",
"remote": true
}
]
}[[ai_search_namespaces]]
binding = "AI_SEARCH"
namespace = "default"
remote = trueЭто привязывает default пространство имён к env.AI_SEARCH. remote опция позволяет wrangler dev перенаправляют запросы к вашему развёрнутому экземпляру, поскольку AI Search не выполняется локально.
3. Добавьте код поиска
Обновите src/index.ts. Этот Worker считывает запрос из URL-адреса, выполняет поиск в вашем экземпляре и возвращает имя файла для каждого подходящего чанка. Замените my-instance с именем вашего экземпляра.
export default {
async fetch(request, env) {
const url = new URL(request.url);
const userQuery = url.searchParams.get("query") ?? "What is Cloudflare?";
const searchResult = await env.AI_SEARCH.get("my-instance").search({
messages: [{ role: "user", content: userQuery }],
});
return Response.json({
files: searchResult.chunks.map((chunk) => chunk.item.key),
});
},
};export interface Env {
AI_SEARCH: AiSearchNamespace;
}
export default {
async fetch(request, env): Promise<Response> {
const url = new URL(request.url);
const userQuery = url.searchParams.get("query") ?? "What is Cloudflare?";
const searchResult = await env.AI_SEARCH.get("my-instance").search({
messages: [{ role: "user", content: userQuery }],
});
return Response.json({
files: searchResult.chunks.map((chunk) => chunk.item.key),
});
},
} satisfies ExportedHandler<Env>;4. Запустите и разверните
Запустите локальный сервер разработки, а затем отправляйте запросы по адресу /?query=your+search+terms:
npx wrangler devВойдите в свой аккаунт Cloudflare, затем разверните Worker, чтобы сделать его доступным в интернете:
npx wrangler login
npx wrangler deploy