将数据连接器与 RAG Engine 搭配使用

本页介绍了如何使用数据连接器访问存储在 Cloud Storage、Google 云端硬盘、Slack、Jira 或 SharePoint 中的数据,以及如何将这些数据与 RAG Engine 搭配使用。导入 RagFiles API 可为这些数据源提供数据连接器。

从 Cloud Storage 或 Google 云端硬盘导入文件

如需将 Cloud Storage 或 Google 云端硬盘中的文件导入到语料库中,请执行以下操作:

  1. 按照创建 RAG 语料库中的说明创建语料库。
  2. 使用模板从 Cloud Storage 或 Google 云端硬盘导入文件。

从 Slack 导入文件

如需将 Slack 中的文件导入到语料库中,请执行以下操作:

  1. 创建语料库,这是一种索引,可对您的数据进行结构化和优化,以便进行搜索。按照创建 RAG 语料库中的说明操作。
  2. 通过 Slack 频道 ID 获取 CHANNEL_ID
  3. 创建并设置一个应用,以便与 RAG Engine 搭配使用。
    1. 在 Slack 界面的添加特性和功能部分中,点击权限
    2. 添加以下权限:
      • channels:history
      • groups:history
      • im:history
      • mpim:history
    3. 点击安装到工作区,将应用安装到您的 Slack 工作区。
  4. 点击复制以获取 API 令牌,该令牌可验证您的身份并授予您对 API 的访问权限。
  5. 将您的 API 令牌添加到 Secret Manager。
  6. 如需查看存储的 Secret,请向项目的 RAG Engine 服务账号授予 Secret Manager Secret Accessor 角色。

以下 curl 和 Python 代码示例演示了如何从您的 Slack 资源导入文件。

curl

如果您想从特定频道获取消息,请更改 CHANNEL_ID

API_KEY_SECRET_VERSION=SLACK_API_KEY_SECRET_VERSION
CHANNEL_ID=SLACK_CHANNEL_ID
PROJECT_ID=us-central1

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${ ENDPOINT }/v1beta1/projects/${ PROJECT_ID }/locations/${ PROJECT_ID }/ragCorpora/${ RAG_CORPUS_ID }/ragFiles:import \
-d '{
  "import_rag_files_config": {
    "slack_source": {
      "channels": [
        {
          "apiKeyConfig": {
            "apiKeySecretVersion": "'"${ API_KEY_SECRET_VERSION }"'"
          },
          "channels": [
            {
              "channel_id": "'"${ CHANNEL_ID }"'"
            }
          ]
        }
      ]
    }
  }
}'

Python

如果您想获取指定时间范围或特定渠道的消息,请更改以下任一字段:

  • START_TIME
  • END_TIME
  • CHANNEL1CHANNEL2
    # Slack example
    start_time = protobuf.timestamp_pb2.Timestamp()
    start_time.GetCurrentTime()
    end_time = protobuf.timestamp_pb2.Timestamp()
    end_time.GetCurrentTime()
    source = rag.SlackChannelsSource(
        channels = [
            SlackChannel("CHANNEL1", "api_key1"),
            SlackChannel("CHANNEL2", "api_key2", START_TIME, END_TIME)
        ],
    )

    response = rag.import_files(
        corpus_name="projects/my-project/locations/us-central1/ragCorpora/my-corpus-1",
        source=source,
        chunk_size=512,
        chunk_overlap=100,
    )

从 Jira 导入文件

如需将 Jira 中的文件导入到您的语料库中,请执行以下操作:

  1. 创建语料库,这是一种索引,可对您的数据进行结构化和优化,以便进行搜索。按照创建 RAG 语料库中的说明操作。
  2. 如需创建 API 令牌,请登录 Atlassian 网站
  3. 在请求中使用 {YOUR_ORG_ID}.atlassian.net 作为 SERVER_URI
  4. 在请求中使用您的 Atlassian 电子邮件地址作为 EMAIL
  5. 在请求中提供 projectscustomQueries。如需详细了解自定义查询,请参阅使用 Jira 查询语言 (JQL) 进行高级搜索

    导入 projects 时,projects 会展开为相应的查询,以获取整个项目。例如,MyProject 会展开为 project = MyProject

  6. 点击复制以获取 API 令牌,该令牌可验证您的身份并授予您对 API 的访问权限。
  7. 将您的 API 令牌添加到 Secret Manager。
  8. 向项目的 RAG Engine 服务账号授予 Secret Manager Secret Accessor 角色。

curl

EMAIL=JIRA_EMAIL
API_KEY_SECRET_VERSION=JIRA_API_KEY_SECRET_VERSION
SERVER_URI=JIRA_SERVER_URI
CUSTOM_QUERY=JIRA_CUSTOM_QUERY
PROJECT_ID=JIRA_PROJECT
REGION= "us-central1"

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${ ENDPOINT }/v1beta1/projects/${ PROJECT_ID }/locations/REGION>/ragCorpora/${ RAG_CORPUS_ID }/ragFiles:import \
-d '{
  "import_rag_files_config": {
    "jiraSource": {
      "jiraQueries": [{
        "projects": ["'"${ PROJECT_ID }"'"],
        "customQueries": ["'"${ CUSTOM_QUERY }"'"],
        "email": "'"${ EMAIL }"'",
        "serverUri": "'"${ SERVER_URI }"'",
        "apiKeyConfig": {
          "apiKeySecretVersion": "'"${ API_KEY_SECRET_VERSION }"'"
        }
      }]
    }
  }
}'

