Posit Cloud

人工智能与机器学习

概述

人工智能(AI)和机器学习(ML)是当今科技领域最热门的话题之一。AI是指计算机系统能够执行通常需要人类智能的任务,如视觉识别、语音识别和决策制定。ML是AI的一个子集,专注于开发能够从数据中学习的算法。

关键技术

深度学习

深度学习是ML的一个分支,使用多层神经网络来处理复杂的数据模式。它在图像和语音识别方面取得了显著的成果。

强化学习

强化学习是一种通过试错来学习的ML方法。它通常用于游戏和机器人控制等领域。

应用领域

医疗保健

AI和ML在医疗诊断、药物发现和个性化治疗方面有广泛应用。

金融

在金融领域,AI用于风险管理、欺诈检测和算法交易。

挑战

数据隐私

随着AI和ML的发展,数据隐私成为一个重要问题。如何在不侵犯个人隐私的情况下利用数据是一个挑战。

伦理问题

AI系统的决策过程可能不透明,这引发了关于伦理和责任的讨论。

未来展望

AI和ML的未来充满希望,但也伴随着挑战。随着技术的进步,我们期待看到更多创新的应用和解决方案。

概述

Posit Cloud 上,您可以通过网页浏览器创建数据项目并发布结果。当您希望将所有静态文档和交互式应用程序集中在一个地方时,请使用 Posit Cloud。

有几种方法可以将 Quarto 内容发布到 Posit Cloud:

  1. 使用 quarto publish 命令发布在本地机器上渲染的静态内容。

  2. 使用 rsconnect-python Python 包或 rsconnect R 包发布代码,以便在 Posit Cloud 上渲染。

  3. 使用 JenkinsAirflowGitHub Actions 等持续集成(CI)服务,渲染并发布到 Posit Cloud。

下面将详细介绍每种选项。如果您刚刚开始,我们强烈建议使用第一种方法(quarto publish)。然后,随着您的需求发展,您可以考虑其他更复杂的选择。

发布命令

quarto publish 命令是发布本地渲染内容的最简单方法。从您的项目所在目录执行 quarto publish 命令以发布到 Posit Cloud:

终端
quarto publish posit-cloud

如果您之前未发布到 Posit Cloud,系统会提示您输入您的令牌和令牌密钥(可在账户 > 令牌下找到):

终端
$ quarto publish posit-cloud
 ? 令牌: › F69A5954CC09A97B7D74C73C6C7384EB
 ? 令牌密钥: › ****************************************

认证后,您的内容将被渲染并发布,然后浏览器将打开以查看其在 Posit Cloud 上的页面。

您的先前发布记录将存储在项目或文档目录中的 _publish.yml 文件中。该文件存储了发布内容的服务、ID 和 URL。例如:

- source: project
  posit-cloud:
    - id: "1234"
      url: "https://posit.cloud/content/1234"

账户信息不存储在此文件中,因此适合将其检入版本控制并与多个发布者共享。

您可以通过提供以下命令行选项来自定义 quarto publish 的行为:

选项 行为
--no-prompt 不提示确认发布操作。
--no-browser 发布后不打开浏览器。
--no-render 发布前不重新渲染。

要发布文档而不是网站或书籍,请提供文档的路径:

终端
quarto publish posit-cloud document.qmd

使用代码发布

在前面的示例中,我们在本地渲染内容,然后将其发布到 Posit Cloud。然而,在某些情况下,您可能希望将源代码发布到 Posit Cloud,然后在服务器上渲染。

发布代码的工具因您使用的是 Knitr(R)还是 Jupyter(Python)引擎而异,因此我们将在下面分别介绍它们。

Knitr(R)

rsconnect R 包包含一组发布函数,您可以使用这些函数将带有 R 代码的 Quarto 项目发布到 Posit Cloud。

您的凭据可以在 Posit Cloud 的账户 > 令牌下找到。要添加您的凭据,请使用:

library(rsconnect)

setAccountInfo(
  name = 'abcde-nora-jones',
  token = 'F69A5954CC09A97B7D74C73C6C7384EB',
  secret = 'lcVIQGISmcSxG5VJhuRXNWHrWs7wLwaoubm8AcC7',
  server = 'posit.cloud'
)

添加凭据后,您可以发布您的项目。这里我们发布一个文档和一个网站:

library(rsconnect)

deployDoc("document.qmd")
deployApp("./my-site")

RStudio IDE

如果您使用的是 RStudio IDE,还支持一键发布到 Posit Cloud。使用源编辑器或查看窗格中的发布按钮 来发布文档或网站。

有关更多详细信息,请参阅 Posit Cloud 文档中的 发布

Jupyter(Python)

