OpenAPI 도구를 사용하면 AI 코치가 대화 컨텍스트에 따라 원격 API에서 데이터를 동적으로 가져올 수 있습니다.
시작하기 전에
기존 API에 문제가 있는 경우 다음의 유연한 접근 방식을 사용하세요.
- 기존 API의 래퍼로 Cloud Run 함수를 만듭니다. Cloud Run 함수는 추가 필수 매개변수를 채우고 API 응답의 후처리를 실행합니다.
- Cloud Run 함수를 호출하는 OpenAPI 도구를 만듭니다.
Datastore API에는 검색 결과 모드 설정과 같은 추가 입력 매개변수가 필요할 수 있지만 Cloud Run 함수에는 AI 코치가 대화 컨텍스트에서 추출할 수 있는 매개변수 (질문) 하나만 필요합니다. 응답 처리 측면에서 Cloud Run 함수는 모든 결과 대신 상위 결과만 반환합니다.
Datastore에 액세스하려면 다음 단계를 따르세요.
1단계: 데이터 스토어 및 검색 앱 만들기
- Datastore의 단계에 따라 Datastore를 만듭니다.
- 검색 앱 만들기 단계를 따릅니다.
- API를 사용하여 Datastore 및 검색 앱을 확인하여 솔루션 유형, 검색 등급, 청크가 사용 설정되어 있는지 확인합니다.
다음 명령어를 실행하여 청크를 가져옵니다.
gcurl -sX GET \ "https://discoveryengine.googleapis.com/v1alpha/projects/${project_id}/locations/global/collections/default_collection/dataStores/${data_store_id}/documentProcessingConfig"
다음 예는 청크가 사용 설정되어 있음을 보여줍니다.
{ "name": "projects/${project_id}/locations/global/collections/default_collection/dataStores/${data_store_id}/documentProcessingConfig", "chunkingConfig": { "layoutBasedChunkingConfig": { "chunkSize": 500, "includeAncestorHeadings": true } }, "defaultParsingConfig": { "digitalParsingConfig": {} } }
다음 명령어를 실행하여 솔루션 유형과 검색 등급을 가져옵니다.
gcurl -X GET \ "https://discoveryengine.googleapis.com/v1alpha/projects/${project_id}/locations/global/collections/default_collection/engines/${data_store_id}"
다음 예에서는 솔루션 유형과 검색 등급이 확인되었음을 보여줍니다.
{ "name": "projects/${project_id}/locations/global/collections/default_collection/engines/${data_store_id}", "displayName": "iphone_", "dataStoreIds": [ "${data_store_id}" ], "solutionType": "SOLUTION_TYPE_SEARCH", "searchEngineConfig": { "searchTier": "SEARCH_TIER_ENTERPRISE" }, "commonConfig": { "companyName": "Google" }, "industryVertical": "GENERIC" }
2단계: Datastore를 호출하는 Cloud Run 함수 만들기
인증하려면 ID 토큰이 필요하도록 Cloud Run 함수를 구성하세요. Cloud Run Functions는 복잡한 API를 기본 API로 래핑하는 데 도움이 됩니다. 다음 작업을 수행합니다.
- 요청에 추가 필드를 입력합니다.
- Datastore API를 호출하여 검색을 실행합니다.
- API 응답을 처리하고 상위 결과를 반환합니다.
Cloud Run 함수를 만든 후 Cloud Run 함수를 호출하는 OpenAPI 도구를 만듭니다.
다음 예에서 Cloud Run 함수는 Datastore API를 변환하여 검색을 실행하고 검색 결과 목록을 제공합니다.
import os import requests import google.auth import google.auth.transport.requests import functions_framework @functions_framework.http def call_vertex_search(request): """ HTTP Cloud Function to invoke a Vertex AI Search endpoint. """ # --- Configuration - Tailor to your Vertex AI Search specifics --- project_id = ${project_id} engine_id = "${data_store_id}" # Establish the Vertex AI Search endpoint URL endpoint = f"https://discoveryengine.googleapis.com/v1alpha/projects/${project_id}/locations/global/collections/default_collection/engines/{engine_id}/servingConfigs/default_chat:search" # --- Acquire Authentication Token --- try: credentials, project = google.auth.default() auth_req = google.auth.transport.requests.Request() credentials.refresh(auth_req) token = credentials.token except Exception as e: print(f"Authentication token retrieval error: {e}") return f"Authentication token retrieval error: {e}", 500 headers = { "Authorization": f"Bearer {token}", "Content-Type": "application/json", } # --- Formulate Search Query --- # Extract the query from the request; otherwise, employ a default. request_json = request.get_json(silent=True) query = "what is the price of iphone 13?" # Default query if request_json and 'query' in request_json: query = request_json['query'] payload = { "query": query, "page_size": 5, "content_search_spec": { "search_result_mode": "CHUNKS" } # Additional search parameters, such as filters or boost_spec, can be appended here. # "filter": "some_attribute:ANY(\"value\")", } # --- Execute Vertex AI Search API Call --- try: response = requests.post(endpoint, headers=headers, json=payload) response.raise_for_status() # Trigger an exception for unfavorable status codes. search_results = response.json() print(f"Search results: {search_results}") extracted_data = search_results["results"][0]["chunk"]["content"] if extracted_data is not None: print(f"Extracted data: {extracted_data}") return {"content": extracted_data}, 200 else: print("Failed to extract search results from the response.") return "Failed to extract search results from the response", 404 except requests.exceptions.RequestException as e: print(f"Vertex AI Search invocation error: {e}") if e.response is not None: print(f"Error details: {e.response.text}") return f"Vertex AI Search invocation error: {e.response.text}", e.response.status_code return f"Vertex AI Search invocation error: {e}", 500 except Exception as e: print(f"An unanticipated error transpired: {e}") return f"An unanticipated error transpired: {e}", 500
셸을 사용하여 Cloud Run 함수를 테스트합니다. 다음 예와 같이 아이폰 13 가격이 얼마야?와 같은 질문을 보내 보세요.
export CLOUDSDK_CORE_PROJECT=${project_id} curl -H "Authorization: Bearer "$(gcloud auth print-identity-token) -H "X-Goog-User-Project: ${CLOUDSDK_CORE_PROJECT}" -H "Content-Type: application/json; charset=utf-8" -X GET "https://${CLOUD_FUNCTION_ENDPOINT}/?query=what%20is%20the%20price%20of%20iphone%2013"
다음과 같은 응답이 표시됩니다.
{"content":"Table of contents\niPhone price history iPhone 4S (2011)\niPhone 4S original starting MSRP: $199\nInflation-adjusted iPhone 4S price: $280\niPhone 5 (2012)\niPhone 5 Original starting MSRP: $199\nInflation-adjusted iPhone 5 price: $276\niPhone 5S/5C (2013) iPhone 5S original starting MSRP: $199\niPhone 5C original starting MSRP: $99\nInflation-adjusted iPhone 5S price: $270\nInflation-adjusted iPhone 5C price: $134\niPhone 6/6 Plus (2014) Table of contents\niPhone price history iPhone 6 original starting MSRP: $199\niPhone 6 Plus original starting MSRP: $299\nInflation-adjusted iPhone 6 price: $266\nInflation-adjusted iPhone 6 Plus price: $398\niPhone 6S/6S Plus (2015)\niPhone 6S original starting MSRP: $199\niPhone 6S Plus original starting MSRP: $299\nInflation-adjusted iPhone 6S price: $265\nInflation-adjusted iPhone 6S Plus price: $397\niPhone 7/7 Plus (2016) Table of contents\niPhone price history iPhone 7 original starting MSRP: $649\niPhone 7 Plus original starting MSRP: $769\nInflation-adjusted iPhone 7 price: $854\nInflation-adjusted iPhone 7 Plus price: $1,011\niPhone 8/8 Plus (2017)\niPhone 8 original starting MSRP: $699\niPhone 8 Plus original starting MSRP: $799\nInflation-adjusted iPhone 8 price: $900\nInflation-adjusted iPhone 8 Plus price: $1,029\niPhone X (2017)\niPhone X original starting MSRP: $999\nInflation-adjusted iPhone X Plus price: $1,287\niPhone XR (2018)\niPhone XR original starting MSRP: $749\nInflation-adjusted iPhone XR Plus price: $942\niPhone XS/S Max (2018) Table of contents\niPhone price history iPhone XS original starting MSRP: $999\niPhone XS Max original starting MSRP: $1,099\nInflation-adjusted iPhone XS price: $1,254\nInflation-adjusted iPhone XS Plus price: $1,380\niPhone 11/Pro/Pro Max (2019)\niPhone 11 original starting MSRP: $699\niPhone 11 Pro original starting MSRP: $999\niPhone 11 Pro Max original starting MSRP: $1099\nInflation-adjusted iPhone 11 price: $863\nInflation-adjusted iPhone 11 Pro price: $1,232\nInflation-adjusted iPhone 11 Pro Max price: $1,355\niPhone 12/Mini/Pro/Pro Max (2020)\niPhone 12 original starting MSRP: $799 Table of contents\niPhone price history Login iPhone 12 Mini original starting MSRP: $699\niPhone 12 Pro original starting MSRP: $999\niPhone 12 Pro Max original starting MSRP: $1099\nInflation-adjusted iPhone 12 price: $976\nInflation-adjusted iPhone 12 Mini price: $853\nInflation-adjusted iPhone 12 Pro price: $1,218\nInflation-adjusted iPhone 12 Pro Max price: $1,340 iPhone 13/Mini/Pro/Pro Max (2021)\niPhone 13 original starting MSRP: $799\niPhone 13 Mini original starting MSRP: $699\niPhone 13 Pro original starting MSRP: $999\niPhone 13 Pro Max original starting MSRP: $1099\nInflation-adjusted iPhone 13 price: $931\nInflation-adjusted iPhone 13 Mini price: $814\nInflation-adjusted iPhone 13 Pro price: $1,163\nInflation-adjusted iPhone 13 Pro Max price: $1,279\niPhone 14/Plus/Pro/Pro Max (2022) Table of contents\niPhone price history Robert Triggs / Android Authority"}
3단계: OpenAPI 도구 만들기
OpenAPI 및 Integration Connectors 도구의 단계에 따라 OpenAPI 도구를 만듭니다.
다음 예에서는 OpenAPI 도구가 Cloud Run 함수에서 제공하는 새 API와 상호작용하는 방법을 보여줍니다.
openapi: 3.0.0 info: title: iphone_price_tool description: An API to search document about iPhone prices. version: 1.0.0 servers: - url: https://${CLOUD_FUNCTION_ENDPOINT} paths: /: get: summary: Search information about iphone prices operationId: search parameters: - in: query name: query schema: type: string required: true description: The user's question about iphone price responses: '200': description: Retrieved information about iphone price content: application/json: schema: type: object properties: content: type: string description: Information about iphone price '400': description: Bad request, query parameter is missing. content: text/plain: schema: type: string example: "Please provide a 'query' as a URL parameter for POST requests (e.g., ?query=your_question)." '500': description: Internal server error. content: text/plain: schema: type: string example: "Error querying: An unexpected error occurred."
4단계: 생성기 만들기
OpenAPI 도구의 단계에 따라 AI 코치 생성기를 만듭니다. AI 코치 생성기 콘텐츠를 사용하여 LLM 프롬프트를 빌드합니다.