Python

    # Jira Example
    jira_query = rag.JiraQuery(
        email="xxx@yyy.com",
        jira_projects=["project1", "project2"],
        custom_queries=["query1", "query2"],
        api_key="api_key",
        server_uri="server.atlassian.net"
    )
    source = rag.JiraSource(
        queries=[jira_query],
    )

    response = rag.import_files(
        corpus_name="projects/my-project/locations/REGION/ragCorpora/my-corpus-1",
        source=source,
        chunk_size=512,
        chunk_overlap=100,
    )

从 SharePoint 导入文件

如需将 SharePoint 网站中的文件导入到语料库中,请执行以下操作:

  1. 创建语料库,这是一种索引,可对您的数据进行结构化和优化,以便进行搜索。按照创建 RAG 语料库中的说明操作。
  2. 创建一个 Azure 应用来访问您的 SharePoint 网站。
    1. 如需创建注册,请前往应用注册
      1. 为应用提供名称。
      2. 选择仅此组织目录中的账号选项。
      3. 验证重定向 URI 是否为空。
    2. 概览部分,使用您的应用(客户端)ID 作为 CLIENT_ID,并使用您的“目录(租户)ID”作为 TENANT_ID
    3. 管理部分,执行以下操作以更新 API 权限:
      1. 添加 SharePoint Sites.Read.All 权限。
      2. 添加 Microsoft Graph Files.Read.AllBrowser SiteLists.Read.All 权限。
      3. 请授予管理员同意,以便这些权限更改生效。
    4. 管理部分,执行以下操作:
      1. 使用新的客户端密钥更新证书和密钥
      2. 使用 API_KEY_SECRET_VERSION 将 Secret 值添加到 Secret Manager。
  3. 向项目的 RAG Engine 服务账号授予 Secret Manager Secret Accessor 角色。
  4. 使用 {YOUR_ORG_ID}.sharepoint.com 作为 SHAREPOINT_SITE_NAME
  5. 请求中必须指定 SharePoint 网站中的云端硬盘名称或云端硬盘 ID。
  6. 可选:可以指定驱动器上的文件夹路径或文件夹 ID。如果未指定文件夹路径或文件夹 ID,系统会导入云端硬盘上的所有文件夹和文件。

curl

CLIENT_ID=SHAREPOINT_CLIENT_ID
API_KEY_SECRET_VERSION=SHAREPOINT_API_KEY_SECRET_VERSION
TENANT_ID=SHAREPOINT_TENANT_ID
SITE_NAME=SHAREPOINT_SITE_NAME
FOLDER_PATH=SHAREPOINT_FOLDER_PATH
DRIVE_NAME=SHAREPOINT_DRIVE_NAME

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${ ENDPOINT }/v1beta1/projects/${ PROJECT_ID }/locations/REGION>/ragCorpora/${ RAG_CORPUS_ID }/ragFiles:import \
-d '{
  "import_rag_files_config": {
    "sharePointSources": {
      "sharePointSource": [{
        "clientId": "'"${ CLIENT_ID }"'",
        "apiKeyConfig": {
          "apiKeySecretVersion": "'"${ API_KEY_SECRET_VERSION }"'"
        },
        "tenantId": "'"${ TENANT_ID }"'",
        "sharepointSiteName": "'"${ SITE_NAME }"'",
        "sharepointFolderPath": "'"${ FOLDER_PATH }"'",
        "driveName": "'"${ DRIVE_NAME }"'"
      }]
    }
  }
}'

Python

    from vertexai.preview import rag
    from vertexai.preview.rag.utils import resources

    CLIENT_ID="SHAREPOINT_CLIENT_ID"
    API_KEY_SECRET_VERSION="SHAREPOINT_API_KEY_SECRET_VERSION"
    TENANT_ID="SHAREPOINT_TENANT_ID"
    SITE_NAME="SHAREPOINT_SITE_NAME"
    FOLDER_PATH="SHAREPOINT_FOLDER_PATH"
    DRIVE_NAME="SHAREPOINT_DRIVE_NAME"

    # SharePoint Example.
    source = resources.SharePointSources(
        share_point_sources=[
            resources.SharePointSource(
                client_id=CLIENT_ID,
                client_secret=API_KEY_SECRET_VERSION,
                tenant_id=TENANT_ID,
                sharepoint_site_name=SITE_NAME,
                folder_path=FOLDER_PATH,
                drive_id=DRIVE_ID,
            )
        ]
    )

    response = rag.import_files(
        corpus_name="projects/my-project/locations/REGION/ragCorpora/my-corpus-1",
        source=source,
        chunk_size=512,
        chunk_overlap=100,
    )

后续步骤