rsconnect-python Python 包提供了一个命令行界面(CLI),您可以使用它将使用 Jupyter 的 Quarto 文档和网站发布到 Posit Cloud。要使用 CLI:

  1. 首先,安装 rsconnect-python 包并为发布配置 Posit Cloud 凭据(值可在账户 > 令牌下找到):

    终端
    rsconnect add \
              --account 'abcde-nora-jones' \
              --name 'posit.cloud' \
              --token 'F69A5954CC09A97B7D74C73C6C7384EB' \
              --secret 'lcVIQGISmcSxG5VJhuRXNWHrWs7wLwaoubm8AcC7' \
              --server 'posit.cloud'
  2. 然后,从您的项目目录使用 rsconnect deploy quarto 命令:

    终端
    rsconnect deploy quarto

    请参阅发布 Quarto 内容的完整文档,以获取有关使用 CLI 进行发布的更多详细信息。

持续集成

您还可以使用 JenkinsAirflowGitHub Actions 等持续集成 (CI) 服务部署 Quarto 内容。在大多数情况下,这将涉及脚本化 quarto publish 命令,但在 GitHub Actions 的情况下,您可以利用标准的 Quarto 发布操作

当从 CI 服务发布到 Posit Cloud 时,您需要考虑是否希望直接在 CI 服务器上执行您的 Python 或 R 代码,或者是否希望利用之前冻结的执行结果。我们将首先探讨这种可能性,然后继续探讨如何从 CI 发布。

冻结计算

根据您的运行时需求(包、数据库凭证等)的复杂程度,您可能会发现将 Python 和 R 代码的执行限制在具有所需软件和凭证的本地上下文中更为方便。

为了确保 R、Python 和 Julia 代码仅在本地执行,请通过在 _quarto.yml 中添加以下内容,配置您的项目以使用 Quarto 的 冻结 功能:

_quarto.yml
execute:
  freeze: auto

现在,完全重新渲染您的站点:

Terminal
quarto render

如果您在项目中有可执行代码,您会注意到在项目的顶层创建了一个 _freeze 目录。此目录存储计算结果,并应将其提交到版本控制中。每当你更改包含可执行代码的 .qmd 文件时,它将在下一次渲染时自动重新运行,并且更新后的计算结果将存储在 _freeze 中。

如果您希望 CI 发布执行项目中包含的所有 Python 和 R 代码,您需要确保在 CI 服务器上安装了这些工具的必要版本(以及任何所需的包)。如何做到这一点超出了本文的范围——要了解更多关于保存和恢复依赖项的信息,请参阅关于虚拟环境的文章。

发布命令

您可以通过脚本化 quarto publish 命令,使用任何 CI 服务将 Quarto 内容发布到 Posit Cloud。为此,您需要确保您的凭证作为环境变量在 CI 服务器上可用。

变量 描述
POSIT_CLOUD_TOKEN 用户的身份验证令牌。
POSIT_CLOUD_SECRET 与令牌关联的密钥。

此外,您还需要指定要更新的目标内容的 ID。这通常从发布期间保存到项目目录中的 _publish.yml 文件中提取。例如:

_publish.yml
- source: project
  posit-cloud:
    - id: 1234
      url: 'https://posit.cloud/content/1234/'

假设您有一个如上所示的 _publish.yml,您可以使用以下命令从 CI 发布到 Posit Cloud:

Terminal
export POSIT_CLOUD_TOKEN=F69A5954CC09A97B7D74C73C6C7384EB
export POSIT_CLOUD_SECRET=lcVIQGISmcSxG5VJhuRXNWHrWs7wLwaoubm8AcC7
quarto publish posit-cloud

或者,如果您没有 _publish.yml 文件,可以在命令行上指定 ID,如下所示:

Terminal
quarto publish posit-cloud --id 1234

GitHub Actions

如果您的 CI 服务是 GitHub Actions,那么您可以利用 Quarto 的标准 发布操作 来自动部署到 Posit Cloud。

用户凭证

在创建发布操作之前,您需要确保您的仓库具有发布到 Posit Cloud 所需的凭证。您可以按如下方式操作:

  1. 如果您还没有,请在 Posit Cloud 中创建一个令牌和令牌密钥(在账户 > 令牌下)。

  2. 将令牌密钥添加到仓库的操作 Secrets 中(可在仓库 设置 中访问)。在 Repository Secrets 下,您会看到一个 New repository secret 按钮:

    GitHub 仓库的 Actions 的 Secrets 和 Variables 页面的截图。

    点击按钮并将步骤 1 中的 API 密钥作为名为 POSIT_CLOUD_SECRET 的密钥添加:

    GitHub 仓库添加新 Actions 密钥页面的截图。

发布操作

要设置您的发布操作,请在您的仓库中创建一个 .github/workflows/publish.yml 文件。如果您正在冻结计算(即不在操作中运行 Python 或 R 代码),那么文件将如下所示:

.github/workflows/publish.yml
on:
  workflow_dispatch:
  push:
    branches: main

name: Quarto Publish

jobs:
  build-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: 检出仓库
        uses: actions/checkout@v4 

      - name: 设置 Quarto
        uses: quarto-dev/quarto-actions/setup@v2

      - name: 渲染并发布
        uses: quarto-dev/quarto-actions/publish@v2
        with:
          target: posit-cloud
          POSIT_CLOUD_TOKEN: F69A5954CC09A97B7D74C73C6C7384EB
          POSIT_CLOUD_SECRET: ${{ secrets.POSIT_CLOUD_SECRET }}

