如何程序化导入GCS中.txt文件至Vertex AI Datastore并实现同步?
Vertex AI Search 程序化导入纯文本文件及相关问题解答
1. 是否可程序化导入.txt文件至Vertex Datastore?
可以实现,但需遵循Vertex AI Search的API规则处理纯文本文件:
- 转换为JSONL格式导入
官方API要求非结构化数据需以NDJSON/JSONL格式提交,你可将.txt内容封装为每行一个JSON对象,示例格式如下:
转换完成后上传至GCS,再调用导入API。以下是Python示例代码(使用{"content": "你的纯文本内容"}google-cloud-discoveryengine库):from google.cloud import discoveryengine_v1 as discoveryengine client = discoveryengine.DocumentServiceClient() parent = client.branch_path( project="你的项目ID", location="你的区域", data_store="你的数据存储ID", branch="default_branch" ) gcs_source = discoveryengine.GcsSource( input_uris=["gs://你的存储桶路径/转换后的文件.jsonl"], data_schema="document" ) request = discoveryengine.ImportDocumentsRequest( parent=parent, gcs_source=gcs_source, import_mode=discoveryengine.ImportDocumentsRequest.ImportMode.FULL ) operation = client.import_documents(request=request) operation.result() - 直接导入纯文本文件(需指定MIME类型)
若不想转换格式,需在导入请求中明确指定文件MIME类型为text/plain,同时设置data_schema="document"。之前设置未生效大概率是缺少MIME类型配置,示例参数如下:gcs_source = discoveryengine.GcsSource( input_uris=["gs://你的存储桶路径/原始文件.txt"], data_schema="document", mime_type="text/plain" )
2. 有无简便方法实现GCS存储桶与Vertex Datastore同步?
有两种实用方案:
- 事件驱动同步(基于Cloud Functions)
创建Cloud Functions监听GCS桶的finalize事件(文件上传完成触发),当有新的.txt文件上传时,自动将其转换为JSONL格式(或直接配置MIME类型),再调用Vertex AI Search导入API完成同步。 - 定期批量导入
在Vertex AI Search控制台配置定期导入任务,指定目标GCS桶路径,系统会定期扫描桶内新增文件并导入。需确保桶内文件已按要求格式化(或配置正确的MIME类型)。
3. 为何暂无NodeJS库支持该导入操作?
- Vertex AI Search(原Discovery Engine)属于较新的Google Cloud服务,NodeJS SDK的功能覆盖存在滞后性,目前官方优先完善Python、Java等主流语言的SDK支持。
- 你可通过直接调用REST API在NodeJS中实现导入,示例代码如下(使用
axios):const axios = require('axios'); const { google } = require('googleapis'); async function importDocuments() { const projectId = '你的项目ID'; const location = '你的区域'; const dataStoreId = '你的数据存储ID'; const url = `https://discoveryengine.googleapis.com/v1/projects/${projectId}/locations/${location}/dataStores/${dataStoreId}/branches/default_branch/documents:import`; const requestBody = { gcsSource: { inputUris: ['gs://你的存储桶路径/文件.jsonl'], dataSchema: 'document' }, importMode: 'FULL' }; // 通过Google Cloud认证获取访问令牌 const auth = await google.auth.getClient({ scopes: ['https://www.googleapis.com/auth/cloud-platform'] }); const accessToken = await auth.getAccessToken(); const response = await axios.post(url, requestBody, { headers: { 'Authorization': `Bearer ${accessToken.token}`, 'Content-Type': 'application/json' } }); console.log(response.data); }
内容的提问来源于stack exchange,提问作者charnould
相关产品推荐
相关产品推荐

