1. Введение
Обзор
Vertex AI Search and Conversation (ранее известный как Generative AI App Builder) позволяет разработчикам использовать возможности базовых моделей Google, экспертные знания в области поиска и технологии разговорного ИИ для создания корпоративных приложений на основе генеративного ИИ. В этом практическом занятии мы рассмотрим использование Vertex AI Search, где вы сможете создать поисковое приложение Google-качества на основе собственных данных и встроить строку поиска в свои веб-страницы или приложение.
Cloud Run — это управляемая вычислительная платформа, позволяющая запускать контейнеры непосредственно поверх масштабируемой инфраструктуры Google. Вы можете развертывать на Cloud Run код, написанный на любом языке программирования (который можно поместить в контейнер), используя опцию развертывания на основе исходного кода .
В этом практическом задании вы создадите сервис Cloud Run, используя развертывание на основе источника, для получения результатов поиска неструктурированного контента в PDF-файлах, хранящихся в хранилище Cloud Storage. Подробнее о загрузке неструктурированного контента можно узнать здесь .
Что вы узнаете
- Как создать приложение Vertex AI Search для поиска неструктурированных данных в формате PDF, загружаемых из облачного хранилища.
- Как создать HTTP-конечную точку с использованием развертывания на основе источника в Cloud Run
- Как создать учетную запись службы, следуя принципу минимальных привилегий, для использования службой Cloud Run для выполнения запросов к приложению Vertex AI Search.
- Как вызвать службу Cloud Run для выполнения запросов к приложению Vertex AI Search
2. Настройка и требования
Предварительные требования
- Вы вошли в облачную консоль.
- Вы ранее развернули службу Cloud Run. Например, для начала вы можете воспользоваться руководством по быстрому развертыванию веб-службы из исходного кода .
Активировать Cloud Shell
- В консоли Cloud нажмите «Активировать Cloud Shell» .
.

Если вы запускаете Cloud Shell впервые, вам будет показан промежуточный экран с описанием его возможностей. Если вы увидели промежуточный экран, нажмите «Продолжить» .