一旦你将更新后的仓库(包括发布操作和 _freeze 目录)推送到 GitHub,你的操作将在此及后续提交中运行,自动渲染并发布到 Posit Cloud。

执行代码

如果你愿意,你也可以配置 GitHub Actions 在渲染过程中执行 Python 或 R 代码。虽然这可能本能地看起来是最好的方法,但请考虑在 GitHub Actions 等 CI 服务中执行代码时所施加的要求:

  • 你需要在CI环境中重新构建所有依赖项(R、Python或Julia以及所需包的正确版本)。

  • 如果你的代码需要任何特殊权限(例如数据库或网络访问),这些权限也需要存在于CI服务器上。

  • 你的项目可能包含一些难以再次轻松执行的文档(例如几年前使用旧版本包的博客文章)。这些文档可能需要单独启用freeze以防止在CI上执行。

前提条件

确保你的代码可以在 GitHub Action 中执行的最佳方式是使用虚拟环境,如 venvrenv 与你的项目一起使用(下面我们将为每种方式提供示例操作)。如果你不熟悉使用这些工具,请查看关于使用 虚拟环境 与 Quarto 的文章以了解更多信息。

一旦你决定在 GitHub Action 中执行代码,你可以从你的 _quarto.yml 配置中移除上述的 freeze: auto。请注意,如果你想对某些文档或目录有选择地使用 freeze,这仍然是可能的(对于目录,在该目录中创建一个 _metadata.yml 文件,并在其中指定你的 freeze 配置——这是 Quarto 对博客项目 posts 文件夹的默认操作)。

示例:Jupyter 与 venv

以下是一个完整的 GitHub Action 示例,它安装 Python、Jupyter 以及从 requirements.txt 中的包依赖项,然后执行代码并将输出渲染到 Posit Cloud:

.github/workflows/publish.yml
on:
  workflow_dispatch:
  push:
    branches: main

name: Quarto Publish

jobs:
  build-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Check out repository
        uses: actions/checkout@v4 

      - name: Set up Quarto
        uses: quarto-dev/quarto-actions/setup@v2
        
      - name: Install Python and Dependencies
        uses: actions/setup-python@v4
        with:
          python-version: '3.10'
          cache: 'pip'
      - run: pip install jupyter
      - run: pip install -r requirements.txt
      
      - name: Render and Publish 
        uses: quarto-dev/quarto-actions/publish@v2
        with:
          target: posit-cloud
          POSIT_CLOUD_TOKEN: F69A5954CC09A97B7D74C73C6C7384EB
          POSIT_CLOUD_SECRET: ${{ secrets.POSIT_CLOUD_SECRET }}
示例:Knitr 与 renv

以下是一个完整的 GitHub Action 示例,它安装 R 以及从 renv.lock 中的包依赖项,然后执行代码并将输出渲染到 Posit Cloud:

.github/workflows/publish.yml
on:
  workflow_dispatch:
  push:
    branches: main

name: Quarto Publish

jobs:
  build-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Check out repository
        uses: actions/checkout@v4 

      - name: Set up Quarto
        uses: quarto-dev/quarto-actions/setup@v2
        
      - name: Install R
        uses: r-lib/actions/setup-r@v2
        with:
          r-version: '4.2.0'
      
      - name: Install R Dependencies 
        uses: r-lib/actions/setup-renv@v2
        with:
          cache-version: 1
      
      - name: Render and Publish
        uses: quarto-dev/quarto-actions/publish@v2
        with:
          target: posit-cloud
          POSIT_CLOUD_TOKEN: F69A5954CC09A97B7D74C73C6C7384EB
          POSIT_CLOUD_SECRET: ${{ secrets.POSIT_CLOUD_SECRET }}

附加选项

在一个更大的 GitHub 仓库中可能存在一个 Quarto 项目,其中 Quarto 项目并不位于顶层目录。在这种情况下,向 publish 操作的调用中添加一个 path 输入。例如:

- name: Render and Publish
  uses: quarto-dev/quarto-actions/publish@v2
  with:
    target: posit-cloud
    path: subdirectory-to-use
    POSIT_CLOUD_TOKEN: F69A5954CC09A97B7D74C73C6C7384EB
    POSIT_CLOUD_SECRET: ${{ secrets.POSIT_CLOUD_SECRET }}

默认情况下,quarto publish 会在发布前重新渲染你的项目。然而,如果你将渲染后的输出存储在版本控制中,你不需要 GitHub 操作重新渲染项目。在这种情况下,向 publish 操作添加选项 render: false

- name: Render and Publish
  uses: quarto-dev/quarto-actions/publish@v2
  with:
    target: posit-cloud
    render: false
    POSIT_CLOUD_TOKEN: F69A5954CC09A97B7D74C73C6C7384EB
    POSIT_CLOUD_SECRET: ${{ secrets.POSIT_CLOUD_SECRET }}