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-файлов, полученных из корзины Cloud Storage.
- Как создать конечную точку HTTP с помощью развертывания на основе источника в Cloud Run
- Как создать учетную запись службы в соответствии с принципом наименьших привилегий для службы Cloud Run, чтобы использовать ее для запроса приложения Vertex AI Search.
- Как вызвать службу Cloud Run для запроса приложения Vertex AI Search
2. Настройка и требования
Предварительные условия
- Вы вошли в облачную консоль.
- Ранее вы развернули службу Cloud Run. Например, вы можете выполнить развертывание веб-службы из краткого руководства по исходному коду, чтобы начать работу.
Активировать Cloud Shell
- В Cloud Console нажмите «Активировать Cloud Shell». .
Если вы запускаете Cloud Shell впервые, вы увидите промежуточный экран с описанием того, что это такое. Если вам был представлен промежуточный экран, нажмите «Продолжить» .
Подготовка и подключение к Cloud Shell займет всего несколько минут.
Эта виртуальная машина загружена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Большую часть, если не всю, работу в этой лаборатории кода можно выполнить с помощью браузера.
После подключения к 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 .
- Прочтите и согласитесь с Условиями обслуживания, затем нажмите «Продолжить» и активируйте API.
4. Создайте приложение для поиска неструктурированных данных из облачного хранилища.
- В консоли Google Cloud перейдите на страницу «Поиск и общение» . Нажмите «Новое приложение» .
- На панели «Выбор типа приложения» выберите «Поиск» .
- Убедитесь, что функции Enterprise включены , чтобы получать ответы, дословно извлеченные из ваших документов.
- Убедитесь, что опция «Дополнительные функции LLM» включена , чтобы получать сводные данные поиска.
- В поле Имя приложения введите имя вашего приложения. Идентификатор вашего приложения отображается под названием приложения.
- Выберите глобальное (Global) в качестве местоположения вашего приложения, а затем нажмите «Продолжить» .
- На панели «Хранилища данных» нажмите « Создать новое хранилище данных» .
- На панели «Выберите источник данных» выберите «Облачное хранилище» .
- Убедитесь, что на панели «Импорт данных из GCS» выбрана папка .
- В поле gs:// введите следующее значение:
cloud-samples-data/gen-app-builder/search/stanford-cs-224
Этот сегмент Cloud Storage содержит PDF-файлы из общедоступной папки Cloud Storage для целей тестирования. - Выберите «Неструктурированные документы» и нажмите « Продолжить» .
- На панели «Настройка хранилища данных» выберите «Глобальный» (Global) в качестве местоположения вашего хранилища данных.
- Введите имя для вашего хранилища данных. Вы будете использовать это имя позже в этой лаборатории кода при развертывании службы Cloud Run. Нажмите Создать .
- На панели «Хранилища данных» выберите новое хранилище данных и нажмите « Создать» .
- На странице «Данные» вашего хранилища данных перейдите на вкладку «Активность» , чтобы просмотреть статус приема данных. Импорт завершен отображается в столбце Статус, когда процесс импорта завершен.
- Перейдите на вкладку «Документы» , чтобы увидеть количество импортированных документов.
- В меню навигации нажмите «Предварительный просмотр» , чтобы протестировать приложение поиска.
- В строке поиска введите
final lab due date
и нажмите Enter , чтобы просмотреть результаты.
5. Создайте сервис Cloud Run.
В этом разделе вы создадите службу Cloud Run, которая принимает строку запроса для ваших условий поиска. Этот сервис будет использовать клиентские библиотеки Python для API Discovery Engine . Список других поддерживаемых сред выполнения можно просмотреть здесь .
Создайте исходный код функции
Сначала создайте каталог и перейдите в него.
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>
Создать учетную запись службы
В этой лаборатории кода показано, как создать учетную запись службы для службы Cloud Run, чтобы использовать ее для доступа к 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-файлов, полученных из корзины Cloud Storage.
- Как создать конечную точку HTTP с помощью развертывания на основе источника в Cloud Run
- Как создать учетную запись службы в соответствии с принципом наименьших привилегий для службы Cloud Run, чтобы использовать ее для запроса приложения Vertex AI Search.
- Как вызвать службу Cloud Run для запроса приложения Vertex AI Search
8. Очистка
Чтобы избежать непреднамеренных расходов (например, если эта облачная функция случайно вызывается больше раз, чем ежемесячно выделено количество вызовов облачной функции на уровне бесплатного пользования ), вы можете либо удалить облачную функцию, либо удалить проект, созданный на шаге 2.
Чтобы удалить функцию Cloud, перейдите в консоль Cloud Function Cloud по адресу https://console.cloud.google.com/functions/ и удалите функцию imagen_vqa (или $FUNCTION_NAME, если вы использовали другое имя).
Если вы решите удалить весь проект, вы можете перейти на https://console.cloud.google.com/cloud-resource-manager , выбрать проект, созданный на шаге 2, и нажать «Удалить». Если вы удалите проект, вам придется изменить проекты в Cloud SDK. Вы можете просмотреть список всех доступных проектов, запустив gcloud projects list
.