Подготовка и подключение к Cloud Shell займут всего несколько минут.

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Она предоставляет постоянный домашний каталог объемом 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и аутентификацию. Большая часть, если не вся, ваша работа в этом практическом задании может быть выполнена с помощью браузера.
После подключения к Cloud Shell вы увидите, что прошли аутентификацию и что проект настроен на ваш идентификатор проекта.
- Выполните следующую команду в Cloud Shell, чтобы подтвердить свою аутентификацию:
gcloud auth list
вывод команды
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- Выполните следующую команду в Cloud Shell, чтобы убедиться, что команда gcloud знает о вашем проекте:
gcloud config list project
вывод команды
[core] project = <PROJECT_ID>
Если это не так, вы можете установить это с помощью следующей команды:
gcloud config set project <PROJECT_ID>
вывод команды
Updated property [core/project].
3. Включите API.
Прежде чем начать использовать Vertex AI Search, вам потребуется включить несколько API.
Во-первых, для выполнения этого практического задания необходимо использовать API Vertex AI Search and Conversation, BigQuery и Cloud Storage. Вы можете включить эти API здесь .
Во-вторых, выполните следующие действия, чтобы включить API поиска и диалогов Vertex AI:
- В консоли Google Cloud перейдите в консоль Vertex AI Search and Conversation .
- Ознакомьтесь с условиями предоставления услуг и примите их, затем нажмите «Продолжить» и активируйте API.
4. Создайте приложение для поиска неструктурированных данных из облачного хранилища.
- В консоли Google Cloud перейдите на страницу «Поиск и диалоги» . Нажмите «Создать приложение» .
- В панели «Выберите тип приложения» выберите «Поиск» .
- Убедитесь, что функция «Корпоративные функции» включена для получения ответов, извлекаемых дословно из ваших документов.
- Убедитесь, что параметр «Расширенные функции LLM» включен для получения сводной информации по результатам поиска.
- В поле «Название приложения» введите название для вашего приложения. Идентификатор вашего приложения (App ID) будет отображаться под названием приложения.
- Выберите «Глобальный» (Global) в качестве местоположения для вашего приложения, а затем нажмите «Продолжить» .
- В панели «Хранилища данных» нажмите «Создать новое хранилище данных» .
- В панели «Выберите источник данных» выберите «Облачное хранилище» .
- В панели «Импорт данных из GCS» убедитесь, что выбран пункт «Папка» .
- В поле gs:// введите следующее значение:
cloud-samples-data/gen-app-builder/search/stanford-cs-224Этот сегмент Cloud Storage содержит PDF-файлы из общедоступной папки Cloud Storage для целей тестирования. - Выберите «Неструктурированные документы» , а затем нажмите «Продолжить» .
- В панели «Настройка хранилища данных» выберите «Глобальное» в качестве местоположения для вашего хранилища данных.
- Введите имя для вашего хранилища данных. Это имя вы будете использовать позже в этом практическом занятии при развертывании службы Cloud Run. Нажмите «Создать» .
- В панели «Хранилища данных» выберите новое хранилище данных и нажмите «Создать» .
- На странице «Данные» вашего хранилища данных перейдите на вкладку «Действия» , чтобы просмотреть статус загрузки данных. Когда процесс импорта завершится, в столбце «Статус» отобразится сообщение «Импорт завершен» .
- Чтобы увидеть количество импортированных документов, перейдите на вкладку «Документы» .
- В меню навигации нажмите «Предварительный просмотр» , чтобы протестировать приложение поиска.
- В строке поиска введите
final lab due date, а затем нажмите Enter , чтобы просмотреть результаты.
5. Создайте службу Cloud Run.
В этом разделе вы создадите сервис Cloud Run, который будет принимать строку запроса для ваших поисковых терминов. Этот сервис будет использовать клиентские библиотеки Python для API Discovery Engine . Список других поддерживаемых сред выполнения можно посмотреть здесь .
Создайте исходный код для функции.
Сначала создайте директорию и перейдите в неё с помощью команды `cd`.
mkdir docs-search-service-python && cd $_
Затем создайте файл requirements.txt со следующим содержимым:
blinker==1.6.3 cachetools==5.3.1 certifi==2023.7.22 charset-normalizer==3.3.0 click==8.1.7 Flask==3.0.0 google-api-core==2.12.0 google-auth==2.23.3 google-cloud-discoveryengine==0.11.2 googleapis-common-protos==1.61.0 grpcio==1.59.0 grpcio-status==1.59.0 idna==3.4 importlib-metadata==6.8.0 itsdangerous==2.1.2 Jinja2==3.1.2 MarkupSafe==2.1.3 numpy==1.26.1 proto-plus==1.22.3 protobuf==4.24.4 pyasn1==0.5.0 pyasn1-modules==0.3.0 requests==2.31.0 rsa==4.9 urllib3==2.0.7 Werkzeug==3.0.1 zipp==3.17.0
Далее создайте исходный файл main.py со следующим содержимым:
from typing import List
import json
import os
from flask import Flask
from flask import request
app = Flask(__name__)
from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine
project_id = os.environ.get('PROJECT_ID')
location = "global" # Values: "global", "us", "eu"
data_store_id = os.environ.get('SEARCH_ENGINE_ID')
print(project_id)
print(data_store_id)
@app.route("/")
def search_storage():
search_query = request.args.get("searchQuery")
result = search_sample(project_id, location, data_store_id, search_query)
return result
def search_sample(
project_id: str,
location: str,
data_store_id: str,
search_query: str,
) -> str:
# For more information, refer to:
# https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
client_options = (
ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
if location != "global"
else None
)
# Create a client
client = discoveryengine.SearchServiceClient(client_options=client_options)
# The full resource name of the search engine serving config
# e.g. projects/{project_id}/locations/{location}/dataStores/{data_store_id}/servingConfigs/{serving_config_id}
serving_config = client.serving_config_path(
project=project_id,
location=location,
data_store=data_store_id,
serving_config="default_config",
)
# Optional: Configuration options for search
# Refer to the `ContentSearchSpec` reference for all supported fields:
# https://cloud.google.com/python/docs/reference/discoveryengine/latest/google.cloud.discoveryengine_v1.types.SearchRequest.ContentSearchSpec
content_search_spec = discoveryengine.SearchRequest.ContentSearchSpec(
# For information about snippets, refer to:
# https://cloud.google.com/generative-ai-app-builder/docs/snippets
snippet_spec=discoveryengine.SearchRequest.ContentSearchSpec.SnippetSpec(
return_snippet=True
),
# For information about search summaries, refer to:
# https://cloud.google.com/generative-ai-app-builder/docs/get-search-summaries
summary_spec=discoveryengine.SearchRequest.ContentSearchSpec.SummarySpec(
summary_result_count=5,
include_citations=True,
ignore_adversarial_query=True,
ignore_non_summary_seeking_query=True,
),
)
# Refer to the `SearchRequest` reference for all supported fields:
# https://cloud.google.com/python/docs/reference/discoveryengine/latest/google.cloud.discoveryengine_v1.types.SearchRequest
request = discoveryengine.SearchRequest(
serving_config=serving_config,
query=search_query,
page_size=10,
content_search_spec=content_search_spec,
query_expansion_spec=discoveryengine.SearchRequest.QueryExpansionSpec(
condition=discoveryengine.SearchRequest.QueryExpansionSpec.Condition.AUTO,
),
spell_correction_spec=discoveryengine.SearchRequest.SpellCorrectionSpec(
mode=discoveryengine.SearchRequest.SpellCorrectionSpec.Mode.AUTO
),
)
response = client.search(request)
return response.summary.summary_text
if __name__ == "__main__":
app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
Настройка переменных среды
В этом коде вы создадите несколько переменных окружения для улучшения читаемости команд gcloud , используемых в этом практическом задании.
PROJECT_ID=$(gcloud config get-value project) SERVICE_NAME="search-storage-pdfs-python" SERVICE_REGION="us-central1" # update with your data store name SEARCH_ENGINE_ID=<your-data-store-name>
Создать учетную запись службы
В этом практическом задании показано, как создать учетную запись службы для доступа к API поиска Vertex AI.
SERVICE_ACCOUNT="cloud-run-vertex-ai-search" SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Cloud Run Vertex AI Search service account" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role='roles/discoveryengine.editor'
Разверните службу Cloud Run.
Теперь вы можете использовать развертывание на основе исходного кода для автоматической контейнеризации вашей службы Cloud Run.
gcloud run deploy $SERVICE_NAME \ --region=$SERVICE_REGION \ --source=. \ --service-account $SERVICE_ACCOUNT \ --update-env-vars SEARCH_ENGINE_ID=$SEARCH_ENGINE_ID,PROJECT_ID=$PROJECT_ID \ --no-allow-unauthenticated
Затем вы можете сохранить URL-адрес Cloud Run в качестве переменной среды для дальнейшего использования.
ENDPOINT_URL="$(gcloud run services describe $SERVICE_NAME --region=$SERVICE_REGION --format='value(status.url)')"
6. Вызовите службу Cloud Run.
Теперь вы можете вызвать свою службу Cloud Run с помощью строки запроса, чтобы узнать: What is the final lab due date? .
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" "$ENDPOINT_URL?searchQuery=what+is+the+final+lab+due+date"
Ваши результаты должны выглядеть примерно так, как в приведенном ниже примере:
The final lab is due on Tuesday, March 21 at 4:30 PM [1].
7. Поздравляем!
Поздравляем с завершением практического занятия!
Мы рекомендуем ознакомиться с документацией по Vertex AI Search и Cloud Run .
Что мы рассмотрели
- Как создать приложение Vertex AI Search для поиска неструктурированных данных в формате PDF, загружаемых из облачного хранилища.
- Как создать HTTP-конечную точку с использованием развертывания на основе источника в Cloud Run
- Как создать учетную запись службы, следуя принципу минимальных привилегий, для использования службой Cloud Run при выполнении запросов к приложению Vertex AI Search.
- Как вызвать службу Cloud Run для выполнения запросов к приложению Vertex AI Search
8. Уборка
Чтобы избежать непреднамеренных списаний средств (например, если эта облачная функция будет случайно вызвана больше раз, чем предусмотрено вашим ежемесячным лимитом вызовов облачных функций в бесплатном тарифе ), вы можете либо удалить облачную функцию, либо удалить проект, созданный на шаге 2.
Чтобы удалить облачную функцию, перейдите в консоль облачных функций по адресу https://console.cloud.google.com/functions/ и удалите функцию imagen_vqa (или переменную $FUNCTION_NAME, если вы использовали другое имя).
Если вы решите удалить весь проект, перейдите по ссылке https://console.cloud.google.com/cloud-resource-manager , выберите проект, созданный на шаге 2, и нажмите «Удалить». После удаления проекта вам потребуется изменить проекты в вашем Cloud SDK. Список всех доступных проектов можно просмотреть, выполнив gcloud projects list .